diff options
| -rw-r--r-- | ext/xml/expat/Changes | 99 | ||||
| -rw-r--r-- | ext/xml/expat/README | 72 | ||||
| -rw-r--r-- | ext/xml/expat/README.php | 11 | ||||
| -rw-r--r-- | ext/xml/expat/ascii.h | 85 | ||||
| -rw-r--r-- | ext/xml/expat/asciitab.h | 36 | ||||
| -rw-r--r-- | ext/xml/expat/expat.h | 910 | ||||
| -rw-r--r-- | ext/xml/expat/iasciitab.h | 37 | ||||
| -rw-r--r-- | ext/xml/expat/internal.h | 46 | ||||
| -rw-r--r-- | ext/xml/expat/latin1tab.h | 36 | ||||
| -rw-r--r-- | ext/xml/expat/nametab.h | 150 | ||||
| -rw-r--r-- | ext/xml/expat/utf8tab.h | 37 | ||||
| -rw-r--r-- | ext/xml/expat/winconfig.h | 30 | ||||
| -rw-r--r-- | ext/xml/expat/xmlparse.c | 5592 | ||||
| -rw-r--r-- | ext/xml/expat/xmlrole.c | 1330 | ||||
| -rw-r--r-- | ext/xml/expat/xmlrole.h | 114 | ||||
| -rw-r--r-- | ext/xml/expat/xmltok.c | 1641 | ||||
| -rw-r--r-- | ext/xml/expat/xmltok.h | 312 | ||||
| -rw-r--r-- | ext/xml/expat/xmltok_impl.c | 1778 | ||||
| -rw-r--r-- | ext/xml/expat/xmltok_impl.h | 46 | ||||
| -rw-r--r-- | ext/xml/expat/xmltok_ns.c | 106 | 
20 files changed, 0 insertions, 12468 deletions
diff --git a/ext/xml/expat/Changes b/ext/xml/expat/Changes deleted file mode 100644 index 1df159b652..0000000000 --- a/ext/xml/expat/Changes +++ /dev/null @@ -1,99 +0,0 @@ -Release 1.95.5 Fri Sep 6 2002 -        - Added XML_UseForeignDTD() for improved SAX2 support. -        - Added XML_GetFeatureList(). -        - Defined XML_Bool type and the values XML_TRUE and XML_FALSE. -        - Use an incomplete struct instead of a void* for the parser -          (may not retain). -        - Fixed UTF-8 decoding bug that caused legal UTF-8 to be rejected. -        - Finally fixed bug where default handler would report DTD -          events that were already handled by another handler. -          Initial patch contributed by Darryl Miller. -        - Removed unnecessary DllMain() function that caused static -          linking into a DLL to be difficult. -        - Added VC++ projects for building static libraries. -        - Reduced line-length for all source code and headers to be -          no longer than 80 characters, to help with AS/400 support. -        - Reduced memory copying during parsing (SF patch #600964). -        - Fixed a variety of bugs: see SF issues 580793, 434664, -          483514, 580503, 581069, 584041, 584183, 584832, 585537, -          596555, 596678, 598352, 598944, 599715, 600479, 600971. - -Release 1.95.4 Fri Jul 12 2002 -        - Added support for VMS, contributed by Craig Berry.  See -          vms/README.vms for more information. -        - Added Mac OS (classic) support, with a makefile for MPW, -          contributed by Thomas Wegner and Daryle Walker. -        - Added Borland C++ Builder 5 / BCC 5.5 support, contributed -          by Patrick McConnell (SF patch #538032). -        - Fixed a variety of bugs: see SF issues 441449, 563184, -          564342, 566334, 566901, 569461, 570263, 575168, 579196. -        - Made skippedEntityHandler conform to SAX2 (see source comment) -        - Re-implemented WFC: Entity Declared from XML 1.0 spec and -          added a new error "entity declared in parameter entity": -          see SF bug report 569461 and SF patch 578161 -        - Re-implemented section 5.1 from XML 1.0 spec: -          see SF bug report 570263 and SF patch 578161 - -Release 1.95.3 Mon Jun 3 2002 -        - Added a project to the MSVC workspace to create a wchar_t -          version of the library; the DLLs are named libexpatw.dll. -        - Changed the name of the Windows DLLs from expat.dll to -          libexpat.dll; this fixes SF bug #432456. -        - Added the XML_ParserReset() API function. -        - Fixed XML_SetReturnNSTriplet() to work for element names. -        - Made the XML_UNICODE builds usable (thanks, Karl!). -        - Allow xmlwf to read from standard input. -        - Install a man page for xmlwf on Unix systems. -        - Fixed many bugs; see SF bug reports 231864, 461380, 464837, -          466885, 469226, 477667, 484419, 487840, 494749, 496505, -          547350.  Other bugs which we can't test as easily may also -          have been fixed, especially in the area of build support. - -Release 1.95.2 Fri Jul 27 2001 -        - More changes to make MSVC happy with the build; add a single -          workspace to support both the library and xmlwf application. -        - Added a Windows installer for Windows users; includes -          xmlwf.exe. -        - Added compile-time constants that can be used to determine the -          Expat version -        - Removed a lot of GNU-specific dependencies to aide portability -          among the various Unix flavors. -        - Fix the UTF-8 BOM bug. -        - Cleaned up warning messages for several compilers. -        - Added the -Wall, -Wstrict-prototypes options for GCC. - -Release 1.95.1 Sun Oct 22 15:11:36 EDT 2000 -        - Changes to get expat to build under Microsoft compiler -        - Removed all aborts and instead return an UNEXPECTED_STATE error. -        - Fixed a bug where a stray '%' in an entity value would cause an -          abort. -        - Defined XML_SetEndNamespaceDeclHandler. Thanks to Darryl Miles for -          finding this oversight. -        - Changed default patterns in lib/Makefile.in to fit non-GNU makes -          Thanks to robin@unrated.net for reporting and providing an -          account to test on. -        - The reference had the wrong label for XML_SetStartNamespaceDecl. -          Reported by an anonymous user. - -Release 1.95.0 Fri Sep 29 2000 -        - XML_ParserCreate_MM -                Allows you to set a memory management suite to replace the -                standard malloc,realloc, and free. -        - XML_SetReturnNSTriplet -                If you turn this feature on when namespace processing is in -                effect, then qualified, prefixed element and attribute names -                are returned as "uri|name|prefix" where '|' is whatever -                separator character is used in namespace processing. -        - Merged in features from perl-expat -                o XML_SetElementDeclHandler -                o XML_SetAttlistDeclHandler -                o XML_SetXmlDeclHandler -                o XML_SetEntityDeclHandler -                o StartDoctypeDeclHandler takes 3 additional parameters: -                        sysid, pubid, has_internal_subset -                o Many paired handler setters (like XML_SetElementHandler) -                  now have corresponding individual handler setters -                o XML_GetInputContext for getting the input context of -                  the current parse position. -        - Added reference material -        - Packaged into a distribution that builds a sharable library diff --git a/ext/xml/expat/README b/ext/xml/expat/README deleted file mode 100644 index 15bcdccb50..0000000000 --- a/ext/xml/expat/README +++ /dev/null @@ -1,72 +0,0 @@ - -			Expat, Release 1.95.2 - -This is expat, a C library for parsing XML, written by James Clark. -Expat is a stream-oriented XML parser.  This means that you register -handlers with the parser before starting the parse.  These handlers -are called when the parser discovers the associated structures in the -document being parsed.  A start tag is an example of the kind of -structures for which you may register handlers. - -Windows users should use the expat_win32bin package, which includes -both precompiled libraries and executalbes, and source code for -developers. - -Expat is free software.  You may copy, distribute, and modify it under -the terms of the License contained in the file COPYING distributed -with this package.  This license is the same as the MIT/X Consortium -license. - -Versions of expat that have an odd minor version (the middle number in -the release above), are development releases and should be considered -as beta software.  Releases with even minor version numbers are -intended to be production grade software. - -To build expat, you first run the configuration shell script in the -top level distribution directory: - -	./configure - -There are many options which you may provide to configure (which you -can discover by running configure with the --help option).  But the -one of most interest is the one that sets the installation directory. -By default, the configure script will set things up to install -libexpat into /usr/local/lib, expat.h into /usr/local/include, and -xmlwf into /usr/local/bin.  If, for example, you'd prefer to install -into /home/me/mystuff/lib, /home/me/mystuff/include, and -/home/me/mystuff/bin, you can tell configure about that with: - -	./configure --prefix=/home/me/mystuff - -After running the configure script, the "make" command will build -things and "make install" will install things into their proper -location.  Note that you need to have write permission into the -directories into which things will be installed. - -When building for use with C++, you may need to add additional -compiler flags to support proper interaction with exceptions.  This -can be done by setting the CFLAGS environment variable.  For example, -when using GCC, you can use: - -	CFLAGS=-fexceptions ./configure - -Note for Solaris users:  The "ar" command is usually located in -"/usr/ccs/bin", which is not in the default PATH.  You will need to -add this to your path for the "make" command, and probably also switch -to GNU make (the "make" found in /usr/ccs/bin does not seem to work -properly -- appearantly it does not understand .PHONY directives).  If -you're using ksh or bash, use this command to build: - -	PATH=/usr/ccs/bin:$PATH make - -A reference manual is available in the file doc/reference.html in this -distribution. - -The homepage for this project is http://expat.sourceforge.net/.  There -are links there to connect you to the bug reports page.  If you need -to report a bug when you don't have access to a browser, you may also -send a bug report by email to expat-bugs@lists.sourceforge.net. - -Discussion related to the direction of future expat development takes -place on expat-discuss@lists.sourceforge.net.  Archives of this list -may be found at http://www.geocrawler.com/redir-sf.php3?list=expat-discuss. diff --git a/ext/xml/expat/README.php b/ext/xml/expat/README.php deleted file mode 100644 index 187ef60be8..0000000000 --- a/ext/xml/expat/README.php +++ /dev/null @@ -1,11 +0,0 @@ -this is the PHP-bundled version of expat 1.95.1 - -changes from the original version: -- include <php_config.h> instead of <config.h> -- include "php_compat.h" for namespace protection -- hardcode version in xmlparse.c -- stripped off all unneded files - - -thies@thieso.net, 11th May, 2001 - diff --git a/ext/xml/expat/ascii.h b/ext/xml/expat/ascii.h deleted file mode 100644 index 073e8a5fb6..0000000000 --- a/ext/xml/expat/ascii.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#define ASCII_A 0x41 -#define ASCII_B 0x42 -#define ASCII_C 0x43 -#define ASCII_D 0x44 -#define ASCII_E 0x45 -#define ASCII_F 0x46 -#define ASCII_G 0x47 -#define ASCII_H 0x48 -#define ASCII_I 0x49 -#define ASCII_J 0x4A -#define ASCII_K 0x4B -#define ASCII_L 0x4C -#define ASCII_M 0x4D -#define ASCII_N 0x4E -#define ASCII_O 0x4F -#define ASCII_P 0x50 -#define ASCII_Q 0x51 -#define ASCII_R 0x52 -#define ASCII_S 0x53 -#define ASCII_T 0x54 -#define ASCII_U 0x55 -#define ASCII_V 0x56 -#define ASCII_W 0x57 -#define ASCII_X 0x58 -#define ASCII_Y 0x59 -#define ASCII_Z 0x5A - -#define ASCII_a 0x61 -#define ASCII_b 0x62 -#define ASCII_c 0x63 -#define ASCII_d 0x64 -#define ASCII_e 0x65 -#define ASCII_f 0x66 -#define ASCII_g 0x67 -#define ASCII_h 0x68 -#define ASCII_i 0x69 -#define ASCII_j 0x6A -#define ASCII_k 0x6B -#define ASCII_l 0x6C -#define ASCII_m 0x6D -#define ASCII_n 0x6E -#define ASCII_o 0x6F -#define ASCII_p 0x70 -#define ASCII_q 0x71 -#define ASCII_r 0x72 -#define ASCII_s 0x73 -#define ASCII_t 0x74 -#define ASCII_u 0x75 -#define ASCII_v 0x76 -#define ASCII_w 0x77 -#define ASCII_x 0x78 -#define ASCII_y 0x79 -#define ASCII_z 0x7A - -#define ASCII_0 0x30 -#define ASCII_1 0x31 -#define ASCII_2 0x32 -#define ASCII_3 0x33 -#define ASCII_4 0x34 -#define ASCII_5 0x35 -#define ASCII_6 0x36 -#define ASCII_7 0x37 -#define ASCII_8 0x38 -#define ASCII_9 0x39 - -#define ASCII_TAB 0x09 -#define ASCII_SPACE 0x20  -#define ASCII_EXCL 0x21 -#define ASCII_QUOT 0x22 -#define ASCII_AMP 0x26 -#define ASCII_APOS 0x27 -#define ASCII_MINUS 0x2D -#define ASCII_PERIOD 0x2E -#define ASCII_COLON 0x3A -#define ASCII_SEMI 0x3B -#define ASCII_LT 0x3C -#define ASCII_EQUALS 0x3D -#define ASCII_GT 0x3E -#define ASCII_LSQB 0x5B -#define ASCII_RSQB 0x5D -#define ASCII_UNDERSCORE 0x5F diff --git a/ext/xml/expat/asciitab.h b/ext/xml/expat/asciitab.h deleted file mode 100644 index 79a15c28ca..0000000000 --- a/ext/xml/expat/asciitab.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, -/* 0x0C */ BT_NONXML, BT_CR, BT_NONXML, BT_NONXML, -/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, -/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, -/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, -/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, -/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, -/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, -/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, -/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, -/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/ext/xml/expat/expat.h b/ext/xml/expat/expat.h deleted file mode 100644 index c137f61226..0000000000 --- a/ext/xml/expat/expat.h +++ /dev/null @@ -1,910 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#ifndef XmlParse_INCLUDED -#define XmlParse_INCLUDED 1 - -#ifdef __VMS -/*      0        1         2         3      0        1         2         3 -        1234567890123456789012345678901     1234567890123456789012345678901 */ -#define XML_SetProcessingInstructionHandler XML_SetProcessingInstrHandler    -#define XML_SetUnparsedEntityDeclHandler    XML_SetUnparsedEntDeclHandler    -#define XML_SetStartNamespaceDeclHandler    XML_SetStartNamespcDeclHandler   -#define XML_SetExternalEntityRefHandlerArg  XML_SetExternalEntRefHandlerArg  -#endif - -#include <stdlib.h> -#include "php_compat.h" - -#ifndef XMLPARSEAPI -#if defined(_MSC_EXTENSIONS) && !defined(__BEOS__) && !defined(__CYGWIN__) -#ifdef PHP_EXPORTS  -#define XMLPARSEAPI(type) type __cdecl -#else -#define XMLPARSEAPI(type) __declspec(dllimport) type __cdecl -#endif -#else -#define XMLPARSEAPI(type) type -#endif -#endif  /* not defined XMLPARSEAPI */ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef XML_UNICODE_WCHAR_T  -#define XML_UNICODE -#endif - -struct XML_ParserStruct; -typedef struct XML_ParserStruct *XML_Parser; - -#ifdef XML_UNICODE     /* Information is UTF-16 encoded. */ -#ifdef XML_UNICODE_WCHAR_T -typedef wchar_t XML_Char; -typedef wchar_t XML_LChar; -#else -typedef unsigned short XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE_WCHAR_T */ -#else                  /* Information is UTF-8 encoded. */ -typedef char XML_Char; -typedef char XML_LChar; -#endif /* XML_UNICODE */ - -/* Should this be defined using stdbool.h when C99 is available? */ -typedef unsigned char XML_Bool; -#define XML_TRUE   ((XML_Bool) 1) -#define XML_FALSE  ((XML_Bool) 0) - -enum XML_Error { -  XML_ERROR_NONE, -  XML_ERROR_NO_MEMORY, -  XML_ERROR_SYNTAX, -  XML_ERROR_NO_ELEMENTS, -  XML_ERROR_INVALID_TOKEN, -  XML_ERROR_UNCLOSED_TOKEN, -  XML_ERROR_PARTIAL_CHAR, -  XML_ERROR_TAG_MISMATCH, -  XML_ERROR_DUPLICATE_ATTRIBUTE, -  XML_ERROR_JUNK_AFTER_DOC_ELEMENT, -  XML_ERROR_PARAM_ENTITY_REF, -  XML_ERROR_UNDEFINED_ENTITY, -  XML_ERROR_RECURSIVE_ENTITY_REF, -  XML_ERROR_ASYNC_ENTITY, -  XML_ERROR_BAD_CHAR_REF, -  XML_ERROR_BINARY_ENTITY_REF, -  XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, -  XML_ERROR_MISPLACED_XML_PI, -  XML_ERROR_UNKNOWN_ENCODING, -  XML_ERROR_INCORRECT_ENCODING, -  XML_ERROR_UNCLOSED_CDATA_SECTION, -  XML_ERROR_EXTERNAL_ENTITY_HANDLING, -  XML_ERROR_NOT_STANDALONE, -  XML_ERROR_UNEXPECTED_STATE, -  XML_ERROR_ENTITY_DECLARED_IN_PE, -  XML_ERROR_FEATURE_REQUIRES_XML_DTD, -  XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING -}; - -enum XML_Content_Type { -  XML_CTYPE_EMPTY = 1, -  XML_CTYPE_ANY, -  XML_CTYPE_MIXED, -  XML_CTYPE_NAME, -  XML_CTYPE_CHOICE, -  XML_CTYPE_SEQ -}; - -enum XML_Content_Quant { -  XML_CQUANT_NONE, -  XML_CQUANT_OPT, -  XML_CQUANT_REP, -  XML_CQUANT_PLUS -}; - -/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be -   XML_CQUANT_NONE, and the other fields will be zero or NULL. -   If type == XML_CTYPE_MIXED, then quant will be NONE or REP and -   numchildren will contain number of elements that may be mixed in -   and children point to an array of XML_Content cells that will be -   all of XML_CTYPE_NAME type with no quantification. - -   If type == XML_CTYPE_NAME, then the name points to the name, and -   the numchildren field will be zero and children will be NULL. The -   quant fields indicates any quantifiers placed on the name. - -   CHOICE and SEQ will have name NULL, the number of children in -   numchildren and children will point, recursively, to an array -   of XML_Content cells. - -   The EMPTY, ANY, and MIXED types will only occur at top level. -*/ - -typedef struct XML_cp XML_Content; - -struct XML_cp { -  enum XML_Content_Type         type; -  enum XML_Content_Quant        quant; -  XML_Char *                    name; -  unsigned int                  numchildren; -  XML_Content *                 children; -}; - - -/* This is called for an element declaration. See above for -   description of the model argument. It's the caller's responsibility -   to free model when finished with it. -*/ -typedef void (*XML_ElementDeclHandler) (void *userData, -                                        const XML_Char *name, -                                        XML_Content *model); - -XMLPARSEAPI(void) -XML_SetElementDeclHandler(XML_Parser parser, -                          XML_ElementDeclHandler eldecl); - -/* The Attlist declaration handler is called for *each* attribute. So -   a single Attlist declaration with multiple attributes declared will -   generate multiple calls to this handler. The "default" parameter -   may be NULL in the case of the "#IMPLIED" or "#REQUIRED" -   keyword. The "isrequired" parameter will be true and the default -   value will be NULL in the case of "#REQUIRED". If "isrequired" is -   true and default is non-NULL, then this is a "#FIXED" default. -*/ -typedef void (*XML_AttlistDeclHandler) (void           *userData, -                                        const XML_Char *elname, -                                        const XML_Char *attname, -                                        const XML_Char *att_type, -                                        const XML_Char *dflt, -                                        int             isrequired); - -XMLPARSEAPI(void) -XML_SetAttlistDeclHandler(XML_Parser parser, -                          XML_AttlistDeclHandler attdecl); - -/* The XML declaration handler is called for *both* XML declarations -   and text declarations. The way to distinguish is that the version -   parameter will be NULL for text declarations. The encoding -   parameter may be NULL for XML declarations. The standalone -   parameter will be -1, 0, or 1 indicating respectively that there -   was no standalone parameter in the declaration, that it was given -   as no, or that it was given as yes. -*/ -typedef void (*XML_XmlDeclHandler) (void                *userData, -                                    const XML_Char      *version, -                                    const XML_Char      *encoding, -                                    int                  standalone); - -XMLPARSEAPI(void) -XML_SetXmlDeclHandler(XML_Parser parser, -                      XML_XmlDeclHandler xmldecl); - - -typedef struct { -  void *(*malloc_fcn)(size_t size); -  void *(*realloc_fcn)(void *ptr, size_t size); -  void (*free_fcn)(void *ptr); -} XML_Memory_Handling_Suite; - -/* Constructs a new parser; encoding is the encoding specified by the -   external protocol or NULL if there is none specified. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate(const XML_Char *encoding); - -/* Constructs a new parser and namespace processor.  Element type -   names and attribute names that belong to a namespace will be -   expanded; unprefixed attribute names are never expanded; unprefixed -   element type names are expanded only if there is a default -   namespace. The expanded name is the concatenation of the namespace -   URI, the namespace separator character, and the local part of the -   name.  If the namespace separator is '\0' then the namespace URI -   and the local part will be concatenated without any separator. -   When a namespace is not declared, the name and prefix will be -   passed through without expansion. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); - - -/* Constructs a new parser using the memory management suit referred to -   by memsuite. If memsuite is NULL, then use the standard library memory -   suite. If namespaceSeparator is non-NULL it creates a parser with -   namespace processing as described above. The character pointed at -   will serve as the namespace separator. - -   All further memory operations used for the created parser will come from -   the given suite. -*/ -XMLPARSEAPI(XML_Parser) -XML_ParserCreate_MM(const XML_Char *encoding, -                    const XML_Memory_Handling_Suite *memsuite, -                    const XML_Char *namespaceSeparator); - -/* Prepare a parser object to be re-used.  This is particularly -   valuable when memory allocation overhead is disproportionatly high, -   such as when a large number of small documnents need to be parsed. -   All handlers are cleared from the parser, except for the  -   unknownEncodingHandler. The parser's external state is re-initialized -   except for the values of ns and ns_triplets. - -   Added in Expat 1.95.3. -*/ -XMLPARSEAPI(XML_Bool) -XML_ParserReset(XML_Parser parser, const XML_Char *encoding); - -/* atts is array of name/value pairs, terminated by 0; -   names and values are 0 terminated. -*/ -typedef void (*XML_StartElementHandler)(void *userData, -                                        const XML_Char *name, -                                        const XML_Char **atts); - -typedef void (*XML_EndElementHandler)(void *userData, -                                      const XML_Char *name); - - -/* s is not 0 terminated. */ -typedef void (*XML_CharacterDataHandler)(void *userData, -                                         const XML_Char *s, -                                         int len); - -/* target and data are 0 terminated */ -typedef void (*XML_ProcessingInstructionHandler)(void *userData, -                                                 const XML_Char *target, -                                                 const XML_Char *data); - -/* data is 0 terminated */ -typedef void (*XML_CommentHandler)(void *userData, const XML_Char *data); - -typedef void (*XML_StartCdataSectionHandler)(void *userData); -typedef void (*XML_EndCdataSectionHandler)(void *userData); - -/* This is called for any characters in the XML document for which -   there is no applicable handler.  This includes both characters that -   are part of markup which is of a kind that is not reported -   (comments, markup declarations), or characters that are part of a -   construct which could be reported but for which no handler has been -   supplied. The characters are passed exactly as they were in the XML -   document except that they will be encoded in UTF-8 or UTF-16.  -   Line boundaries are not normalized. Note that a byte order mark -   character is not passed to the default handler. There are no -   guarantees about how characters are divided between calls to the -   default handler: for example, a comment might be split between -   multiple calls. -*/ -typedef void (*XML_DefaultHandler)(void *userData, -                                   const XML_Char *s, -                                   int len); - -/* This is called for the start of the DOCTYPE declaration, before -   any DTD or internal subset is parsed. -*/ -typedef void (*XML_StartDoctypeDeclHandler)(void *userData, -                                            const XML_Char *doctypeName, -                                            const XML_Char *sysid, -                                            const XML_Char *pubid, -                                            int has_internal_subset); - -/* This is called for the start of the DOCTYPE declaration when the -   closing > is encountered, but after processing any external -   subset. -*/ -typedef void (*XML_EndDoctypeDeclHandler)(void *userData); - -/* This is called for entity declarations. The is_parameter_entity -   argument will be non-zero if the entity is a parameter entity, zero -   otherwise. - -   For internal entities (<!ENTITY foo "bar">), value will -   be non-NULL and systemId, publicID, and notationName will be NULL. -   The value string is NOT nul-terminated; the length is provided in -   the value_length argument. Since it is legal to have zero-length -   values, do not use this argument to test for internal entities. - -   For external entities, value will be NULL and systemId will be -   non-NULL. The publicId argument will be NULL unless a public -   identifier was provided. The notationName argument will have a -   non-NULL value only for unparsed entity declarations. - -   Note that is_parameter_entity can't be changed to XML_Bool, since -   that would break binary compatibility. -*/ -typedef void (*XML_EntityDeclHandler) (void *userData, -                                       const XML_Char *entityName, -                                       int is_parameter_entity, -                                       const XML_Char *value, -                                       int value_length, -                                       const XML_Char *base, -                                       const XML_Char *systemId, -                                       const XML_Char *publicId, -                                       const XML_Char *notationName); -                                        -XMLPARSEAPI(void) -XML_SetEntityDeclHandler(XML_Parser parser, -                         XML_EntityDeclHandler handler); - -/* OBSOLETE -- OBSOLETE -- OBSOLETE -   This handler has been superceded by the EntityDeclHandler above. -   It is provided here for backward compatibility. - -   This is called for a declaration of an unparsed (NDATA) entity. -   The base argument is whatever was set by XML_SetBase. The -   entityName, systemId and notationName arguments will never be -   NULL. The other arguments may be. -*/ -typedef void (*XML_UnparsedEntityDeclHandler)(void *userData, -                                              const XML_Char *entityName, -                                              const XML_Char *base, -                                              const XML_Char *systemId, -                                              const XML_Char *publicId, -                                              const XML_Char *notationName); - -/* This is called for a declaration of notation.  The base argument is -   whatever was set by XML_SetBase. The notationName will never be -   NULL.  The other arguments can be. -*/ -typedef void (*XML_NotationDeclHandler)(void *userData, -                                        const XML_Char *notationName, -                                        const XML_Char *base, -                                        const XML_Char *systemId, -                                        const XML_Char *publicId); - -/* When namespace processing is enabled, these are called once for -   each namespace declaration. The call to the start and end element -   handlers occur between the calls to the start and end namespace -   declaration handlers. For an xmlns attribute, prefix will be -   NULL.  For an xmlns="" attribute, uri will be NULL. -*/ -typedef void (*XML_StartNamespaceDeclHandler)(void *userData, -                                              const XML_Char *prefix, -                                              const XML_Char *uri); - -typedef void (*XML_EndNamespaceDeclHandler)(void *userData, -                                            const XML_Char *prefix); - -/* This is called if the document is not standalone, that is, it has an -   external subset or a reference to a parameter entity, but does not -   have standalone="yes". If this handler returns 0, then processing -   will not continue, and the parser will return a -   XML_ERROR_NOT_STANDALONE error. -   If parameter entity parsing is enabled, then in addition to the -   conditions above this handler will only be called if the referenced -   entity was actually read. -*/ -typedef int (*XML_NotStandaloneHandler)(void *userData); - -/* This is called for a reference to an external parsed general -   entity.  The referenced entity is not automatically parsed.  The -   application can parse it immediately or later using -   XML_ExternalEntityParserCreate. - -   The parser argument is the parser parsing the entity containing the -   reference; it can be passed as the parser argument to -   XML_ExternalEntityParserCreate.  The systemId argument is the -   system identifier as specified in the entity declaration; it will -   not be NULL. - -   The base argument is the system identifier that should be used as -   the base for resolving systemId if systemId was relative; this is -   set by XML_SetBase; it may be NULL. - -   The publicId argument is the public identifier as specified in the -   entity declaration, or NULL if none was specified; the whitespace -   in the public identifier will have been normalized as required by -   the XML spec. - -   The context argument specifies the parsing context in the format -   expected by the context argument to XML_ExternalEntityParserCreate; -   context is valid only until the handler returns, so if the -   referenced entity is to be parsed later, it must be copied. - -   The handler should return 0 if processing should not continue -   because of a fatal error in the handling of the external entity. -   In this case the calling parser will return an -   XML_ERROR_EXTERNAL_ENTITY_HANDLING error. - -   Note that unlike other handlers the first argument is the parser, -   not userData. -*/ -typedef int (*XML_ExternalEntityRefHandler)(XML_Parser parser, -                                            const XML_Char *context, -                                            const XML_Char *base, -                                            const XML_Char *systemId, -                                            const XML_Char *publicId); - -/* This is called in two situations: -   1) An entity reference is encountered for which no declaration -      has been read *and* this is not an error. -   2) An internal entity reference is read, but not expanded, because -      XML_SetDefaultHandler has been called. -   Note: skipped parameter entities in declarations and skipped general -         entities in attribute values cannot be reported, because -         the event would be out of sync with the reporting of the -         declarations or attribute values -*/ -typedef void (*XML_SkippedEntityHandler)(void *userData, -                                         const XML_Char *entityName, -                                         int is_parameter_entity); - -/* This structure is filled in by the XML_UnknownEncodingHandler to -   provide information to the parser about encodings that are unknown -   to the parser. - -   The map[b] member gives information about byte sequences whose -   first byte is b. - -   If map[b] is c where c is >= 0, then b by itself encodes the -   Unicode scalar value c. - -   If map[b] is -1, then the byte sequence is malformed. - -   If map[b] is -n, where n >= 2, then b is the first byte of an -   n-byte sequence that encodes a single Unicode scalar value. - -   The data member will be passed as the first argument to the convert -   function. - -   The convert function is used to convert multibyte sequences; s will -   point to a n-byte sequence where map[(unsigned char)*s] == -n.  The -   convert function must return the Unicode scalar value represented -   by this byte sequence or -1 if the byte sequence is malformed. - -   The convert function may be NULL if the encoding is a single-byte -   encoding, that is if map[b] >= -1 for all bytes b. - -   When the parser is finished with the encoding, then if release is -   not NULL, it will call release passing it the data member; once -   release has been called, the convert function will not be called -   again. - -   Expat places certain restrictions on the encodings that are supported -   using this mechanism. - -   1. Every ASCII character that can appear in a well-formed XML document, -      other than the characters - -      $@\^`{}~ - -      must be represented by a single byte, and that byte must be the -      same byte that represents that character in ASCII. - -   2. No character may require more than 4 bytes to encode. - -   3. All characters encoded must have Unicode scalar values <= -      0xFFFF, (i.e., characters that would be encoded by surrogates in -      UTF-16 are  not allowed).  Note that this restriction doesn't -      apply to the built-in support for UTF-8 and UTF-16. - -   4. No Unicode character may be encoded by more than one distinct -      sequence of bytes. -*/ -typedef struct { -  int map[256]; -  void *data; -  int (*convert)(void *data, const char *s); -  void (*release)(void *data); -} XML_Encoding; - -/* This is called for an encoding that is unknown to the parser. - -   The encodingHandlerData argument is that which was passed as the -   second argument to XML_SetUnknownEncodingHandler. - -   The name argument gives the name of the encoding as specified in -   the encoding declaration. - -   If the callback can provide information about the encoding, it must -   fill in the XML_Encoding structure, and return 1.  Otherwise it -   must return 0. - -   If info does not describe a suitable encoding, then the parser will -   return an XML_UNKNOWN_ENCODING error. -*/ -typedef int (*XML_UnknownEncodingHandler)(void *encodingHandlerData, -                                          const XML_Char *name, -                                          XML_Encoding *info); - -XMLPARSEAPI(void) -XML_SetElementHandler(XML_Parser parser, -                      XML_StartElementHandler start, -                      XML_EndElementHandler end); - -XMLPARSEAPI(void) -XML_SetStartElementHandler(XML_Parser, XML_StartElementHandler); - -XMLPARSEAPI(void) -XML_SetEndElementHandler(XML_Parser, XML_EndElementHandler); - -XMLPARSEAPI(void) -XML_SetCharacterDataHandler(XML_Parser parser, -                            XML_CharacterDataHandler handler); - -XMLPARSEAPI(void) -XML_SetProcessingInstructionHandler(XML_Parser parser, -                                    XML_ProcessingInstructionHandler handler); -XMLPARSEAPI(void) -XML_SetCommentHandler(XML_Parser parser, -                      XML_CommentHandler handler); - -XMLPARSEAPI(void) -XML_SetCdataSectionHandler(XML_Parser parser, -                           XML_StartCdataSectionHandler start, -                           XML_EndCdataSectionHandler end); - -XMLPARSEAPI(void) -XML_SetStartCdataSectionHandler(XML_Parser parser, -                                XML_StartCdataSectionHandler start); - -XMLPARSEAPI(void) -XML_SetEndCdataSectionHandler(XML_Parser parser, -                              XML_EndCdataSectionHandler end); - -/* This sets the default handler and also inhibits expansion of -   internal entities. These entity references will be passed to the -   default handler, or to the skipped entity handler, if one is set. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandler(XML_Parser parser, -                      XML_DefaultHandler handler); - -/* This sets the default handler but does not inhibit expansion of -   internal entities.  The entity reference will not be passed to the -   default handler. -*/ -XMLPARSEAPI(void) -XML_SetDefaultHandlerExpand(XML_Parser parser, -                            XML_DefaultHandler handler); - -XMLPARSEAPI(void) -XML_SetDoctypeDeclHandler(XML_Parser parser, -                          XML_StartDoctypeDeclHandler start, -                          XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartDoctypeDeclHandler(XML_Parser parser, -                               XML_StartDoctypeDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndDoctypeDeclHandler(XML_Parser parser, -                             XML_EndDoctypeDeclHandler end); - -XMLPARSEAPI(void) -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, -                                 XML_UnparsedEntityDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNotationDeclHandler(XML_Parser parser, -                           XML_NotationDeclHandler handler); - -XMLPARSEAPI(void) -XML_SetNamespaceDeclHandler(XML_Parser parser, -                            XML_StartNamespaceDeclHandler start, -                            XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetStartNamespaceDeclHandler(XML_Parser parser, -                                 XML_StartNamespaceDeclHandler start); - -XMLPARSEAPI(void) -XML_SetEndNamespaceDeclHandler(XML_Parser parser, -                               XML_EndNamespaceDeclHandler end); - -XMLPARSEAPI(void) -XML_SetNotStandaloneHandler(XML_Parser parser, -                            XML_NotStandaloneHandler handler); - -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandler(XML_Parser parser, -                                XML_ExternalEntityRefHandler handler); - -/* If a non-NULL value for arg is specified here, then it will be -   passed as the first argument to the external entity ref handler -   instead of the parser object. -*/ -XMLPARSEAPI(void) -XML_SetExternalEntityRefHandlerArg(XML_Parser, void *arg); - -XMLPARSEAPI(void) -XML_SetSkippedEntityHandler(XML_Parser parser, -                            XML_SkippedEntityHandler handler); - -XMLPARSEAPI(void) -XML_SetUnknownEncodingHandler(XML_Parser parser, -                              XML_UnknownEncodingHandler handler, -                              void *encodingHandlerData); - -/* This can be called within a handler for a start element, end -   element, processing instruction or character data.  It causes the -   corresponding markup to be passed to the default handler. -*/ -XMLPARSEAPI(void) -XML_DefaultCurrent(XML_Parser parser); - -/* If do_nst is non-zero, and namespace processing is in effect, and -   a name has a prefix (i.e. an explicit namespace qualifier) then -   that name is returned as a triplet in a single string separated by -   the separator character specified when the parser was created: URI -   + sep + local_name + sep + prefix. - -   If do_nst is zero, then namespace information is returned in the -   default manner (URI + sep + local_name) whether or not the name -   has a prefix. - -   Note: Calling XML_SetReturnNSTriplet after XML_Parse or -     XML_ParseBuffer has no effect. -*/ - -XMLPARSEAPI(void) -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); - -/* This value is passed as the userData argument to callbacks. */ -XMLPARSEAPI(void) -XML_SetUserData(XML_Parser parser, void *userData); - -/* Returns the last value set by XML_SetUserData or NULL. */ -#define XML_GetUserData(parser) (*(void **)(parser)) - -/* This is equivalent to supplying an encoding argument to -   XML_ParserCreate. On success XML_SetEncoding returns non-zero, -   zero otherwise. -   Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer -     has no effect and returns zero. -*/ -XMLPARSEAPI(int) -XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); - -/* If this function is called, then the parser will be passed as the -   first argument to callbacks instead of userData.  The userData will -   still be accessible using XML_GetUserData. -*/ -XMLPARSEAPI(void) -XML_UseParserAsHandlerArg(XML_Parser parser); - -/* If useDTD == XML_TRUE is passed to this function, then the parser -   will assume that there is an external subset, even if none is -   specified in the document. In such a case the parser will call the -   externalEntityRefHandler with a value of NULL for the systemId -   argument (the publicId and context arguments will be NULL as well). -   Note: If this function is called, then this must be done before -     the first call to XML_Parse or XML_ParseBuffer, since it will -     have no effect after that.  Returns -     XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. -   Note: If the document does not have a DOCTYPE declaration at all, -     then startDoctypeDeclHandler and endDoctypeDeclHandler will not -     be called, despite an external subset being parsed. -   Note: If XML_DTD is not defined when Expat is compiled, returns -     XML_ERROR_FEATURE_REQUIRES_XML_DTD. -*/ -XMLPARSEAPI(enum XML_Error) -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); - - -/* Sets the base to be used for resolving relative URIs in system -   identifiers in declarations.  Resolving relative identifiers is -   left to the application: this value will be passed through as the -   base argument to the XML_ExternalEntityRefHandler, -   XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base -   argument will be copied.  Returns zero if out of memory, non-zero -   otherwise. -*/ -XMLPARSEAPI(int) -XML_SetBase(XML_Parser parser, const XML_Char *base); - -XMLPARSEAPI(const XML_Char *) -XML_GetBase(XML_Parser parser); - -/* Returns the number of the attribute/value pairs passed in last call -   to the XML_StartElementHandler that were specified in the start-tag -   rather than defaulted. Each attribute/value pair counts as 2; thus -   this correspondds to an index into the atts array passed to the -   XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetSpecifiedAttributeCount(XML_Parser parser); - -/* Returns the index of the ID attribute passed in the last call to -   XML_StartElementHandler, or -1 if there is no ID attribute.  Each -   attribute/value pair counts as 2; thus this correspondds to an -   index into the atts array passed to the XML_StartElementHandler. -*/ -XMLPARSEAPI(int) -XML_GetIdAttributeIndex(XML_Parser parser); - -/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is -   detected.  The last call to XML_Parse must have isFinal true; len -   may be zero for this call (or any other). - -   The XML_Status enum gives the possible return values for the -   XML_Parse and XML_ParseBuffer functions.  Though the return values -   for these functions has always been described as a Boolean value, -   the implementation, at least for the 1.95.x series, has always -   returned exactly one of these values.  The preprocessor #defines -   are included so this stanza can be added to code that still needs -   to support older versions of Expat 1.95.x: - -   #ifndef XML_STATUS_OK -   #define XML_STATUS_OK    1 -   #define XML_STATUS_ERROR 0 -   #endif - -   Otherwise, the #define hackery is quite ugly and would have been dropped. -*/ -enum XML_Status { -  XML_STATUS_ERROR = 0, -#define XML_STATUS_ERROR XML_STATUS_ERROR -  XML_STATUS_OK = 1 -#define XML_STATUS_OK XML_STATUS_OK -}; - -XMLPARSEAPI(enum XML_Status) -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); - -XMLPARSEAPI(void *) -XML_GetBuffer(XML_Parser parser, int len); - -XMLPARSEAPI(enum XML_Status) -XML_ParseBuffer(XML_Parser parser, int len, int isFinal); - -/* Creates an XML_Parser object that can parse an external general -   entity; context is a '\0'-terminated string specifying the parse -   context; encoding is a '\0'-terminated string giving the name of -   the externally specified encoding, or NULL if there is no -   externally specified encoding.  The context string consists of a -   sequence of tokens separated by formfeeds (\f); a token consisting -   of a name specifies that the general entity of the name is open; a -   token of the form prefix=uri specifies the namespace for a -   particular prefix; a token of the form =uri specifies the default -   namespace.  This can be called at any point after the first call to -   an ExternalEntityRefHandler so longer as the parser has not yet -   been freed.  The new parser is completely independent and may -   safely be used in a separate thread.  The handlers and userData are -   initialized from the parser argument.  Returns 0 if out of memory. -   Otherwise returns a new XML_Parser object. -*/ -XMLPARSEAPI(XML_Parser) -XML_ExternalEntityParserCreate(XML_Parser parser, -                               const XML_Char *context, -                               const XML_Char *encoding); - -enum XML_ParamEntityParsing { -  XML_PARAM_ENTITY_PARSING_NEVER, -  XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, -  XML_PARAM_ENTITY_PARSING_ALWAYS -}; - -/* Controls parsing of parameter entities (including the external DTD -   subset). If parsing of parameter entities is enabled, then -   references to external parameter entities (including the external -   DTD subset) will be passed to the handler set with -   XML_SetExternalEntityRefHandler.  The context passed will be 0. - -   Unlike external general entities, external parameter entities can -   only be parsed synchronously.  If the external parameter entity is -   to be parsed, it must be parsed during the call to the external -   entity ref handler: the complete sequence of -   XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and -   XML_ParserFree calls must be made during this call.  After -   XML_ExternalEntityParserCreate has been called to create the parser -   for the external parameter entity (context must be 0 for this -   call), it is illegal to make any calls on the old parser until -   XML_ParserFree has been called on the newly created parser. -   If the library has been compiled without support for parameter -   entity parsing (ie without XML_DTD being defined), then -   XML_SetParamEntityParsing will return 0 if parsing of parameter -   entities is requested; otherwise it will return non-zero. -   Note: If XML_SetParamEntityParsing is called after XML_Parse or -      XML_ParseBuffer, then it has no effect and will always return 0. -*/ -XMLPARSEAPI(int) -XML_SetParamEntityParsing(XML_Parser parser, -                          enum XML_ParamEntityParsing parsing); - -/* If XML_Parse or XML_ParseBuffer have returned 0, then -   XML_GetErrorCode returns information about the error. -*/ -XMLPARSEAPI(enum XML_Error) -XML_GetErrorCode(XML_Parser parser); - -/* These functions return information about the current parse -   location.  They may be called when XML_Parse or XML_ParseBuffer -   return 0; in this case the location is the location of the -   character at which the error was detected. - -   They may also be called from any other callback called to report -   some parse event; in this the location is the location of the first -   of the sequence of characters that generated the event. -*/ -XMLPARSEAPI(int) XML_GetCurrentLineNumber(XML_Parser parser); -XMLPARSEAPI(int) XML_GetCurrentColumnNumber(XML_Parser parser); -XMLPARSEAPI(long) XML_GetCurrentByteIndex(XML_Parser parser); - -/* Return the number of bytes in the current event. -   Returns 0 if the event is in an internal entity. -*/ -XMLPARSEAPI(int) -XML_GetCurrentByteCount(XML_Parser parser); - -/* If XML_CONTEXT_BYTES is defined, returns the input buffer, sets -   the integer pointed to by offset to the offset within this buffer -   of the current parse position, and sets the integer pointed to by size -   to the size of this buffer (the number of input bytes). Otherwise -   returns a NULL pointer. Also returns a NULL pointer if a parse isn't -   active. - -   NOTE: The character pointer returned should not be used outside -   the handler that makes the call. -*/ -XMLPARSEAPI(const char *) -XML_GetInputContext(XML_Parser parser, -                    int *offset, -                    int *size); - -/* For backwards compatibility with previous versions. */ -#define XML_GetErrorLineNumber   XML_GetCurrentLineNumber -#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber -#define XML_GetErrorByteIndex    XML_GetCurrentByteIndex - -/* Frees memory used by the parser. */ -XMLPARSEAPI(void) -XML_ParserFree(XML_Parser parser); - -/* Returns a string describing the error. */ -XMLPARSEAPI(const XML_LChar *) -XML_ErrorString(enum XML_Error code); - -/* Return a string containing the version number of this expat */ -XMLPARSEAPI(const XML_LChar *) -XML_ExpatVersion(void); - -typedef struct { -  int major; -  int minor; -  int micro; -} XML_Expat_Version; - -/* Return an XML_Expat_Version structure containing numeric version -   number information for this version of expat. -*/ -XMLPARSEAPI(XML_Expat_Version) -XML_ExpatVersionInfo(void); - -/* Added in Expat 1.95.5. */ -enum XML_FeatureEnum { -  XML_FEATURE_END = 0, -  XML_FEATURE_UNICODE, -  XML_FEATURE_UNICODE_WCHAR_T, -  XML_FEATURE_DTD, -  XML_FEATURE_CONTEXT_BYTES, -  XML_FEATURE_MIN_SIZE, -  XML_FEATURE_SIZEOF_XML_CHAR, -  XML_FEATURE_SIZEOF_XML_LCHAR -  /* Additional features must be added to the end of this enum. */ -}; - -typedef struct { -  enum XML_FeatureEnum  feature; -  XML_LChar            *name; -  long int              value; -} XML_Feature; - -XMLPARSEAPI(const XML_Feature *) -XML_GetFeatureList(void); - - -/* Expat follows the GNU/Linux convention of odd number minor version for -   beta/development releases and even number minor version for stable -   releases. Micro is bumped with each release, and set to 0 with each -   change to major or minor version. -*/ -#define XML_MAJOR_VERSION 1 -#define XML_MINOR_VERSION 95 -#define XML_MICRO_VERSION 5 - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlParse_INCLUDED */ diff --git a/ext/xml/expat/iasciitab.h b/ext/xml/expat/iasciitab.h deleted file mode 100644 index 24a1d5ccc9..0000000000 --- a/ext/xml/expat/iasciitab.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */ -/* 0x00 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x04 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x08 */ BT_NONXML, BT_S, BT_LF, BT_NONXML, -/* 0x0C */ BT_NONXML, BT_S, BT_NONXML, BT_NONXML, -/* 0x10 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x14 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x18 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x1C */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0x20 */ BT_S, BT_EXCL, BT_QUOT, BT_NUM, -/* 0x24 */ BT_OTHER, BT_PERCNT, BT_AMP, BT_APOS, -/* 0x28 */ BT_LPAR, BT_RPAR, BT_AST, BT_PLUS, -/* 0x2C */ BT_COMMA, BT_MINUS, BT_NAME, BT_SOL, -/* 0x30 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x34 */ BT_DIGIT, BT_DIGIT, BT_DIGIT, BT_DIGIT, -/* 0x38 */ BT_DIGIT, BT_DIGIT, BT_COLON, BT_SEMI, -/* 0x3C */ BT_LT, BT_EQUALS, BT_GT, BT_QUEST, -/* 0x40 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x44 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x48 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x4C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x50 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x54 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x58 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_LSQB, -/* 0x5C */ BT_OTHER, BT_RSQB, BT_OTHER, BT_NMSTRT, -/* 0x60 */ BT_OTHER, BT_HEX, BT_HEX, BT_HEX, -/* 0x64 */ BT_HEX, BT_HEX, BT_HEX, BT_NMSTRT, -/* 0x68 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x6C */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x70 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x74 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0x78 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0x7C */ BT_VERBAR, BT_OTHER, BT_OTHER, BT_OTHER, diff --git a/ext/xml/expat/internal.h b/ext/xml/expat/internal.h deleted file mode 100644 index 6e2c5ed45f..0000000000 --- a/ext/xml/expat/internal.h +++ /dev/null @@ -1,46 +0,0 @@ -/* internal.h - -   Internal definitions used by Expat.  This is not needed to compile -   client code. - -   The following definitions are made: - -   FASTCALL -- Used for most internal functions to specify that the -               fastest possible calling convention be used. - -   inline   -- Used for selected internal functions for which inlining -               may improve performance on some platforms. -*/ - -#if defined(__GNUC__) -/* Last minute instability reported with egcs on a RedHat Linux 7.3 -   box; argh! -*/ -/* #define FASTCALL __attribute__((stdcall, regparm(3))) */ -#elif defined(WIN32) -/* XXX This seems to have an unexpected negative effect on Windows so -   we'll disable it for now on that platform.  It may be reconsidered -   for a future release if it can be made more effective. -*/ -/* #define FASTCALL __fastcall */ -#endif - -#ifndef FASTCALL -#define FASTCALL -#endif - -#ifndef XML_MIN_SIZE -#if !defined(__cplusplus) && !defined(inline) -#ifdef __GNUC__ -#define inline __inline -#endif /* __GNUC__ */ -#endif -#endif /* XML_MIN_SIZE */ - -#ifdef __cplusplus -#define inline inline -#else -#ifndef inline -#define inline -#endif -#endif diff --git a/ext/xml/expat/latin1tab.h b/ext/xml/expat/latin1tab.h deleted file mode 100644 index 53c25d76b2..0000000000 --- a/ext/xml/expat/latin1tab.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -/* 0x80 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x84 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x88 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x8C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x90 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x94 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x98 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0x9C */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xA0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xA4 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xA8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, -/* 0xAC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xB0 */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xB4 */ BT_OTHER, BT_NMSTRT, BT_OTHER, BT_NAME, -/* 0xB8 */ BT_OTHER, BT_OTHER, BT_NMSTRT, BT_OTHER, -/* 0xBC */ BT_OTHER, BT_OTHER, BT_OTHER, BT_OTHER, -/* 0xC0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xC4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xC8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xCC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xD0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xD4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0xD8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xDC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xE0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xE4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xE8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xEC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xF0 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xF4 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_OTHER, -/* 0xF8 */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, -/* 0xFC */ BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, BT_NMSTRT, diff --git a/ext/xml/expat/nametab.h b/ext/xml/expat/nametab.h deleted file mode 100644 index b05e62c77a..0000000000 --- a/ext/xml/expat/nametab.h +++ /dev/null @@ -1,150 +0,0 @@ -static const unsigned namingBitmap[] = { -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE, -0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF, -0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF, -0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, -0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, -0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, -0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, -0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, -0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF, -0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000, -0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060, -0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003, -0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003, -0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, -0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001, -0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003, -0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000, -0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003, -0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003, -0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000, -0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000, -0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF, -0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB, -0x40000000, 0xF580C900, 0x00000007, 0x02010800, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, -0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, -0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, -0x00000000, 0x00004C40, 0x00000000, 0x00000000, -0x00000007, 0x00000000, 0x00000000, 0x00000000, -0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF, -0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF, -0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, -0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, -0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE, -0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF, -0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, -0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000, -0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003, -0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD, -0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF, -0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF, -0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE, -0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF, -0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF, -0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF, -0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF, -0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF, -0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0, -0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1, -0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3, -0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80, -0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3, -0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3, -0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000, -0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000, -0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF, -0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x00000000, 0x00000000, -0x00000000, 0x00000000, 0x1FFF0000, 0x00000002, -0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, -0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF, -}; -static const unsigned char nmstrtPages[] = { -0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00, -0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, -0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, -0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -static const unsigned char namePages[] = { -0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00, -0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, -0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, -0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, -0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; diff --git a/ext/xml/expat/utf8tab.h b/ext/xml/expat/utf8tab.h deleted file mode 100644 index 7bb3e77603..0000000000 --- a/ext/xml/expat/utf8tab.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - - -/* 0x80 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x84 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x88 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x8C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x90 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x94 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x98 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0x9C */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xA0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xA4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xA8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xAC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xB0 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xB4 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xB8 */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xBC */ BT_TRAIL, BT_TRAIL, BT_TRAIL, BT_TRAIL, -/* 0xC0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xC4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xC8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xCC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xD0 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xD4 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xD8 */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xDC */ BT_LEAD2, BT_LEAD2, BT_LEAD2, BT_LEAD2, -/* 0xE0 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xE4 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xE8 */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xEC */ BT_LEAD3, BT_LEAD3, BT_LEAD3, BT_LEAD3, -/* 0xF0 */ BT_LEAD4, BT_LEAD4, BT_LEAD4, BT_LEAD4, -/* 0xF4 */ BT_LEAD4, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0xF8 */ BT_NONXML, BT_NONXML, BT_NONXML, BT_NONXML, -/* 0xFC */ BT_NONXML, BT_NONXML, BT_MALFORM, BT_MALFORM, diff --git a/ext/xml/expat/winconfig.h b/ext/xml/expat/winconfig.h deleted file mode 100644 index ce91577f20..0000000000 --- a/ext/xml/expat/winconfig.h +++ /dev/null @@ -1,30 +0,0 @@ -/*================================================================ -** Copyright 2000, Clark Cooper -** All rights reserved. -** -** This is free software. You are permitted to copy, distribute, or modify -** it under the terms of the MIT/X license (contained in the COPYING file -** with this distribution.) -*/ - -#ifndef WINCONFIG_H -#define WINCONFIG_H - -#define WIN32_LEAN_AND_MEAN -#include <windows.h> -#undef WIN32_LEAN_AND_MEAN - -#include <memory.h> -#include <string.h> - -#define XML_NS 1 -#define XML_DTD 1 -#define XML_CONTEXT_BYTES 1024 - -/* we will assume all Windows platforms are little endian */ -#define BYTEORDER 1234 - -/* Windows has memmove() available. */ -/* #define HAVE_MEMMOVE */ - -#endif /* ndef WINCONFIG_H */ diff --git a/ext/xml/expat/xmlparse.c b/ext/xml/expat/xmlparse.c deleted file mode 100644 index 60e65d6907..0000000000 --- a/ext/xml/expat/xmlparse.c +++ /dev/null @@ -1,5592 +0,0 @@ -/* Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#include <stddef.h> -#include <string.h>                     /* memset(), memcpy() */ -#if PHP_WIN32 -#include "config.w32.h" -#else -#include "php_config.h" -#endif -#include "php_compat.h" - -#ifdef COMPILED_FROM_DSP - -#include "winconfig.h" -#ifdef _LIB -#define XMLPARSEAPI(type) type __cdecl -#else -#define XMLPARSEAPI(type) __declspec(dllexport) type __cdecl -#endif -#include "expat.h" -#undef XMLPARSEAPI - -#elif defined(MACOS_CLASSIC) - -#include "macconfig.h" -#include "expat.h" - -#else - -#include <php_config.h> - -#ifdef __declspec -#define XMLPARSEAPI(type) __declspec(dllexport) type __cdecl -#endif - -#include "expat.h" - -#ifdef __declspec -#undef XMLPARSEAPI -#endif -#endif /* ndef COMPILED_FROM_DSP */ - -#ifdef XML_UNICODE -#define XML_ENCODE_MAX XML_UTF16_ENCODE_MAX -#define XmlConvert XmlUtf16Convert -#define XmlGetInternalEncoding XmlGetUtf16InternalEncoding -#define XmlGetInternalEncodingNS XmlGetUtf16InternalEncodingNS -#define XmlEncode XmlUtf16Encode -#define MUST_CONVERT(enc, s) (!(enc)->isUtf16 || (((unsigned long)s) & 1)) -typedef unsigned short ICHAR; -#else -#define XML_ENCODE_MAX XML_UTF8_ENCODE_MAX -#define XmlConvert XmlUtf8Convert -#define XmlGetInternalEncoding XmlGetUtf8InternalEncoding -#define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS -#define XmlEncode XmlUtf8Encode -#define MUST_CONVERT(enc, s) (!(enc)->isUtf8) -typedef char ICHAR; -#endif - - -#ifndef XML_NS - -#define XmlInitEncodingNS XmlInitEncoding -#define XmlInitUnknownEncodingNS XmlInitUnknownEncoding -#undef XmlGetInternalEncodingNS -#define XmlGetInternalEncodingNS XmlGetInternalEncoding -#define XmlParseXmlDeclNS XmlParseXmlDecl - -#endif - -#ifdef XML_UNICODE - -#ifdef XML_UNICODE_WCHAR_T -#define XML_T(x) (const wchar_t)x -#define XML_L(x) L ## x -#else -#define XML_T(x) (const unsigned short)x -#define XML_L(x) x -#endif - -#else - -#define XML_T(x) x -#define XML_L(x) x - -#endif - -/* Round up n to be a multiple of sz, where sz is a power of 2. */ -#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1)) - -/* Handle the case where memmove() doesn't exist. */ -#ifndef HAVE_MEMMOVE -#ifdef HAVE_BCOPY -#define memmove(d,s,l) bcopy((s),(d),(l)) -#else -#error memmove does not exist on this platform, nor is a substitute available -#endif /* HAVE_BCOPY */ -#endif /* HAVE_MEMMOVE */ - -#include "internal.h" -#include "xmltok.h" -#include "xmlrole.h" - -typedef const XML_Char *KEY; - -typedef struct { -  KEY name; -} NAMED; - -typedef struct { -  NAMED **v; -  size_t size; -  size_t used; -  size_t usedLim; -  XML_Memory_Handling_Suite *mem; -} HASH_TABLE; - -typedef struct { -  NAMED **p; -  NAMED **end; -} HASH_TABLE_ITER; - -#define INIT_TAG_BUF_SIZE 32  /* must be a multiple of sizeof(XML_Char) */ -#define INIT_DATA_BUF_SIZE 1024 -#define INIT_ATTS_SIZE 16 -#define INIT_BLOCK_SIZE 1024 -#define INIT_BUFFER_SIZE 1024 - -#define EXPAND_SPARE 24 - -typedef struct binding { -  struct prefix *prefix; -  struct binding *nextTagBinding; -  struct binding *prevPrefixBinding; -  const struct attribute_id *attId; -  XML_Char *uri; -  int uriLen; -  int uriAlloc; -} BINDING; - -typedef struct prefix { -  const XML_Char *name; -  BINDING *binding; -} PREFIX; - -typedef struct { -  const XML_Char *str; -  const XML_Char *localPart; -  const XML_Char *prefix; -  int strLen; -  int uriLen; -  int prefixLen; -} TAG_NAME; - -/* TAG represents an open element. -   The name of the element is stored in both the document and API -   encodings.  The memory buffer 'buf' is a separately-allocated -   memory area which stores the name.  During the XML_Parse()/ -   XMLParseBuffer() when the element is open, the memory for the 'raw' -   version of the name (in the document encoding) is shared with the -   document buffer.  If the element is open across calls to -   XML_Parse()/XML_ParseBuffer(), the buffer is re-allocated to -   contain the 'raw' name as well. - -   A parser re-uses these structures, maintaining a list of allocated -   TAG objects in a free list. -*/ -typedef struct tag { -  struct tag *parent;           /* parent of this element */ -  const char *rawName;          /* tagName in the original encoding */ -  int rawNameLength; -  TAG_NAME name;                /* tagName in the API encoding */ -  char *buf;                    /* buffer for name components */ -  char *bufEnd;                 /* end of the buffer */ -  BINDING *bindings; -} TAG; - -typedef struct { -  const XML_Char *name; -  const XML_Char *textPtr; -  int textLen; -  const XML_Char *systemId; -  const XML_Char *base; -  const XML_Char *publicId; -  const XML_Char *notation; -  XML_Bool open; -  XML_Bool is_param; -  XML_Bool is_internal; /* true if declared in internal subset outside PE */ -} ENTITY; - -typedef struct { -  enum XML_Content_Type         type; -  enum XML_Content_Quant        quant; -  const XML_Char *              name; -  int                           firstchild; -  int                           lastchild; -  int                           childcnt; -  int                           nextsib; -} CONTENT_SCAFFOLD; - -#define INIT_SCAFFOLD_ELEMENTS 32 - -typedef struct block { -  struct block *next; -  int size; -  XML_Char s[1]; -} BLOCK; - -typedef struct { -  BLOCK *blocks; -  BLOCK *freeBlocks; -  const XML_Char *end; -  XML_Char *ptr; -  XML_Char *start; -  XML_Memory_Handling_Suite *mem; -} STRING_POOL; - -/* The XML_Char before the name is used to determine whether -   an attribute has been specified. */ -typedef struct attribute_id { -  XML_Char *name; -  PREFIX *prefix; -  XML_Bool maybeTokenized; -  XML_Bool xmlns; -} ATTRIBUTE_ID; - -typedef struct { -  const ATTRIBUTE_ID *id; -  XML_Bool isCdata; -  const XML_Char *value; -} DEFAULT_ATTRIBUTE; - -typedef struct { -  const XML_Char *name; -  PREFIX *prefix; -  const ATTRIBUTE_ID *idAtt; -  int nDefaultAtts; -  int allocDefaultAtts; -  DEFAULT_ATTRIBUTE *defaultAtts; -} ELEMENT_TYPE; - -typedef struct { -  HASH_TABLE generalEntities; -  HASH_TABLE elementTypes; -  HASH_TABLE attributeIds; -  HASH_TABLE prefixes; -  STRING_POOL pool; -  STRING_POOL entityValuePool; -  /* false once a parameter entity reference has been skipped */ -  XML_Bool keepProcessing; -  /* true once an internal or external PE reference has been encountered; -     any external subset is considered an external PE reference */ -  XML_Bool hasParamEntityRefs; -  XML_Bool standalone; -#ifdef XML_DTD -  /* indicates if external PE has been read */ -  XML_Bool paramEntityRead; -  HASH_TABLE paramEntities; -#endif /* XML_DTD */ -  PREFIX defaultPrefix; -  /* === scaffolding for building content model === */ -  XML_Bool in_eldecl; -  CONTENT_SCAFFOLD *scaffold; -  unsigned contentStringLen; -  unsigned scaffSize; -  unsigned scaffCount; -  int scaffLevel; -  int *scaffIndex; -} DTD; - -typedef struct open_internal_entity { -  const char *internalEventPtr; -  const char *internalEventEndPtr; -  struct open_internal_entity *next; -  ENTITY *entity; -} OPEN_INTERNAL_ENTITY; - -typedef enum XML_Error FASTCALL Processor(XML_Parser parser, -                                          const char *start, -                                          const char *end, -                                          const char **endPtr); - -static Processor prologProcessor; -static Processor prologInitProcessor; -static Processor contentProcessor; -static Processor cdataSectionProcessor; -#ifdef XML_DTD -static Processor ignoreSectionProcessor; -static Processor externalParEntProcessor; -static Processor externalParEntInitProcessor; -static Processor entityValueProcessor; -static Processor entityValueInitProcessor; -#endif /* XML_DTD */ -static Processor epilogProcessor; -static Processor errorProcessor; -static Processor externalEntityInitProcessor; -static Processor externalEntityInitProcessor2; -static Processor externalEntityInitProcessor3; -static Processor externalEntityContentProcessor; - -static enum XML_Error FASTCALL -handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName); -static enum XML_Error FASTCALL -processXmlDecl(XML_Parser parser, int isGeneralTextEntity, -               const char *, const char *); -static enum XML_Error FASTCALL -initializeEncoding(XML_Parser parser); -static enum XML_Error FASTCALL -doProlog(XML_Parser parser, const ENCODING *enc, const char *s, -         const char *end, int tok, const char *next, const char **nextPtr); -static enum XML_Error FASTCALL -processInternalParamEntity(XML_Parser parser, ENTITY *entity); -static enum XML_Error FASTCALL -doContent(XML_Parser parser, int startTagLevel, const ENCODING *enc, -          const char *start, const char *end, const char **endPtr); -static enum XML_Error FASTCALL -doCdataSection(XML_Parser parser, const ENCODING *, const char **startPtr, -               const char *end, const char **nextPtr); -#ifdef XML_DTD -static enum XML_Error FASTCALL -doIgnoreSection(XML_Parser parser, const ENCODING *, const char **startPtr, -                const char *end, const char **nextPtr); -#endif /* XML_DTD */ -static enum XML_Error FASTCALL -storeAtts(XML_Parser parser, const ENCODING *, -          const char *s, TAG_NAME *tagNamePtr, BINDING **bindingsPtr); -static int FASTCALL -addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, -           const XML_Char *uri, BINDING **bindingsPtr); - -static int FASTCALL -defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *, -                XML_Bool isCdata, XML_Bool isId, const XML_Char *dfltValue, -                XML_Parser parser); - -static enum XML_Error FASTCALL -storeAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, -                    const char *, const char *, STRING_POOL *); -static enum XML_Error FASTCALL -appendAttributeValue(XML_Parser parser, const ENCODING *, XML_Bool isCdata, -                     const char *, const char *, STRING_POOL *); -static ATTRIBUTE_ID * FASTCALL -getAttributeId(XML_Parser parser, const ENCODING *enc, const char *start, -               const char *end); -static int FASTCALL -setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *); -static enum XML_Error FASTCALL -storeEntityValue(XML_Parser parser, const ENCODING *enc, const char *start, -                 const char *end); -static int FASTCALL -reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, -                            const char *start, const char *end); -static int FASTCALL -reportComment(XML_Parser parser, const ENCODING *enc, const char *start, -              const char *end); -static void FASTCALL -reportDefault(XML_Parser parser, const ENCODING *enc, const char *start, -              const char *end); - -static const XML_Char * FASTCALL getContext(XML_Parser parser); -static XML_Bool FASTCALL -setContext(XML_Parser parser, const XML_Char *context); -static void FASTCALL normalizePublicId(XML_Char *s); -static void FASTCALL dtdInit(DTD *, XML_Parser parser); - -/* do not call if parentParser != NULL */ -static void FASTCALL dtdReset(DTD *, XML_Parser parser); -static void FASTCALL dtdDestroy(DTD *, XML_Parser parser); - -static int FASTCALL dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser); - -static int FASTCALL copyEntityTable(HASH_TABLE *, STRING_POOL *, -                                    const HASH_TABLE *, XML_Parser parser); - -#ifdef XML_DTD -static void FASTCALL dtdSwap(DTD *, DTD *); -#endif /* XML_DTD */ - -static NAMED * FASTCALL -lookup(HASH_TABLE *table, KEY name, size_t createSize); - -static void FASTCALL -hashTableInit(HASH_TABLE *, XML_Memory_Handling_Suite *ms); - -static void FASTCALL hashTableClear(HASH_TABLE *); -static void FASTCALL hashTableDestroy(HASH_TABLE *); -static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); -static NAMED * FASTCALL hashTableIterNext(HASH_TABLE_ITER *); -static void FASTCALL poolInit(STRING_POOL *, XML_Memory_Handling_Suite *ms); -static void FASTCALL poolClear(STRING_POOL *); -static void FASTCALL poolDestroy(STRING_POOL *); -static XML_Char * FASTCALL -poolAppend(STRING_POOL *pool, const ENCODING *enc, -           const char *ptr, const char *end); -static XML_Char * FASTCALL -poolStoreString(STRING_POOL *pool, const ENCODING *enc, -                const char *ptr, const char *end); - -static XML_Bool FASTCALL poolGrow(STRING_POOL *pool); - -static int FASTCALL nextScaffoldPart(XML_Parser parser); -static XML_Content * FASTCALL build_model(XML_Parser parser); - -static const XML_Char * FASTCALL -poolCopyString(STRING_POOL *pool, const XML_Char *s); -static const XML_Char * FASTCALL -poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n); -static const XML_Char * FASTCALL -poolAppendString(STRING_POOL *pool, const XML_Char *s); -static ELEMENT_TYPE * FASTCALL -getElementType(XML_Parser Paraser, const ENCODING *enc, -               const char *ptr, const char *end); - -static void FASTCALL -parserInit(XML_Parser parser, const XML_Char *encodingName); - -#define poolStart(pool) ((pool)->start) -#define poolEnd(pool) ((pool)->ptr) -#define poolLength(pool) ((pool)->ptr - (pool)->start) -#define poolChop(pool) ((void)--(pool->ptr)) -#define poolLastChar(pool) (((pool)->ptr)[-1]) -#define poolDiscard(pool) ((pool)->ptr = (pool)->start) -#define poolFinish(pool) ((pool)->start = (pool)->ptr) -#define poolAppendChar(pool, c) \ -  (((pool)->ptr == (pool)->end && !poolGrow(pool)) \ -   ? 0 \ -   : ((*((pool)->ptr)++ = c), 1)) - -struct XML_ParserStruct { -  /* The first member must be userData so that the XML_GetUserData -     macro works. */ -  void *m_userData; -  void *m_handlerArg; -  char *m_buffer; -  XML_Memory_Handling_Suite m_mem; -  /* first character to be parsed */ -  const char *m_bufferPtr; -  /* past last character to be parsed */ -  char *m_bufferEnd; -  /* allocated end of buffer */ -  const char *m_bufferLim; -  long m_parseEndByteIndex; -  const char *m_parseEndPtr; -  XML_Char *m_dataBuf; -  XML_Char *m_dataBufEnd; -  XML_StartElementHandler m_startElementHandler; -  XML_EndElementHandler m_endElementHandler; -  XML_CharacterDataHandler m_characterDataHandler; -  XML_ProcessingInstructionHandler m_processingInstructionHandler; -  XML_CommentHandler m_commentHandler; -  XML_StartCdataSectionHandler m_startCdataSectionHandler; -  XML_EndCdataSectionHandler m_endCdataSectionHandler; -  XML_DefaultHandler m_defaultHandler; -  XML_StartDoctypeDeclHandler m_startDoctypeDeclHandler; -  XML_EndDoctypeDeclHandler m_endDoctypeDeclHandler; -  XML_UnparsedEntityDeclHandler m_unparsedEntityDeclHandler; -  XML_NotationDeclHandler m_notationDeclHandler; -  XML_StartNamespaceDeclHandler m_startNamespaceDeclHandler; -  XML_EndNamespaceDeclHandler m_endNamespaceDeclHandler; -  XML_NotStandaloneHandler m_notStandaloneHandler; -  XML_ExternalEntityRefHandler m_externalEntityRefHandler; -  void *m_externalEntityRefHandlerArg; -  XML_SkippedEntityHandler m_skippedEntityHandler; -  XML_UnknownEncodingHandler m_unknownEncodingHandler; -  XML_ElementDeclHandler m_elementDeclHandler; -  XML_AttlistDeclHandler m_attlistDeclHandler; -  XML_EntityDeclHandler m_entityDeclHandler; -  XML_XmlDeclHandler m_xmlDeclHandler; -  const ENCODING *m_encoding; -  INIT_ENCODING m_initEncoding; -  const ENCODING *m_internalEncoding; -  const XML_Char *m_protocolEncodingName; -  XML_Bool m_ns; -  XML_Bool m_ns_triplets; -  void *m_unknownEncodingMem; -  void *m_unknownEncodingData; -  void *m_unknownEncodingHandlerData; -  void (*m_unknownEncodingRelease)(void *); -  PROLOG_STATE m_prologState; -  Processor *m_processor; -  enum XML_Error m_errorCode; -  const char *m_eventPtr; -  const char *m_eventEndPtr; -  const char *m_positionPtr; -  OPEN_INTERNAL_ENTITY *m_openInternalEntities; -  XML_Bool m_defaultExpandInternalEntities; -  int m_tagLevel; -  ENTITY *m_declEntity; -  const XML_Char *m_doctypeName; -  const XML_Char *m_doctypeSysid; -  const XML_Char *m_doctypePubid; -  const XML_Char *m_declAttributeType; -  const XML_Char *m_declNotationName; -  const XML_Char *m_declNotationPublicId; -  ELEMENT_TYPE *m_declElementType; -  ATTRIBUTE_ID *m_declAttributeId; -  XML_Bool m_declAttributeIsCdata; -  XML_Bool m_declAttributeIsId; -  DTD m_dtd; -  const XML_Char *m_curBase; -  TAG *m_tagStack; -  TAG *m_freeTagList; -  BINDING *m_inheritedBindings; -  BINDING *m_freeBindingList; -  int m_attsSize; -  int m_nSpecifiedAtts; -  int m_idAttIndex; -  ATTRIBUTE *m_atts; -  POSITION m_position; -  STRING_POOL m_tempPool; -  STRING_POOL m_temp2Pool; -  char *m_groupConnector; -  unsigned m_groupSize; -  XML_Char m_namespaceSeparator; -  XML_Parser m_parentParser; -#ifdef XML_DTD -  XML_Bool m_isParamEntity; -  XML_Bool m_useForeignDTD; -  enum XML_ParamEntityParsing m_paramEntityParsing; -#endif -}; - -#define MALLOC(s) ((parser)->m_mem.malloc_fcn((s))) -#define REALLOC(p,s) ((parser)->m_mem.realloc_fcn((p),(s))) -#define FREE(p) ((parser)->m_mem.free_fcn((p))) - -#define userData (parser->m_userData) -#define handlerArg (parser->m_handlerArg) -#define startElementHandler (parser->m_startElementHandler) -#define endElementHandler (parser->m_endElementHandler) -#define characterDataHandler (parser->m_characterDataHandler) -#define processingInstructionHandler \ -        (parser->m_processingInstructionHandler) -#define commentHandler (parser->m_commentHandler) -#define startCdataSectionHandler \ -        (parser->m_startCdataSectionHandler) -#define endCdataSectionHandler (parser->m_endCdataSectionHandler) -#define defaultHandler (parser->m_defaultHandler) -#define startDoctypeDeclHandler (parser->m_startDoctypeDeclHandler) -#define endDoctypeDeclHandler (parser->m_endDoctypeDeclHandler) -#define unparsedEntityDeclHandler \ -        (parser->m_unparsedEntityDeclHandler) -#define notationDeclHandler (parser->m_notationDeclHandler) -#define startNamespaceDeclHandler \ -        (parser->m_startNamespaceDeclHandler) -#define endNamespaceDeclHandler (parser->m_endNamespaceDeclHandler) -#define notStandaloneHandler (parser->m_notStandaloneHandler) -#define externalEntityRefHandler \ -        (parser->m_externalEntityRefHandler) -#define externalEntityRefHandlerArg \ -        (parser->m_externalEntityRefHandlerArg) -#define internalEntityRefHandler \ -        (parser->m_internalEntityRefHandler) -#define skippedEntityHandler (parser->m_skippedEntityHandler) -#define unknownEncodingHandler (parser->m_unknownEncodingHandler) -#define elementDeclHandler (parser->m_elementDeclHandler) -#define attlistDeclHandler (parser->m_attlistDeclHandler) -#define entityDeclHandler (parser->m_entityDeclHandler) -#define xmlDeclHandler (parser->m_xmlDeclHandler) -#define encoding (parser->m_encoding) -#define initEncoding (parser->m_initEncoding) -#define internalEncoding (parser->m_internalEncoding) -#define unknownEncodingMem (parser->m_unknownEncodingMem) -#define unknownEncodingData (parser->m_unknownEncodingData) -#define unknownEncodingHandlerData \ -  (parser->m_unknownEncodingHandlerData) -#define unknownEncodingRelease (parser->m_unknownEncodingRelease) -#define protocolEncodingName (parser->m_protocolEncodingName) -#define ns (parser->m_ns) -#define ns_triplets (parser->m_ns_triplets) -#define prologState (parser->m_prologState) -#define processor (parser->m_processor) -#define errorCode (parser->m_errorCode) -#define eventPtr (parser->m_eventPtr) -#define eventEndPtr (parser->m_eventEndPtr) -#define positionPtr (parser->m_positionPtr) -#define position (parser->m_position) -#define openInternalEntities (parser->m_openInternalEntities) -#define defaultExpandInternalEntities \ -        (parser->m_defaultExpandInternalEntities) -#define tagLevel (parser->m_tagLevel) -#define buffer (parser->m_buffer) -#define bufferPtr (parser->m_bufferPtr) -#define bufferEnd (parser->m_bufferEnd) -#define parseEndByteIndex (parser->m_parseEndByteIndex) -#define parseEndPtr (parser->m_parseEndPtr) -#define bufferLim (parser->m_bufferLim) -#define dataBuf (parser->m_dataBuf) -#define dataBufEnd (parser->m_dataBufEnd) -#define dtd (parser->m_dtd) -#define curBase (parser->m_curBase) -#define declEntity (parser->m_declEntity) -#define doctypeName (parser->m_doctypeName) -#define doctypeSysid (parser->m_doctypeSysid) -#define doctypePubid (parser->m_doctypePubid) -#define declAttributeType (parser->m_declAttributeType) -#define declNotationName (parser->m_declNotationName) -#define declNotationPublicId (parser->m_declNotationPublicId) -#define declElementType (parser->m_declElementType) -#define declAttributeId (parser->m_declAttributeId) -#define declAttributeIsCdata (parser->m_declAttributeIsCdata) -#define declAttributeIsId (parser->m_declAttributeIsId) -#define freeTagList (parser->m_freeTagList) -#define freeBindingList (parser->m_freeBindingList) -#define inheritedBindings (parser->m_inheritedBindings) -#define tagStack (parser->m_tagStack) -#define atts (parser->m_atts) -#define attsSize (parser->m_attsSize) -#define nSpecifiedAtts (parser->m_nSpecifiedAtts) -#define idAttIndex (parser->m_idAttIndex) -#define tempPool (parser->m_tempPool) -#define temp2Pool (parser->m_temp2Pool) -#define groupConnector (parser->m_groupConnector) -#define groupSize (parser->m_groupSize) -#define namespaceSeparator (parser->m_namespaceSeparator) -#define parentParser (parser->m_parentParser) -#ifdef XML_DTD -#define isParamEntity (parser->m_isParamEntity) -#define useForeignDTD (parser->m_useForeignDTD) -#define paramEntityParsing (parser->m_paramEntityParsing) -#endif /* XML_DTD */ - -#define parsing (processor != prologInitProcessor) - - -XML_Parser -XML_ParserCreate(const XML_Char *encodingName) -{ -  return XML_ParserCreate_MM(encodingName, NULL, NULL); -} - -XML_Parser -XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) -{ -  XML_Char tmp[2]; -  *tmp = nsSep; -  return XML_ParserCreate_MM(encodingName, NULL, tmp); -} - -XML_Parser -XML_ParserCreate_MM(const XML_Char *encodingName, -                    const XML_Memory_Handling_Suite *memsuite, -                    const XML_Char *nameSep) { -  XML_Parser parser; -  static const XML_Char implicitContext[] = { -    'x', 'm', 'l', '=', 'h', 't', 't', 'p', ':', '/', '/', -    'w', 'w', 'w', '.', 'w', '3', '.', 'o', 'r', 'g', '/', -    'X', 'M', 'L', '/', '1', '9', '9', '8', '/', -    'n', 'a', 'm', 'e', 's', 'p', 'a', 'c', 'e', '\0' -  }; - - -  if (memsuite) { -    XML_Memory_Handling_Suite *mtemp; -    parser = memsuite->malloc_fcn(sizeof(struct XML_ParserStruct)); -    if (parser != NULL) { -      mtemp = &(parser->m_mem); -      mtemp->malloc_fcn = memsuite->malloc_fcn; -      mtemp->realloc_fcn = memsuite->realloc_fcn; -      mtemp->free_fcn = memsuite->free_fcn; -    } -  } -  else { -    XML_Memory_Handling_Suite *mtemp; -    parser = malloc(sizeof(struct XML_ParserStruct)); -    if (parser != NULL) { -      mtemp = &(parser->m_mem); -      mtemp->malloc_fcn = malloc; -      mtemp->realloc_fcn = realloc; -      mtemp->free_fcn = free; -    } -  } - -  if (!parser) -    return parser; - -  buffer = NULL; -  bufferLim = NULL; - -  attsSize = INIT_ATTS_SIZE; -  atts = MALLOC(attsSize * sizeof(ATTRIBUTE)); -  if (atts == NULL) { -    FREE(parser); -    return NULL; -  } -  dataBuf = MALLOC(INIT_DATA_BUF_SIZE * sizeof(XML_Char)); -  if (dataBuf == NULL) { -    FREE(atts); -    FREE(parser); -    return NULL; -  } -  dataBufEnd = dataBuf + INIT_DATA_BUF_SIZE; - -  freeBindingList = NULL; -  freeTagList = NULL; - -  groupSize = 0; -  groupConnector = NULL; - -  unknownEncodingHandler = NULL; -  unknownEncodingHandlerData = NULL; - -  namespaceSeparator = '!'; -  ns = XML_FALSE; -  ns_triplets = XML_FALSE; - -  poolInit(&tempPool, &(parser->m_mem)); -  poolInit(&temp2Pool, &(parser->m_mem)); -  parserInit(parser, encodingName); -  dtdInit(&dtd, parser); - -  if (!atts || !dataBuf || (encodingName && !protocolEncodingName)) { -    XML_ParserFree(parser); -    return NULL; -  } - -  if (nameSep) { -    ns = XML_TRUE; -    internalEncoding = XmlGetInternalEncodingNS(); -    namespaceSeparator = *nameSep; - -    if (!setContext(parser, implicitContext)) { -      XML_ParserFree(parser); -      return NULL; -    } -  } -  else { -    internalEncoding = XmlGetInternalEncoding(); -  } - -  return parser; -} - -static void FASTCALL -parserInit(XML_Parser parser, const XML_Char *encodingName) -{ -  processor = prologInitProcessor; -  XmlPrologStateInit(&prologState); -  protocolEncodingName = (encodingName != NULL -                          ? poolCopyString(&tempPool, encodingName) -                          : NULL); -  curBase = NULL; -  XmlInitEncoding(&initEncoding, &encoding, 0); -  userData = NULL; -  handlerArg = NULL; -  startElementHandler = NULL; -  endElementHandler = NULL; -  characterDataHandler = NULL; -  processingInstructionHandler = NULL; -  commentHandler = NULL; -  startCdataSectionHandler = NULL; -  endCdataSectionHandler = NULL; -  defaultHandler = NULL; -  startDoctypeDeclHandler = NULL; -  endDoctypeDeclHandler = NULL; -  unparsedEntityDeclHandler = NULL; -  notationDeclHandler = NULL; -  startNamespaceDeclHandler = NULL; -  endNamespaceDeclHandler = NULL; -  notStandaloneHandler = NULL; -  externalEntityRefHandler = NULL; -  externalEntityRefHandlerArg = parser; -  skippedEntityHandler = NULL; -  elementDeclHandler = NULL; -  attlistDeclHandler = NULL; -  entityDeclHandler = NULL; -  xmlDeclHandler = NULL; -  bufferPtr = buffer; -  bufferEnd = buffer; -  parseEndByteIndex = 0; -  parseEndPtr = NULL; -  declElementType = NULL; -  declAttributeId = NULL; -  declEntity = NULL; -  doctypeName = NULL; -  doctypeSysid = NULL; -  doctypePubid = NULL; -  declAttributeType = NULL; -  declNotationName = NULL; -  declNotationPublicId = NULL; -  declAttributeIsCdata = XML_FALSE; -  declAttributeIsId = XML_FALSE; -  memset(&position, 0, sizeof(POSITION)); -  errorCode = XML_ERROR_NONE; -  eventPtr = NULL; -  eventEndPtr = NULL; -  positionPtr = NULL; -  openInternalEntities = 0; -  defaultExpandInternalEntities = XML_TRUE; -  tagLevel = 0; -  tagStack = NULL; -  inheritedBindings = NULL; -  nSpecifiedAtts = 0; -  unknownEncodingMem = NULL; -  unknownEncodingRelease = NULL; -  unknownEncodingData = NULL; -  parentParser = NULL; -#ifdef XML_DTD -  isParamEntity = XML_FALSE; -  useForeignDTD = XML_FALSE; -  paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; -#endif -} - -/* moves list of bindings to freeBindingList */ -static void FASTCALL -moveToFreeBindingList(XML_Parser parser, BINDING *bindings) -{ -  while (bindings) { -    BINDING *b = bindings; -    bindings = bindings->nextTagBinding; -    b->nextTagBinding = freeBindingList; -    freeBindingList = b; -  } -} - -XML_Bool -XML_ParserReset(XML_Parser parser, const XML_Char *encodingName) -{ -  TAG *tStk; -  if (parentParser)  -    return XML_FALSE; -  /* move tagStack to freeTagList */ -  tStk = tagStack; -  while (tStk) { -    TAG *tag = tStk; -    tStk = tStk->parent; -    tag->parent = freeTagList; -    moveToFreeBindingList(parser, tag->bindings); -    tag->bindings = NULL; -    freeTagList = tag; -  } -  moveToFreeBindingList(parser, inheritedBindings); -  if (unknownEncodingMem) -    FREE(unknownEncodingMem); -  if (unknownEncodingRelease) -    unknownEncodingRelease(unknownEncodingData); -  poolClear(&tempPool); -  poolClear(&temp2Pool); -  parserInit(parser, encodingName); -  dtdReset(&dtd, parser); -  return XML_TRUE; -} - -int -XML_SetEncoding(XML_Parser parser, const XML_Char *encodingName) -{ -  /* block after XML_Parse()/XML_ParseBuffer() has been called */ -  if (parsing) -    return 0; -  if (encodingName == NULL) -    protocolEncodingName = NULL; -  else { -    protocolEncodingName = poolCopyString(&tempPool, encodingName); -    if (!protocolEncodingName) -      return 0; -  } -  return 1; -} - -XML_Parser -XML_ExternalEntityParserCreate(XML_Parser oldParser, -                               const XML_Char *context, -                               const XML_Char *encodingName) -{ -  XML_Parser parser = oldParser; -  DTD *oldDtd = &dtd; -  XML_StartElementHandler oldStartElementHandler = startElementHandler; -  XML_EndElementHandler oldEndElementHandler = endElementHandler; -  XML_CharacterDataHandler oldCharacterDataHandler = characterDataHandler; -  XML_ProcessingInstructionHandler oldProcessingInstructionHandler -      = processingInstructionHandler; -  XML_CommentHandler oldCommentHandler = commentHandler; -  XML_StartCdataSectionHandler oldStartCdataSectionHandler -      = startCdataSectionHandler; -  XML_EndCdataSectionHandler oldEndCdataSectionHandler -      = endCdataSectionHandler; -  XML_DefaultHandler oldDefaultHandler = defaultHandler; -  XML_UnparsedEntityDeclHandler oldUnparsedEntityDeclHandler -      = unparsedEntityDeclHandler; -  XML_NotationDeclHandler oldNotationDeclHandler = notationDeclHandler; -  XML_StartNamespaceDeclHandler oldStartNamespaceDeclHandler -      = startNamespaceDeclHandler; -  XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler -      = endNamespaceDeclHandler; -  XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler; -  XML_ExternalEntityRefHandler oldExternalEntityRefHandler -      = externalEntityRefHandler; -  XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler; -  XML_UnknownEncodingHandler oldUnknownEncodingHandler -      = unknownEncodingHandler; -  XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler; -  XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler; -  XML_EntityDeclHandler oldEntityDeclHandler = entityDeclHandler; -  XML_XmlDeclHandler oldXmlDeclHandler = xmlDeclHandler; -  ELEMENT_TYPE * oldDeclElementType = declElementType; - -  void *oldUserData = userData; -  void *oldHandlerArg = handlerArg; -  XML_Bool oldDefaultExpandInternalEntities = defaultExpandInternalEntities; -  void *oldExternalEntityRefHandlerArg = externalEntityRefHandlerArg; -#ifdef XML_DTD -  int oldParamEntityParsing = paramEntityParsing; -  int oldInEntityValue = prologState.inEntityValue; -#endif -  XML_Bool oldns_triplets = ns_triplets; - -  /* Note that the magical uses of the pre-processor to make field -     access look more like C++ require that `parser' be overwritten -     here.  This makes this function more painful to follow than it -     would be otherwise. -  */ -  if (ns) { -    XML_Char tmp[2]; - -    *tmp = namespaceSeparator; -    parser = XML_ParserCreate_MM(encodingName, &parser->m_mem, -                                 tmp); -  } -  else { -    parser = XML_ParserCreate_MM(encodingName, &parser->m_mem, -                                 NULL); -  } - -  if (!parser) -    return NULL; - -  startElementHandler = oldStartElementHandler; -  endElementHandler = oldEndElementHandler; -  characterDataHandler = oldCharacterDataHandler; -  processingInstructionHandler = oldProcessingInstructionHandler; -  commentHandler = oldCommentHandler; -  startCdataSectionHandler = oldStartCdataSectionHandler; -  endCdataSectionHandler = oldEndCdataSectionHandler; -  defaultHandler = oldDefaultHandler; -  unparsedEntityDeclHandler = oldUnparsedEntityDeclHandler; -  notationDeclHandler = oldNotationDeclHandler; -  startNamespaceDeclHandler = oldStartNamespaceDeclHandler; -  endNamespaceDeclHandler = oldEndNamespaceDeclHandler; -  notStandaloneHandler = oldNotStandaloneHandler; -  externalEntityRefHandler = oldExternalEntityRefHandler; -  skippedEntityHandler = oldSkippedEntityHandler; -  unknownEncodingHandler = oldUnknownEncodingHandler; -  elementDeclHandler = oldElementDeclHandler; -  attlistDeclHandler = oldAttlistDeclHandler; -  entityDeclHandler = oldEntityDeclHandler; -  xmlDeclHandler = oldXmlDeclHandler; -  declElementType = oldDeclElementType; -  userData = oldUserData; -  if (oldUserData == oldHandlerArg) -    handlerArg = userData; -  else -    handlerArg = parser; -  if (oldExternalEntityRefHandlerArg != oldParser) -    externalEntityRefHandlerArg = oldExternalEntityRefHandlerArg; -  defaultExpandInternalEntities = oldDefaultExpandInternalEntities; -  ns_triplets = oldns_triplets; -  parentParser = oldParser; -#ifdef XML_DTD -  paramEntityParsing = oldParamEntityParsing; -  prologState.inEntityValue = oldInEntityValue; -  if (context) { -#endif /* XML_DTD */ -    if (!dtdCopy(&dtd, oldDtd, parser) || !setContext(parser, context)) { -      XML_ParserFree(parser); -      return NULL; -    } -    processor = externalEntityInitProcessor; -#ifdef XML_DTD -  } -  else { -    dtdSwap(&dtd, oldDtd); -    isParamEntity = XML_TRUE; -    XmlPrologStateInitExternalEntity(&prologState); -    processor = externalParEntInitProcessor; -  } -#endif /* XML_DTD */ -  return parser; -} - -static void FASTCALL -destroyBindings(BINDING *bindings, XML_Parser parser) -{ -  for (;;) { -    BINDING *b = bindings; -    if (!b) -      break; -    bindings = b->nextTagBinding; -    FREE(b->uri); -    FREE(b); -  } -} - -void -XML_ParserFree(XML_Parser parser) -{ -  for (;;) { -    TAG *p; -    if (tagStack == 0) { -      if (freeTagList == NULL) -        break; -      tagStack = freeTagList; -      freeTagList = NULL; -    } -    p = tagStack; -    tagStack = tagStack->parent; -    FREE(p->buf); -    destroyBindings(p->bindings, parser); -    FREE(p); -  } -  destroyBindings(freeBindingList, parser); -  destroyBindings(inheritedBindings, parser); -  poolDestroy(&tempPool); -  poolDestroy(&temp2Pool); -#ifdef XML_DTD -  if (isParamEntity) -    dtdSwap(&dtd, &parentParser->m_dtd); -#endif /* XML_DTD */ -  dtdDestroy(&dtd, parser); -  FREE((void *)atts); -  if (groupConnector) -    FREE(groupConnector); -  if (buffer) -    FREE(buffer); -  FREE(dataBuf); -  if (unknownEncodingMem) -    FREE(unknownEncodingMem); -  if (unknownEncodingRelease) -    unknownEncodingRelease(unknownEncodingData); -  FREE(parser); -} - -void -XML_UseParserAsHandlerArg(XML_Parser parser) -{ -  handlerArg = parser; -} - -enum XML_Error -XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD) -{ -#ifdef XML_DTD -  /* block after XML_Parse()/XML_ParseBuffer() has been called */ -  if (parsing) -    return XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING; -  useForeignDTD = useDTD; -  return XML_ERROR_NONE; -#else -  return XML_ERROR_FEATURE_REQUIRES_XML_DTD; -#endif -} - -void -XML_SetReturnNSTriplet(XML_Parser parser, int do_nst) -{ -  /* block after XML_Parse()/XML_ParseBuffer() has been called */ -  if (parsing) -    return; -  ns_triplets = do_nst ? XML_TRUE : XML_FALSE; -} - -void -XML_SetUserData(XML_Parser parser, void *p) -{ -  if (handlerArg == userData) -    handlerArg = userData = p; -  else -    userData = p; -} - -int -XML_SetBase(XML_Parser parser, const XML_Char *p) -{ -  if (p) { -    p = poolCopyString(&dtd.pool, p); -    if (!p) -      return 0; -    curBase = p; -  } -  else -    curBase = NULL; -  return 1; -} - -const XML_Char * -XML_GetBase(XML_Parser parser) -{ -  return curBase; -} - -int -XML_GetSpecifiedAttributeCount(XML_Parser parser) -{ -  return nSpecifiedAtts; -} - -int -XML_GetIdAttributeIndex(XML_Parser parser) -{ -  return idAttIndex; -} - -void -XML_SetElementHandler(XML_Parser parser, -                      XML_StartElementHandler start, -                      XML_EndElementHandler end) -{ -  startElementHandler = start; -  endElementHandler = end; -} - -void -XML_SetStartElementHandler(XML_Parser parser, -                           XML_StartElementHandler start) { -  startElementHandler = start; -} - -void -XML_SetEndElementHandler(XML_Parser parser, -                         XML_EndElementHandler end) { -  endElementHandler = end; -} - -void -XML_SetCharacterDataHandler(XML_Parser parser, -                            XML_CharacterDataHandler handler) -{ -  characterDataHandler = handler; -} - -void -XML_SetProcessingInstructionHandler(XML_Parser parser, -                                    XML_ProcessingInstructionHandler handler) -{ -  processingInstructionHandler = handler; -} - -void -XML_SetCommentHandler(XML_Parser parser, -                      XML_CommentHandler handler) -{ -  commentHandler = handler; -} - -void -XML_SetCdataSectionHandler(XML_Parser parser, -                           XML_StartCdataSectionHandler start, -                           XML_EndCdataSectionHandler end) -{ -  startCdataSectionHandler = start; -  endCdataSectionHandler = end; -} - -void -XML_SetStartCdataSectionHandler(XML_Parser parser, -                                XML_StartCdataSectionHandler start) { -  startCdataSectionHandler = start; -} - -void -XML_SetEndCdataSectionHandler(XML_Parser parser, -                              XML_EndCdataSectionHandler end) { -  endCdataSectionHandler = end; -} - -void -XML_SetDefaultHandler(XML_Parser parser, -                      XML_DefaultHandler handler) -{ -  defaultHandler = handler; -  defaultExpandInternalEntities = XML_FALSE; -} - -void -XML_SetDefaultHandlerExpand(XML_Parser parser, -                            XML_DefaultHandler handler) -{ -  defaultHandler = handler; -  defaultExpandInternalEntities = XML_TRUE; -} - -void -XML_SetDoctypeDeclHandler(XML_Parser parser, -                          XML_StartDoctypeDeclHandler start, -                          XML_EndDoctypeDeclHandler end) -{ -  startDoctypeDeclHandler = start; -  endDoctypeDeclHandler = end; -} - -void -XML_SetStartDoctypeDeclHandler(XML_Parser parser, -                               XML_StartDoctypeDeclHandler start) { -  startDoctypeDeclHandler = start; -} - -void -XML_SetEndDoctypeDeclHandler(XML_Parser parser, -                             XML_EndDoctypeDeclHandler end) { -  endDoctypeDeclHandler = end; -} - -void -XML_SetUnparsedEntityDeclHandler(XML_Parser parser, -                                 XML_UnparsedEntityDeclHandler handler) -{ -  unparsedEntityDeclHandler = handler; -} - -void -XML_SetNotationDeclHandler(XML_Parser parser, -                           XML_NotationDeclHandler handler) -{ -  notationDeclHandler = handler; -} - -void -XML_SetNamespaceDeclHandler(XML_Parser parser, -                            XML_StartNamespaceDeclHandler start, -                            XML_EndNamespaceDeclHandler end) -{ -  startNamespaceDeclHandler = start; -  endNamespaceDeclHandler = end; -} - -void -XML_SetStartNamespaceDeclHandler(XML_Parser parser, -                                 XML_StartNamespaceDeclHandler start) { -  startNamespaceDeclHandler = start; -} - -void -XML_SetEndNamespaceDeclHandler(XML_Parser parser, -                               XML_EndNamespaceDeclHandler end) { -  endNamespaceDeclHandler = end; -} - -void -XML_SetNotStandaloneHandler(XML_Parser parser, -                            XML_NotStandaloneHandler handler) -{ -  notStandaloneHandler = handler; -} - -void -XML_SetExternalEntityRefHandler(XML_Parser parser, -                                XML_ExternalEntityRefHandler handler) -{ -  externalEntityRefHandler = handler; -} - -void -XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg) -{ -  if (arg) -    externalEntityRefHandlerArg = arg; -  else -    externalEntityRefHandlerArg = parser; -} - -void -XML_SetSkippedEntityHandler(XML_Parser parser, -                            XML_SkippedEntityHandler handler) -{ -  skippedEntityHandler = handler; -} - -void -XML_SetUnknownEncodingHandler(XML_Parser parser, -                              XML_UnknownEncodingHandler handler, -                              void *data) -{ -  unknownEncodingHandler = handler; -  unknownEncodingHandlerData = data; -} - -void -XML_SetElementDeclHandler(XML_Parser parser, -                          XML_ElementDeclHandler eldecl) -{ -  elementDeclHandler = eldecl; -} - -void -XML_SetAttlistDeclHandler(XML_Parser parser, -                          XML_AttlistDeclHandler attdecl) -{ -  attlistDeclHandler = attdecl; -} - -void -XML_SetEntityDeclHandler(XML_Parser parser, -                         XML_EntityDeclHandler handler) -{ -  entityDeclHandler = handler; -} - -void -XML_SetXmlDeclHandler(XML_Parser parser, -                      XML_XmlDeclHandler handler) { -  xmlDeclHandler = handler; -} - -int -XML_SetParamEntityParsing(XML_Parser parser, -                          enum XML_ParamEntityParsing peParsing) -{ -  /* block after XML_Parse()/XML_ParseBuffer() has been called */ -  if (parsing)  -    return 0; -#ifdef XML_DTD -  paramEntityParsing = peParsing; -  return 1; -#else -  return peParsing == XML_PARAM_ENTITY_PARSING_NEVER; -#endif -} - -enum XML_Status -XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) -{ -  if (len == 0) { -    if (!isFinal) -      return XML_STATUS_OK; -    positionPtr = bufferPtr; -    errorCode = processor(parser, bufferPtr, parseEndPtr = bufferEnd, 0); -    if (errorCode == XML_ERROR_NONE) -      return XML_STATUS_OK; -    eventEndPtr = eventPtr; -    processor = errorProcessor; -    return XML_STATUS_ERROR; -  } -#ifndef XML_CONTEXT_BYTES -  else if (bufferPtr == bufferEnd) { -    const char *end; -    int nLeftOver; -    parseEndByteIndex += len; -    positionPtr = s; -    if (isFinal) { -      errorCode = processor(parser, s, parseEndPtr = s + len, 0); -      if (errorCode == XML_ERROR_NONE) -        return XML_STATUS_OK; -      eventEndPtr = eventPtr; -      processor = errorProcessor; -      return XML_STATUS_ERROR; -    } -    errorCode = processor(parser, s, parseEndPtr = s + len, &end); -    if (errorCode != XML_ERROR_NONE) { -      eventEndPtr = eventPtr; -      processor = errorProcessor; -      return XML_STATUS_ERROR; -    } -    XmlUpdatePosition(encoding, positionPtr, end, &position); -    nLeftOver = s + len - end; -    if (nLeftOver) { -      if (buffer == NULL || nLeftOver > bufferLim - buffer) { -        /* FIXME avoid integer overflow */ -        char *temp; -        temp = buffer == NULL ? MALLOC(len * 2) : REALLOC(buffer, len * 2); -        if (temp == NULL) { -          errorCode = XML_ERROR_NO_MEMORY; -          return XML_STATUS_ERROR; -        } -        buffer = temp; -        if (!buffer) { -          errorCode = XML_ERROR_NO_MEMORY; -          eventPtr = eventEndPtr = NULL; -          processor = errorProcessor; -          return XML_STATUS_ERROR; -        } -        bufferLim = buffer + len * 2; -      } -      memcpy(buffer, end, nLeftOver); -      bufferPtr = buffer; -      bufferEnd = buffer + nLeftOver; -    } -    return XML_STATUS_OK; -  } -#endif  /* not defined XML_CONTEXT_BYTES */ -  else { -    void *buff = XML_GetBuffer(parser, len); -    if (buff == NULL) -      return XML_STATUS_ERROR; -    else { -      memcpy(buff, s, len); -      return XML_ParseBuffer(parser, len, isFinal); -    } -  } -} - -enum XML_Status -XML_ParseBuffer(XML_Parser parser, int len, int isFinal) -{ -  const char *start = bufferPtr; -  positionPtr = start; -  bufferEnd += len; -  parseEndByteIndex += len; -  errorCode = processor(parser, start, parseEndPtr = bufferEnd, -                        isFinal ? (const char **)NULL : &bufferPtr); -  if (errorCode == XML_ERROR_NONE) { -    if (!isFinal) -      XmlUpdatePosition(encoding, positionPtr, bufferPtr, &position); -    return XML_STATUS_OK; -  } -  else { -    eventEndPtr = eventPtr; -    processor = errorProcessor; -    return XML_STATUS_ERROR; -  } -} - -void * -XML_GetBuffer(XML_Parser parser, int len) -{ -  if (len > bufferLim - bufferEnd) { -    /* FIXME avoid integer overflow */ -    int neededSize = len + (bufferEnd - bufferPtr); -#ifdef XML_CONTEXT_BYTES -    int keep = bufferPtr - buffer; - -    if (keep > XML_CONTEXT_BYTES) -      keep = XML_CONTEXT_BYTES; -    neededSize += keep; -#endif  /* defined XML_CONTEXT_BYTES */ -    if (neededSize  <= bufferLim - buffer) { -#ifdef XML_CONTEXT_BYTES -      if (keep < bufferPtr - buffer) { -        int offset = (bufferPtr - buffer) - keep; -        memmove(buffer, &buffer[offset], bufferEnd - bufferPtr + keep); -        bufferEnd -= offset; -        bufferPtr -= offset; -      } -#else -      memmove(buffer, bufferPtr, bufferEnd - bufferPtr); -      bufferEnd = buffer + (bufferEnd - bufferPtr); -      bufferPtr = buffer; -#endif  /* not defined XML_CONTEXT_BYTES */ -    } -    else { -      char *newBuf; -      int bufferSize = bufferLim - bufferPtr; -      if (bufferSize == 0) -        bufferSize = INIT_BUFFER_SIZE; -      do { -        bufferSize *= 2; -      } while (bufferSize < neededSize); -      newBuf = MALLOC(bufferSize); -      if (newBuf == 0) { -        errorCode = XML_ERROR_NO_MEMORY; -        return NULL; -      } -      bufferLim = newBuf + bufferSize; -#ifdef XML_CONTEXT_BYTES -      if (bufferPtr) { -        int keep = bufferPtr - buffer; -        if (keep > XML_CONTEXT_BYTES) -          keep = XML_CONTEXT_BYTES; -        memcpy(newBuf, &bufferPtr[-keep], bufferEnd - bufferPtr + keep); -        FREE(buffer); -        buffer = newBuf; -        bufferEnd = buffer + (bufferEnd - bufferPtr) + keep; -        bufferPtr = buffer + keep; -      } -      else { -        bufferEnd = newBuf + (bufferEnd - bufferPtr); -        bufferPtr = buffer = newBuf; -      } -#else -      if (bufferPtr) { -        memcpy(newBuf, bufferPtr, bufferEnd - bufferPtr); -        FREE(buffer); -      } -      bufferEnd = newBuf + (bufferEnd - bufferPtr); -      bufferPtr = buffer = newBuf; -#endif  /* not defined XML_CONTEXT_BYTES */ -    } -  } -  return bufferEnd; -} - -enum XML_Error -XML_GetErrorCode(XML_Parser parser) -{ -  return errorCode; -} - -long -XML_GetCurrentByteIndex(XML_Parser parser) -{ -  if (eventPtr) -    return parseEndByteIndex - (parseEndPtr - eventPtr); -  return -1; -} - -int -XML_GetCurrentByteCount(XML_Parser parser) -{ -  if (eventEndPtr && eventPtr) -    return eventEndPtr - eventPtr; -  return 0; -} - -const char * -XML_GetInputContext(XML_Parser parser, int *offset, int *size) -{ -#ifdef XML_CONTEXT_BYTES -  if (eventPtr && buffer) { -    *offset = eventPtr - buffer; -    *size   = bufferEnd - buffer; -    return buffer; -  } -#endif /* defined XML_CONTEXT_BYTES */ -  return (char *) 0; -} - -int -XML_GetCurrentLineNumber(XML_Parser parser) -{ -  if (eventPtr) { -    XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); -    positionPtr = eventPtr; -  } -  return position.lineNumber + 1; -} - -int -XML_GetCurrentColumnNumber(XML_Parser parser) -{ -  if (eventPtr) { -    XmlUpdatePosition(encoding, positionPtr, eventPtr, &position); -    positionPtr = eventPtr; -  } -  return position.columnNumber; -} - -void -XML_DefaultCurrent(XML_Parser parser) -{ -  if (defaultHandler) { -    if (openInternalEntities) -      reportDefault(parser, -                    internalEncoding, -                    openInternalEntities->internalEventPtr, -                    openInternalEntities->internalEventEndPtr); -    else -      reportDefault(parser, encoding, eventPtr, eventEndPtr); -  } -} - -const XML_LChar * -XML_ErrorString(enum XML_Error code) -{ -  static const XML_LChar *message[] = { -    0, -    XML_L("out of memory"), -    XML_L("syntax error"), -    XML_L("no element found"), -    XML_L("not well-formed (invalid token)"), -    XML_L("unclosed token"), -    XML_L("partial character"), -    XML_L("mismatched tag"), -    XML_L("duplicate attribute"), -    XML_L("junk after document element"), -    XML_L("illegal parameter entity reference"), -    XML_L("undefined entity"), -    XML_L("recursive entity reference"), -    XML_L("asynchronous entity"), -    XML_L("reference to invalid character number"), -    XML_L("reference to binary entity"), -    XML_L("reference to external entity in attribute"), -    XML_L("xml declaration not at start of external entity"), -    XML_L("unknown encoding"), -    XML_L("encoding specified in XML declaration is incorrect"), -    XML_L("unclosed CDATA section"), -    XML_L("error in processing external entity reference"), -    XML_L("document is not standalone"), -    XML_L("unexpected parser state - please send a bug report"), -    XML_L("entity declared in parameter entity"), -    XML_L("requested feature requires XML_DTD support in Expat"), -    XML_L("cannot change setting once parsing has begun") -  }; -  if (code > 0 && code < sizeof(message)/sizeof(message[0])) -    return message[code]; -  return NULL; -} - -const XML_LChar * -XML_ExpatVersion(void) { -	return "1.95.5"; -} - -XML_Expat_Version -XML_ExpatVersionInfo(void) -{ -  XML_Expat_Version version; - -  version.major = XML_MAJOR_VERSION; -  version.minor = XML_MINOR_VERSION; -  version.micro = XML_MICRO_VERSION; - -  return version; -} - -const XML_Feature * -XML_GetFeatureList(void) -{ -  static XML_Feature features[] = { -    {XML_FEATURE_SIZEOF_XML_CHAR,  XML_L("sizeof(XML_Char)")}, -    {XML_FEATURE_SIZEOF_XML_LCHAR, XML_L("sizeof(XML_LChar)")}, -#ifdef XML_UNICODE -    {XML_FEATURE_UNICODE,          XML_L("XML_UNICODE")}, -#endif -#ifdef XML_UNICODE_WCHAR_T -    {XML_FEATURE_UNICODE_WCHAR_T,  XML_L("XML_UNICODE_WCHAR_T")}, -#endif -#ifdef XML_DTD -    {XML_FEATURE_DTD,              XML_L("XML_DTD")}, -#endif -#ifdef XML_CONTEXT_BYTES -    {XML_FEATURE_CONTEXT_BYTES,    XML_L("XML_CONTEXT_BYTES"), -     XML_CONTEXT_BYTES}, -#endif -#ifdef XML_MIN_SIZE -    {XML_FEATURE_MIN_SIZE,         XML_L("XML_MIN_SIZE")}, -#endif -    {XML_FEATURE_END,              NULL} -  }; - -  features[0].value = sizeof(XML_Char); -  features[1].value = sizeof(XML_LChar); -  return features; -} - -/* Initially tag->rawName always points into the parse buffer; -   for those TAG instances opened while the current parse buffer was -   processed, and not yet closed, we need to store tag->rawName in a more -   permanent location, since the parse buffer is about to be discarded. -*/ -static XML_Bool FASTCALL -storeRawNames(XML_Parser parser) -{ -  TAG *tag = tagStack; -  while (tag) { -    int bufSize; -    int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); -    char *rawNameBuf = tag->buf + nameLen; -    /* Stop if already stored.  Since tagStack is a stack, we can stop -       at the first entry that has already been copied; everything -       below it in the stack is already been accounted for in a -       previous call to this function. -    */ -    if (tag->rawName == rawNameBuf)  -      break; -    /* For re-use purposes we need to ensure that the -       size of tag->buf is a multiple of sizeof(XML_Char). -    */ -    bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); -    if (bufSize > tag->bufEnd - tag->buf) { -      char *temp = REALLOC(tag->buf, bufSize); -      if (temp == NULL) -        return XML_FALSE; -      tag->buf = temp; -      tag->name.str = (XML_Char *)temp; -      tag->bufEnd = temp + bufSize; -      rawNameBuf = temp + nameLen; -    } -    memcpy(rawNameBuf, tag->rawName, tag->rawNameLength); -    tag->rawName = rawNameBuf; -    tag = tag->parent; -  } -  return XML_TRUE; -} - -static enum XML_Error FASTCALL -contentProcessor(XML_Parser parser, -                 const char *start, -                 const char *end, -                 const char **endPtr) -{ -  enum XML_Error result =  -    doContent(parser, 0, encoding, start, end, endPtr); -  if (result != XML_ERROR_NONE)  -    return result; -  if (!storeRawNames(parser)) -    return XML_ERROR_NO_MEMORY; -  return result; -} - -static enum XML_Error FASTCALL -externalEntityInitProcessor(XML_Parser parser, -                            const char *start, -                            const char *end, -                            const char **endPtr) -{ -  enum XML_Error result = initializeEncoding(parser); -  if (result != XML_ERROR_NONE) -    return result; -  processor = externalEntityInitProcessor2; -  return externalEntityInitProcessor2(parser, start, end, endPtr); -} - -static enum XML_Error FASTCALL -externalEntityInitProcessor2(XML_Parser parser, -                             const char *start, -                             const char *end, -                             const char **endPtr) -{ -  const char *next = start; /* XmlContentTok doesn't always set the last arg */ -  int tok = XmlContentTok(encoding, start, end, &next); -  switch (tok) { -  case XML_TOK_BOM: -    /* If we are at the end of the buffer, this would cause the next stage, -       i.e. externalEntityInitProcessor3, to pass control directly to -       doContent (by detecting XML_TOK_NONE) without processing any xml text -       declaration - causing the error XML_ERROR_MISPLACED_XML_PI in doContent. -    */ -    if (next == end && endPtr) { -      *endPtr = next; -      return XML_ERROR_NONE; -    } -    start = next; -    break; -  case XML_TOK_PARTIAL: -    if (endPtr) { -      *endPtr = start; -      return XML_ERROR_NONE; -    } -    eventPtr = start; -    return XML_ERROR_UNCLOSED_TOKEN; -  case XML_TOK_PARTIAL_CHAR: -    if (endPtr) { -      *endPtr = start; -      return XML_ERROR_NONE; -    } -    eventPtr = start; -    return XML_ERROR_PARTIAL_CHAR; -  } -  processor = externalEntityInitProcessor3; -  return externalEntityInitProcessor3(parser, start, end, endPtr); -} - -static enum XML_Error FASTCALL -externalEntityInitProcessor3(XML_Parser parser, -                             const char *start, -                             const char *end, -                             const char **endPtr) -{ -  const char *next = start; /* XmlContentTok doesn't always set the last arg */ -  int tok = XmlContentTok(encoding, start, end, &next); -  switch (tok) { -  case XML_TOK_XML_DECL: -    { -      enum XML_Error result = processXmlDecl(parser, 1, start, next); -      if (result != XML_ERROR_NONE) -        return result; -      start = next; -    } -    break; -  case XML_TOK_PARTIAL: -    if (endPtr) { -      *endPtr = start; -      return XML_ERROR_NONE; -    } -    eventPtr = start; -    return XML_ERROR_UNCLOSED_TOKEN; -  case XML_TOK_PARTIAL_CHAR: -    if (endPtr) { -      *endPtr = start; -      return XML_ERROR_NONE; -    } -    eventPtr = start; -    return XML_ERROR_PARTIAL_CHAR; -  } -  processor = externalEntityContentProcessor; -  tagLevel = 1; -  return externalEntityContentProcessor(parser, start, end, endPtr); -} - -static enum XML_Error FASTCALL -externalEntityContentProcessor(XML_Parser parser, -                               const char *start, -                               const char *end, -                               const char **endPtr) -{ -  enum XML_Error result =  -    doContent(parser, 1, encoding, start, end, endPtr); -  if (result != XML_ERROR_NONE)  -    return result; -  if (!storeRawNames(parser)) -    return XML_ERROR_NO_MEMORY; -  return result; -} - -static enum XML_Error FASTCALL -doContent(XML_Parser parser, -          int startTagLevel, -          const ENCODING *enc, -          const char *s, -          const char *end, -          const char **nextPtr) -{ -  const char **eventPP; -  const char **eventEndPP; -  if (enc == encoding) { -    eventPP = &eventPtr; -    eventEndPP = &eventEndPtr; -  } -  else { -    eventPP = &(openInternalEntities->internalEventPtr); -    eventEndPP = &(openInternalEntities->internalEventEndPtr); -  } -  *eventPP = s; -  for (;;) { -    const char *next = s; /* XmlContentTok doesn't always set the last arg */ -    int tok = XmlContentTok(enc, s, end, &next); -    *eventEndPP = next; -    switch (tok) { -    case XML_TOK_TRAILING_CR: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      *eventEndPP = end; -      if (characterDataHandler) { -        XML_Char c = 0xA; -        characterDataHandler(handlerArg, &c, 1); -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, end); -      if (startTagLevel == 0) -        return XML_ERROR_NO_ELEMENTS; -      if (tagLevel != startTagLevel) -        return XML_ERROR_ASYNC_ENTITY; -      return XML_ERROR_NONE; -    case XML_TOK_NONE: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      if (startTagLevel > 0) { -        if (tagLevel != startTagLevel) -          return XML_ERROR_ASYNC_ENTITY; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_NO_ELEMENTS; -    case XML_TOK_INVALID: -      *eventPP = next; -      return XML_ERROR_INVALID_TOKEN; -    case XML_TOK_PARTIAL: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_UNCLOSED_TOKEN; -    case XML_TOK_PARTIAL_CHAR: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_PARTIAL_CHAR; -    case XML_TOK_ENTITY_REF: -      { -        const XML_Char *name; -        ENTITY *entity; -        XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, -                                              s + enc->minBytesPerChar, -                                              next - enc->minBytesPerChar); -        if (ch) { -          if (characterDataHandler) -            characterDataHandler(handlerArg, &ch, 1); -          else if (defaultHandler) -            reportDefault(parser, enc, s, next); -          break; -        } -        name = poolStoreString(&dtd.pool, enc, -                                s + enc->minBytesPerChar, -                                next - enc->minBytesPerChar); -        if (!name) -          return XML_ERROR_NO_MEMORY; -        entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); -        poolDiscard(&dtd.pool); -        /* First, determine if a check for an existing declaration is needed; -           if yes, check that the entity exists, and that it is internal, -           otherwise call the skipped entity or default handler. -        */ -        if (!dtd.hasParamEntityRefs || dtd.standalone) { -          if (!entity) -            return XML_ERROR_UNDEFINED_ENTITY; -          else if (!entity->is_internal) -            return XML_ERROR_ENTITY_DECLARED_IN_PE; -        } -        else if (!entity) { -          if (skippedEntityHandler) -            skippedEntityHandler(handlerArg, name, 0); -          else if (defaultHandler) -            reportDefault(parser, enc, s, next); -          break; -        } -        if (entity->open) -          return XML_ERROR_RECURSIVE_ENTITY_REF; -        if (entity->notation) -          return XML_ERROR_BINARY_ENTITY_REF; -        if (entity->textPtr) { -          enum XML_Error result; -          OPEN_INTERNAL_ENTITY openEntity; -          if (!defaultExpandInternalEntities) { -            if (skippedEntityHandler) -              skippedEntityHandler(handlerArg, entity->name, 0); -            else if (defaultHandler) -              reportDefault(parser, enc, s, next); -            break; -          } -          entity->open = XML_TRUE; -          openEntity.next = openInternalEntities; -          openInternalEntities = &openEntity; -          openEntity.entity = entity; -          openEntity.internalEventPtr = NULL; -          openEntity.internalEventEndPtr = NULL; -          result = doContent(parser, -                             tagLevel, -                             internalEncoding, -                             (char *)entity->textPtr, -                             (char *)(entity->textPtr + entity->textLen), -                             0); -          entity->open = XML_FALSE; -          openInternalEntities = openEntity.next; -          if (result) -            return result; -        } -        else if (externalEntityRefHandler) { -          const XML_Char *context; -          entity->open = XML_TRUE; -          context = getContext(parser); -          entity->open = XML_FALSE; -          if (!context) -            return XML_ERROR_NO_MEMORY; -          if (!externalEntityRefHandler(externalEntityRefHandlerArg, -                                        context, -                                        entity->base, -                                        entity->systemId, -                                        entity->publicId)) -            return XML_ERROR_EXTERNAL_ENTITY_HANDLING; -          poolDiscard(&tempPool); -        } -        else if (defaultHandler) -          reportDefault(parser, enc, s, next); -        break; -      } -    case XML_TOK_START_TAG_WITH_ATTS: -      if (!startElementHandler) { -        enum XML_Error result = storeAtts(parser, enc, s, 0, 0); -        if (result) -          return result; -      } -      /* fall through */ -    case XML_TOK_START_TAG_NO_ATTS: -      { -        TAG *tag; -        enum XML_Error result; -        XML_Char *toPtr; -        if (freeTagList) { -          tag = freeTagList; -          freeTagList = freeTagList->parent; -        } -        else { -          tag = MALLOC(sizeof(TAG)); -          if (!tag) -            return XML_ERROR_NO_MEMORY; -          tag->buf = MALLOC(INIT_TAG_BUF_SIZE); -          if (!tag->buf) { -            FREE(tag); -            return XML_ERROR_NO_MEMORY; -          } -          tag->bufEnd = tag->buf + INIT_TAG_BUF_SIZE; -        } -        tag->bindings = NULL; -        tag->parent = tagStack; -        tagStack = tag; -        tag->name.localPart = NULL; -        tag->name.prefix = NULL; -        tag->rawName = s + enc->minBytesPerChar; -        tag->rawNameLength = XmlNameLength(enc, tag->rawName); -        ++tagLevel; -        { -          const char *rawNameEnd = tag->rawName + tag->rawNameLength; -          const char *fromPtr = tag->rawName; -          toPtr = (XML_Char *)tag->buf; -          for (;;) { -            int bufSize; -            int convLen; -            XmlConvert(enc, -                       &fromPtr, rawNameEnd, -                       (ICHAR **)&toPtr, (ICHAR *)tag->bufEnd - 1); -            convLen = toPtr - (XML_Char *)tag->buf; -            if (fromPtr == rawNameEnd) { -              tag->name.strLen = convLen; -              break; -            } -            bufSize = (tag->bufEnd - tag->buf) << 1; -            { -              char *temp = REALLOC(tag->buf, bufSize); -              if (temp == NULL) -                return XML_ERROR_NO_MEMORY; -              tag->buf = temp; -              tag->bufEnd = temp + bufSize; -              toPtr = (XML_Char *)temp + convLen; -            } -          } -        } -        tag->name.str = (XML_Char *)tag->buf; -        *toPtr = XML_T('\0'); -        if (startElementHandler) { -          result = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings)); -          if (result) -            return result; -          startElementHandler(handlerArg, tag->name.str, -                              (const XML_Char **)atts); -        } -        else if (defaultHandler) -          reportDefault(parser, enc, s, next); -        poolClear(&tempPool); -        break; -      } -    case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: -      if (!startElementHandler) { -        enum XML_Error result = storeAtts(parser, enc, s, 0, 0); -        if (result) -          return result; -      } -      /* fall through */ -    case XML_TOK_EMPTY_ELEMENT_NO_ATTS: -      if (startElementHandler || endElementHandler) { -        const char *rawName = s + enc->minBytesPerChar; -        enum XML_Error result; -        BINDING *bindings = NULL; -        TAG_NAME name; -        name.str = poolStoreString(&tempPool, enc, rawName, -                                   rawName + XmlNameLength(enc, rawName)); -        if (!name.str) -          return XML_ERROR_NO_MEMORY; -        poolFinish(&tempPool); -        result = storeAtts(parser, enc, s, &name, &bindings); -        if (result) -          return result; -        poolFinish(&tempPool); -        if (startElementHandler) -          startElementHandler(handlerArg, name.str, (const XML_Char **)atts); -        if (endElementHandler) { -          if (startElementHandler) -            *eventPP = *eventEndPP; -          endElementHandler(handlerArg, name.str); -        } -        poolClear(&tempPool); -        while (bindings) { -          BINDING *b = bindings; -          if (endNamespaceDeclHandler) -            endNamespaceDeclHandler(handlerArg, b->prefix->name); -          bindings = bindings->nextTagBinding; -          b->nextTagBinding = freeBindingList; -          freeBindingList = b; -          b->prefix->binding = b->prevPrefixBinding; -        } -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, next); -      if (tagLevel == 0) -        return epilogProcessor(parser, next, end, nextPtr); -      break; -    case XML_TOK_END_TAG: -      if (tagLevel == startTagLevel) -        return XML_ERROR_ASYNC_ENTITY; -      else { -        int len; -        const char *rawName; -        TAG *tag = tagStack; -        tagStack = tag->parent; -        tag->parent = freeTagList; -        freeTagList = tag; -        rawName = s + enc->minBytesPerChar*2; -        len = XmlNameLength(enc, rawName); -        if (len != tag->rawNameLength -            || memcmp(tag->rawName, rawName, len) != 0) { -          *eventPP = rawName; -          return XML_ERROR_TAG_MISMATCH; -        } -        --tagLevel; -        if (endElementHandler) { -          const XML_Char *localPart; -          const XML_Char *prefix; -          XML_Char *uri; -          localPart = tag->name.localPart; -          if (ns && localPart) { -            /* localPart and prefix may have been overwritten in -               tag->name.str, since this points to the binding->uri -               buffer which gets re-used; so we have to add them again -            */ -            uri = (XML_Char *)tag->name.str + tag->name.uriLen; -            /* don't need to check for space - already done in storeAtts() */ -            while (*localPart) *uri++ = *localPart++; -            prefix = (XML_Char *)tag->name.prefix; -            if (ns_triplets && prefix) { -              *uri++ = namespaceSeparator; -              while (*prefix) *uri++ = *prefix++; -             } -            *uri = XML_T('\0'); -          } -          endElementHandler(handlerArg, tag->name.str); -        } -        else if (defaultHandler) -          reportDefault(parser, enc, s, next); -        while (tag->bindings) { -          BINDING *b = tag->bindings; -          if (endNamespaceDeclHandler) -            endNamespaceDeclHandler(handlerArg, b->prefix->name); -          tag->bindings = tag->bindings->nextTagBinding; -          b->nextTagBinding = freeBindingList; -          freeBindingList = b; -          b->prefix->binding = b->prevPrefixBinding; -        } -        if (tagLevel == 0) -          return epilogProcessor(parser, next, end, nextPtr); -      } -      break; -    case XML_TOK_CHAR_REF: -      { -        int n = XmlCharRefNumber(enc, s); -        if (n < 0) -          return XML_ERROR_BAD_CHAR_REF; -        if (characterDataHandler) { -          XML_Char buf[XML_ENCODE_MAX]; -          characterDataHandler(handlerArg, buf, XmlEncode(n, (ICHAR *)buf)); -        } -        else if (defaultHandler) -          reportDefault(parser, enc, s, next); -      } -      break; -    case XML_TOK_XML_DECL: -      return XML_ERROR_MISPLACED_XML_PI; -    case XML_TOK_DATA_NEWLINE: -      if (characterDataHandler) { -        XML_Char c = 0xA; -        characterDataHandler(handlerArg, &c, 1); -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, next); -      break; -    case XML_TOK_CDATA_SECT_OPEN: -      { -        enum XML_Error result; -        if (startCdataSectionHandler) -          startCdataSectionHandler(handlerArg); -#if 0 -        /* Suppose you doing a transformation on a document that involves -           changing only the character data.  You set up a defaultHandler -           and a characterDataHandler.  The defaultHandler simply copies -           characters through.  The characterDataHandler does the -           transformation and writes the characters out escaping them as -           necessary.  This case will fail to work if we leave out the -           following two lines (because & and < inside CDATA sections will -           be incorrectly escaped). - -           However, now we have a start/endCdataSectionHandler, so it seems -           easier to let the user deal with this. -        */ -        else if (characterDataHandler) -          characterDataHandler(handlerArg, dataBuf, 0); -#endif -        else if (defaultHandler) -          reportDefault(parser, enc, s, next); -        result = doCdataSection(parser, enc, &next, end, nextPtr); -        if (!next) { -          processor = cdataSectionProcessor; -          return result; -        } -      } -      break; -    case XML_TOK_TRAILING_RSQB: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      if (characterDataHandler) { -        if (MUST_CONVERT(enc, s)) { -          ICHAR *dataPtr = (ICHAR *)dataBuf; -          XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); -          characterDataHandler(handlerArg, dataBuf, -                               dataPtr - (ICHAR *)dataBuf); -        } -        else -          characterDataHandler(handlerArg, -                               (XML_Char *)s, -                               (XML_Char *)end - (XML_Char *)s); -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, end); -      if (startTagLevel == 0) { -        *eventPP = end; -        return XML_ERROR_NO_ELEMENTS; -      } -      if (tagLevel != startTagLevel) { -        *eventPP = end; -        return XML_ERROR_ASYNC_ENTITY; -      } -      return XML_ERROR_NONE; -    case XML_TOK_DATA_CHARS: -      if (characterDataHandler) { -        if (MUST_CONVERT(enc, s)) { -          for (;;) { -            ICHAR *dataPtr = (ICHAR *)dataBuf; -            XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); -            *eventEndPP = s; -            characterDataHandler(handlerArg, dataBuf, -                                 dataPtr - (ICHAR *)dataBuf); -            if (s == next) -              break; -            *eventPP = s; -          } -        } -        else -          characterDataHandler(handlerArg, -                               (XML_Char *)s, -                               (XML_Char *)next - (XML_Char *)s); -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, next); -      break; -    case XML_TOK_PI: -      if (!reportProcessingInstruction(parser, enc, s, next)) -        return XML_ERROR_NO_MEMORY; -      break; -    case XML_TOK_COMMENT: -      if (!reportComment(parser, enc, s, next)) -        return XML_ERROR_NO_MEMORY; -      break; -    default: -      if (defaultHandler) -        reportDefault(parser, enc, s, next); -      break; -    } -    *eventPP = s = next; -  } -  /* not reached */ -} - -/* If tagNamePtr is non-null, build a real list of attributes, -   otherwise just check the attributes for well-formedness. -*/ -static enum XML_Error FASTCALL -storeAtts(XML_Parser parser, const ENCODING *enc, -          const char *attStr, TAG_NAME *tagNamePtr, -          BINDING **bindingsPtr) -{ -  ELEMENT_TYPE *elementType = NULL; -  int nDefaultAtts = 0; -  const XML_Char **appAtts;   /* the attribute list for the application */ -  int attIndex = 0; -  int prefixLen; -  int i; -  int n; -  XML_Char *uri; -  int nPrefixes = 0; -  BINDING *binding; -  const XML_Char *localPart; - -  /* lookup the element type name */ -  if (tagNamePtr) { -    elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str,0); -    if (!elementType) { -      tagNamePtr->str = poolCopyString(&dtd.pool, tagNamePtr->str); -      if (!tagNamePtr->str) -        return XML_ERROR_NO_MEMORY; -      elementType = (ELEMENT_TYPE *)lookup(&dtd.elementTypes, tagNamePtr->str, -                                           sizeof(ELEMENT_TYPE)); -      if (!elementType) -        return XML_ERROR_NO_MEMORY; -      if (ns && !setElementTypePrefix(parser, elementType)) -        return XML_ERROR_NO_MEMORY; -    } -    nDefaultAtts = elementType->nDefaultAtts; -  } -  /* get the attributes from the tokenizer */ -  n = XmlGetAttributes(enc, attStr, attsSize, atts); -  if (n + nDefaultAtts > attsSize) { -    int oldAttsSize = attsSize; -    ATTRIBUTE *temp; -    attsSize = n + nDefaultAtts + INIT_ATTS_SIZE; -    temp = REALLOC((void *)atts, attsSize * sizeof(ATTRIBUTE)); -    if (temp == NULL) -      return XML_ERROR_NO_MEMORY; -    atts = temp; -    if (n > oldAttsSize) -      XmlGetAttributes(enc, attStr, n, atts); -  } -  appAtts = (const XML_Char **)atts; -  for (i = 0; i < n; i++) { -    /* add the name and value to the attribute list */ -    ATTRIBUTE_ID *attId = getAttributeId(parser, enc, atts[i].name, -                                         atts[i].name -                                         + XmlNameLength(enc, atts[i].name)); -    if (!attId) -      return XML_ERROR_NO_MEMORY; -    /* detect duplicate attributes */ -    if ((attId->name)[-1]) { -      if (enc == encoding) -        eventPtr = atts[i].name; -      return XML_ERROR_DUPLICATE_ATTRIBUTE; -    } -    (attId->name)[-1] = 1; -    appAtts[attIndex++] = attId->name; -    if (!atts[i].normalized) { -      enum XML_Error result; -      XML_Bool isCdata = XML_TRUE; - -      /* figure out whether declared as other than CDATA */ -      if (attId->maybeTokenized) { -        int j; -        for (j = 0; j < nDefaultAtts; j++) { -          if (attId == elementType->defaultAtts[j].id) { -            isCdata = elementType->defaultAtts[j].isCdata; -            break; -          } -        } -      } - -      /* normalize the attribute value */ -      result = storeAttributeValue(parser, enc, isCdata, -                                   atts[i].valuePtr, atts[i].valueEnd, -                                   &tempPool); -      if (result) -        return result; -      if (tagNamePtr) { -        appAtts[attIndex] = poolStart(&tempPool); -        poolFinish(&tempPool); -      } -      else -        poolDiscard(&tempPool); -    } -    else if (tagNamePtr) { -      /* the value did not need normalizing */ -      appAtts[attIndex] = poolStoreString(&tempPool, enc, atts[i].valuePtr, -                                          atts[i].valueEnd); -      if (appAtts[attIndex] == 0) -        return XML_ERROR_NO_MEMORY; -      poolFinish(&tempPool); -    } -    /* handle prefixed attribute names */ -    if (attId->prefix && tagNamePtr) { -      if (attId->xmlns) { -        /* deal with namespace declarations here */ -        if (!addBinding(parser, attId->prefix, attId, appAtts[attIndex], -                        bindingsPtr)) -          return XML_ERROR_NO_MEMORY; -        --attIndex; -      } -      else { -        /* deal with other prefixed names later */ -        attIndex++; -        nPrefixes++; -        (attId->name)[-1] = 2; -      } -    } -    else -      attIndex++; -  } -  if (tagNamePtr) { -    int j; -    nSpecifiedAtts = attIndex; -    if (elementType->idAtt && (elementType->idAtt->name)[-1]) { -      for (i = 0; i < attIndex; i += 2) -        if (appAtts[i] == elementType->idAtt->name) { -          idAttIndex = i; -          break; -        } -    } -    else -      idAttIndex = -1; -    /* do attribute defaulting */ -    for (j = 0; j < nDefaultAtts; j++) { -      const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + j; -      if (!(da->id->name)[-1] && da->value) { -        if (da->id->prefix) { -          if (da->id->xmlns) { -            if (!addBinding(parser, da->id->prefix, da->id, da->value, -                            bindingsPtr)) -              return XML_ERROR_NO_MEMORY; -          } -          else { -            (da->id->name)[-1] = 2; -            nPrefixes++; -            appAtts[attIndex++] = da->id->name; -            appAtts[attIndex++] = da->value; -          } -        } -        else { -          (da->id->name)[-1] = 1; -          appAtts[attIndex++] = da->id->name; -          appAtts[attIndex++] = da->value; -        } -      } -    } -    appAtts[attIndex] = 0; -  } -  i = 0; -  if (nPrefixes) { -    /* expand prefixed attribute names */ -    for (; i < attIndex; i += 2) { -      if (appAtts[i][-1] == 2) { -        ATTRIBUTE_ID *id; -        ((XML_Char *)(appAtts[i]))[-1] = 0; -        id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, appAtts[i], 0); -        if (id->prefix->binding) { -          int j; -          const BINDING *b = id->prefix->binding; -          const XML_Char *s = appAtts[i]; -          for (j = 0; j < b->uriLen; j++) { -            if (!poolAppendChar(&tempPool, b->uri[j])) -              return XML_ERROR_NO_MEMORY; -          } -          while (*s++ != XML_T(':')) -            ; -          do { -            if (!poolAppendChar(&tempPool, *s)) -              return XML_ERROR_NO_MEMORY; -          } while (*s++); -          if (ns_triplets) { -            tempPool.ptr[-1] = namespaceSeparator; -            s = b->prefix->name; -            do { -              if (!poolAppendChar(&tempPool, *s)) -                return XML_ERROR_NO_MEMORY; -            } while (*s++); -          } - -          appAtts[i] = poolStart(&tempPool); -          poolFinish(&tempPool); -        } -        if (!--nPrefixes) -          break; -      } -      else -        ((XML_Char *)(appAtts[i]))[-1] = 0; -    } -  } -  /* clear the flags that say whether attributes were specified */ -  for (; i < attIndex; i += 2) -    ((XML_Char *)(appAtts[i]))[-1] = 0; -  if (!tagNamePtr) -    return XML_ERROR_NONE; -  for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding) -    binding->attId->name[-1] = 0; -  /* expand the element type name */ -  if (elementType->prefix) { -    binding = elementType->prefix->binding; -    if (!binding) -      return XML_ERROR_NONE; -    localPart = tagNamePtr->str; -    while (*localPart++ != XML_T(':')) -      ; -  } -  else if (dtd.defaultPrefix.binding) { -    binding = dtd.defaultPrefix.binding; -    localPart = tagNamePtr->str; -  } -  else -    return XML_ERROR_NONE; -  prefixLen = 0; -  if (ns && ns_triplets && binding->prefix->name) { -    for (; binding->prefix->name[prefixLen++];) -      ; -  } -  tagNamePtr->localPart = localPart; -  tagNamePtr->uriLen = binding->uriLen; -  tagNamePtr->prefix = binding->prefix->name; -  tagNamePtr->prefixLen = prefixLen; -  for (i = 0; localPart[i++];) -    ; -  n = i + binding->uriLen + prefixLen; -  if (n > binding->uriAlloc) { -    TAG *p; -    uri = MALLOC((n + EXPAND_SPARE) * sizeof(XML_Char)); -    if (!uri) -      return XML_ERROR_NO_MEMORY; -    binding->uriAlloc = n + EXPAND_SPARE; -    memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char)); -    for (p = tagStack; p; p = p->parent) -      if (p->name.str == binding->uri) -        p->name.str = uri; -    FREE(binding->uri); -    binding->uri = uri; -  } -  uri = binding->uri + binding->uriLen; -  memcpy(uri, localPart, i * sizeof(XML_Char)); -  if (prefixLen) { -        uri = uri + (i - 1); -    if (namespaceSeparator) { *(uri) = namespaceSeparator; } -    memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char)); -  } -  tagNamePtr->str = binding->uri; -  return XML_ERROR_NONE; -} - -static int FASTCALL -addBinding(XML_Parser parser, PREFIX *prefix, const ATTRIBUTE_ID *attId, -           const XML_Char *uri, BINDING **bindingsPtr) -{ -  BINDING *b; -  int len; -  for (len = 0; uri[len]; len++) -    ; -  if (namespaceSeparator) -    len++; -  if (freeBindingList) { -    b = freeBindingList; -    if (len > b->uriAlloc) { -      XML_Char *temp = REALLOC(b->uri, -                               sizeof(XML_Char) * (len + EXPAND_SPARE)); -      if (temp == NULL) -        return 0; -      b->uri = temp; -      b->uriAlloc = len + EXPAND_SPARE; -    } -    freeBindingList = b->nextTagBinding; -  } -  else { -    b = MALLOC(sizeof(BINDING)); -    if (!b) -      return 0; -    b->uri = MALLOC(sizeof(XML_Char) * (len + EXPAND_SPARE)); -    if (!b->uri) { -      FREE(b); -      return 0; -    } -    b->uriAlloc = len + EXPAND_SPARE; -  } -  b->uriLen = len; -  memcpy(b->uri, uri, len * sizeof(XML_Char)); -  if (namespaceSeparator) -    b->uri[len - 1] = namespaceSeparator; -  b->prefix = prefix; -  b->attId = attId; -  b->prevPrefixBinding = prefix->binding; -  if (*uri == XML_T('\0') && prefix == &dtd.defaultPrefix) -    prefix->binding = NULL; -  else -    prefix->binding = b; -  b->nextTagBinding = *bindingsPtr; -  *bindingsPtr = b; -  if (startNamespaceDeclHandler) -    startNamespaceDeclHandler(handlerArg, prefix->name, -                              prefix->binding ? uri : 0); -  return 1; -} - -/* The idea here is to avoid using stack for each CDATA section when -   the whole file is parsed with one call. -*/ -static enum XML_Error FASTCALL -cdataSectionProcessor(XML_Parser parser, -                      const char *start, -                      const char *end, -                      const char **endPtr) -{ -  enum XML_Error result = doCdataSection(parser, encoding, &start, -                                         end, endPtr); -  if (start) { -    if (parentParser) {  /* we are parsing an external entity */ -      processor = externalEntityContentProcessor; -      return externalEntityContentProcessor(parser, start, end, endPtr); -    } -    else { -      processor = contentProcessor; -      return contentProcessor(parser, start, end, endPtr); -    } -  } -  return result; -} - -/* startPtr gets set to non-null is the section is closed, and to null if -   the section is not yet closed. -*/ -static enum XML_Error FASTCALL -doCdataSection(XML_Parser parser, -               const ENCODING *enc, -               const char **startPtr, -               const char *end, -               const char **nextPtr) -{ -  const char *s = *startPtr; -  const char **eventPP; -  const char **eventEndPP; -  if (enc == encoding) { -    eventPP = &eventPtr; -    *eventPP = s; -    eventEndPP = &eventEndPtr; -  } -  else { -    eventPP = &(openInternalEntities->internalEventPtr); -    eventEndPP = &(openInternalEntities->internalEventEndPtr); -  } -  *eventPP = s; -  *startPtr = NULL; -  for (;;) { -    const char *next; -    int tok = XmlCdataSectionTok(enc, s, end, &next); -    *eventEndPP = next; -    switch (tok) { -    case XML_TOK_CDATA_SECT_CLOSE: -      if (endCdataSectionHandler) -        endCdataSectionHandler(handlerArg); -#if 0 -      /* see comment under XML_TOK_CDATA_SECT_OPEN */ -      else if (characterDataHandler) -        characterDataHandler(handlerArg, dataBuf, 0); -#endif -      else if (defaultHandler) -        reportDefault(parser, enc, s, next); -      *startPtr = next; -      return XML_ERROR_NONE; -    case XML_TOK_DATA_NEWLINE: -      if (characterDataHandler) { -        XML_Char c = 0xA; -        characterDataHandler(handlerArg, &c, 1); -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, next); -      break; -    case XML_TOK_DATA_CHARS: -      if (characterDataHandler) { -        if (MUST_CONVERT(enc, s)) { -          for (;;) { -            ICHAR *dataPtr = (ICHAR *)dataBuf; -            XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd); -            *eventEndPP = next; -            characterDataHandler(handlerArg, dataBuf, -                                 dataPtr - (ICHAR *)dataBuf); -            if (s == next) -              break; -            *eventPP = s; -          } -        } -        else -          characterDataHandler(handlerArg, -                               (XML_Char *)s, -                               (XML_Char *)next - (XML_Char *)s); -      } -      else if (defaultHandler) -        reportDefault(parser, enc, s, next); -      break; -    case XML_TOK_INVALID: -      *eventPP = next; -      return XML_ERROR_INVALID_TOKEN; -    case XML_TOK_PARTIAL_CHAR: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_PARTIAL_CHAR; -    case XML_TOK_PARTIAL: -    case XML_TOK_NONE: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_UNCLOSED_CDATA_SECTION; -    default: -      *eventPP = next; -      return XML_ERROR_UNEXPECTED_STATE; -    } -    *eventPP = s = next; -  } -  /* not reached */ -} - -#ifdef XML_DTD - -/* The idea here is to avoid using stack for each IGNORE section when -   the whole file is parsed with one call. -*/ -static enum XML_Error FASTCALL -ignoreSectionProcessor(XML_Parser parser, -                       const char *start, -                       const char *end, -                       const char **endPtr) -{ -  enum XML_Error result = doIgnoreSection(parser, encoding, &start, -                                          end, endPtr); -  if (start) { -    processor = prologProcessor; -    return prologProcessor(parser, start, end, endPtr); -  } -  return result; -} - -/* startPtr gets set to non-null is the section is closed, and to null -   if the section is not yet closed. -*/ -static enum XML_Error FASTCALL -doIgnoreSection(XML_Parser parser, -                const ENCODING *enc, -                const char **startPtr, -                const char *end, -                const char **nextPtr) -{ -  const char *next; -  int tok; -  const char *s = *startPtr; -  const char **eventPP; -  const char **eventEndPP; -  if (enc == encoding) { -    eventPP = &eventPtr; -    *eventPP = s; -    eventEndPP = &eventEndPtr; -  } -  else { -    eventPP = &(openInternalEntities->internalEventPtr); -    eventEndPP = &(openInternalEntities->internalEventEndPtr); -  } -  *eventPP = s; -  *startPtr = NULL; -  tok = XmlIgnoreSectionTok(enc, s, end, &next); -  *eventEndPP = next; -  switch (tok) { -  case XML_TOK_IGNORE_SECT: -    if (defaultHandler) -      reportDefault(parser, enc, s, next); -    *startPtr = next; -    return XML_ERROR_NONE; -  case XML_TOK_INVALID: -    *eventPP = next; -    return XML_ERROR_INVALID_TOKEN; -  case XML_TOK_PARTIAL_CHAR: -    if (nextPtr) { -      *nextPtr = s; -      return XML_ERROR_NONE; -    } -    return XML_ERROR_PARTIAL_CHAR; -  case XML_TOK_PARTIAL: -  case XML_TOK_NONE: -    if (nextPtr) { -      *nextPtr = s; -      return XML_ERROR_NONE; -    } -    return XML_ERROR_SYNTAX; /* XML_ERROR_UNCLOSED_IGNORE_SECTION */ -  default: -    *eventPP = next; -    return XML_ERROR_UNEXPECTED_STATE; -  } -  /* not reached */ -} - -#endif /* XML_DTD */ - -static enum XML_Error FASTCALL -initializeEncoding(XML_Parser parser) -{ -  const char *s; -#ifdef XML_UNICODE -  char encodingBuf[128]; -  if (!protocolEncodingName) -    s = NULL; -  else { -    int i; -    for (i = 0; protocolEncodingName[i]; i++) { -      if (i == sizeof(encodingBuf) - 1 -          || (protocolEncodingName[i] & ~0x7f) != 0) { -        encodingBuf[0] = '\0'; -        break; -      } -      encodingBuf[i] = (char)protocolEncodingName[i]; -    } -    encodingBuf[i] = '\0'; -    s = encodingBuf; -  } -#else -  s = protocolEncodingName; -#endif -  if ((ns ? XmlInitEncodingNS : XmlInitEncoding)(&initEncoding, &encoding, s)) -    return XML_ERROR_NONE; -  return handleUnknownEncoding(parser, protocolEncodingName); -} - -static enum XML_Error FASTCALL -processXmlDecl(XML_Parser parser, int isGeneralTextEntity, -               const char *s, const char *next) -{ -  const char *encodingName = NULL; -  const XML_Char *storedEncName = NULL; -  const ENCODING *newEncoding = NULL; -  const char *version = NULL; -  const char *versionend; -  const XML_Char *storedversion = NULL; -  int standalone = -1; -  if (!(ns -        ? XmlParseXmlDeclNS -        : XmlParseXmlDecl)(isGeneralTextEntity, -                           encoding, -                           s, -                           next, -                           &eventPtr, -                           &version, -                           &versionend, -                           &encodingName, -                           &newEncoding, -                           &standalone)) -    return XML_ERROR_SYNTAX; -  if (!isGeneralTextEntity && standalone == 1) { -    dtd.standalone = XML_TRUE; -#ifdef XML_DTD -    if (paramEntityParsing == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE) -      paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER; -#endif /* XML_DTD */ -  } -  if (xmlDeclHandler) { -    if (encodingName != NULL) { -      storedEncName = poolStoreString(&temp2Pool, -                                      encoding, -                                      encodingName, -                                      encodingName -                                      + XmlNameLength(encoding, encodingName)); -      if (!storedEncName) -              return XML_ERROR_NO_MEMORY; -      poolFinish(&temp2Pool); -    } -    if (version) { -      storedversion = poolStoreString(&temp2Pool, -                                      encoding, -                                      version, -                                      versionend - encoding->minBytesPerChar); -      if (!storedversion) -        return XML_ERROR_NO_MEMORY; -    } -    xmlDeclHandler(handlerArg, storedversion, storedEncName, standalone); -  } -  else if (defaultHandler) -    reportDefault(parser, encoding, s, next); -  if (protocolEncodingName == NULL) { -    if (newEncoding) { -      if (newEncoding->minBytesPerChar != encoding->minBytesPerChar) { -        eventPtr = encodingName; -        return XML_ERROR_INCORRECT_ENCODING; -      } -      encoding = newEncoding; -    } -    else if (encodingName) { -      enum XML_Error result; -      if (!storedEncName) { -        storedEncName = poolStoreString( -          &temp2Pool, encoding, encodingName, -          encodingName + XmlNameLength(encoding, encodingName)); -        if (!storedEncName) -          return XML_ERROR_NO_MEMORY; -      } -      result = handleUnknownEncoding(parser, storedEncName); -      poolClear(&temp2Pool); -      if (result == XML_ERROR_UNKNOWN_ENCODING) -        eventPtr = encodingName; -      return result; -    } -  } - -  if (storedEncName || storedversion) -    poolClear(&temp2Pool); - -  return XML_ERROR_NONE; -} - -static enum XML_Error FASTCALL -handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) -{ -  if (unknownEncodingHandler) { -    XML_Encoding info; -    int i; -    for (i = 0; i < 256; i++) -      info.map[i] = -1; -    info.convert = NULL; -    info.data = NULL; -    info.release = NULL; -    if (unknownEncodingHandler(unknownEncodingHandlerData, encodingName, -                               &info)) { -      ENCODING *enc; -      unknownEncodingMem = MALLOC(XmlSizeOfUnknownEncoding()); -      if (!unknownEncodingMem) { -        if (info.release) -          info.release(info.data); -        return XML_ERROR_NO_MEMORY; -      } -      enc = (ns -             ? XmlInitUnknownEncodingNS -             : XmlInitUnknownEncoding)(unknownEncodingMem, -                                       info.map, -                                       info.convert, -                                       info.data); -      if (enc) { -        unknownEncodingData = info.data; -        unknownEncodingRelease = info.release; -        encoding = enc; -        return XML_ERROR_NONE; -      } -    } -    if (info.release != NULL) -      info.release(info.data); -  } -  return XML_ERROR_UNKNOWN_ENCODING; -} - -static enum XML_Error FASTCALL -prologInitProcessor(XML_Parser parser, -                    const char *s, -                    const char *end, -                    const char **nextPtr) -{ -  enum XML_Error result = initializeEncoding(parser); -  if (result != XML_ERROR_NONE) -    return result; -  processor = prologProcessor; -  return prologProcessor(parser, s, end, nextPtr); -} - -#ifdef XML_DTD - -static enum XML_Error FASTCALL -externalParEntInitProcessor(XML_Parser parser, -                            const char *s, -                            const char *end, -                            const char **nextPtr) -{ -  enum XML_Error result = initializeEncoding(parser); -  if (result != XML_ERROR_NONE) -    return result; - -  /* we know now that XML_Parse(Buffer) has been called, -     so we consider the external parameter entity read */ -  dtd.paramEntityRead = XML_TRUE; - -  if (prologState.inEntityValue) { -    processor = entityValueInitProcessor; -    return entityValueInitProcessor(parser, s, end, nextPtr); -  } -  else { -    processor = externalParEntProcessor; -    return externalParEntProcessor(parser, s, end, nextPtr); -  } -} - -static enum XML_Error FASTCALL -entityValueInitProcessor(XML_Parser parser, -                         const char *s, -                         const char *end, -                         const char **nextPtr) -{ -  const char *start = s; -  const char *next = s; -  int tok; - -  for (;;) { -    tok = XmlPrologTok(encoding, start, end, &next); -    if (tok <= 0) { -      if (nextPtr != 0 && tok != XML_TOK_INVALID) { -              *nextPtr = s; -              return XML_ERROR_NONE; -      } -      switch (tok) { -      case XML_TOK_INVALID: -              return XML_ERROR_INVALID_TOKEN; -      case XML_TOK_PARTIAL: -              return XML_ERROR_UNCLOSED_TOKEN; -      case XML_TOK_PARTIAL_CHAR: -              return XML_ERROR_PARTIAL_CHAR; -      case XML_TOK_NONE:   /* start == end */ -      default: -        break; -      } -      return storeEntityValue(parser, encoding, s, end); -    } -    else if (tok == XML_TOK_XML_DECL) { -      enum XML_Error result = processXmlDecl(parser, 0, start, next); -            if (result != XML_ERROR_NONE) -              return result; -      if (nextPtr) *nextPtr = next; -      /* stop scanning for text declaration - we found one */ -      processor = entityValueProcessor; -      return entityValueProcessor(parser, next, end, nextPtr); -    } -    /* If we are at the end of the buffer, this would cause XmlPrologTok to -       return XML_TOK_NONE on the next call, which would then cause the -       function to exit with *nextPtr set to s - that is what we want for other -       tokens, but not for the BOM - we would rather like to skip it; -       then, when this routine is entered the next time, XmlPrologTok will -       return XML_TOK_INVALID, since the BOM is still in the buffer -    */ -    else if (tok == XML_TOK_BOM && next == end && nextPtr) { -      *nextPtr = next; -      return XML_ERROR_NONE; -    } -    start = next; -  } -} - -static enum XML_Error FASTCALL -externalParEntProcessor(XML_Parser parser, -                        const char *s, -                        const char *end, -                        const char **nextPtr) -{ -  const char *start = s; -  const char *next = s; -  int tok; - -  tok = XmlPrologTok(encoding, start, end, &next); -  if (tok <= 0) { -    if (nextPtr != 0 && tok != XML_TOK_INVALID) { -      *nextPtr = s; -      return XML_ERROR_NONE; -    } -    switch (tok) { -    case XML_TOK_INVALID: -      return XML_ERROR_INVALID_TOKEN; -    case XML_TOK_PARTIAL: -      return XML_ERROR_UNCLOSED_TOKEN; -    case XML_TOK_PARTIAL_CHAR: -      return XML_ERROR_PARTIAL_CHAR; -    case XML_TOK_NONE:   /* start == end */ -    default: -      break; -    } -  } -  /* This would cause the next stage, i.e. doProlog to be passed XML_TOK_BOM. -     However, when parsing an external subset, doProlog will not accept a BOM -     as valid, and report a syntax error, so we have to skip the BOM -  */ -  else if (tok == XML_TOK_BOM) { -    s = next; -    tok = XmlPrologTok(encoding, s, end, &next); -  } - -  processor = prologProcessor; -  return doProlog(parser, encoding, s, end, tok, next, nextPtr); -} - -static enum XML_Error FASTCALL -entityValueProcessor(XML_Parser parser, -                     const char *s, -                     const char *end, -                     const char **nextPtr) -{ -  const char *start = s; -  const char *next = s; -  const ENCODING *enc = encoding; -  int tok; - -  for (;;) { -    tok = XmlPrologTok(enc, start, end, &next); -    if (tok <= 0) { -      if (nextPtr != 0 && tok != XML_TOK_INVALID) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      switch (tok) { -      case XML_TOK_INVALID: -              return XML_ERROR_INVALID_TOKEN; -      case XML_TOK_PARTIAL: -              return XML_ERROR_UNCLOSED_TOKEN; -      case XML_TOK_PARTIAL_CHAR: -              return XML_ERROR_PARTIAL_CHAR; -      case XML_TOK_NONE:   /* start == end */ -      default: -        break; -      } -      return storeEntityValue(parser, enc, s, end); -    } -    start = next; -  } -} - -#endif /* XML_DTD */ - -static enum XML_Error FASTCALL -prologProcessor(XML_Parser parser, -                const char *s, -                const char *end, -                const char **nextPtr) -{ -  const char *next = s; -  int tok = XmlPrologTok(encoding, s, end, &next); -  return doProlog(parser, encoding, s, end, tok, next, nextPtr); -} - -static enum XML_Error FASTCALL -doProlog(XML_Parser parser, -         const ENCODING *enc, -         const char *s, -         const char *end, -         int tok, -         const char *next, -         const char **nextPtr) -{ -#ifdef XML_DTD -  static const XML_Char externalSubsetName[] = { '#' , '\0' }; -#endif /* XML_DTD */ -  static const XML_Char atypeCDATA[] = { 'C', 'D', 'A', 'T', 'A', '\0' }; -  static const XML_Char atypeID[] = { 'I', 'D', '\0' }; -  static const XML_Char atypeIDREF[] = { 'I', 'D', 'R', 'E', 'F', '\0' }; -  static const XML_Char atypeIDREFS[] = { 'I', 'D', 'R', 'E', 'F', 'S', '\0' }; -  static const XML_Char atypeENTITY[] = { 'E', 'N', 'T', 'I', 'T', 'Y', '\0' }; -  static const XML_Char atypeENTITIES[] = -      { 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S', '\0' }; -  static const XML_Char atypeNMTOKEN[] = { -      'N', 'M', 'T', 'O', 'K', 'E', 'N', '\0' }; -  static const XML_Char atypeNMTOKENS[] = { -      'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S', '\0' }; -  static const XML_Char notationPrefix[] = { -      'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', '(', '\0' }; -  static const XML_Char enumValueSep[] = { '|', '\0' }; -  static const XML_Char enumValueStart[] = { '(', '\0' }; - -  const char **eventPP; -  const char **eventEndPP; -  enum XML_Content_Quant quant; - -  if (enc == encoding) { -    eventPP = &eventPtr; -    eventEndPP = &eventEndPtr; -  } -  else { -    eventPP = &(openInternalEntities->internalEventPtr); -    eventEndPP = &(openInternalEntities->internalEventEndPtr); -  } -  for (;;) { -    int role; -    XML_Bool handleDefault = XML_TRUE; -    *eventPP = s; -    *eventEndPP = next; -    if (tok <= 0) { -      if (nextPtr != 0 && tok != XML_TOK_INVALID) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      switch (tok) { -      case XML_TOK_INVALID: -        *eventPP = next; -        return XML_ERROR_INVALID_TOKEN; -      case XML_TOK_PARTIAL: -        return XML_ERROR_UNCLOSED_TOKEN; -      case XML_TOK_PARTIAL_CHAR: -        return XML_ERROR_PARTIAL_CHAR; -      case XML_TOK_NONE: -#ifdef XML_DTD -        if (enc != encoding) -          return XML_ERROR_NONE; -        if (isParamEntity) { -          if (XmlTokenRole(&prologState, XML_TOK_NONE, end, end, enc) -              == XML_ROLE_ERROR) -            return XML_ERROR_SYNTAX; -          return XML_ERROR_NONE; -        } -#endif /* XML_DTD */ -        return XML_ERROR_NO_ELEMENTS; -      default: -        tok = -tok; -        next = end; -        break; -      } -    } -    role = XmlTokenRole(&prologState, tok, s, next, enc); -    switch (role) { -    case XML_ROLE_XML_DECL: -      { -        enum XML_Error result = processXmlDecl(parser, 0, s, next); -        if (result != XML_ERROR_NONE) -          return result; -        enc = encoding; -        handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_DOCTYPE_NAME: -      if (startDoctypeDeclHandler) { -        doctypeName = poolStoreString(&tempPool, enc, s, next); -        if (!doctypeName) -          return XML_ERROR_NO_MEMORY; -        poolFinish(&tempPool); -        doctypePubid = NULL; -        handleDefault = XML_FALSE; -      } -      doctypeSysid = NULL; /* always initialize to NULL */ -      break; -    case XML_ROLE_DOCTYPE_INTERNAL_SUBSET: -      if (startDoctypeDeclHandler) { -        startDoctypeDeclHandler(handlerArg, doctypeName, doctypeSysid, -                                doctypePubid, 1); -        doctypeName = NULL; -        poolClear(&tempPool); -        handleDefault = XML_FALSE; -      } -      break; -#ifdef XML_DTD -    case XML_ROLE_TEXT_DECL: -      { -        enum XML_Error result = processXmlDecl(parser, 1, s, next); -        if (result != XML_ERROR_NONE) -          return result; -        enc = encoding; -        handleDefault = XML_FALSE; -      } -      break; -#endif /* XML_DTD */ -    case XML_ROLE_DOCTYPE_PUBLIC_ID: -#ifdef XML_DTD -      useForeignDTD = XML_FALSE; -#endif /* XML_DTD */ -      dtd.hasParamEntityRefs = XML_TRUE; -      if (startDoctypeDeclHandler) { -        doctypePubid = poolStoreString(&tempPool, enc, -                                       s + enc->minBytesPerChar, -                                       next - enc->minBytesPerChar); -        if (!doctypePubid) -          return XML_ERROR_NO_MEMORY; -        poolFinish(&tempPool); -        handleDefault = XML_FALSE; -      } -#ifdef XML_DTD -      declEntity = (ENTITY *)lookup(&dtd.paramEntities, -                                    externalSubsetName, -                                    sizeof(ENTITY)); -      if (!declEntity) -        return XML_ERROR_NO_MEMORY; -#endif /* XML_DTD */ -      /* fall through */ -    case XML_ROLE_ENTITY_PUBLIC_ID: -      if (!XmlIsPublicId(enc, s, next, eventPP)) -        return XML_ERROR_SYNTAX; -      if (dtd.keepProcessing && declEntity) { -        XML_Char *tem = poolStoreString(&dtd.pool, -                                        enc, -                                        s + enc->minBytesPerChar, -                                        next - enc->minBytesPerChar); -        if (!tem) -          return XML_ERROR_NO_MEMORY; -        normalizePublicId(tem); -        declEntity->publicId = tem; -        poolFinish(&dtd.pool); -        if (entityDeclHandler) -          handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_DOCTYPE_CLOSE: -      if (doctypeName) { -        startDoctypeDeclHandler(handlerArg, doctypeName, -                                doctypeSysid, doctypePubid, 0); -        poolClear(&tempPool); -        handleDefault = XML_FALSE; -      } -      /* doctypeSysid will be non-NULL in the case of a previous -         XML_ROLE_DOCTYPE_SYSTEM_ID, even if startDoctypeDeclHandler -         was not set, indicating an external subset -      */ -#ifdef XML_DTD  -      if (doctypeSysid || useForeignDTD) { -        dtd.hasParamEntityRefs = XML_TRUE; /* when docTypeSysid == NULL */ -        if (paramEntityParsing && externalEntityRefHandler) { -          ENTITY *entity = (ENTITY *)lookup(&dtd.paramEntities, -                                            externalSubsetName, -                                            sizeof(ENTITY)); -          if (!entity) -            return XML_ERROR_NO_MEMORY; -          if (useForeignDTD)  -            entity->base = curBase; -          dtd.paramEntityRead = XML_FALSE; -          if (!externalEntityRefHandler(externalEntityRefHandlerArg, -                                        0, -                                        entity->base, -                                        entity->systemId, -                                        entity->publicId)) -            return XML_ERROR_EXTERNAL_ENTITY_HANDLING; -          if (dtd.paramEntityRead && -              !dtd.standalone && -              notStandaloneHandler && -              !notStandaloneHandler(handlerArg)) -            return XML_ERROR_NOT_STANDALONE; -          /* end of DTD - no need to update dtd.keepProcessing */ -        } -        useForeignDTD = XML_FALSE; -      } -#endif /* XML_DTD */ -      if (endDoctypeDeclHandler) { -        endDoctypeDeclHandler(handlerArg); -        handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_INSTANCE_START: -#ifdef XML_DTD -      /* if there is no DOCTYPE declaration then now is the  -         last chance to read the foreign DTD -      */ -      if (useForeignDTD) {  -        dtd.hasParamEntityRefs = XML_TRUE; -        if (paramEntityParsing && externalEntityRefHandler) { -          ENTITY *entity = (ENTITY *)lookup(&dtd.paramEntities, -                                            externalSubsetName, -                                            sizeof(ENTITY)); -          if (!entity) -            return XML_ERROR_NO_MEMORY; -          entity->base = curBase; -          dtd.paramEntityRead = XML_FALSE; -          if (!externalEntityRefHandler(externalEntityRefHandlerArg, -                                        0, -                                        entity->base, -                                        entity->systemId, -                                        entity->publicId)) -            return XML_ERROR_EXTERNAL_ENTITY_HANDLING; -          if (dtd.paramEntityRead && -              !dtd.standalone && -              notStandaloneHandler && -              !notStandaloneHandler(handlerArg)) -            return XML_ERROR_NOT_STANDALONE; -          /* end of DTD - no need to update dtd.keepProcessing */ -        } -      }   -#endif /* XML_DTD */ -      processor = contentProcessor; -      return contentProcessor(parser, s, end, nextPtr); -    case XML_ROLE_ATTLIST_ELEMENT_NAME: -      declElementType = getElementType(parser, enc, s, next); -      if (!declElementType) -        return XML_ERROR_NO_MEMORY; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_NAME: -      declAttributeId = getAttributeId(parser, enc, s, next); -      if (!declAttributeId) -        return XML_ERROR_NO_MEMORY; -      declAttributeIsCdata = XML_FALSE; -      declAttributeType = NULL; -      declAttributeIsId = XML_FALSE; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_CDATA: -      declAttributeIsCdata = XML_TRUE; -      declAttributeType = atypeCDATA; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_ID: -      declAttributeIsId = XML_TRUE; -      declAttributeType = atypeID; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_IDREF: -      declAttributeType = atypeIDREF; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_IDREFS: -      declAttributeType = atypeIDREFS; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_ENTITY: -      declAttributeType = atypeENTITY; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES: -      declAttributeType = atypeENTITIES; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN: -      declAttributeType = atypeNMTOKEN; -      goto checkAttListDeclHandler; -    case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS: -      declAttributeType = atypeNMTOKENS; -    checkAttListDeclHandler: -      if (dtd.keepProcessing && attlistDeclHandler) -        handleDefault = XML_FALSE; -      break; -    case XML_ROLE_ATTRIBUTE_ENUM_VALUE: -    case XML_ROLE_ATTRIBUTE_NOTATION_VALUE: -      if (dtd.keepProcessing && attlistDeclHandler) { -        const XML_Char *prefix; -        if (declAttributeType) { -          prefix = enumValueSep; -        } -        else { -          prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE -                    ? notationPrefix -                    : enumValueStart); -        } -        if (!poolAppendString(&tempPool, prefix)) -          return XML_ERROR_NO_MEMORY; -        if (!poolAppend(&tempPool, enc, s, next)) -          return XML_ERROR_NO_MEMORY; -        declAttributeType = tempPool.start; -        handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE: -    case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE: -      if (dtd.keepProcessing) { -        if (!defineAttribute(declElementType, declAttributeId, -                              declAttributeIsCdata, declAttributeIsId, 0, -                              parser)) -          return XML_ERROR_NO_MEMORY; -        if (attlistDeclHandler && declAttributeType) { -          if (*declAttributeType == XML_T('(') -              || (*declAttributeType == XML_T('N') -                  && declAttributeType[1] == XML_T('O'))) { -            /* Enumerated or Notation type */ -            if (!poolAppendChar(&tempPool, XML_T(')')) -                || !poolAppendChar(&tempPool, XML_T('\0'))) -              return XML_ERROR_NO_MEMORY; -            declAttributeType = tempPool.start; -            poolFinish(&tempPool); -          } -          *eventEndPP = s; -          attlistDeclHandler(handlerArg, declElementType->name, -                             declAttributeId->name, declAttributeType, -                             0, role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE); -          poolClear(&tempPool); -          handleDefault = XML_FALSE; -        } -      } -      break; -    case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE: -    case XML_ROLE_FIXED_ATTRIBUTE_VALUE: -      if (dtd.keepProcessing) { -        const XML_Char *attVal; -        enum XML_Error result -          = storeAttributeValue(parser, enc, declAttributeIsCdata, -                                s + enc->minBytesPerChar, -                                next - enc->minBytesPerChar, -                                &dtd.pool); -        if (result) -          return result; -        attVal = poolStart(&dtd.pool); -        poolFinish(&dtd.pool); -        /* ID attributes aren't allowed to have a default */ -        if (!defineAttribute(declElementType, declAttributeId, -                             declAttributeIsCdata, XML_FALSE, attVal, parser)) -          return XML_ERROR_NO_MEMORY; -        if (attlistDeclHandler && declAttributeType) { -          if (*declAttributeType == XML_T('(') -              || (*declAttributeType == XML_T('N') -                  && declAttributeType[1] == XML_T('O'))) { -            /* Enumerated or Notation type */ -            if (!poolAppendChar(&tempPool, XML_T(')')) -                || !poolAppendChar(&tempPool, XML_T('\0'))) -              return XML_ERROR_NO_MEMORY; -            declAttributeType = tempPool.start; -            poolFinish(&tempPool); -          } -          *eventEndPP = s; -          attlistDeclHandler(handlerArg, declElementType->name, -                             declAttributeId->name, declAttributeType, -                             attVal, -                             role == XML_ROLE_FIXED_ATTRIBUTE_VALUE); -          poolClear(&tempPool); -          handleDefault = XML_FALSE; -        } -      } -      break; -    case XML_ROLE_ENTITY_VALUE: -      if (dtd.keepProcessing) { -        enum XML_Error result = storeEntityValue(parser, enc, -                                            s + enc->minBytesPerChar, -                                            next - enc->minBytesPerChar); -        if (declEntity) { -          declEntity->textPtr = poolStart(&dtd.entityValuePool); -          declEntity->textLen = poolLength(&dtd.entityValuePool); -          poolFinish(&dtd.entityValuePool); -          if (entityDeclHandler) { -            *eventEndPP = s; -            entityDeclHandler(handlerArg, -                              declEntity->name, -                              declEntity->is_param, -                              declEntity->textPtr, -                              declEntity->textLen, -                              curBase, 0, 0, 0); -            handleDefault = XML_FALSE; -          } -        } -        else -          poolDiscard(&dtd.entityValuePool); -        if (result != XML_ERROR_NONE) -          return result; -      } -      break; -    case XML_ROLE_DOCTYPE_SYSTEM_ID: -#ifdef XML_DTD -      useForeignDTD = XML_FALSE; -#endif /* XML_DTD */ -      dtd.hasParamEntityRefs = XML_TRUE; -      if (startDoctypeDeclHandler) { -        doctypeSysid = poolStoreString(&tempPool, enc, -                                       s + enc->minBytesPerChar, -                                       next - enc->minBytesPerChar); -        if (doctypeSysid == NULL) -          return XML_ERROR_NO_MEMORY; -        poolFinish(&tempPool); -        handleDefault = XML_FALSE; -      } -#ifdef XML_DTD -      else -        /* use externalSubsetName to make doctypeSysid non-NULL -           for the case where no startDoctypeDeclHandler is set */ -        doctypeSysid = externalSubsetName; -#endif /* XML_DTD */ -      if (!dtd.standalone -#ifdef XML_DTD -          && !paramEntityParsing -#endif /* XML_DTD */ -          && notStandaloneHandler -          && !notStandaloneHandler(handlerArg)) -        return XML_ERROR_NOT_STANDALONE; -#ifndef XML_DTD -      break; -#else /* XML_DTD */ -      if (!declEntity) { -        declEntity = (ENTITY *)lookup(&dtd.paramEntities, -                                      externalSubsetName, -                                      sizeof(ENTITY)); -        if (!declEntity) -          return XML_ERROR_NO_MEMORY; -        declEntity->publicId = NULL; -      } -      /* fall through */ -#endif /* XML_DTD */ -    case XML_ROLE_ENTITY_SYSTEM_ID: -      if (dtd.keepProcessing && declEntity) { -        declEntity->systemId = poolStoreString(&dtd.pool, enc, -                                               s + enc->minBytesPerChar, -                                               next - enc->minBytesPerChar); -        if (!declEntity->systemId) -          return XML_ERROR_NO_MEMORY; -        declEntity->base = curBase; -        poolFinish(&dtd.pool); -        if (entityDeclHandler) -          handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_ENTITY_COMPLETE: -      if (dtd.keepProcessing && declEntity && entityDeclHandler) { -        *eventEndPP = s; -        entityDeclHandler(handlerArg, -                          declEntity->name, -                          declEntity->is_param, -                          0,0, -                          declEntity->base, -                          declEntity->systemId, -                          declEntity->publicId, -                          0); -        handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_ENTITY_NOTATION_NAME: -      if (dtd.keepProcessing && declEntity) { -        declEntity->notation = poolStoreString(&dtd.pool, enc, s, next); -        if (!declEntity->notation) -          return XML_ERROR_NO_MEMORY; -        poolFinish(&dtd.pool); -        if (unparsedEntityDeclHandler) { -          *eventEndPP = s; -          unparsedEntityDeclHandler(handlerArg, -                                    declEntity->name, -                                    declEntity->base, -                                    declEntity->systemId, -                                    declEntity->publicId, -                                    declEntity->notation); -          handleDefault = XML_FALSE; -        } -        else if (entityDeclHandler) { -          *eventEndPP = s; -          entityDeclHandler(handlerArg, -                            declEntity->name, -                            0,0,0, -                            declEntity->base, -                            declEntity->systemId, -                            declEntity->publicId, -                            declEntity->notation); -          handleDefault = XML_FALSE; -        } -      } -      break; -    case XML_ROLE_GENERAL_ENTITY_NAME: -      { -        if (XmlPredefinedEntityName(enc, s, next)) { -          declEntity = NULL; -          break; -        } -        if (dtd.keepProcessing) { -          const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next); -          if (!name) -            return XML_ERROR_NO_MEMORY; -          declEntity = (ENTITY *)lookup(&dtd.generalEntities, name, -                                        sizeof(ENTITY)); -          if (!declEntity) -            return XML_ERROR_NO_MEMORY; -          if (declEntity->name != name) { -            poolDiscard(&dtd.pool); -            declEntity = NULL; -          } -          else { -            poolFinish(&dtd.pool); -            declEntity->publicId = NULL; -            declEntity->is_param = XML_FALSE; -            /* if we have a parent parser or are reading an internal parameter -               entity, then the entity declaration is not considered "internal" -            */ -            declEntity->is_internal = !(parentParser || openInternalEntities); -            if (entityDeclHandler) -              handleDefault = XML_FALSE; -          } -        } -        else { -          poolDiscard(&dtd.pool); -          declEntity = NULL; -        } -      } -      break; -    case XML_ROLE_PARAM_ENTITY_NAME: -#ifdef XML_DTD -      if (dtd.keepProcessing) { -        const XML_Char *name = poolStoreString(&dtd.pool, enc, s, next); -        if (!name) -          return XML_ERROR_NO_MEMORY; -        declEntity = (ENTITY *)lookup(&dtd.paramEntities, -                                           name, sizeof(ENTITY)); -        if (!declEntity) -          return XML_ERROR_NO_MEMORY; -        if (declEntity->name != name) { -          poolDiscard(&dtd.pool); -          declEntity = NULL; -        } -        else { -          poolFinish(&dtd.pool); -          declEntity->publicId = NULL; -          declEntity->is_param = XML_TRUE; -          /* if we have a parent parser or are reading an internal parameter -             entity, then the entity declaration is not considered "internal" -          */ -          declEntity->is_internal = !(parentParser || openInternalEntities); -          if (entityDeclHandler) -            handleDefault = XML_FALSE; -        } -      } -      else { -        poolDiscard(&dtd.pool); -        declEntity = NULL; -      } -#else /* not XML_DTD */ -      declEntity = NULL; -#endif /* XML_DTD */ -      break; -    case XML_ROLE_NOTATION_NAME: -      declNotationPublicId = NULL; -      declNotationName = NULL; -      if (notationDeclHandler) { -        declNotationName = poolStoreString(&tempPool, enc, s, next); -        if (!declNotationName) -          return XML_ERROR_NO_MEMORY; -        poolFinish(&tempPool); -        handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_NOTATION_PUBLIC_ID: -      if (!XmlIsPublicId(enc, s, next, eventPP)) -        return XML_ERROR_SYNTAX; -      if (declNotationName) {  /* means notationDeclHandler != NULL */ -        XML_Char *tem = poolStoreString(&tempPool, -                                        enc, -                                        s + enc->minBytesPerChar, -                                        next - enc->minBytesPerChar); -        if (!tem) -          return XML_ERROR_NO_MEMORY; -        normalizePublicId(tem); -        declNotationPublicId = tem; -        poolFinish(&tempPool); -        handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_NOTATION_SYSTEM_ID: -      if (declNotationName && notationDeclHandler) { -        const XML_Char *systemId -          = poolStoreString(&tempPool, enc, -                            s + enc->minBytesPerChar, -                            next - enc->minBytesPerChar); -        if (!systemId) -          return XML_ERROR_NO_MEMORY; -        *eventEndPP = s; -        notationDeclHandler(handlerArg, -                            declNotationName, -                            curBase, -                            systemId, -                            declNotationPublicId); -        handleDefault = XML_FALSE; -      } -      poolClear(&tempPool); -      break; -    case XML_ROLE_NOTATION_NO_SYSTEM_ID: -      if (declNotationPublicId && notationDeclHandler) { -        *eventEndPP = s; -        notationDeclHandler(handlerArg, -                            declNotationName, -                            curBase, -                            0, -                            declNotationPublicId); -        handleDefault = XML_FALSE; -      } -      poolClear(&tempPool); -      break; -    case XML_ROLE_ERROR: -      switch (tok) { -      case XML_TOK_PARAM_ENTITY_REF: -        return XML_ERROR_PARAM_ENTITY_REF; -      case XML_TOK_XML_DECL: -        return XML_ERROR_MISPLACED_XML_PI; -      default: -        return XML_ERROR_SYNTAX; -      } -#ifdef XML_DTD -    case XML_ROLE_IGNORE_SECT: -      { -        enum XML_Error result; -        if (defaultHandler) -          reportDefault(parser, enc, s, next); -        handleDefault = XML_FALSE; -        result = doIgnoreSection(parser, enc, &next, end, nextPtr); -        if (!next) { -          processor = ignoreSectionProcessor; -          return result; -        } -      } -      break; -#endif /* XML_DTD */ -    case XML_ROLE_GROUP_OPEN: -      if (prologState.level >= groupSize) { -        if (groupSize) { -          char *temp = REALLOC(groupConnector, groupSize *= 2); -          if (temp == NULL) -            return XML_ERROR_NO_MEMORY; -          groupConnector = temp; -          if (dtd.scaffIndex) { -            int *temp = REALLOC(dtd.scaffIndex, groupSize * sizeof(int)); -            if (temp == NULL) -              return XML_ERROR_NO_MEMORY; -            dtd.scaffIndex = temp; -          } -        } -        else { -          groupConnector = MALLOC(groupSize = 32); -          if (!groupConnector) -            return XML_ERROR_NO_MEMORY; -        } -      } -      groupConnector[prologState.level] = 0; -      if (dtd.in_eldecl) { -        int myindex = nextScaffoldPart(parser); -        if (myindex < 0) -          return XML_ERROR_NO_MEMORY; -        dtd.scaffIndex[dtd.scaffLevel] = myindex; -        dtd.scaffLevel++; -        dtd.scaffold[myindex].type = XML_CTYPE_SEQ; -        if (elementDeclHandler) -          handleDefault = XML_FALSE; -      } -      break; -    case XML_ROLE_GROUP_SEQUENCE: -      if (groupConnector[prologState.level] == '|') -        return XML_ERROR_SYNTAX; -      groupConnector[prologState.level] = ','; -      if (dtd.in_eldecl && elementDeclHandler) -        handleDefault = XML_FALSE; -      break; -    case XML_ROLE_GROUP_CHOICE: -      if (groupConnector[prologState.level] == ',') -        return XML_ERROR_SYNTAX; -      if (dtd.in_eldecl -          && !groupConnector[prologState.level] -          && (dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type -              != XML_CTYPE_MIXED) -          ) { -        dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type -            = XML_CTYPE_CHOICE; -        if (elementDeclHandler) -          handleDefault = XML_FALSE; -      } -      groupConnector[prologState.level] = '|'; -      break; -    case XML_ROLE_PARAM_ENTITY_REF: -#ifdef XML_DTD -    case XML_ROLE_INNER_PARAM_ENTITY_REF: -      /* PE references in internal subset are -         not allowed within declarations      */ -      if (prologState.documentEntity && -          role == XML_ROLE_INNER_PARAM_ENTITY_REF) -        return XML_ERROR_PARAM_ENTITY_REF; -      dtd.hasParamEntityRefs = XML_TRUE; -      if (!paramEntityParsing) -        dtd.keepProcessing = dtd.standalone; -      else { -        const XML_Char *name; -        ENTITY *entity; -        name = poolStoreString(&dtd.pool, enc, -                                s + enc->minBytesPerChar, -                                next - enc->minBytesPerChar); -        if (!name) -          return XML_ERROR_NO_MEMORY; -        entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); -        poolDiscard(&dtd.pool); -        /* first, determine if a check for an existing declaration is needed; -           if yes, check that the entity exists, and that it is internal, -           otherwise call the skipped entity handler -        */ -        if (prologState.documentEntity && -            (dtd.standalone -             ? !openInternalEntities -             : !dtd.hasParamEntityRefs)) { -          if (!entity) -            return XML_ERROR_UNDEFINED_ENTITY; -          else if (!entity->is_internal) -            return XML_ERROR_ENTITY_DECLARED_IN_PE; -        } -        else if (!entity) { -          dtd.keepProcessing = dtd.standalone; -          /* cannot report skipped entities in declarations */ -          if ((role == XML_ROLE_PARAM_ENTITY_REF) && skippedEntityHandler) { -            skippedEntityHandler(handlerArg, name, 1); -            handleDefault = XML_FALSE; -          } -          break; -        } -        if (entity->open) -          return XML_ERROR_RECURSIVE_ENTITY_REF; -        if (entity->textPtr) { -          enum XML_Error result; -          result = processInternalParamEntity(parser, entity); -          if (result != XML_ERROR_NONE) -            return result; -          handleDefault = XML_FALSE; -          break; -        } -        if (externalEntityRefHandler) { -          dtd.paramEntityRead = XML_FALSE; -          entity->open = XML_TRUE; -          if (!externalEntityRefHandler(externalEntityRefHandlerArg, -                                        0, -                                        entity->base, -                                        entity->systemId, -                                        entity->publicId)) { -            entity->open = XML_FALSE; -            return XML_ERROR_EXTERNAL_ENTITY_HANDLING; -          } -          entity->open = XML_FALSE; -          handleDefault = XML_FALSE; -          if (!dtd.paramEntityRead) { -            dtd.keepProcessing = dtd.standalone; -            break; -          } -        } -        else { -          dtd.keepProcessing = dtd.standalone; -          break; -        } -      } -#endif /* XML_DTD */ -      if (!dtd.standalone && -          notStandaloneHandler && -          !notStandaloneHandler(handlerArg)) -        return XML_ERROR_NOT_STANDALONE; -      break; - -    /* Element declaration stuff */ - -    case XML_ROLE_ELEMENT_NAME: -      if (elementDeclHandler) { -        declElementType = getElementType(parser, enc, s, next); -        if (!declElementType) -          return XML_ERROR_NO_MEMORY; -        dtd.scaffLevel = 0; -        dtd.scaffCount = 0; -        dtd.in_eldecl = XML_TRUE; -        handleDefault = XML_FALSE; -      } -      break; - -    case XML_ROLE_CONTENT_ANY: -    case XML_ROLE_CONTENT_EMPTY: -      if (dtd.in_eldecl) { -        if (elementDeclHandler) { -          XML_Content * content = (XML_Content *) MALLOC(sizeof(XML_Content)); -          if (!content) -            return XML_ERROR_NO_MEMORY; -          content->quant = XML_CQUANT_NONE; -          content->name = NULL; -          content->numchildren = 0; -          content->children = NULL; -          content->type = ((role == XML_ROLE_CONTENT_ANY) ? -                           XML_CTYPE_ANY : -                           XML_CTYPE_EMPTY); -          *eventEndPP = s; -          elementDeclHandler(handlerArg, declElementType->name, content); -          handleDefault = XML_FALSE; -        } -        dtd.in_eldecl = XML_FALSE; -      } -      break; - -    case XML_ROLE_CONTENT_PCDATA: -      if (dtd.in_eldecl) { -        dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel - 1]].type -            = XML_CTYPE_MIXED; -        if (elementDeclHandler) -          handleDefault = XML_FALSE; -      } -      break; - -    case XML_ROLE_CONTENT_ELEMENT: -      quant = XML_CQUANT_NONE; -      goto elementContent; -    case XML_ROLE_CONTENT_ELEMENT_OPT: -      quant = XML_CQUANT_OPT; -      goto elementContent; -    case XML_ROLE_CONTENT_ELEMENT_REP: -      quant = XML_CQUANT_REP; -      goto elementContent; -    case XML_ROLE_CONTENT_ELEMENT_PLUS: -      quant = XML_CQUANT_PLUS; -    elementContent: -      if (dtd.in_eldecl) { -        ELEMENT_TYPE *el; -        const XML_Char *name; -        int nameLen; -        const char *nxt = (quant == XML_CQUANT_NONE -                           ? next -                           : next - enc->minBytesPerChar); -        int myindex = nextScaffoldPart(parser); -        if (myindex < 0) -          return XML_ERROR_NO_MEMORY; -        dtd.scaffold[myindex].type = XML_CTYPE_NAME; -        dtd.scaffold[myindex].quant = quant; -        el = getElementType(parser, enc, s, nxt); -        if (!el) -          return XML_ERROR_NO_MEMORY; -        name = el->name; -        dtd.scaffold[myindex].name = name; -        nameLen = 0; -        for (; name[nameLen++]; ); -        dtd.contentStringLen +=  nameLen; -        if (elementDeclHandler) -          handleDefault = XML_FALSE; -      } -      break; - -    case XML_ROLE_GROUP_CLOSE: -      quant = XML_CQUANT_NONE; -      goto closeGroup; -    case XML_ROLE_GROUP_CLOSE_OPT: -      quant = XML_CQUANT_OPT; -      goto closeGroup; -    case XML_ROLE_GROUP_CLOSE_REP: -      quant = XML_CQUANT_REP; -      goto closeGroup; -    case XML_ROLE_GROUP_CLOSE_PLUS: -      quant = XML_CQUANT_PLUS; -    closeGroup: -      if (dtd.in_eldecl) { -        if (elementDeclHandler) -          handleDefault = XML_FALSE; -        dtd.scaffLevel--; -        dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel]].quant = quant; -        if (dtd.scaffLevel == 0) { -          if (!handleDefault) { -            XML_Content *model = build_model(parser); -            if (!model) -              return XML_ERROR_NO_MEMORY; -            *eventEndPP = s; -            elementDeclHandler(handlerArg, declElementType->name, model); -          } -          dtd.in_eldecl = XML_FALSE; -          dtd.contentStringLen = 0; -        } -      } -      break; -      /* End element declaration stuff */ - -    case XML_ROLE_PI: -      if (!reportProcessingInstruction(parser, enc, s, next)) -        return XML_ERROR_NO_MEMORY; -      handleDefault = XML_FALSE; -      break; -    case XML_ROLE_COMMENT: -      if (!reportComment(parser, enc, s, next)) -        return XML_ERROR_NO_MEMORY; -      handleDefault = XML_FALSE; -      break; -    case XML_ROLE_NONE: -      switch (tok) { -      case XML_TOK_BOM: -        handleDefault = XML_FALSE; -        break; -      } -      break; -    case XML_ROLE_DOCTYPE_NONE: -      if (startDoctypeDeclHandler) -        handleDefault = XML_FALSE; -      break; -    case XML_ROLE_ENTITY_NONE: -      if (dtd.keepProcessing && entityDeclHandler) -        handleDefault = XML_FALSE; -      break; -    case XML_ROLE_NOTATION_NONE: -      if (notationDeclHandler) -        handleDefault = XML_FALSE; -      break; -    case XML_ROLE_ATTLIST_NONE: -      if (dtd.keepProcessing && attlistDeclHandler) -        handleDefault = XML_FALSE; -      break; -    case XML_ROLE_ELEMENT_NONE: -      if (elementDeclHandler) -        handleDefault = XML_FALSE; -      break; -    } /* end of big switch */ - -    if (handleDefault && defaultHandler)  -      reportDefault(parser, enc, s, next); - -    s = next; -    tok = XmlPrologTok(enc, s, end, &next); -  } -  /* not reached */ -} - -static enum XML_Error FASTCALL -epilogProcessor(XML_Parser parser, -                const char *s, -                const char *end, -                const char **nextPtr) -{ -  processor = epilogProcessor; -  eventPtr = s; -  for (;;) { -    const char *next = NULL; -    int tok = XmlPrologTok(encoding, s, end, &next); -    eventEndPtr = next; -    switch (tok) { -    /* report partial linebreak - it might be the last token */ -    case -XML_TOK_PROLOG_S:  -      if (defaultHandler) { -        eventEndPtr = next; -        reportDefault(parser, encoding, s, next); -      } -      if (nextPtr) -        *nextPtr = next; -      return XML_ERROR_NONE; -    case XML_TOK_NONE: -      if (nextPtr) -        *nextPtr = s; -      return XML_ERROR_NONE; -    case XML_TOK_PROLOG_S: -      if (defaultHandler) -        reportDefault(parser, encoding, s, next); -      break; -    case XML_TOK_PI: -      if (!reportProcessingInstruction(parser, encoding, s, next)) -        return XML_ERROR_NO_MEMORY; -      break; -    case XML_TOK_COMMENT: -      if (!reportComment(parser, encoding, s, next)) -        return XML_ERROR_NO_MEMORY; -      break; -    case XML_TOK_INVALID: -      eventPtr = next; -      return XML_ERROR_INVALID_TOKEN; -    case XML_TOK_PARTIAL: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_UNCLOSED_TOKEN; -    case XML_TOK_PARTIAL_CHAR: -      if (nextPtr) { -        *nextPtr = s; -        return XML_ERROR_NONE; -      } -      return XML_ERROR_PARTIAL_CHAR; -    default: -      return XML_ERROR_JUNK_AFTER_DOC_ELEMENT; -    } -    eventPtr = s = next; -  } -} - -#ifdef XML_DTD - -static enum XML_Error FASTCALL -processInternalParamEntity(XML_Parser parser, ENTITY *entity) -{ -  const char *s, *end, *next; -  int tok; -  enum XML_Error result; -  OPEN_INTERNAL_ENTITY openEntity; -  entity->open = XML_TRUE; -  openEntity.next = openInternalEntities; -  openInternalEntities = &openEntity; -  openEntity.entity = entity; -  openEntity.internalEventPtr = NULL; -  openEntity.internalEventEndPtr = NULL; -  s = (char *)entity->textPtr; -  end = (char *)(entity->textPtr + entity->textLen); -  tok = XmlPrologTok(internalEncoding, s, end, &next); -  result = doProlog(parser, internalEncoding, s, end, tok, next, 0); -  entity->open = XML_FALSE; -  openInternalEntities = openEntity.next; -  return result; -} - -#endif /* XML_DTD */ - -static enum XML_Error FASTCALL -errorProcessor(XML_Parser parser, -               const char *s, -               const char *end, -               const char **nextPtr) -{ -  return errorCode; -} - -static enum XML_Error FASTCALL -storeAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, -                    const char *ptr, const char *end, -                    STRING_POOL *pool) -{ -  enum XML_Error result = appendAttributeValue(parser, enc, isCdata, ptr, -                                               end, pool); -  if (result) -    return result; -  if (!isCdata && poolLength(pool) && poolLastChar(pool) == 0x20) -    poolChop(pool); -  if (!poolAppendChar(pool, XML_T('\0'))) -    return XML_ERROR_NO_MEMORY; -  return XML_ERROR_NONE; -} - -static enum XML_Error FASTCALL -appendAttributeValue(XML_Parser parser, const ENCODING *enc, XML_Bool isCdata, -                     const char *ptr, const char *end, -                     STRING_POOL *pool) -{ -  for (;;) { -    const char *next; -    int tok = XmlAttributeValueTok(enc, ptr, end, &next); -    switch (tok) { -    case XML_TOK_NONE: -      return XML_ERROR_NONE; -    case XML_TOK_INVALID: -      if (enc == encoding) -        eventPtr = next; -      return XML_ERROR_INVALID_TOKEN; -    case XML_TOK_PARTIAL: -      if (enc == encoding) -        eventPtr = ptr; -      return XML_ERROR_INVALID_TOKEN; -    case XML_TOK_CHAR_REF: -      { -        XML_Char buf[XML_ENCODE_MAX]; -        int i; -        int n = XmlCharRefNumber(enc, ptr); -        if (n < 0) { -          if (enc == encoding) -            eventPtr = ptr; -          return XML_ERROR_BAD_CHAR_REF; -        } -        if (!isCdata -            && n == 0x20 /* space */ -            && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) -          break; -        n = XmlEncode(n, (ICHAR *)buf); -        if (!n) { -          if (enc == encoding) -            eventPtr = ptr; -          return XML_ERROR_BAD_CHAR_REF; -        } -        for (i = 0; i < n; i++) { -          if (!poolAppendChar(pool, buf[i])) -            return XML_ERROR_NO_MEMORY; -        } -      } -      break; -    case XML_TOK_DATA_CHARS: -      if (!poolAppend(pool, enc, ptr, next)) -        return XML_ERROR_NO_MEMORY; -      break; -    case XML_TOK_TRAILING_CR: -      next = ptr + enc->minBytesPerChar; -      /* fall through */ -    case XML_TOK_ATTRIBUTE_VALUE_S: -    case XML_TOK_DATA_NEWLINE: -      if (!isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20)) -        break; -      if (!poolAppendChar(pool, 0x20)) -        return XML_ERROR_NO_MEMORY; -      break; -    case XML_TOK_ENTITY_REF: -      { -        const XML_Char *name; -        ENTITY *entity; -        char checkEntityDecl; -        XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc, -                                              ptr + enc->minBytesPerChar, -                                              next - enc->minBytesPerChar); -        if (ch) { -          if (!poolAppendChar(pool, ch)) -                return XML_ERROR_NO_MEMORY; -          break; -        } -        name = poolStoreString(&temp2Pool, enc, -                               ptr + enc->minBytesPerChar, -                               next - enc->minBytesPerChar); -        if (!name) -          return XML_ERROR_NO_MEMORY; -        entity = (ENTITY *)lookup(&dtd.generalEntities, name, 0); -        poolDiscard(&temp2Pool); -        /* first, determine if a check for an existing declaration is needed; -           if yes, check that the entity exists, and that it is internal, -           otherwise call the default handler (if called from content) -        */ -        if (pool == &dtd.pool)  /* are we called from prolog? */ -          checkEntityDecl = -#ifdef XML_DTD -              prologState.documentEntity && -#endif /* XML_DTD */ -              (dtd.standalone -               ? !openInternalEntities -               : !dtd.hasParamEntityRefs); -        else /* if (pool == &tempPool): we are called from content */ -          checkEntityDecl = !dtd.hasParamEntityRefs || dtd.standalone; -        if (checkEntityDecl) { -          if (!entity) -            return XML_ERROR_UNDEFINED_ENTITY; -          else if (!entity->is_internal) -            return XML_ERROR_ENTITY_DECLARED_IN_PE; -        } -        else if (!entity) { -          /* cannot report skipped entity here - see comments on -             skippedEntityHandler -          if (skippedEntityHandler) -            skippedEntityHandler(handlerArg, name, 0); -          */ -          if ((pool == &tempPool) && defaultHandler) -            reportDefault(parser, enc, ptr, next); -          break; -        } -        if (entity->open) { -          if (enc == encoding) -            eventPtr = ptr; -          return XML_ERROR_RECURSIVE_ENTITY_REF; -        } -        if (entity->notation) { -          if (enc == encoding) -            eventPtr = ptr; -          return XML_ERROR_BINARY_ENTITY_REF; -        } -        if (!entity->textPtr) { -          if (enc == encoding) -            eventPtr = ptr; -              return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF; -        } -        else { -          enum XML_Error result; -          const XML_Char *textEnd = entity->textPtr + entity->textLen; -          entity->open = XML_TRUE; -          result = appendAttributeValue(parser, internalEncoding, isCdata, -                                        (char *)entity->textPtr, -                                        (char *)textEnd, pool); -          entity->open = XML_FALSE; -          if (result) -            return result; -        } -      } -      break; -    default: -      if (enc == encoding) -        eventPtr = ptr; -      return XML_ERROR_UNEXPECTED_STATE; -    } -    ptr = next; -  } -  /* not reached */ -} - -static enum XML_Error FASTCALL -storeEntityValue(XML_Parser parser, -                 const ENCODING *enc, -                 const char *entityTextPtr, -                 const char *entityTextEnd) -{ -  STRING_POOL *pool = &(dtd.entityValuePool); -  enum XML_Error result = XML_ERROR_NONE; -#ifdef XML_DTD -  int oldInEntityValue = prologState.inEntityValue; -  prologState.inEntityValue = 1; -#endif /* XML_DTD */ -  /* never return Null for the value argument in EntityDeclHandler, -     since this would indicate an external entity; therefore we -     have to make sure that entityValuePool.start is not null */ -  if (!pool->blocks) { -    if (!poolGrow(pool)) -      return XML_ERROR_NO_MEMORY; -  } - -  for (;;) { -    const char *next; -    int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next); -    switch (tok) { -    case XML_TOK_PARAM_ENTITY_REF: -#ifdef XML_DTD -      if (isParamEntity || enc != encoding) { -        const XML_Char *name; -        ENTITY *entity; -        name = poolStoreString(&tempPool, enc, -                               entityTextPtr + enc->minBytesPerChar, -                               next - enc->minBytesPerChar); -        if (!name) { -          result = XML_ERROR_NO_MEMORY; -          goto endEntityValue; -        } -        entity = (ENTITY *)lookup(&dtd.paramEntities, name, 0); -        poolDiscard(&tempPool); -        if (!entity) { -          /* not a well-formedness error - see XML 1.0: WFC Entity Declared */ -          /* cannot report skipped entity here - see comments on -             skippedEntityHandler -          if (skippedEntityHandler) -            skippedEntityHandler(handlerArg, name, 0); -          */ -          dtd.keepProcessing = dtd.standalone; -          goto endEntityValue; -        } -        if (entity->open) { -          if (enc == encoding) -            eventPtr = entityTextPtr; -          result = XML_ERROR_RECURSIVE_ENTITY_REF; -          goto endEntityValue; -        } -        if (entity->systemId) { -          if (externalEntityRefHandler) { -            dtd.paramEntityRead = XML_FALSE; -            entity->open = XML_TRUE; -            if (!externalEntityRefHandler(externalEntityRefHandlerArg, -                                          0, -                                          entity->base, -                                          entity->systemId, -                                          entity->publicId)) { -              entity->open = XML_FALSE; -              result = XML_ERROR_EXTERNAL_ENTITY_HANDLING; -              goto endEntityValue; -            } -            entity->open = XML_FALSE; -            if (!dtd.paramEntityRead) -              dtd.keepProcessing = dtd.standalone; -          } -          else -            dtd.keepProcessing = dtd.standalone; -        } -        else { -          entity->open = XML_TRUE; -          result = storeEntityValue(parser, -                                    internalEncoding, -                                    (char *)entity->textPtr, -                                    (char *)(entity->textPtr -                                             + entity->textLen)); -          entity->open = XML_FALSE; -          if (result) -            goto endEntityValue; -        } -        break; -      } -#endif /* XML_DTD */ -      /* in the internal subset, PE references are not legal -         within markup declarations, e.g entity values in this case */ -      eventPtr = entityTextPtr; -      result = XML_ERROR_PARAM_ENTITY_REF; -      goto endEntityValue; -    case XML_TOK_NONE: -      result = XML_ERROR_NONE; -      goto endEntityValue; -    case XML_TOK_ENTITY_REF: -    case XML_TOK_DATA_CHARS: -      if (!poolAppend(pool, enc, entityTextPtr, next)) { -        result = XML_ERROR_NO_MEMORY; -        goto endEntityValue; -      } -      break; -    case XML_TOK_TRAILING_CR: -      next = entityTextPtr + enc->minBytesPerChar; -      /* fall through */ -    case XML_TOK_DATA_NEWLINE: -      if (pool->end == pool->ptr && !poolGrow(pool)) { -              result = XML_ERROR_NO_MEMORY; -        goto endEntityValue; -      } -      *(pool->ptr)++ = 0xA; -      break; -    case XML_TOK_CHAR_REF: -      { -        XML_Char buf[XML_ENCODE_MAX]; -        int i; -        int n = XmlCharRefNumber(enc, entityTextPtr); -        if (n < 0) { -          if (enc == encoding) -            eventPtr = entityTextPtr; -          result = XML_ERROR_BAD_CHAR_REF; -          goto endEntityValue; -        } -        n = XmlEncode(n, (ICHAR *)buf); -        if (!n) { -          if (enc == encoding) -            eventPtr = entityTextPtr; -          result = XML_ERROR_BAD_CHAR_REF; -          goto endEntityValue; -        } -        for (i = 0; i < n; i++) { -          if (pool->end == pool->ptr && !poolGrow(pool)) { -            result = XML_ERROR_NO_MEMORY; -            goto endEntityValue; -          } -          *(pool->ptr)++ = buf[i]; -        } -      } -      break; -    case XML_TOK_PARTIAL: -      if (enc == encoding) -        eventPtr = entityTextPtr; -      result = XML_ERROR_INVALID_TOKEN; -      goto endEntityValue; -    case XML_TOK_INVALID: -      if (enc == encoding) -        eventPtr = next; -      result = XML_ERROR_INVALID_TOKEN; -      goto endEntityValue; -    default: -      if (enc == encoding) -        eventPtr = entityTextPtr; -      result = XML_ERROR_UNEXPECTED_STATE; -      goto endEntityValue; -    } -    entityTextPtr = next; -  } -endEntityValue: -#ifdef XML_DTD -  prologState.inEntityValue = oldInEntityValue; -#endif /* XML_DTD */ -  return result; -} - -static void FASTCALL -normalizeLines(XML_Char *s) -{ -  XML_Char *p; -  for (;; s++) { -    if (*s == XML_T('\0')) -      return; -    if (*s == 0xD) -      break; -  } -  p = s; -  do { -    if (*s == 0xD) { -      *p++ = 0xA; -      if (*++s == 0xA) -        s++; -    } -    else -      *p++ = *s++; -  } while (*s); -  *p = XML_T('\0'); -} - -static int FASTCALL -reportProcessingInstruction(XML_Parser parser, const ENCODING *enc, -                            const char *start, const char *end) -{ -  const XML_Char *target; -  XML_Char *data; -  const char *tem; -  if (!processingInstructionHandler) { -    if (defaultHandler) -      reportDefault(parser, enc, start, end); -    return 1; -  } -  start += enc->minBytesPerChar * 2; -  tem = start + XmlNameLength(enc, start); -  target = poolStoreString(&tempPool, enc, start, tem); -  if (!target) -    return 0; -  poolFinish(&tempPool); -  data = poolStoreString(&tempPool, enc, -                        XmlSkipS(enc, tem), -                        end - enc->minBytesPerChar*2); -  if (!data) -    return 0; -  normalizeLines(data); -  processingInstructionHandler(handlerArg, target, data); -  poolClear(&tempPool); -  return 1; -} - -static int FASTCALL -reportComment(XML_Parser parser, const ENCODING *enc, -              const char *start, const char *end) -{ -  XML_Char *data; -  if (!commentHandler) { -    if (defaultHandler) -      reportDefault(parser, enc, start, end); -    return 1; -  } -  data = poolStoreString(&tempPool, -                         enc, -                         start + enc->minBytesPerChar * 4, -                         end - enc->minBytesPerChar * 3); -  if (!data) -    return 0; -  normalizeLines(data); -  commentHandler(handlerArg, data); -  poolClear(&tempPool); -  return 1; -} - -static void FASTCALL -reportDefault(XML_Parser parser, const ENCODING *enc, -              const char *s, const char *end) -{ -  if (MUST_CONVERT(enc, s)) { -    const char **eventPP; -    const char **eventEndPP; -    if (enc == encoding) { -      eventPP = &eventPtr; -      eventEndPP = &eventEndPtr; -    } -    else { -      eventPP = &(openInternalEntities->internalEventPtr); -      eventEndPP = &(openInternalEntities->internalEventEndPtr); -    } -    do { -      ICHAR *dataPtr = (ICHAR *)dataBuf; -      XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)dataBufEnd); -      *eventEndPP = s; -      defaultHandler(handlerArg, dataBuf, dataPtr - (ICHAR *)dataBuf); -      *eventPP = s; -    } while (s != end); -  } -  else -    defaultHandler(handlerArg, (XML_Char *)s, (XML_Char *)end - (XML_Char *)s); -} - - -static int FASTCALL -defineAttribute(ELEMENT_TYPE *type, ATTRIBUTE_ID *attId, XML_Bool isCdata, -                XML_Bool isId, const XML_Char *value, XML_Parser parser) -{ -  DEFAULT_ATTRIBUTE *att; -  if (value || isId) { -    /* The handling of default attributes gets messed up if we have -       a default which duplicates a non-default. */ -    int i; -    for (i = 0; i < type->nDefaultAtts; i++) -      if (attId == type->defaultAtts[i].id) -        return 1; -    if (isId && !type->idAtt && !attId->xmlns) -      type->idAtt = attId; -  } -  if (type->nDefaultAtts == type->allocDefaultAtts) { -    if (type->allocDefaultAtts == 0) { -      type->allocDefaultAtts = 8; -      type->defaultAtts = MALLOC(type->allocDefaultAtts -                                 * sizeof(DEFAULT_ATTRIBUTE)); -      if (!type->defaultAtts) -        return 0; -    } -    else { -      DEFAULT_ATTRIBUTE *temp; -      int count = type->allocDefaultAtts * 2; -      temp = REALLOC(type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE))); -      if (temp == NULL) -        return 0; -      type->allocDefaultAtts = count; -      type->defaultAtts = temp; -    } -  } -  att = type->defaultAtts + type->nDefaultAtts; -  att->id = attId; -  att->value = value; -  att->isCdata = isCdata; -  if (!isCdata) -    attId->maybeTokenized = XML_TRUE; -  type->nDefaultAtts += 1; -  return 1; -} - -static int FASTCALL -setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) -{ -  const XML_Char *name; -  for (name = elementType->name; *name; name++) { -    if (*name == XML_T(':')) { -      PREFIX *prefix; -      const XML_Char *s; -      for (s = elementType->name; s != name; s++) { -        if (!poolAppendChar(&dtd.pool, *s)) -          return 0; -      } -      if (!poolAppendChar(&dtd.pool, XML_T('\0'))) -        return 0; -      prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), -                                sizeof(PREFIX)); -      if (!prefix) -        return 0; -      if (prefix->name == poolStart(&dtd.pool)) -        poolFinish(&dtd.pool); -      else -        poolDiscard(&dtd.pool); -      elementType->prefix = prefix; - -    } -  } -  return 1; -} - -static ATTRIBUTE_ID * FASTCALL -getAttributeId(XML_Parser parser, const ENCODING *enc, -               const char *start, const char *end) -{ -  ATTRIBUTE_ID *id; -  const XML_Char *name; -  if (!poolAppendChar(&dtd.pool, XML_T('\0'))) -    return NULL; -  name = poolStoreString(&dtd.pool, enc, start, end); -  if (!name) -    return NULL; -  ++name; -  id = (ATTRIBUTE_ID *)lookup(&dtd.attributeIds, name, sizeof(ATTRIBUTE_ID)); -  if (!id) -    return NULL; -  if (id->name != name) -    poolDiscard(&dtd.pool); -  else { -    poolFinish(&dtd.pool); -    if (!ns) -      ; -    else if (name[0] == 'x' -        && name[1] == 'm' -        && name[2] == 'l' -        && name[3] == 'n' -        && name[4] == 's' -        && (name[5] == XML_T('\0') || name[5] == XML_T(':'))) { -      if (name[5] == '\0') -        id->prefix = &dtd.defaultPrefix; -      else -        id->prefix = (PREFIX *)lookup(&dtd.prefixes, name + 6, sizeof(PREFIX)); -      id->xmlns = XML_TRUE; -    } -    else { -      int i; -      for (i = 0; name[i]; i++) { -        if (name[i] == XML_T(':')) { -          int j; -          for (j = 0; j < i; j++) { -            if (!poolAppendChar(&dtd.pool, name[j])) -              return NULL; -          } -          if (!poolAppendChar(&dtd.pool, XML_T('\0'))) -            return NULL; -          id->prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&dtd.pool), -                                        sizeof(PREFIX)); -          if (id->prefix->name == poolStart(&dtd.pool)) -            poolFinish(&dtd.pool); -          else -            poolDiscard(&dtd.pool); -          break; -        } -      } -    } -  } -  return id; -} - -#define CONTEXT_SEP XML_T('\f') - -static const XML_Char * FASTCALL -getContext(XML_Parser parser) -{ -  HASH_TABLE_ITER iter; -  XML_Bool needSep = XML_FALSE; - -  if (dtd.defaultPrefix.binding) { -    int i; -    int len; -    if (!poolAppendChar(&tempPool, XML_T('='))) -      return NULL; -    len = dtd.defaultPrefix.binding->uriLen; -    if (namespaceSeparator != XML_T('\0')) -      len--; -    for (i = 0; i < len; i++) -      if (!poolAppendChar(&tempPool, dtd.defaultPrefix.binding->uri[i])) -        return NULL; -    needSep = XML_TRUE; -  } - -  hashTableIterInit(&iter, &(dtd.prefixes)); -  for (;;) { -    int i; -    int len; -    const XML_Char *s; -    PREFIX *prefix = (PREFIX *)hashTableIterNext(&iter); -    if (!prefix) -      break; -    if (!prefix->binding) -      continue; -    if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) -      return NULL; -    for (s = prefix->name; *s; s++) -      if (!poolAppendChar(&tempPool, *s)) -        return NULL; -    if (!poolAppendChar(&tempPool, XML_T('='))) -      return NULL; -    len = prefix->binding->uriLen; -    if (namespaceSeparator != XML_T('\0')) -      len--; -    for (i = 0; i < len; i++) -      if (!poolAppendChar(&tempPool, prefix->binding->uri[i])) -        return NULL; -    needSep = XML_TRUE; -  } - - -  hashTableIterInit(&iter, &(dtd.generalEntities)); -  for (;;) { -    const XML_Char *s; -    ENTITY *e = (ENTITY *)hashTableIterNext(&iter); -    if (!e) -      break; -    if (!e->open) -      continue; -    if (needSep && !poolAppendChar(&tempPool, CONTEXT_SEP)) -      return NULL; -    for (s = e->name; *s; s++) -      if (!poolAppendChar(&tempPool, *s)) -        return 0; -    needSep = XML_TRUE; -  } - -  if (!poolAppendChar(&tempPool, XML_T('\0'))) -    return NULL; -  return tempPool.start; -} - -static XML_Bool FASTCALL -setContext(XML_Parser parser, const XML_Char *context) -{ -  const XML_Char *s = context; - -  while (*context != XML_T('\0')) { -    if (*s == CONTEXT_SEP || *s == XML_T('\0')) { -      ENTITY *e; -      if (!poolAppendChar(&tempPool, XML_T('\0'))) -        return XML_FALSE; -      e = (ENTITY *)lookup(&dtd.generalEntities, poolStart(&tempPool), 0); -      if (e) -        e->open = XML_TRUE; -      if (*s != XML_T('\0')) -        s++; -      context = s; -      poolDiscard(&tempPool); -    } -    else if (*s == XML_T('=')) { -      PREFIX *prefix; -      if (poolLength(&tempPool) == 0) -        prefix = &dtd.defaultPrefix; -      else { -        if (!poolAppendChar(&tempPool, XML_T('\0'))) -          return XML_FALSE; -        prefix = (PREFIX *)lookup(&dtd.prefixes, poolStart(&tempPool), -                                  sizeof(PREFIX)); -        if (!prefix) -          return XML_FALSE; -        if (prefix->name == poolStart(&tempPool)) { -          prefix->name = poolCopyString(&dtd.pool, prefix->name); -          if (!prefix->name) -            return XML_FALSE; -        } -        poolDiscard(&tempPool); -      } -      for (context = s + 1; -           *context != CONTEXT_SEP && *context != XML_T('\0'); -           context++) -        if (!poolAppendChar(&tempPool, *context)) -          return XML_FALSE; -      if (!poolAppendChar(&tempPool, XML_T('\0'))) -        return XML_FALSE; -      if (!addBinding(parser, prefix, 0, poolStart(&tempPool), -                      &inheritedBindings)) -        return XML_FALSE; -      poolDiscard(&tempPool); -      if (*context != XML_T('\0')) -        ++context; -      s = context; -    } -    else { -      if (!poolAppendChar(&tempPool, *s)) -        return XML_FALSE; -      s++; -    } -  } -  return XML_TRUE; -} - -static void FASTCALL -normalizePublicId(XML_Char *publicId) -{ -  XML_Char *p = publicId; -  XML_Char *s; -  for (s = publicId; *s; s++) { -    switch (*s) { -    case 0x20: -    case 0xD: -    case 0xA: -      if (p != publicId && p[-1] != 0x20) -        *p++ = 0x20; -      break; -    default: -      *p++ = *s; -    } -  } -  if (p != publicId && p[-1] == 0x20) -    --p; -  *p = XML_T('\0'); -} - -static void FASTCALL -dtdInit(DTD *p, XML_Parser parser) -{ -  XML_Memory_Handling_Suite *ms = &parser->m_mem; -  poolInit(&(p->pool), ms); -#ifdef XML_DTD -  poolInit(&(p->entityValuePool), ms); -#endif /* XML_DTD */ -  hashTableInit(&(p->generalEntities), ms); -  hashTableInit(&(p->elementTypes), ms); -  hashTableInit(&(p->attributeIds), ms); -  hashTableInit(&(p->prefixes), ms); -#ifdef XML_DTD -  p->paramEntityRead = XML_FALSE; -  hashTableInit(&(p->paramEntities), ms); -#endif /* XML_DTD */ -  p->defaultPrefix.name = NULL; -  p->defaultPrefix.binding = NULL; - -  p->in_eldecl = XML_FALSE; -  p->scaffIndex = NULL; -  p->scaffold = NULL; -  p->scaffLevel = 0; -  p->scaffSize = 0; -  p->scaffCount = 0; -  p->contentStringLen = 0; - -  p->keepProcessing = XML_TRUE; -  p->hasParamEntityRefs = XML_FALSE; -  p->standalone = XML_FALSE; -} - -#ifdef XML_DTD - -static void FASTCALL -dtdSwap(DTD *p1, DTD *p2) -{ -  DTD tem; -  memcpy(&tem, p1, sizeof(DTD)); -  memcpy(p1, p2, sizeof(DTD)); -  memcpy(p2, &tem, sizeof(DTD)); -} - -#endif /* XML_DTD */ - -static void FASTCALL -dtdReset(DTD *p, XML_Parser parser) -{ -  HASH_TABLE_ITER iter; -  hashTableIterInit(&iter, &(p->elementTypes)); -  for (;;) { -    ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); -    if (!e) -      break; -    if (e->allocDefaultAtts != 0) -      FREE(e->defaultAtts); -  } -  hashTableClear(&(p->generalEntities)); -#ifdef XML_DTD -  p->paramEntityRead = XML_FALSE; -  hashTableClear(&(p->paramEntities)); -#endif /* XML_DTD */ -  hashTableClear(&(p->elementTypes)); -  hashTableClear(&(p->attributeIds)); -  hashTableClear(&(p->prefixes)); -  poolClear(&(p->pool)); -#ifdef XML_DTD -  poolClear(&(p->entityValuePool)); -#endif /* XML_DTD */ -  p->defaultPrefix.name = NULL; -  p->defaultPrefix.binding = NULL; - -  p->in_eldecl = XML_FALSE; -  if (p->scaffIndex) { -    FREE(p->scaffIndex); -    p->scaffIndex = NULL; -  } -  if (p->scaffold) { -    FREE(p->scaffold); -    p->scaffold = NULL; -  } -  p->scaffLevel = 0; -  p->scaffSize = 0; -  p->scaffCount = 0; -  p->contentStringLen = 0; - -  p->keepProcessing = XML_TRUE; -  p->hasParamEntityRefs = XML_FALSE; -  p->standalone = XML_FALSE; -} - -static void FASTCALL -dtdDestroy(DTD *p, XML_Parser parser) -{ -  HASH_TABLE_ITER iter; -  hashTableIterInit(&iter, &(p->elementTypes)); -  for (;;) { -    ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter); -    if (!e) -      break; -    if (e->allocDefaultAtts != 0) -      FREE(e->defaultAtts); -  } -  hashTableDestroy(&(p->generalEntities)); -#ifdef XML_DTD -  hashTableDestroy(&(p->paramEntities)); -#endif /* XML_DTD */ -  hashTableDestroy(&(p->elementTypes)); -  hashTableDestroy(&(p->attributeIds)); -  hashTableDestroy(&(p->prefixes)); -  poolDestroy(&(p->pool)); -#ifdef XML_DTD -  poolDestroy(&(p->entityValuePool)); -#endif /* XML_DTD */ -  if (!parentParser) { -    if (p->scaffIndex) -      FREE(p->scaffIndex); -    if (p->scaffold) -      FREE(p->scaffold); -  } -} - -/* Do a deep copy of the DTD.  Return 0 for out of memory; non-zero otherwise. -   The new DTD has already been initialized. -*/ -static int FASTCALL -dtdCopy(DTD *newDtd, const DTD *oldDtd, XML_Parser parser) -{ -  HASH_TABLE_ITER iter; - -  /* Copy the prefix table. */ - -  hashTableIterInit(&iter, &(oldDtd->prefixes)); -  for (;;) { -    const XML_Char *name; -    const PREFIX *oldP = (PREFIX *)hashTableIterNext(&iter); -    if (!oldP) -      break; -    name = poolCopyString(&(newDtd->pool), oldP->name); -    if (!name) -      return 0; -    if (!lookup(&(newDtd->prefixes), name, sizeof(PREFIX))) -      return 0; -  } - -  hashTableIterInit(&iter, &(oldDtd->attributeIds)); - -  /* Copy the attribute id table. */ - -  for (;;) { -    ATTRIBUTE_ID *newA; -    const XML_Char *name; -    const ATTRIBUTE_ID *oldA = (ATTRIBUTE_ID *)hashTableIterNext(&iter); - -    if (!oldA) -      break; -    /* Remember to allocate the scratch byte before the name. */ -    if (!poolAppendChar(&(newDtd->pool), XML_T('\0'))) -      return 0; -    name = poolCopyString(&(newDtd->pool), oldA->name); -    if (!name) -      return 0; -    ++name; -    newA = (ATTRIBUTE_ID *)lookup(&(newDtd->attributeIds), name, -                                  sizeof(ATTRIBUTE_ID)); -    if (!newA) -      return 0; -    newA->maybeTokenized = oldA->maybeTokenized; -    if (oldA->prefix) { -      newA->xmlns = oldA->xmlns; -      if (oldA->prefix == &oldDtd->defaultPrefix) -        newA->prefix = &newDtd->defaultPrefix; -      else -        newA->prefix = (PREFIX *)lookup(&(newDtd->prefixes), -                                        oldA->prefix->name, 0); -    } -  } - -  /* Copy the element type table. */ - -  hashTableIterInit(&iter, &(oldDtd->elementTypes)); - -  for (;;) { -    int i; -    ELEMENT_TYPE *newE; -    const XML_Char *name; -    const ELEMENT_TYPE *oldE = (ELEMENT_TYPE *)hashTableIterNext(&iter); -    if (!oldE) -      break; -    name = poolCopyString(&(newDtd->pool), oldE->name); -    if (!name) -      return 0; -    newE = (ELEMENT_TYPE *)lookup(&(newDtd->elementTypes), name, -                                  sizeof(ELEMENT_TYPE)); -    if (!newE) -      return 0; -    if (oldE->nDefaultAtts) { -      newE->defaultAtts = (DEFAULT_ATTRIBUTE *) -          MALLOC(oldE->nDefaultAtts * sizeof(DEFAULT_ATTRIBUTE)); -      if (!newE->defaultAtts) { -        FREE(newE); -        return 0; -      } -    } -    if (oldE->idAtt) -      newE->idAtt = (ATTRIBUTE_ID *) -          lookup(&(newDtd->attributeIds), oldE->idAtt->name, 0); -    newE->allocDefaultAtts = newE->nDefaultAtts = oldE->nDefaultAtts; -    if (oldE->prefix) -      newE->prefix = (PREFIX *)lookup(&(newDtd->prefixes), -                                      oldE->prefix->name, 0); -    for (i = 0; i < newE->nDefaultAtts; i++) { -      newE->defaultAtts[i].id = (ATTRIBUTE_ID *) -          lookup(&(newDtd->attributeIds), oldE->defaultAtts[i].id->name, 0); -      newE->defaultAtts[i].isCdata = oldE->defaultAtts[i].isCdata; -      if (oldE->defaultAtts[i].value) { -        newE->defaultAtts[i].value -            = poolCopyString(&(newDtd->pool), oldE->defaultAtts[i].value); -        if (!newE->defaultAtts[i].value) -          return 0; -      } -      else -        newE->defaultAtts[i].value = NULL; -    } -  } - -  /* Copy the entity tables. */ -  if (!copyEntityTable(&(newDtd->generalEntities), -                       &(newDtd->pool), -                       &(oldDtd->generalEntities), parser)) -      return 0; - -#ifdef XML_DTD -  if (!copyEntityTable(&(newDtd->paramEntities), -                       &(newDtd->pool), -                       &(oldDtd->paramEntities), parser)) -      return 0; -  newDtd->paramEntityRead = oldDtd->paramEntityRead; -#endif /* XML_DTD */ - -  newDtd->keepProcessing = oldDtd->keepProcessing; -  newDtd->hasParamEntityRefs = oldDtd->hasParamEntityRefs; -  newDtd->standalone = oldDtd->standalone; - -  /* Don't want deep copying for scaffolding */ -  newDtd->in_eldecl = oldDtd->in_eldecl; -  newDtd->scaffold = oldDtd->scaffold; -  newDtd->contentStringLen = oldDtd->contentStringLen; -  newDtd->scaffSize = oldDtd->scaffSize; -  newDtd->scaffLevel = oldDtd->scaffLevel; -  newDtd->scaffIndex = oldDtd->scaffIndex; - -  return 1; -}  /* End dtdCopy */ - -static int FASTCALL -copyEntityTable(HASH_TABLE *newTable, -                STRING_POOL *newPool, -                const HASH_TABLE *oldTable, -                XML_Parser parser) -{ -  HASH_TABLE_ITER iter; -  const XML_Char *cachedOldBase = NULL; -  const XML_Char *cachedNewBase = NULL; - -  hashTableIterInit(&iter, oldTable); - -  for (;;) { -    ENTITY *newE; -    const XML_Char *name; -    const ENTITY *oldE = (ENTITY *)hashTableIterNext(&iter); -    if (!oldE) -      break; -    name = poolCopyString(newPool, oldE->name); -    if (!name) -      return 0; -    newE = (ENTITY *)lookup(newTable, name, sizeof(ENTITY)); -    if (!newE) -      return 0; -    if (oldE->systemId) { -      const XML_Char *tem = poolCopyString(newPool, oldE->systemId); -      if (!tem) -        return 0; -      newE->systemId = tem; -      if (oldE->base) { -        if (oldE->base == cachedOldBase) -          newE->base = cachedNewBase; -        else { -          cachedOldBase = oldE->base; -          tem = poolCopyString(newPool, cachedOldBase); -          if (!tem) -            return 0; -          cachedNewBase = newE->base = tem; -        } -      } -      if (oldE->publicId) { -        tem = poolCopyString(newPool, oldE->publicId); -        if (!tem) -          return 0; -        newE->publicId = tem; -      } -    } -    else { -      const XML_Char *tem = poolCopyStringN(newPool, oldE->textPtr, -                                            oldE->textLen); -      if (!tem) -        return 0; -      newE->textPtr = tem; -      newE->textLen = oldE->textLen; -    } -    if (oldE->notation) { -      const XML_Char *tem = poolCopyString(newPool, oldE->notation); -      if (!tem) -        return 0; -      newE->notation = tem; -    } -    newE->is_param = oldE->is_param; -    newE->is_internal = oldE->is_internal; -  } -  return 1; -} - -#define INIT_SIZE 64 - -static int FASTCALL -keyeq(KEY s1, KEY s2) -{ -  for (; *s1 == *s2; s1++, s2++) -    if (*s1 == 0) -      return 1; -  return 0; -} - -static unsigned long FASTCALL -hash(KEY s) -{ -  unsigned long h = 0; -  while (*s) -    h = (h << 5) + h + (unsigned char)*s++; -  return h; -} - -static NAMED * FASTCALL -lookup(HASH_TABLE *table, KEY name, size_t createSize) -{ -  size_t i; -  if (table->size == 0) { -    size_t tsize; - -    if (!createSize) -      return NULL; -    tsize = INIT_SIZE * sizeof(NAMED *); -    table->v = table->mem->malloc_fcn(tsize); -    if (!table->v) -      return NULL; -    memset(table->v, 0, tsize); -    table->size = INIT_SIZE; -    table->usedLim = INIT_SIZE / 2; -    i = hash(name) & (table->size - 1); -  } -  else { -    unsigned long h = hash(name); -    for (i = h & (table->size - 1); -         table->v[i]; -         i == 0 ? i = table->size - 1 : --i) { -      if (keyeq(name, table->v[i]->name)) -        return table->v[i]; -    } -    if (!createSize) -      return NULL; -    if (table->used == table->usedLim) { -      /* check for overflow */ -      size_t newSize = table->size * 2; -      size_t tsize = newSize * sizeof(NAMED *); -      NAMED **newV = table->mem->malloc_fcn(tsize); -      if (!newV) -        return NULL; -      memset(newV, 0, tsize); -      for (i = 0; i < table->size; i++) -        if (table->v[i]) { -          size_t j; -          for (j = hash(table->v[i]->name) & (newSize - 1); -               newV[j]; -               j == 0 ? j = newSize - 1 : --j) -            ; -          newV[j] = table->v[i]; -        } -      table->mem->free_fcn(table->v); -      table->v = newV; -      table->size = newSize; -      table->usedLim = newSize/2; -      for (i = h & (table->size - 1); -           table->v[i]; -           i == 0 ? i = table->size - 1 : --i) -        ; -    } -  } -  table->v[i] = table->mem->malloc_fcn(createSize); -  if (!table->v[i]) -    return NULL; -  memset(table->v[i], 0, createSize); -  table->v[i]->name = name; -  (table->used)++; -  return table->v[i]; -} - -static void FASTCALL -hashTableClear(HASH_TABLE *table) -{ -  size_t i; -  for (i = 0; i < table->size; i++) { -    NAMED *p = table->v[i]; -    if (p) { -      table->mem->free_fcn(p); -      table->v[i] = NULL; -    } -  } -  table->usedLim = table->size / 2; -  table->used = 0; -} - -static void FASTCALL -hashTableDestroy(HASH_TABLE *table) -{ -  size_t i; -  for (i = 0; i < table->size; i++) { -    NAMED *p = table->v[i]; -    if (p) -      table->mem->free_fcn(p); -  } -  if (table->v) -    table->mem->free_fcn(table->v); -} - -static void FASTCALL -hashTableInit(HASH_TABLE *p, XML_Memory_Handling_Suite *ms) -{ -  p->size = 0; -  p->usedLim = 0; -  p->used = 0; -  p->v = NULL; -  p->mem = ms; -} - -static void FASTCALL -hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) -{ -  iter->p = table->v; -  iter->end = iter->p + table->size; -} - -static NAMED * FASTCALL -hashTableIterNext(HASH_TABLE_ITER *iter) -{ -  while (iter->p != iter->end) { -    NAMED *tem = *(iter->p)++; -    if (tem) -      return tem; -  } -  return NULL; -} - -static void FASTCALL -poolInit(STRING_POOL *pool, XML_Memory_Handling_Suite *ms) -{ -  pool->blocks = NULL; -  pool->freeBlocks = NULL; -  pool->start = NULL; -  pool->ptr = NULL; -  pool->end = NULL; -  pool->mem = ms; -} - -static void FASTCALL -poolClear(STRING_POOL *pool) -{ -  if (!pool->freeBlocks) -    pool->freeBlocks = pool->blocks; -  else { -    BLOCK *p = pool->blocks; -    while (p) { -      BLOCK *tem = p->next; -      p->next = pool->freeBlocks; -      pool->freeBlocks = p; -      p = tem; -    } -  } -  pool->blocks = NULL; -  pool->start = NULL; -  pool->ptr = NULL; -  pool->end = NULL; -} - -static void FASTCALL -poolDestroy(STRING_POOL *pool) -{ -  BLOCK *p = pool->blocks; -  while (p) { -    BLOCK *tem = p->next; -    pool->mem->free_fcn(p); -    p = tem; -  } -  p = pool->freeBlocks; -  while (p) { -    BLOCK *tem = p->next; -    pool->mem->free_fcn(p); -    p = tem; -  } -} - -static XML_Char * FASTCALL -poolAppend(STRING_POOL *pool, const ENCODING *enc, -           const char *ptr, const char *end) -{ -  if (!pool->ptr && !poolGrow(pool)) -    return NULL; -  for (;;) { -    XmlConvert(enc, &ptr, end, (ICHAR **)&(pool->ptr), (ICHAR *)pool->end); -    if (ptr == end) -      break; -    if (!poolGrow(pool)) -      return NULL; -  } -  return pool->start; -} - -static const XML_Char * FASTCALL -poolCopyString(STRING_POOL *pool, const XML_Char *s) -{ -  do { -    if (!poolAppendChar(pool, *s)) -      return NULL; -  } while (*s++); -  s = pool->start; -  poolFinish(pool); -  return s; -} - -static const XML_Char * FASTCALL -poolCopyStringN(STRING_POOL *pool, const XML_Char *s, int n) -{ -  if (!pool->ptr && !poolGrow(pool)) -    return NULL; -  for (; n > 0; --n, s++) { -    if (!poolAppendChar(pool, *s)) -      return NULL; -  } -  s = pool->start; -  poolFinish(pool); -  return s; -} - -static const XML_Char * FASTCALL -poolAppendString(STRING_POOL *pool, const XML_Char *s) -{ -  while (*s) { -    if (!poolAppendChar(pool, *s)) -      return NULL; -    s++; -  } -  return pool->start; -} - -static XML_Char * FASTCALL -poolStoreString(STRING_POOL *pool, const ENCODING *enc, -                const char *ptr, const char *end) -{ -  if (!poolAppend(pool, enc, ptr, end)) -    return NULL; -  if (pool->ptr == pool->end && !poolGrow(pool)) -    return NULL; -  *(pool->ptr)++ = 0; -  return pool->start; -} - -static XML_Bool FASTCALL -poolGrow(STRING_POOL *pool) -{ -  if (pool->freeBlocks) { -    if (pool->start == 0) { -      pool->blocks = pool->freeBlocks; -      pool->freeBlocks = pool->freeBlocks->next; -      pool->blocks->next = NULL; -      pool->start = pool->blocks->s; -      pool->end = pool->start + pool->blocks->size; -      pool->ptr = pool->start; -      return XML_TRUE; -    } -    if (pool->end - pool->start < pool->freeBlocks->size) { -      BLOCK *tem = pool->freeBlocks->next; -      pool->freeBlocks->next = pool->blocks; -      pool->blocks = pool->freeBlocks; -      pool->freeBlocks = tem; -      memcpy(pool->blocks->s, pool->start, -             (pool->end - pool->start) * sizeof(XML_Char)); -      pool->ptr = pool->blocks->s + (pool->ptr - pool->start); -      pool->start = pool->blocks->s; -      pool->end = pool->start + pool->blocks->size; -      return XML_TRUE; -    } -  } -  if (pool->blocks && pool->start == pool->blocks->s) { -    int blockSize = (pool->end - pool->start)*2; -    pool->blocks = pool->mem->realloc_fcn(pool->blocks, -                                          offsetof(BLOCK, s) -                                          + blockSize * sizeof(XML_Char)); -    if (pool->blocks == NULL) -      return XML_FALSE; -    pool->blocks->size = blockSize; -    pool->ptr = pool->blocks->s + (pool->ptr - pool->start); -    pool->start = pool->blocks->s; -    pool->end = pool->start + blockSize; -  } -  else { -    BLOCK *tem; -    int blockSize = pool->end - pool->start; -    if (blockSize < INIT_BLOCK_SIZE) -      blockSize = INIT_BLOCK_SIZE; -    else -      blockSize *= 2; -    tem = pool->mem->malloc_fcn(offsetof(BLOCK, s) -                                + blockSize * sizeof(XML_Char)); -    if (!tem) -      return XML_FALSE; -    tem->size = blockSize; -    tem->next = pool->blocks; -    pool->blocks = tem; -    if (pool->ptr != pool->start) -      memcpy(tem->s, pool->start, -             (pool->ptr - pool->start) * sizeof(XML_Char)); -    pool->ptr = tem->s + (pool->ptr - pool->start); -    pool->start = tem->s; -    pool->end = tem->s + blockSize; -  } -  return XML_TRUE; -} - -static int FASTCALL -nextScaffoldPart(XML_Parser parser) -{ -  CONTENT_SCAFFOLD * me; -  int next; - -  if (!dtd.scaffIndex) { -    dtd.scaffIndex = MALLOC(groupSize * sizeof(int)); -    if (!dtd.scaffIndex) -      return -1; -    dtd.scaffIndex[0] = 0; -  } - -  if (dtd.scaffCount >= dtd.scaffSize) { -    CONTENT_SCAFFOLD *temp; -    if (dtd.scaffold) { -      temp = (CONTENT_SCAFFOLD *) -        REALLOC(dtd.scaffold, dtd.scaffSize * 2 * sizeof(CONTENT_SCAFFOLD)); -      if (temp == NULL) -        return -1; -      dtd.scaffSize *= 2; -    } -    else { -      temp = MALLOC(INIT_SCAFFOLD_ELEMENTS * sizeof(CONTENT_SCAFFOLD)); -      if (temp == NULL) -        return -1; -      dtd.scaffSize = INIT_SCAFFOLD_ELEMENTS; -    } -    dtd.scaffold = temp; -  } -  next = dtd.scaffCount++; -  me = &dtd.scaffold[next]; -  if (dtd.scaffLevel) { -    CONTENT_SCAFFOLD *parent = &dtd.scaffold[dtd.scaffIndex[dtd.scaffLevel-1]]; -    if (parent->lastchild) { -      dtd.scaffold[parent->lastchild].nextsib = next; -    } -    if (!parent->childcnt) -      parent->firstchild = next; -    parent->lastchild = next; -    parent->childcnt++; -  } -  me->firstchild = me->lastchild = me->childcnt = me->nextsib = 0; -  return next; -} - -static void FASTCALL -build_node(XML_Parser parser, -           int src_node, -           XML_Content *dest, -           XML_Content **contpos, -           XML_Char **strpos) -{ -  dest->type = dtd.scaffold[src_node].type; -  dest->quant = dtd.scaffold[src_node].quant; -  if (dest->type == XML_CTYPE_NAME) { -    const XML_Char *src; -    dest->name = *strpos; -    src = dtd.scaffold[src_node].name; -    for (;;) { -      *(*strpos)++ = *src; -      if (!*src) -        break; -      src++; -    } -    dest->numchildren = 0; -    dest->children = NULL; -  } -  else { -    unsigned int i; -    int cn; -    dest->numchildren = dtd.scaffold[src_node].childcnt; -    dest->children = *contpos; -    *contpos += dest->numchildren; -    for (i = 0, cn = dtd.scaffold[src_node].firstchild; -         i < dest->numchildren; -         i++, cn = dtd.scaffold[cn].nextsib) { -      build_node(parser, cn, &(dest->children[i]), contpos, strpos); -    } -    dest->name = NULL; -  } -} - -static XML_Content * FASTCALL -build_model (XML_Parser parser) -{ -  XML_Content *ret; -  XML_Content *cpos; -  XML_Char * str; -  int allocsize = (dtd.scaffCount * sizeof(XML_Content) -                   + (dtd.contentStringLen * sizeof(XML_Char))); - -  ret = MALLOC(allocsize); -  if (!ret) -    return NULL; - -  str =  (XML_Char *) (&ret[dtd.scaffCount]); -  cpos = &ret[1]; - -  build_node(parser, 0, ret, &cpos, &str); -  return ret; -} - -static ELEMENT_TYPE * FASTCALL -getElementType(XML_Parser parser, -               const ENCODING *enc, -               const char *ptr, -               const char *end) -{ -  const XML_Char *name = poolStoreString(&dtd.pool, enc, ptr, end); -  ELEMENT_TYPE *ret; - -  if (!name) -    return NULL; -  ret = (ELEMENT_TYPE *) lookup(&dtd.elementTypes, name, sizeof(ELEMENT_TYPE)); -  if (!ret) -    return NULL; -  if (ret->name != name) -    poolDiscard(&dtd.pool); -  else { -    poolFinish(&dtd.pool); -    if (!setElementTypePrefix(parser, ret)) -      return NULL; -  } -  return ret; -} diff --git a/ext/xml/expat/xmlrole.c b/ext/xml/expat/xmlrole.c deleted file mode 100644 index d9a2367087..0000000000 --- a/ext/xml/expat/xmlrole.c +++ /dev/null @@ -1,1330 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#if PHP_WIN32 -#include "config.w32.h" -#else -#include "php_config.h" -#endif -#include "php_compat.h" - -#ifdef COMPILED_FROM_DSP -#include "winconfig.h" -#elif defined(MACOS_CLASSIC) -#include "macconfig.h" -/* -#else -#include <php_config.h> -*/ -#endif /* ndef COMPILED_FROM_DSP */ - -#include "internal.h" -#include "xmlrole.h" -#include "ascii.h" - -/* Doesn't check: - - that ,| are not mixed in a model group - content of literals - -*/ - -static const char KW_ANY[] = { -    ASCII_A, ASCII_N, ASCII_Y, '\0' }; -static const char KW_ATTLIST[] = { -    ASCII_A, ASCII_T, ASCII_T, ASCII_L, ASCII_I, ASCII_S, ASCII_T, '\0' }; -static const char KW_CDATA[] = { -    ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; -static const char KW_DOCTYPE[] = { -    ASCII_D, ASCII_O, ASCII_C, ASCII_T, ASCII_Y, ASCII_P, ASCII_E, '\0' }; -static const char KW_ELEMENT[] = { -    ASCII_E, ASCII_L, ASCII_E, ASCII_M, ASCII_E, ASCII_N, ASCII_T, '\0' }; -static const char KW_EMPTY[] = { -    ASCII_E, ASCII_M, ASCII_P, ASCII_T, ASCII_Y, '\0' }; -static const char KW_ENTITIES[] = { -    ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_I, ASCII_E, ASCII_S, -    '\0' }; -static const char KW_ENTITY[] = { -    ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0' }; -static const char KW_FIXED[] = { -    ASCII_F, ASCII_I, ASCII_X, ASCII_E, ASCII_D, '\0' }; -static const char KW_ID[] = { -    ASCII_I, ASCII_D, '\0' }; -static const char KW_IDREF[] = { -    ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0' }; -static const char KW_IDREFS[] = { -    ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0' }; -static const char KW_IGNORE[] = { -    ASCII_I, ASCII_G, ASCII_N, ASCII_O, ASCII_R, ASCII_E, '\0' }; -static const char KW_IMPLIED[] = { -    ASCII_I, ASCII_M, ASCII_P, ASCII_L, ASCII_I, ASCII_E, ASCII_D, '\0' }; -static const char KW_INCLUDE[] = { -    ASCII_I, ASCII_N, ASCII_C, ASCII_L, ASCII_U, ASCII_D, ASCII_E, '\0' }; -static const char KW_NDATA[] = { -    ASCII_N, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; -static const char KW_NMTOKEN[] = { -    ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0' }; -static const char KW_NMTOKENS[] = { -    ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, ASCII_S, -    '\0' }; -static const char KW_NOTATION[] = -    { ASCII_N, ASCII_O, ASCII_T, ASCII_A, ASCII_T, ASCII_I, ASCII_O, ASCII_N, -      '\0' }; -static const char KW_PCDATA[] = { -    ASCII_P, ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0' }; -static const char KW_PUBLIC[] = { -    ASCII_P, ASCII_U, ASCII_B, ASCII_L, ASCII_I, ASCII_C, '\0' }; -static const char KW_REQUIRED[] = { -    ASCII_R, ASCII_E, ASCII_Q, ASCII_U, ASCII_I, ASCII_R, ASCII_E, ASCII_D, -    '\0' }; -static const char KW_SYSTEM[] = { -    ASCII_S, ASCII_Y, ASCII_S, ASCII_T, ASCII_E, ASCII_M, '\0' }; - -#ifndef MIN_BYTES_PER_CHAR -#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar) -#endif - -#ifdef XML_DTD -#define setTopLevel(state) \ -  ((state)->handler = ((state)->documentEntity \ -                       ? internalSubset \ -                       : externalSubset1)) -#else /* not XML_DTD */ -#define setTopLevel(state) ((state)->handler = internalSubset) -#endif /* not XML_DTD */ - -typedef int FASTCALL PROLOG_HANDLER(PROLOG_STATE *state, -                                    int tok, -                                    const char *ptr, -                                    const char *end, -                                    const ENCODING *enc); - -static PROLOG_HANDLER -  prolog0, prolog1, prolog2, -  doctype0, doctype1, doctype2, doctype3, doctype4, doctype5, -  internalSubset, -  entity0, entity1, entity2, entity3, entity4, entity5, entity6, -  entity7, entity8, entity9, entity10, -  notation0, notation1, notation2, notation3, notation4, -  attlist0, attlist1, attlist2, attlist3, attlist4, attlist5, attlist6, -  attlist7, attlist8, attlist9, -  element0, element1, element2, element3, element4, element5, element6, -  element7, -#ifdef XML_DTD -  externalSubset0, externalSubset1, -  condSect0, condSect1, condSect2, -#endif /* XML_DTD */ -  declClose, -  error; - -static int FASTCALL common(PROLOG_STATE *state, int tok); - -static int FASTCALL -prolog0(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    state->handler = prolog1; -    return XML_ROLE_NONE; -  case XML_TOK_XML_DECL: -    state->handler = prolog1; -    return XML_ROLE_XML_DECL; -  case XML_TOK_PI: -    state->handler = prolog1; -    return XML_ROLE_PI; -  case XML_TOK_COMMENT: -    state->handler = prolog1; -    return XML_ROLE_COMMENT; -  case XML_TOK_BOM: -    return XML_ROLE_NONE; -  case XML_TOK_DECL_OPEN: -    if (!XmlNameMatchesAscii(enc, -                             ptr + 2 * MIN_BYTES_PER_CHAR(enc), -                             end, -                             KW_DOCTYPE)) -      break; -    state->handler = doctype0; -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_INSTANCE_START: -    state->handler = error; -    return XML_ROLE_INSTANCE_START; -  } -  return common(state, tok); -} - -static int FASTCALL -prolog1(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_PI: -    return XML_ROLE_PI; -  case XML_TOK_COMMENT: -    return XML_ROLE_COMMENT; -  case XML_TOK_BOM: -    return XML_ROLE_NONE; -  case XML_TOK_DECL_OPEN: -    if (!XmlNameMatchesAscii(enc, -                             ptr + 2 * MIN_BYTES_PER_CHAR(enc), -                             end, -                             KW_DOCTYPE)) -      break; -    state->handler = doctype0; -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_INSTANCE_START: -    state->handler = error; -    return XML_ROLE_INSTANCE_START; -  } -  return common(state, tok); -} - -static int FASTCALL -prolog2(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_PI: -    return XML_ROLE_PI; -  case XML_TOK_COMMENT: -    return XML_ROLE_COMMENT; -  case XML_TOK_INSTANCE_START: -    state->handler = error; -    return XML_ROLE_INSTANCE_START; -  } -  return common(state, tok); -} - -static int FASTCALL -doctype0(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = doctype1; -    return XML_ROLE_DOCTYPE_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -doctype1(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_OPEN_BRACKET: -    state->handler = internalSubset; -    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; -  case XML_TOK_DECL_CLOSE: -    state->handler = prolog2; -    return XML_ROLE_DOCTYPE_CLOSE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { -      state->handler = doctype3; -      return XML_ROLE_DOCTYPE_NONE; -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { -      state->handler = doctype2; -      return XML_ROLE_DOCTYPE_NONE; -    } -    break; -  } -  return common(state, tok); -} - -static int FASTCALL -doctype2(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_LITERAL: -    state->handler = doctype3; -    return XML_ROLE_DOCTYPE_PUBLIC_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -doctype3(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_LITERAL: -    state->handler = doctype4; -    return XML_ROLE_DOCTYPE_SYSTEM_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -doctype4(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_OPEN_BRACKET: -    state->handler = internalSubset; -    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET; -  case XML_TOK_DECL_CLOSE: -    state->handler = prolog2; -    return XML_ROLE_DOCTYPE_CLOSE; -  } -  return common(state, tok); -} - -static int FASTCALL -doctype5(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_DOCTYPE_NONE; -  case XML_TOK_DECL_CLOSE: -    state->handler = prolog2; -    return XML_ROLE_DOCTYPE_CLOSE; -  } -  return common(state, tok); -} - -static int FASTCALL -internalSubset(PROLOG_STATE *state, -               int tok, -               const char *ptr, -               const char *end, -               const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_DECL_OPEN: -    if (XmlNameMatchesAscii(enc, -                            ptr + 2 * MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_ENTITY)) { -      state->handler = entity0; -      return XML_ROLE_ENTITY_NONE; -    } -    if (XmlNameMatchesAscii(enc, -                            ptr + 2 * MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_ATTLIST)) { -      state->handler = attlist0; -      return XML_ROLE_ATTLIST_NONE; -    } -    if (XmlNameMatchesAscii(enc, -                            ptr + 2 * MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_ELEMENT)) { -      state->handler = element0; -      return XML_ROLE_ELEMENT_NONE; -    } -    if (XmlNameMatchesAscii(enc, -                            ptr + 2 * MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_NOTATION)) { -      state->handler = notation0; -      return XML_ROLE_NOTATION_NONE; -    } -    break; -  case XML_TOK_PI: -    return XML_ROLE_PI; -  case XML_TOK_COMMENT: -    return XML_ROLE_COMMENT; -  case XML_TOK_PARAM_ENTITY_REF: -    return XML_ROLE_PARAM_ENTITY_REF; -  case XML_TOK_CLOSE_BRACKET: -    state->handler = doctype5; -    return XML_ROLE_DOCTYPE_NONE; -  } -  return common(state, tok); -} - -#ifdef XML_DTD - -static int FASTCALL -externalSubset0(PROLOG_STATE *state, -                int tok, -                const char *ptr, -                const char *end, -                const ENCODING *enc) -{ -  state->handler = externalSubset1; -  if (tok == XML_TOK_XML_DECL) -    return XML_ROLE_TEXT_DECL; -  return externalSubset1(state, tok, ptr, end, enc); -} - -static int FASTCALL -externalSubset1(PROLOG_STATE *state, -                int tok, -                const char *ptr, -                const char *end, -                const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_COND_SECT_OPEN: -    state->handler = condSect0; -    return XML_ROLE_NONE; -  case XML_TOK_COND_SECT_CLOSE: -    if (state->includeLevel == 0) -      break; -    state->includeLevel -= 1; -    return XML_ROLE_NONE; -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_CLOSE_BRACKET: -    break; -  case XML_TOK_NONE: -    if (state->includeLevel) -      break; -    return XML_ROLE_NONE; -  default: -    return internalSubset(state, tok, ptr, end, enc); -  } -  return common(state, tok); -} - -#endif /* XML_DTD */ - -static int FASTCALL -entity0(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_PERCENT: -    state->handler = entity1; -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_NAME: -    state->handler = entity2; -    return XML_ROLE_GENERAL_ENTITY_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -entity1(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_NAME: -    state->handler = entity7; -    return XML_ROLE_PARAM_ENTITY_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -entity2(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { -      state->handler = entity4; -      return XML_ROLE_ENTITY_NONE; -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { -      state->handler = entity3; -      return XML_ROLE_ENTITY_NONE; -    } -    break; -  case XML_TOK_LITERAL: -    state->handler = declClose; -    state->role_none = XML_ROLE_ENTITY_NONE; -    return XML_ROLE_ENTITY_VALUE; -  } -  return common(state, tok); -} - -static int FASTCALL -entity3(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_LITERAL: -    state->handler = entity4; -    return XML_ROLE_ENTITY_PUBLIC_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -entity4(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_LITERAL: -    state->handler = entity5; -    return XML_ROLE_ENTITY_SYSTEM_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -entity5(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_DECL_CLOSE: -    setTopLevel(state); -    return XML_ROLE_ENTITY_COMPLETE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) { -      state->handler = entity6; -      return XML_ROLE_ENTITY_NONE; -    } -    break; -  } -  return common(state, tok); -} - -static int FASTCALL -entity6(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_NAME: -    state->handler = declClose; -    state->role_none = XML_ROLE_ENTITY_NONE; -    return XML_ROLE_ENTITY_NOTATION_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -entity7(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { -      state->handler = entity9; -      return XML_ROLE_ENTITY_NONE; -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { -      state->handler = entity8; -      return XML_ROLE_ENTITY_NONE; -    } -    break; -  case XML_TOK_LITERAL: -    state->handler = declClose; -    state->role_none = XML_ROLE_ENTITY_NONE; -    return XML_ROLE_ENTITY_VALUE; -  } -  return common(state, tok); -} - -static int FASTCALL -entity8(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_LITERAL: -    state->handler = entity9; -    return XML_ROLE_ENTITY_PUBLIC_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -entity9(PROLOG_STATE *state, -        int tok, -        const char *ptr, -        const char *end, -        const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_LITERAL: -    state->handler = entity10; -    return XML_ROLE_ENTITY_SYSTEM_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -entity10(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ENTITY_NONE; -  case XML_TOK_DECL_CLOSE: -    setTopLevel(state); -    return XML_ROLE_ENTITY_COMPLETE; -  } -  return common(state, tok); -} - -static int FASTCALL -notation0(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NOTATION_NONE; -  case XML_TOK_NAME: -    state->handler = notation1; -    return XML_ROLE_NOTATION_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -notation1(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NOTATION_NONE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) { -      state->handler = notation3; -      return XML_ROLE_NOTATION_NONE; -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) { -      state->handler = notation2; -      return XML_ROLE_NOTATION_NONE; -    } -    break; -  } -  return common(state, tok); -} - -static int FASTCALL -notation2(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NOTATION_NONE; -  case XML_TOK_LITERAL: -    state->handler = notation4; -    return XML_ROLE_NOTATION_PUBLIC_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -notation3(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NOTATION_NONE; -  case XML_TOK_LITERAL: -    state->handler = declClose; -    state->role_none = XML_ROLE_NOTATION_NONE; -    return XML_ROLE_NOTATION_SYSTEM_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -notation4(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NOTATION_NONE; -  case XML_TOK_LITERAL: -    state->handler = declClose; -    state->role_none = XML_ROLE_NOTATION_NONE; -    return XML_ROLE_NOTATION_SYSTEM_ID; -  case XML_TOK_DECL_CLOSE: -    setTopLevel(state); -    return XML_ROLE_NOTATION_NO_SYSTEM_ID; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist0(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = attlist1; -    return XML_ROLE_ATTLIST_ELEMENT_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist1(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_DECL_CLOSE: -    setTopLevel(state); -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = attlist2; -    return XML_ROLE_ATTRIBUTE_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist2(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_NAME: -    { -      static const char *types[] = { -        KW_CDATA, -        KW_ID, -        KW_IDREF, -        KW_IDREFS, -        KW_ENTITY, -        KW_ENTITIES, -        KW_NMTOKEN, -        KW_NMTOKENS, -      }; -      int i; -      for (i = 0; i < (int)(sizeof(types)/sizeof(types[0])); i++) -        if (XmlNameMatchesAscii(enc, ptr, end, types[i])) { -          state->handler = attlist8; -          return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i; -        } -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) { -      state->handler = attlist5; -      return XML_ROLE_ATTLIST_NONE; -    } -    break; -  case XML_TOK_OPEN_PAREN: -    state->handler = attlist3; -    return XML_ROLE_ATTLIST_NONE; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist3(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_NMTOKEN: -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = attlist4; -    return XML_ROLE_ATTRIBUTE_ENUM_VALUE; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist4(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_CLOSE_PAREN: -    state->handler = attlist8; -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_OR: -    state->handler = attlist3; -    return XML_ROLE_ATTLIST_NONE; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist5(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_OPEN_PAREN: -    state->handler = attlist6; -    return XML_ROLE_ATTLIST_NONE; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist6(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_NAME: -    state->handler = attlist7; -    return XML_ROLE_ATTRIBUTE_NOTATION_VALUE; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist7(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_CLOSE_PAREN: -    state->handler = attlist8; -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_OR: -    state->handler = attlist6; -    return XML_ROLE_ATTLIST_NONE; -  } -  return common(state, tok); -} - -/* default value */ -static int FASTCALL -attlist8(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_POUND_NAME: -    if (XmlNameMatchesAscii(enc, -                            ptr + MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_IMPLIED)) { -      state->handler = attlist1; -      return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE; -    } -    if (XmlNameMatchesAscii(enc, -                            ptr + MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_REQUIRED)) { -      state->handler = attlist1; -      return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE; -    } -    if (XmlNameMatchesAscii(enc, -                            ptr + MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_FIXED)) { -      state->handler = attlist9; -      return XML_ROLE_ATTLIST_NONE; -    } -    break; -  case XML_TOK_LITERAL: -    state->handler = attlist1; -    return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE; -  } -  return common(state, tok); -} - -static int FASTCALL -attlist9(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ATTLIST_NONE; -  case XML_TOK_LITERAL: -    state->handler = attlist1; -    return XML_ROLE_FIXED_ATTRIBUTE_VALUE; -  } -  return common(state, tok); -} - -static int FASTCALL -element0(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = element1; -    return XML_ROLE_ELEMENT_NAME; -  } -  return common(state, tok); -} - -static int FASTCALL -element1(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) { -      state->handler = declClose; -      state->role_none = XML_ROLE_ELEMENT_NONE; -      return XML_ROLE_CONTENT_EMPTY; -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) { -      state->handler = declClose; -      state->role_none = XML_ROLE_ELEMENT_NONE; -      return XML_ROLE_CONTENT_ANY; -    } -    break; -  case XML_TOK_OPEN_PAREN: -    state->handler = element2; -    state->level = 1; -    return XML_ROLE_GROUP_OPEN; -  } -  return common(state, tok); -} - -static int FASTCALL -element2(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_POUND_NAME: -    if (XmlNameMatchesAscii(enc, -                            ptr + MIN_BYTES_PER_CHAR(enc), -                            end, -                            KW_PCDATA)) { -      state->handler = element3; -      return XML_ROLE_CONTENT_PCDATA; -    } -    break; -  case XML_TOK_OPEN_PAREN: -    state->level = 2; -    state->handler = element6; -    return XML_ROLE_GROUP_OPEN; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT; -  case XML_TOK_NAME_QUESTION: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT_OPT; -  case XML_TOK_NAME_ASTERISK: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT_REP; -  case XML_TOK_NAME_PLUS: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT_PLUS; -  } -  return common(state, tok); -} - -static int FASTCALL -element3(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_CLOSE_PAREN: -    state->handler = declClose; -    state->role_none = XML_ROLE_ELEMENT_NONE; -    return XML_ROLE_GROUP_CLOSE; -  case XML_TOK_CLOSE_PAREN_ASTERISK: -    state->handler = declClose; -    state->role_none = XML_ROLE_ELEMENT_NONE; -    return XML_ROLE_GROUP_CLOSE_REP; -  case XML_TOK_OR: -    state->handler = element4; -    return XML_ROLE_ELEMENT_NONE; -  } -  return common(state, tok); -} - -static int FASTCALL -element4(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = element5; -    return XML_ROLE_CONTENT_ELEMENT; -  } -  return common(state, tok); -} - -static int FASTCALL -element5(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_CLOSE_PAREN_ASTERISK: -    state->handler = declClose; -    state->role_none = XML_ROLE_ELEMENT_NONE; -    return XML_ROLE_GROUP_CLOSE_REP; -  case XML_TOK_OR: -    state->handler = element4; -    return XML_ROLE_ELEMENT_NONE; -  } -  return common(state, tok); -} - -static int FASTCALL -element6(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_OPEN_PAREN: -    state->level += 1; -    return XML_ROLE_GROUP_OPEN; -  case XML_TOK_NAME: -  case XML_TOK_PREFIXED_NAME: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT; -  case XML_TOK_NAME_QUESTION: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT_OPT; -  case XML_TOK_NAME_ASTERISK: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT_REP; -  case XML_TOK_NAME_PLUS: -    state->handler = element7; -    return XML_ROLE_CONTENT_ELEMENT_PLUS; -  } -  return common(state, tok); -} - -static int FASTCALL -element7(PROLOG_STATE *state, -         int tok, -         const char *ptr, -         const char *end, -         const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_ELEMENT_NONE; -  case XML_TOK_CLOSE_PAREN: -    state->level -= 1; -    if (state->level == 0) { -      state->handler = declClose; -      state->role_none = XML_ROLE_ELEMENT_NONE; -    } -    return XML_ROLE_GROUP_CLOSE; -  case XML_TOK_CLOSE_PAREN_ASTERISK: -    state->level -= 1; -    if (state->level == 0) { -      state->handler = declClose; -      state->role_none = XML_ROLE_ELEMENT_NONE; -    } -    return XML_ROLE_GROUP_CLOSE_REP; -  case XML_TOK_CLOSE_PAREN_QUESTION: -    state->level -= 1; -    if (state->level == 0) { -      state->handler = declClose; -      state->role_none = XML_ROLE_ELEMENT_NONE; -    } -    return XML_ROLE_GROUP_CLOSE_OPT; -  case XML_TOK_CLOSE_PAREN_PLUS: -    state->level -= 1; -    if (state->level == 0) { -      state->handler = declClose; -      state->role_none = XML_ROLE_ELEMENT_NONE; -    } -    return XML_ROLE_GROUP_CLOSE_PLUS; -  case XML_TOK_COMMA: -    state->handler = element6; -    return XML_ROLE_GROUP_SEQUENCE; -  case XML_TOK_OR: -    state->handler = element6; -    return XML_ROLE_GROUP_CHOICE; -  } -  return common(state, tok); -} - -#ifdef XML_DTD - -static int FASTCALL -condSect0(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_NAME: -    if (XmlNameMatchesAscii(enc, ptr, end, KW_INCLUDE)) { -      state->handler = condSect1; -      return XML_ROLE_NONE; -    } -    if (XmlNameMatchesAscii(enc, ptr, end, KW_IGNORE)) { -      state->handler = condSect2; -      return XML_ROLE_NONE; -    } -    break; -  } -  return common(state, tok); -} - -static int FASTCALL -condSect1(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_OPEN_BRACKET: -    state->handler = externalSubset1; -    state->includeLevel += 1; -    return XML_ROLE_NONE; -  } -  return common(state, tok); -} - -static int FASTCALL -condSect2(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return XML_ROLE_NONE; -  case XML_TOK_OPEN_BRACKET: -    state->handler = externalSubset1; -    return XML_ROLE_IGNORE_SECT; -  } -  return common(state, tok); -} - -#endif /* XML_DTD */ - -static int FASTCALL -declClose(PROLOG_STATE *state, -          int tok, -          const char *ptr, -          const char *end, -          const ENCODING *enc) -{ -  switch (tok) { -  case XML_TOK_PROLOG_S: -    return state->role_none; -  case XML_TOK_DECL_CLOSE: -    setTopLevel(state); -    return state->role_none; -  } -  return common(state, tok); -} - -static int FASTCALL -error(PROLOG_STATE *state, -      int tok, -      const char *ptr, -      const char *end, -      const ENCODING *enc) -{ -  return XML_ROLE_NONE; -} - -static int FASTCALL -common(PROLOG_STATE *state, int tok) -{ -#ifdef XML_DTD -  if (!state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF) -    return XML_ROLE_INNER_PARAM_ENTITY_REF; -#endif -  state->handler = error; -  return XML_ROLE_ERROR; -} - -void -XmlPrologStateInit(PROLOG_STATE *state) -{ -  state->handler = prolog0; -#ifdef XML_DTD -  state->documentEntity = 1; -  state->includeLevel = 0; -  state->inEntityValue = 0; -#endif /* XML_DTD */ -} - -#ifdef XML_DTD - -void -XmlPrologStateInitExternalEntity(PROLOG_STATE *state) -{ -  state->handler = externalSubset0; -  state->documentEntity = 0; -  state->includeLevel = 0; -} - -#endif /* XML_DTD */ diff --git a/ext/xml/expat/xmlrole.h b/ext/xml/expat/xmlrole.h deleted file mode 100644 index 281aba0481..0000000000 --- a/ext/xml/expat/xmlrole.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#ifndef XmlRole_INCLUDED -#define XmlRole_INCLUDED 1 - -#ifdef __VMS -/*      0        1         2         3      0        1         2         3 -        1234567890123456789012345678901     1234567890123456789012345678901 */ -#define XmlPrologStateInitExternalEntity    XmlPrologStateInitExternalEnt    -#endif - -#include "xmltok.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum { -  XML_ROLE_ERROR = -1, -  XML_ROLE_NONE = 0, -  XML_ROLE_XML_DECL, -  XML_ROLE_INSTANCE_START, -  XML_ROLE_DOCTYPE_NONE, -  XML_ROLE_DOCTYPE_NAME, -  XML_ROLE_DOCTYPE_SYSTEM_ID, -  XML_ROLE_DOCTYPE_PUBLIC_ID, -  XML_ROLE_DOCTYPE_INTERNAL_SUBSET, -  XML_ROLE_DOCTYPE_CLOSE, -  XML_ROLE_GENERAL_ENTITY_NAME, -  XML_ROLE_PARAM_ENTITY_NAME, -  XML_ROLE_ENTITY_NONE, -  XML_ROLE_ENTITY_VALUE, -  XML_ROLE_ENTITY_SYSTEM_ID, -  XML_ROLE_ENTITY_PUBLIC_ID, -  XML_ROLE_ENTITY_COMPLETE, -  XML_ROLE_ENTITY_NOTATION_NAME, -  XML_ROLE_NOTATION_NONE, -  XML_ROLE_NOTATION_NAME, -  XML_ROLE_NOTATION_SYSTEM_ID, -  XML_ROLE_NOTATION_NO_SYSTEM_ID, -  XML_ROLE_NOTATION_PUBLIC_ID, -  XML_ROLE_ATTRIBUTE_NAME, -  XML_ROLE_ATTRIBUTE_TYPE_CDATA, -  XML_ROLE_ATTRIBUTE_TYPE_ID, -  XML_ROLE_ATTRIBUTE_TYPE_IDREF, -  XML_ROLE_ATTRIBUTE_TYPE_IDREFS, -  XML_ROLE_ATTRIBUTE_TYPE_ENTITY, -  XML_ROLE_ATTRIBUTE_TYPE_ENTITIES, -  XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN, -  XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS, -  XML_ROLE_ATTRIBUTE_ENUM_VALUE, -  XML_ROLE_ATTRIBUTE_NOTATION_VALUE, -  XML_ROLE_ATTLIST_NONE, -  XML_ROLE_ATTLIST_ELEMENT_NAME, -  XML_ROLE_IMPLIED_ATTRIBUTE_VALUE, -  XML_ROLE_REQUIRED_ATTRIBUTE_VALUE, -  XML_ROLE_DEFAULT_ATTRIBUTE_VALUE, -  XML_ROLE_FIXED_ATTRIBUTE_VALUE, -  XML_ROLE_ELEMENT_NONE, -  XML_ROLE_ELEMENT_NAME, -  XML_ROLE_CONTENT_ANY, -  XML_ROLE_CONTENT_EMPTY, -  XML_ROLE_CONTENT_PCDATA, -  XML_ROLE_GROUP_OPEN, -  XML_ROLE_GROUP_CLOSE, -  XML_ROLE_GROUP_CLOSE_REP, -  XML_ROLE_GROUP_CLOSE_OPT, -  XML_ROLE_GROUP_CLOSE_PLUS, -  XML_ROLE_GROUP_CHOICE, -  XML_ROLE_GROUP_SEQUENCE, -  XML_ROLE_CONTENT_ELEMENT, -  XML_ROLE_CONTENT_ELEMENT_REP, -  XML_ROLE_CONTENT_ELEMENT_OPT, -  XML_ROLE_CONTENT_ELEMENT_PLUS, -  XML_ROLE_PI, -  XML_ROLE_COMMENT, -#ifdef XML_DTD -  XML_ROLE_TEXT_DECL, -  XML_ROLE_IGNORE_SECT, -  XML_ROLE_INNER_PARAM_ENTITY_REF, -#endif /* XML_DTD */ -  XML_ROLE_PARAM_ENTITY_REF -}; - -typedef struct prolog_state { -  int (FASTCALL *handler) (struct prolog_state *state, -                          int tok, -                          const char *ptr, -                          const char *end, -                          const ENCODING *enc); -  unsigned level; -  int role_none; -#ifdef XML_DTD -  unsigned includeLevel; -  int documentEntity; -  int inEntityValue; -#endif /* XML_DTD */ -} PROLOG_STATE; - -void XmlPrologStateInit(PROLOG_STATE *); -#ifdef XML_DTD -void XmlPrologStateInitExternalEntity(PROLOG_STATE *); -#endif /* XML_DTD */ - -#define XmlTokenRole(state, tok, ptr, end, enc) \ - (((state)->handler)(state, tok, ptr, end, enc)) - -#ifdef __cplusplus -} -#endif - -#endif /* not XmlRole_INCLUDED */ diff --git a/ext/xml/expat/xmltok.c b/ext/xml/expat/xmltok.c deleted file mode 100644 index 0a11e56748..0000000000 --- a/ext/xml/expat/xmltok.c +++ /dev/null @@ -1,1641 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#if PHP_WIN32 -#include "config.w32.h" -#else -#include "php_config.h" -#endif -#include "php_compat.h" - -#ifdef COMPILED_FROM_DSP -#include "winconfig.h" -#elif defined(MACOS_CLASSIC) -#include "macconfig.h" -/* -#else -#include <php_config.h> -*/ -#endif /* ndef COMPILED_FROM_DSP */ - -#include "internal.h" -#include "xmltok.h" -#include "nametab.h" - -#ifdef XML_DTD -#define IGNORE_SECTION_TOK_VTABLE , PREFIX(ignoreSectionTok) -#else -#define IGNORE_SECTION_TOK_VTABLE /* as nothing */ -#endif - -#define VTABLE1 \ -  { PREFIX(prologTok), PREFIX(contentTok), \ -    PREFIX(cdataSectionTok) IGNORE_SECTION_TOK_VTABLE }, \ -  { PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \ -  PREFIX(sameName), \ -  PREFIX(nameMatchesAscii), \ -  PREFIX(nameLength), \ -  PREFIX(skipS), \ -  PREFIX(getAtts), \ -  PREFIX(charRefNumber), \ -  PREFIX(predefinedEntityName), \ -  PREFIX(updatePosition), \ -  PREFIX(isPublicId) - -#define VTABLE VTABLE1, PREFIX(toUtf8), PREFIX(toUtf16) - -#define UCS2_GET_NAMING(pages, hi, lo) \ -   (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F))) - -/* A 2 byte UTF-8 representation splits the characters 11 bits between -   the bottom 5 and 6 bits of the bytes.  We need 8 bits to index into -   pages, 3 bits to add to that index and 5 bits to generate the mask. -*/ -#define UTF8_GET_NAMING2(pages, byte) \ -    (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \ -                      + ((((byte)[0]) & 3) << 1) \ -                      + ((((byte)[1]) >> 5) & 1)] \ -         & (1 << (((byte)[1]) & 0x1F))) - -/* A 3 byte UTF-8 representation splits the characters 16 bits between -   the bottom 4, 6 and 6 bits of the bytes.  We need 8 bits to index -   into pages, 3 bits to add to that index and 5 bits to generate the -   mask. -*/ -#define UTF8_GET_NAMING3(pages, byte) \ -  (namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \ -                             + ((((byte)[1]) >> 2) & 0xF)] \ -                       << 3) \ -                      + ((((byte)[1]) & 3) << 1) \ -                      + ((((byte)[2]) >> 5) & 1)] \ -         & (1 << (((byte)[2]) & 0x1F))) - -#define UTF8_GET_NAMING(pages, p, n) \ -  ((n) == 2 \ -  ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ -  : ((n) == 3 \ -     ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ -     : 0)) - -/* Detection of invalid UTF-8 sequences is based on Table 3.1B -   of Unicode 3.2: http://www.unicode.org/unicode/reports/tr28/ -   with the additional restriction of not allowing the Unicode -   code points 0xFFFF and 0xFFFE (sequences EF,BF,BF and EF,BF,BE). -   Implementation details: -     (A & 0x80) == 0     means A < 0x80 -   and -     (A & 0xC0) == 0xC0  means A > 0xBF -*/ - -#define UTF8_INVALID2(p) \ -  ((*p) < 0xC2 || ((p)[1] & 0x80) == 0 || ((p)[1] & 0xC0) == 0xC0) - -#define UTF8_INVALID3(p) \ -  (((p)[2] & 0x80) == 0 \ -  || \ -  ((*p) == 0xEF && (p)[1] == 0xBF \ -    ? \ -    (p)[2] > 0xBD \ -    : \ -    ((p)[2] & 0xC0) == 0xC0) \ -  || \ -  ((*p) == 0xE0 \ -    ? \ -    (p)[1] < 0xA0 || ((p)[1] & 0xC0) == 0xC0 \ -    : \ -    ((p)[1] & 0x80) == 0 \ -    || \ -    ((*p) == 0xED ? (p)[1] > 0x9F : ((p)[1] & 0xC0) == 0xC0))) - -#define UTF8_INVALID4(p) \ -  (((p)[3] & 0x80) == 0 || ((p)[3] & 0xC0) == 0xC0 \ -  || \ -  ((p)[2] & 0x80) == 0 || ((p)[2] & 0xC0) == 0xC0 \ -  || \ -  ((*p) == 0xF0 \ -    ? \ -    (p)[1] < 0x90 || ((p)[1] & 0xC0) == 0xC0 \ -    : \ -    ((p)[1] & 0x80) == 0 \ -    || \ -    ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0))) - -static int FASTCALL -isNever(const ENCODING *enc, const char *p) -{ -  return 0; -} - -static int FASTCALL -utf8_isName2(const ENCODING *enc, const char *p) -{ -  return UTF8_GET_NAMING2(namePages, (const unsigned char *)p); -} - -static int FASTCALL -utf8_isName3(const ENCODING *enc, const char *p) -{ -  return UTF8_GET_NAMING3(namePages, (const unsigned char *)p); -} - -#define utf8_isName4 isNever - -static int FASTCALL -utf8_isNmstrt2(const ENCODING *enc, const char *p) -{ -  return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p); -} - -static int FASTCALL -utf8_isNmstrt3(const ENCODING *enc, const char *p) -{ -  return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p); -} - -#define utf8_isNmstrt4 isNever - -static int FASTCALL -utf8_isInvalid2(const ENCODING *enc, const char *p) -{ -  return UTF8_INVALID2((const unsigned char *)p); -} - -static int FASTCALL -utf8_isInvalid3(const ENCODING *enc, const char *p) -{ -  return UTF8_INVALID3((const unsigned char *)p); -} - -static int FASTCALL -utf8_isInvalid4(const ENCODING *enc, const char *p) -{ -  return UTF8_INVALID4((const unsigned char *)p); -} - -struct normal_encoding { -  ENCODING enc; -  unsigned char type[256]; -#ifdef XML_MIN_SIZE -  int (FASTCALL *byteType)(const ENCODING *, const char *); -  int (FASTCALL *isNameMin)(const ENCODING *, const char *); -  int (FASTCALL *isNmstrtMin)(const ENCODING *, const char *); -  int (FASTCALL *byteToAscii)(const ENCODING *, const char *); -  int (FASTCALL *charMatches)(const ENCODING *, const char *, int); -#endif /* XML_MIN_SIZE */ -  int (FASTCALL *isName2)(const ENCODING *, const char *); -  int (FASTCALL *isName3)(const ENCODING *, const char *); -  int (FASTCALL *isName4)(const ENCODING *, const char *); -  int (FASTCALL *isNmstrt2)(const ENCODING *, const char *); -  int (FASTCALL *isNmstrt3)(const ENCODING *, const char *); -  int (FASTCALL *isNmstrt4)(const ENCODING *, const char *); -  int (FASTCALL *isInvalid2)(const ENCODING *, const char *); -  int (FASTCALL *isInvalid3)(const ENCODING *, const char *); -  int (FASTCALL *isInvalid4)(const ENCODING *, const char *); -}; - -#define AS_NORMAL_ENCODING(enc)   ((const struct normal_encoding *) (enc)) - -#ifdef XML_MIN_SIZE - -#define STANDARD_VTABLE(E) \ - E ## byteType, \ - E ## isNameMin, \ - E ## isNmstrtMin, \ - E ## byteToAscii, \ - E ## charMatches, - -#else - -#define STANDARD_VTABLE(E) /* as nothing */ - -#endif - -#define NORMAL_VTABLE(E) \ - E ## isName2, \ - E ## isName3, \ - E ## isName4, \ - E ## isNmstrt2, \ - E ## isNmstrt3, \ - E ## isNmstrt4, \ - E ## isInvalid2, \ - E ## isInvalid3, \ - E ## isInvalid4 - -static int FASTCALL checkCharRefNumber(int); - -#include "xmltok_impl.h" -#include "ascii.h" - -#ifdef XML_MIN_SIZE -#define sb_isNameMin isNever -#define sb_isNmstrtMin isNever -#endif - -#ifdef XML_MIN_SIZE -#define MINBPC(enc) ((enc)->minBytesPerChar) -#else -/* minimum bytes per character */ -#define MINBPC(enc) 1 -#endif - -#define SB_BYTE_TYPE(enc, p) \ -  (((struct normal_encoding *)(enc))->type[(unsigned char)*(p)]) - -#ifdef XML_MIN_SIZE -static int FASTCALL -sb_byteType(const ENCODING *enc, const char *p) -{ -  return SB_BYTE_TYPE(enc, p); -} -#define BYTE_TYPE(enc, p) \ - (AS_NORMAL_ENCODING(enc)->byteType(enc, p)) -#else -#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p) -#endif - -#ifdef XML_MIN_SIZE -#define BYTE_TO_ASCII(enc, p) \ - (AS_NORMAL_ENCODING(enc)->byteToAscii(enc, p)) -static int FASTCALL -sb_byteToAscii(const ENCODING *enc, const char *p) -{ -  return *p; -} -#else -#define BYTE_TO_ASCII(enc, p) (*(p)) -#endif - -#define IS_NAME_CHAR(enc, p, n) \ - (AS_NORMAL_ENCODING(enc)->isName ## n(enc, p)) -#define IS_NMSTRT_CHAR(enc, p, n) \ - (AS_NORMAL_ENCODING(enc)->isNmstrt ## n(enc, p)) -#define IS_INVALID_CHAR(enc, p, n) \ - (AS_NORMAL_ENCODING(enc)->isInvalid ## n(enc, p)) - -#ifdef XML_MIN_SIZE -#define IS_NAME_CHAR_MINBPC(enc, p) \ - (AS_NORMAL_ENCODING(enc)->isNameMin(enc, p)) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) \ - (AS_NORMAL_ENCODING(enc)->isNmstrtMin(enc, p)) -#else -#define IS_NAME_CHAR_MINBPC(enc, p) (0) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0) -#endif - -#ifdef XML_MIN_SIZE -#define CHAR_MATCHES(enc, p, c) \ - (AS_NORMAL_ENCODING(enc)->charMatches(enc, p, c)) -static int FASTCALL -sb_charMatches(const ENCODING *enc, const char *p, int c) -{ -  return *p == c; -} -#else -/* c is an ASCII character */ -#define CHAR_MATCHES(enc, p, c) (*(p) == c) -#endif - -#define PREFIX(ident) normal_ ## ident -#include "xmltok_impl.c" - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -enum {  /* UTF8_cvalN is value of masked first byte of N byte sequence */ -  UTF8_cval1 = 0x00, -  UTF8_cval2 = 0xc0, -  UTF8_cval3 = 0xe0, -  UTF8_cval4 = 0xf0 -}; - -static void FASTCALL -utf8_toUtf8(const ENCODING *enc, -            const char **fromP, const char *fromLim, -            char **toP, const char *toLim) -{ -  char *to; -  const char *from; -  if (fromLim - *fromP > toLim - *toP) { -    /* Avoid copying partial characters. */ -    for (fromLim = *fromP + (toLim - *toP); fromLim > *fromP; fromLim--) -      if (((unsigned char)fromLim[-1] & 0xc0) != 0x80) -        break; -  } -  for (to = *toP, from = *fromP; from != fromLim; from++, to++) -    *to = *from; -  *fromP = from; -  *toP = to; -} - -static void FASTCALL -utf8_toUtf16(const ENCODING *enc, -             const char **fromP, const char *fromLim, -             unsigned short **toP, const unsigned short *toLim) -{ -  unsigned short *to = *toP; -  const char *from = *fromP; -  while (from != fromLim && to != toLim) { -    switch (((struct normal_encoding *)enc)->type[(unsigned char)*from]) { -    case BT_LEAD2: -      *to++ = (unsigned short)(((from[0] & 0x1f) << 6) | (from[1] & 0x3f)); -      from += 2; -      break; -    case BT_LEAD3: -      *to++ = (unsigned short)(((from[0] & 0xf) << 12) -                               | ((from[1] & 0x3f) << 6) | (from[2] & 0x3f)); -      from += 3; -      break; -    case BT_LEAD4: -      { -        unsigned long n; -        if (to + 1 == toLim) -          goto after; -        n = ((from[0] & 0x7) << 18) | ((from[1] & 0x3f) << 12) -            | ((from[2] & 0x3f) << 6) | (from[3] & 0x3f); -        n -= 0x10000; -        to[0] = (unsigned short)((n >> 10) | 0xD800); -        to[1] = (unsigned short)((n & 0x3FF) | 0xDC00); -        to += 2; -        from += 4; -      } -      break; -    default: -      *to++ = *from++; -      break; -    } -  } -after: -  *fromP = from; -  *toP = to; -} - -#ifdef XML_NS -static const struct normal_encoding utf8_encoding_ns = { -  { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, -  { -#include "asciitab.h" -#include "utf8tab.h" -  }, -  STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; -#endif - -static const struct normal_encoding utf8_encoding = { -  { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, -  { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "utf8tab.h" -  }, -  STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; - -#ifdef XML_NS - -static const struct normal_encoding internal_utf8_encoding_ns = { -  { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, -  { -#include "iasciitab.h" -#include "utf8tab.h" -  }, -  STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; - -#endif - -static const struct normal_encoding internal_utf8_encoding = { -  { VTABLE1, utf8_toUtf8, utf8_toUtf16, 1, 1, 0 }, -  { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "utf8tab.h" -  }, -  STANDARD_VTABLE(sb_) NORMAL_VTABLE(utf8_) -}; - -static void FASTCALL -latin1_toUtf8(const ENCODING *enc, -              const char **fromP, const char *fromLim, -              char **toP, const char *toLim) -{ -  for (;;) { -    unsigned char c; -    if (*fromP == fromLim) -      break; -    c = (unsigned char)**fromP; -    if (c & 0x80) { -      if (toLim - *toP < 2) -        break; -      *(*toP)++ = (char)((c >> 6) | UTF8_cval2); -      *(*toP)++ = (char)((c & 0x3f) | 0x80); -      (*fromP)++; -    } -    else { -      if (*toP == toLim) -        break; -      *(*toP)++ = *(*fromP)++; -    } -  } -} - -static void FASTCALL -latin1_toUtf16(const ENCODING *enc, -               const char **fromP, const char *fromLim, -               unsigned short **toP, const unsigned short *toLim) -{ -  while (*fromP != fromLim && *toP != toLim) -    *(*toP)++ = (unsigned char)*(*fromP)++; -} - -#ifdef XML_NS - -static const struct normal_encoding latin1_encoding_ns = { -  { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, -  { -#include "asciitab.h" -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(sb_) -}; - -#endif - -static const struct normal_encoding latin1_encoding = { -  { VTABLE1, latin1_toUtf8, latin1_toUtf16, 1, 0, 0 }, -  { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(sb_) -}; - -static void FASTCALL -ascii_toUtf8(const ENCODING *enc, -             const char **fromP, const char *fromLim, -             char **toP, const char *toLim) -{ -  while (*fromP != fromLim && *toP != toLim) -    *(*toP)++ = *(*fromP)++; -} - -#ifdef XML_NS - -static const struct normal_encoding ascii_encoding_ns = { -  { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, -  { -#include "asciitab.h" -/* BT_NONXML == 0 */ -  }, -  STANDARD_VTABLE(sb_) -}; - -#endif - -static const struct normal_encoding ascii_encoding = { -  { VTABLE1, ascii_toUtf8, latin1_toUtf16, 1, 1, 0 }, -  { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -/* BT_NONXML == 0 */ -  }, -  STANDARD_VTABLE(sb_) -}; - -static int FASTCALL -unicode_byte_type(char hi, char lo) -{ -  switch ((unsigned char)hi) { -  case 0xD8: case 0xD9: case 0xDA: case 0xDB: -    return BT_LEAD4; -  case 0xDC: case 0xDD: case 0xDE: case 0xDF: -    return BT_TRAIL; -  case 0xFF: -    switch ((unsigned char)lo) { -    case 0xFF: -    case 0xFE: -      return BT_NONXML; -    } -    break; -  } -  return BT_NONASCII; -} - -#define DEFINE_UTF16_TO_UTF8(E) \ -static void  FASTCALL \ -E ## toUtf8(const ENCODING *enc, \ -            const char **fromP, const char *fromLim, \ -            char **toP, const char *toLim) \ -{ \ -  const char *from; \ -  for (from = *fromP; from != fromLim; from += 2) { \ -    int plane; \ -    unsigned char lo2; \ -    unsigned char lo = GET_LO(from); \ -    unsigned char hi = GET_HI(from); \ -    switch (hi) { \ -    case 0: \ -      if (lo < 0x80) { \ -        if (*toP == toLim) { \ -          *fromP = from; \ -          return; \ -        } \ -        *(*toP)++ = lo; \ -        break; \ -      } \ -      /* fall through */ \ -    case 0x1: case 0x2: case 0x3: \ -    case 0x4: case 0x5: case 0x6: case 0x7: \ -      if (toLim -  *toP < 2) { \ -        *fromP = from; \ -        return; \ -      } \ -      *(*toP)++ = ((lo >> 6) | (hi << 2) |  UTF8_cval2); \ -      *(*toP)++ = ((lo & 0x3f) | 0x80); \ -      break; \ -    default: \ -      if (toLim -  *toP < 3)  { \ -        *fromP = from; \ -        return; \ -      } \ -      /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \ -      *(*toP)++ = ((hi >> 4) | UTF8_cval3); \ -      *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \ -      *(*toP)++ = ((lo & 0x3f) | 0x80); \ -      break; \ -    case 0xD8: case 0xD9: case 0xDA: case 0xDB: \ -      if (toLim -  *toP < 4) { \ -        *fromP = from; \ -        return; \ -      } \ -      plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \ -      *(*toP)++ = ((plane >> 2) | UTF8_cval4); \ -      *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \ -      from += 2; \ -      lo2 = GET_LO(from); \ -      *(*toP)++ = (((lo & 0x3) << 4) \ -                   | ((GET_HI(from) & 0x3) << 2) \ -                   | (lo2 >> 6) \ -                   | 0x80); \ -      *(*toP)++ = ((lo2 & 0x3f) | 0x80); \ -      break; \ -    } \ -  } \ -  *fromP = from; \ -} - -#define DEFINE_UTF16_TO_UTF16(E) \ -static void  FASTCALL \ -E ## toUtf16(const ENCODING *enc, \ -             const char **fromP, const char *fromLim, \ -             unsigned short **toP, const unsigned short *toLim) \ -{ \ -  /* Avoid copying first half only of surrogate */ \ -  if (fromLim - *fromP > ((toLim - *toP) << 1) \ -      && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \ -    fromLim -= 2; \ -  for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \ -    *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \ -} - -#define SET2(ptr, ch) \ -  (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8))) -#define GET_LO(ptr) ((unsigned char)(ptr)[0]) -#define GET_HI(ptr) ((unsigned char)(ptr)[1]) - -DEFINE_UTF16_TO_UTF8(little2_) -DEFINE_UTF16_TO_UTF16(little2_) - -#undef SET2 -#undef GET_LO -#undef GET_HI - -#define SET2(ptr, ch) \ -  (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF))) -#define GET_LO(ptr) ((unsigned char)(ptr)[1]) -#define GET_HI(ptr) ((unsigned char)(ptr)[0]) - -DEFINE_UTF16_TO_UTF8(big2_) -DEFINE_UTF16_TO_UTF16(big2_) - -#undef SET2 -#undef GET_LO -#undef GET_HI - -#define LITTLE2_BYTE_TYPE(enc, p) \ - ((p)[1] == 0 \ -  ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \ -  : unicode_byte_type((p)[1], (p)[0])) -#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1) -#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c) -#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \ -  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0]) -#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ -  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0]) - -#ifdef XML_MIN_SIZE - -static int FASTCALL -little2_byteType(const ENCODING *enc, const char *p) -{ -  return LITTLE2_BYTE_TYPE(enc, p); -} - -static int FASTCALL -little2_byteToAscii(const ENCODING *enc, const char *p) -{ -  return LITTLE2_BYTE_TO_ASCII(enc, p); -} - -static int FASTCALL -little2_charMatches(const ENCODING *enc, const char *p, int c) -{ -  return LITTLE2_CHAR_MATCHES(enc, p, c); -} - -static int FASTCALL -little2_isNameMin(const ENCODING *enc, const char *p) -{ -  return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p); -} - -static int FASTCALL -little2_isNmstrtMin(const ENCODING *enc, const char *p) -{ -  return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p); -} - -#undef VTABLE -#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16 - -#else /* not XML_MIN_SIZE */ - -#undef PREFIX -#define PREFIX(ident) little2_ ## ident -#define MINBPC(enc) 2 -/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ -#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p) -#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p)  -#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c) -#define IS_NAME_CHAR(enc, p, n) 0 -#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) -#define IS_NMSTRT_CHAR(enc, p, n) (0) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) - -#include "xmltok_impl.c" - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -#endif /* not XML_MIN_SIZE */ - -#ifdef XML_NS - -static const struct normal_encoding little2_encoding_ns = {  -  { VTABLE, 2, 0, -#if BYTEORDER == 1234 -    1 -#else -    0 -#endif -  }, -  { -#include "asciitab.h" -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(little2_) -}; - -#endif - -static const struct normal_encoding little2_encoding = {  -  { VTABLE, 2, 0, -#if BYTEORDER == 1234 -    1 -#else -    0 -#endif -  }, -  { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(little2_) -}; - -#if BYTEORDER != 4321 - -#ifdef XML_NS - -static const struct normal_encoding internal_little2_encoding_ns = {  -  { VTABLE, 2, 0, 1 }, -  { -#include "iasciitab.h" -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(little2_) -}; - -#endif - -static const struct normal_encoding internal_little2_encoding = {  -  { VTABLE, 2, 0, 1 }, -  { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(little2_) -}; - -#endif - - -#define BIG2_BYTE_TYPE(enc, p) \ - ((p)[0] == 0 \ -  ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \ -  : unicode_byte_type((p)[0], (p)[1])) -#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1) -#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c) -#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \ -  UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1]) -#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \ -  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1]) - -#ifdef XML_MIN_SIZE - -static int FASTCALL -big2_byteType(const ENCODING *enc, const char *p) -{ -  return BIG2_BYTE_TYPE(enc, p); -} - -static int FASTCALL -big2_byteToAscii(const ENCODING *enc, const char *p) -{ -  return BIG2_BYTE_TO_ASCII(enc, p); -} - -static int FASTCALL -big2_charMatches(const ENCODING *enc, const char *p, int c) -{ -  return BIG2_CHAR_MATCHES(enc, p, c); -} - -static int FASTCALL -big2_isNameMin(const ENCODING *enc, const char *p) -{ -  return BIG2_IS_NAME_CHAR_MINBPC(enc, p); -} - -static int FASTCALL -big2_isNmstrtMin(const ENCODING *enc, const char *p) -{ -  return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p); -} - -#undef VTABLE -#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16 - -#else /* not XML_MIN_SIZE */ - -#undef PREFIX -#define PREFIX(ident) big2_ ## ident -#define MINBPC(enc) 2 -/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */ -#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p) -#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p)  -#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c) -#define IS_NAME_CHAR(enc, p, n) 0 -#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p) -#define IS_NMSTRT_CHAR(enc, p, n) (0) -#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) - -#include "xmltok_impl.c" - -#undef MINBPC -#undef BYTE_TYPE -#undef BYTE_TO_ASCII -#undef CHAR_MATCHES -#undef IS_NAME_CHAR -#undef IS_NAME_CHAR_MINBPC -#undef IS_NMSTRT_CHAR -#undef IS_NMSTRT_CHAR_MINBPC -#undef IS_INVALID_CHAR - -#endif /* not XML_MIN_SIZE */ - -#ifdef XML_NS - -static const struct normal_encoding big2_encoding_ns = { -  { VTABLE, 2, 0, -#if BYTEORDER == 4321 -  1 -#else -  0 -#endif -  }, -  { -#include "asciitab.h" -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(big2_) -}; - -#endif - -static const struct normal_encoding big2_encoding = { -  { VTABLE, 2, 0, -#if BYTEORDER == 4321 -  1 -#else -  0 -#endif -  }, -  { -#define BT_COLON BT_NMSTRT -#include "asciitab.h" -#undef BT_COLON -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(big2_) -}; - -#if BYTEORDER != 1234 - -#ifdef XML_NS - -static const struct normal_encoding internal_big2_encoding_ns = { -  { VTABLE, 2, 0, 1 }, -  { -#include "iasciitab.h" -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(big2_) -}; - -#endif - -static const struct normal_encoding internal_big2_encoding = { -  { VTABLE, 2, 0, 1 }, -  { -#define BT_COLON BT_NMSTRT -#include "iasciitab.h" -#undef BT_COLON -#include "latin1tab.h" -  }, -  STANDARD_VTABLE(big2_) -}; - -#endif - -#undef PREFIX - -static int FASTCALL -streqci(const char *s1, const char *s2) -{ -  for (;;) { -    char c1 = *s1++; -    char c2 = *s2++; -    if (ASCII_a <= c1 && c1 <= ASCII_z) -      c1 += ASCII_A - ASCII_a; -    if (ASCII_a <= c2 && c2 <= ASCII_z) -      c2 += ASCII_A - ASCII_a; -    if (c1 != c2) -      return 0; -    if (!c1) -      break; -  } -  return 1; -} - -static void FASTCALL -initUpdatePosition(const ENCODING *enc, const char *ptr, -                   const char *end, POSITION *pos) -{ -  normal_updatePosition(&utf8_encoding.enc, ptr, end, pos); -} - -static int FASTCALL -toAscii(const ENCODING *enc, const char *ptr, const char *end) -{ -  char buf[1]; -  char *p = buf; -  XmlUtf8Convert(enc, &ptr, end, &p, p + 1); -  if (p == buf) -    return -1; -  else -    return buf[0]; -} - -static int FASTCALL -isSpace(int c) -{ -  switch (c) { -  case 0x20: -  case 0xD: -  case 0xA: -  case 0x9:      -    return 1; -  } -  return 0; -} - -/* Return 1 if there's just optional white space or there's an S -   followed by name=val. -*/ -static int FASTCALL -parsePseudoAttribute(const ENCODING *enc, -                     const char *ptr, -                     const char *end, -                     const char **namePtr, -                     const char **nameEndPtr, -                     const char **valPtr, -                     const char **nextTokPtr) -{ -  int c; -  char open; -  if (ptr == end) { -    *namePtr = NULL; -    return 1; -  } -  if (!isSpace(toAscii(enc, ptr, end))) { -    *nextTokPtr = ptr; -    return 0; -  } -  do { -    ptr += enc->minBytesPerChar; -  } while (isSpace(toAscii(enc, ptr, end))); -  if (ptr == end) { -    *namePtr = NULL; -    return 1; -  } -  *namePtr = ptr; -  for (;;) { -    c = toAscii(enc, ptr, end); -    if (c == -1) { -      *nextTokPtr = ptr; -      return 0; -    } -    if (c == ASCII_EQUALS) { -      *nameEndPtr = ptr; -      break; -    } -    if (isSpace(c)) { -      *nameEndPtr = ptr; -      do { -        ptr += enc->minBytesPerChar; -      } while (isSpace(c = toAscii(enc, ptr, end))); -      if (c != ASCII_EQUALS) { -        *nextTokPtr = ptr; -        return 0; -      } -      break; -    } -    ptr += enc->minBytesPerChar; -  } -  if (ptr == *namePtr) { -    *nextTokPtr = ptr; -    return 0; -  } -  ptr += enc->minBytesPerChar; -  c = toAscii(enc, ptr, end); -  while (isSpace(c)) { -    ptr += enc->minBytesPerChar; -    c = toAscii(enc, ptr, end); -  } -  if (c != ASCII_QUOT && c != ASCII_APOS) { -    *nextTokPtr = ptr; -    return 0; -  } -  open = (char)c; -  ptr += enc->minBytesPerChar; -  *valPtr = ptr; -  for (;; ptr += enc->minBytesPerChar) { -    c = toAscii(enc, ptr, end); -    if (c == open) -      break; -    if (!(ASCII_a <= c && c <= ASCII_z) -        && !(ASCII_A <= c && c <= ASCII_Z) -        && !(ASCII_0 <= c && c <= ASCII_9) -        && c != ASCII_PERIOD -        && c != ASCII_MINUS -        && c != ASCII_UNDERSCORE) { -      *nextTokPtr = ptr; -      return 0; -    } -  } -  *nextTokPtr = ptr + enc->minBytesPerChar; -  return 1; -} - -static const char KW_version[] = { -  ASCII_v, ASCII_e, ASCII_r, ASCII_s, ASCII_i, ASCII_o, ASCII_n, '\0' -}; - -static const char KW_encoding[] = { -  ASCII_e, ASCII_n, ASCII_c, ASCII_o, ASCII_d, ASCII_i, ASCII_n, ASCII_g, '\0' -}; - -static const char KW_standalone[] = { -  ASCII_s, ASCII_t, ASCII_a, ASCII_n, ASCII_d, ASCII_a, ASCII_l, ASCII_o, -  ASCII_n, ASCII_e, '\0' -}; - -static const char KW_yes[] = { -  ASCII_y, ASCII_e, ASCII_s,  '\0' -}; - -static const char KW_no[] = { -  ASCII_n, ASCII_o,  '\0' -}; - -static int -doParseXmlDecl(const ENCODING *(*encodingFinder)(const ENCODING *, -                                                 const char *, -                                                 const char *), -               int isGeneralTextEntity, -               const ENCODING *enc, -               const char *ptr, -               const char *end, -               const char **badPtr, -               const char **versionPtr, -               const char **versionEndPtr, -               const char **encodingName, -               const ENCODING **encoding, -               int *standalone) -{ -  const char *val = NULL; -  const char *name = NULL; -  const char *nameEnd = NULL; -  ptr += 5 * enc->minBytesPerChar; -  end -= 2 * enc->minBytesPerChar; -  if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr) -      || !name) { -    *badPtr = ptr; -    return 0; -  } -  if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) { -    if (!isGeneralTextEntity) { -      *badPtr = name; -      return 0; -    } -  } -  else { -    if (versionPtr) -      *versionPtr = val; -    if (versionEndPtr) -      *versionEndPtr = ptr; -    if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { -      *badPtr = ptr; -      return 0; -    } -    if (!name) { -      if (isGeneralTextEntity) { -        /* a TextDecl must have an EncodingDecl */ -        *badPtr = ptr; -        return 0; -      } -      return 1; -    } -  } -  if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) { -    int c = toAscii(enc, val, end); -    if (!(ASCII_a <= c && c <= ASCII_z) && !(ASCII_A <= c && c <= ASCII_Z)) { -      *badPtr = val; -      return 0; -    } -    if (encodingName) -      *encodingName = val; -    if (encoding) -      *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar); -    if (!parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) { -      *badPtr = ptr; -      return 0; -    } -    if (!name) -      return 1; -  } -  if (!XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone) -      || isGeneralTextEntity) { -    *badPtr = name; -    return 0; -  } -  if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) { -    if (standalone) -      *standalone = 1; -  } -  else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) { -    if (standalone) -      *standalone = 0; -  } -  else { -    *badPtr = val; -    return 0; -  } -  while (isSpace(toAscii(enc, ptr, end))) -    ptr += enc->minBytesPerChar; -  if (ptr != end) { -    *badPtr = ptr; -    return 0; -  } -  return 1; -} - -static int FASTCALL -checkCharRefNumber(int result) -{ -  switch (result >> 8) { -  case 0xD8: case 0xD9: case 0xDA: case 0xDB: -  case 0xDC: case 0xDD: case 0xDE: case 0xDF: -    return -1; -  case 0: -    if (latin1_encoding.type[result] == BT_NONXML) -      return -1; -    break; -  case 0xFF: -    if (result == 0xFFFE || result == 0xFFFF) -      return -1; -    break; -  } -  return result; -} - -int -XmlUtf8Encode(int c, char *buf) -{ -  enum { -    /* minN is minimum legal resulting value for N byte sequence */ -    min2 = 0x80, -    min3 = 0x800, -    min4 = 0x10000 -  }; - -  if (c < 0) -    return 0; -  if (c < min2) { -    buf[0] = (char)(c | UTF8_cval1); -    return 1; -  } -  if (c < min3) { -    buf[0] = (char)((c >> 6) | UTF8_cval2); -    buf[1] = (char)((c & 0x3f) | 0x80); -    return 2; -  } -  if (c < min4) { -    buf[0] = (char)((c >> 12) | UTF8_cval3); -    buf[1] = (char)(((c >> 6) & 0x3f) | 0x80); -    buf[2] = (char)((c & 0x3f) | 0x80); -    return 3; -  } -  if (c < 0x110000) { -    buf[0] = (char)((c >> 18) | UTF8_cval4); -    buf[1] = (char)(((c >> 12) & 0x3f) | 0x80); -    buf[2] = (char)(((c >> 6) & 0x3f) | 0x80); -    buf[3] = (char)((c & 0x3f) | 0x80); -    return 4; -  } -  return 0; -} - -int -XmlUtf16Encode(int charNum, unsigned short *buf) -{ -  if (charNum < 0) -    return 0; -  if (charNum < 0x10000) { -    buf[0] = (unsigned short)charNum; -    return 1; -  } -  if (charNum < 0x110000) { -    charNum -= 0x10000; -    buf[0] = (unsigned short)((charNum >> 10) + 0xD800); -    buf[1] = (unsigned short)((charNum & 0x3FF) + 0xDC00); -    return 2; -  } -  return 0; -} - -struct unknown_encoding { -  struct normal_encoding normal; -  int (*convert)(void *userData, const char *p); -  void *userData; -  unsigned short utf16[256]; -  char utf8[256][4]; -}; - -#define AS_UNKNOWN_ENCODING(enc)  ((const struct unknown_encoding *) (enc)) - -int -XmlSizeOfUnknownEncoding(void) -{ -  return sizeof(struct unknown_encoding); -} - -static int FASTCALL -unknown_isName(const ENCODING *enc, const char *p) -{ -  const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); -  int c = uenc->convert(uenc->userData, p); -  if (c & ~0xFFFF) -    return 0; -  return UCS2_GET_NAMING(namePages, c >> 8, c & 0xFF); -} - -static int FASTCALL -unknown_isNmstrt(const ENCODING *enc, const char *p) -{ -  const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); -  int c = uenc->convert(uenc->userData, p); -  if (c & ~0xFFFF) -    return 0; -  return UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xFF); -} - -static int FASTCALL -unknown_isInvalid(const ENCODING *enc, const char *p) -{ -  const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); -  int c = uenc->convert(uenc->userData, p); -  return (c & ~0xFFFF) || checkCharRefNumber(c) < 0; -} - -static void FASTCALL -unknown_toUtf8(const ENCODING *enc, -               const char **fromP, const char *fromLim, -               char **toP, const char *toLim) -{ -  const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); -  char buf[XML_UTF8_ENCODE_MAX]; -  for (;;) { -    const char *utf8; -    int n; -    if (*fromP == fromLim) -      break; -    utf8 = uenc->utf8[(unsigned char)**fromP]; -    n = *utf8++; -    if (n == 0) { -      int c = uenc->convert(uenc->userData, *fromP); -      n = XmlUtf8Encode(c, buf); -      if (n > toLim - *toP) -        break; -      utf8 = buf; -      *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] -                 - (BT_LEAD2 - 2)); -    } -    else { -      if (n > toLim - *toP) -        break; -      (*fromP)++; -    } -    do { -      *(*toP)++ = *utf8++; -    } while (--n != 0); -  } -} - -static void FASTCALL -unknown_toUtf16(const ENCODING *enc, -                const char **fromP, const char *fromLim, -                unsigned short **toP, const unsigned short *toLim) -{ -  const struct unknown_encoding *uenc = AS_UNKNOWN_ENCODING(enc); -  while (*fromP != fromLim && *toP != toLim) { -    unsigned short c = uenc->utf16[(unsigned char)**fromP]; -    if (c == 0) { -      c = (unsigned short) -          uenc->convert(uenc->userData, *fromP); -      *fromP += (AS_NORMAL_ENCODING(enc)->type[(unsigned char)**fromP] -                 - (BT_LEAD2 - 2)); -    } -    else -      (*fromP)++; -    *(*toP)++ = c; -  } -} - -ENCODING * -XmlInitUnknownEncoding(void *mem, -                       int *table, -                       int (*convert)(void *userData, const char *p), -                       void *userData) -{ -  int i; -  struct unknown_encoding *e = mem; -  for (i = 0; i < (int)sizeof(struct normal_encoding); i++) -    ((char *)mem)[i] = ((char *)&latin1_encoding)[i]; -  for (i = 0; i < 128; i++) -    if (latin1_encoding.type[i] != BT_OTHER -        && latin1_encoding.type[i] != BT_NONXML -        && table[i] != i) -      return 0; -  for (i = 0; i < 256; i++) { -    int c = table[i]; -    if (c == -1) { -      e->normal.type[i] = BT_MALFORM; -      /* This shouldn't really get used. */ -      e->utf16[i] = 0xFFFF; -      e->utf8[i][0] = 1; -      e->utf8[i][1] = 0; -    } -    else if (c < 0) { -      if (c < -4) -        return 0; -      e->normal.type[i] = (unsigned char)(BT_LEAD2 - (c + 2)); -      e->utf8[i][0] = 0; -      e->utf16[i] = 0; -    } -    else if (c < 0x80) { -      if (latin1_encoding.type[c] != BT_OTHER -          && latin1_encoding.type[c] != BT_NONXML -          && c != i) -        return 0; -      e->normal.type[i] = latin1_encoding.type[c]; -      e->utf8[i][0] = 1; -      e->utf8[i][1] = (char)c; -      e->utf16[i] = (unsigned short)(c == 0 ? 0xFFFF : c); -    } -    else if (checkCharRefNumber(c) < 0) { -      e->normal.type[i] = BT_NONXML; -      /* This shouldn't really get used. */ -      e->utf16[i] = 0xFFFF; -      e->utf8[i][0] = 1; -      e->utf8[i][1] = 0; -    } -    else { -      if (c > 0xFFFF) -        return 0; -      if (UCS2_GET_NAMING(nmstrtPages, c >> 8, c & 0xff)) -        e->normal.type[i] = BT_NMSTRT; -      else if (UCS2_GET_NAMING(namePages, c >> 8, c & 0xff)) -        e->normal.type[i] = BT_NAME; -      else -        e->normal.type[i] = BT_OTHER; -      e->utf8[i][0] = (char)XmlUtf8Encode(c, e->utf8[i] + 1); -      e->utf16[i] = (unsigned short)c; -    } -  } -  e->userData = userData; -  e->convert = convert; -  if (convert) { -    e->normal.isName2 = unknown_isName; -    e->normal.isName3 = unknown_isName; -    e->normal.isName4 = unknown_isName; -    e->normal.isNmstrt2 = unknown_isNmstrt; -    e->normal.isNmstrt3 = unknown_isNmstrt; -    e->normal.isNmstrt4 = unknown_isNmstrt; -    e->normal.isInvalid2 = unknown_isInvalid; -    e->normal.isInvalid3 = unknown_isInvalid; -    e->normal.isInvalid4 = unknown_isInvalid; -  } -  e->normal.enc.utf8Convert = unknown_toUtf8; -  e->normal.enc.utf16Convert = unknown_toUtf16; -  return &(e->normal.enc); -} - -/* If this enumeration is changed, getEncodingIndex and encodings -must also be changed. */ -enum { -  UNKNOWN_ENC = -1, -  ISO_8859_1_ENC = 0, -  US_ASCII_ENC, -  UTF_8_ENC, -  UTF_16_ENC, -  UTF_16BE_ENC, -  UTF_16LE_ENC, -  /* must match encodingNames up to here */ -  NO_ENC -}; - -static const char KW_ISO_8859_1[] = { -  ASCII_I, ASCII_S, ASCII_O, ASCII_MINUS, ASCII_8, ASCII_8, ASCII_5, ASCII_9, -  ASCII_MINUS, ASCII_1, '\0' -}; -static const char KW_US_ASCII[] = { -  ASCII_U, ASCII_S, ASCII_MINUS, ASCII_A, ASCII_S, ASCII_C, ASCII_I, ASCII_I, -  '\0' -}; -static const char KW_UTF_8[] =  { -  ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_8, '\0' -}; -static const char KW_UTF_16[] = { -  ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, '\0' -}; -static const char KW_UTF_16BE[] = { -  ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_B, ASCII_E, -  '\0' -}; -static const char KW_UTF_16LE[] = { -  ASCII_U, ASCII_T, ASCII_F, ASCII_MINUS, ASCII_1, ASCII_6, ASCII_L, ASCII_E, -  '\0' -}; - -static int FASTCALL -getEncodingIndex(const char *name) -{ -  static const char *encodingNames[] = { -    KW_ISO_8859_1, -    KW_US_ASCII, -    KW_UTF_8, -    KW_UTF_16, -    KW_UTF_16BE, -    KW_UTF_16LE, -  }; -  int i; -  if (name == NULL) -    return NO_ENC; -  for (i = 0; i < (int)(sizeof(encodingNames)/sizeof(encodingNames[0])); i++) -    if (streqci(name, encodingNames[i])) -      return i; -  return UNKNOWN_ENC; -} - -/* For binary compatibility, we store the index of the encoding -   specified at initialization in the isUtf16 member. -*/ - -#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16) -#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i) - -/* This is what detects the encoding.  encodingTable maps from -   encoding indices to encodings; INIT_ENC_INDEX(enc) is the index of -   the external (protocol) specified encoding; state is -   XML_CONTENT_STATE if we're parsing an external text entity, and -   XML_PROLOG_STATE otherwise. -*/ - - -static int FASTCALL -initScan(const ENCODING **encodingTable, -         const INIT_ENCODING *enc, -         int state, -         const char *ptr, -         const char *end, -         const char **nextTokPtr) -{ -  const ENCODING **encPtr; - -  if (ptr == end) -    return XML_TOK_NONE; -  encPtr = enc->encPtr; -  if (ptr + 1 == end) { -    /* only a single byte available for auto-detection */ -#ifndef XML_DTD /* FIXME */ -    /* a well-formed document entity must have more than one byte */ -    if (state != XML_CONTENT_STATE) -      return XML_TOK_PARTIAL; -#endif -    /* so we're parsing an external text entity... */ -    /* if UTF-16 was externally specified, then we need at least 2 bytes */ -    switch (INIT_ENC_INDEX(enc)) { -    case UTF_16_ENC: -    case UTF_16LE_ENC: -    case UTF_16BE_ENC: -      return XML_TOK_PARTIAL; -    } -    switch ((unsigned char)*ptr) { -    case 0xFE: -    case 0xFF: -    case 0xEF: /* possibly first byte of UTF-8 BOM */ -      if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC -          && state == XML_CONTENT_STATE) -        break; -      /* fall through */ -    case 0x00: -    case 0x3C: -      return XML_TOK_PARTIAL; -    } -  } -  else { -    switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) { -    case 0xFEFF: -      if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC -          && state == XML_CONTENT_STATE) -        break; -      *nextTokPtr = ptr + 2; -      *encPtr = encodingTable[UTF_16BE_ENC]; -      return XML_TOK_BOM; -    /* 00 3C is handled in the default case */ -    case 0x3C00: -      if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC -           || INIT_ENC_INDEX(enc) == UTF_16_ENC) -          && state == XML_CONTENT_STATE) -        break; -      *encPtr = encodingTable[UTF_16LE_ENC]; -      return XmlTok(*encPtr, state, ptr, end, nextTokPtr); -    case 0xFFFE: -      if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC -          && state == XML_CONTENT_STATE) -        break; -      *nextTokPtr = ptr + 2; -      *encPtr = encodingTable[UTF_16LE_ENC]; -      return XML_TOK_BOM; -    case 0xEFBB: -      /* Maybe a UTF-8 BOM (EF BB BF) */ -      /* If there's an explicitly specified (external) encoding -         of ISO-8859-1 or some flavour of UTF-16 -         and this is an external text entity, -         don't look for the BOM, -         because it might be a legal data. -      */ -      if (state == XML_CONTENT_STATE) { -        int e = INIT_ENC_INDEX(enc); -        if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC -            || e == UTF_16LE_ENC || e == UTF_16_ENC) -          break; -      } -      if (ptr + 2 == end) -        return XML_TOK_PARTIAL; -      if ((unsigned char)ptr[2] == 0xBF) { -        *nextTokPtr = ptr + 3; -        *encPtr = encodingTable[UTF_8_ENC]; -        return XML_TOK_BOM; -      } -      break; -    default: -      if (ptr[0] == '\0') { -        /* 0 isn't a legal data character. Furthermore a document -           entity can only start with ASCII characters.  So the only -           way this can fail to be big-endian UTF-16 if it it's an -           external parsed general entity that's labelled as -           UTF-16LE. -        */ -        if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC) -          break; -        *encPtr = encodingTable[UTF_16BE_ENC]; -        return XmlTok(*encPtr, state, ptr, end, nextTokPtr); -      } -      else if (ptr[1] == '\0') { -        /* We could recover here in the case: -            - parsing an external entity -            - second byte is 0 -            - no externally specified encoding -            - no encoding declaration -           by assuming UTF-16LE.  But we don't, because this would mean when -           presented just with a single byte, we couldn't reliably determine -           whether we needed further bytes. -        */ -        if (state == XML_CONTENT_STATE) -          break; -        *encPtr = encodingTable[UTF_16LE_ENC]; -        return XmlTok(*encPtr, state, ptr, end, nextTokPtr); -      } -      break; -    } -  } -  *encPtr = encodingTable[INIT_ENC_INDEX(enc)]; -  return XmlTok(*encPtr, state, ptr, end, nextTokPtr); -} - - -#define NS(x) x -#define ns(x) x -#include "xmltok_ns.c" -#undef NS -#undef ns - -#ifdef XML_NS - -#define NS(x) x ## NS -#define ns(x) x ## _ns - -#include "xmltok_ns.c" - -#undef NS -#undef ns - -ENCODING * -XmlInitUnknownEncodingNS(void *mem, -                         int *table, -                         int (*convert)(void *userData, const char *p), -                         void *userData) -{ -  ENCODING *enc = XmlInitUnknownEncoding(mem, table, convert, userData); -  if (enc) -    ((struct normal_encoding *)enc)->type[ASCII_COLON] = BT_COLON; -  return enc; -} - -#endif /* XML_NS */ diff --git a/ext/xml/expat/xmltok.h b/ext/xml/expat/xmltok.h deleted file mode 100644 index 55cc181e7b..0000000000 --- a/ext/xml/expat/xmltok.h +++ /dev/null @@ -1,312 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#ifndef XmlTok_INCLUDED -#define XmlTok_INCLUDED 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/* The following token may be returned by XmlContentTok */ -#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be -                                    start of illegal ]]> sequence */ -/* The following tokens may be returned by both XmlPrologTok and -   XmlContentTok. -*/ -#define XML_TOK_NONE -4          /* The string to be scanned is empty */ -#define XML_TOK_TRAILING_CR -3   /* A CR at the end of the scan; -                                    might be part of CRLF sequence */  -#define XML_TOK_PARTIAL_CHAR -2  /* only part of a multibyte sequence */ -#define XML_TOK_PARTIAL -1       /* only part of a token */ -#define XML_TOK_INVALID 0 - -/* The following tokens are returned by XmlContentTok; some are also -   returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok. -*/ -#define XML_TOK_START_TAG_WITH_ATTS 1 -#define XML_TOK_START_TAG_NO_ATTS 2 -#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */ -#define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4 -#define XML_TOK_END_TAG 5 -#define XML_TOK_DATA_CHARS 6 -#define XML_TOK_DATA_NEWLINE 7 -#define XML_TOK_CDATA_SECT_OPEN 8 -#define XML_TOK_ENTITY_REF 9 -#define XML_TOK_CHAR_REF 10               /* numeric character reference */ - -/* The following tokens may be returned by both XmlPrologTok and -   XmlContentTok. -*/ -#define XML_TOK_PI 11                     /* processing instruction */ -#define XML_TOK_XML_DECL 12               /* XML decl or text decl */ -#define XML_TOK_COMMENT 13 -#define XML_TOK_BOM 14                    /* Byte order mark */ - -/* The following tokens are returned only by XmlPrologTok */ -#define XML_TOK_PROLOG_S 15 -#define XML_TOK_DECL_OPEN 16              /* <!foo */ -#define XML_TOK_DECL_CLOSE 17             /* > */ -#define XML_TOK_NAME 18 -#define XML_TOK_NMTOKEN 19 -#define XML_TOK_POUND_NAME 20             /* #name */ -#define XML_TOK_OR 21                     /* | */ -#define XML_TOK_PERCENT 22 -#define XML_TOK_OPEN_PAREN 23 -#define XML_TOK_CLOSE_PAREN 24 -#define XML_TOK_OPEN_BRACKET 25 -#define XML_TOK_CLOSE_BRACKET 26 -#define XML_TOK_LITERAL 27 -#define XML_TOK_PARAM_ENTITY_REF 28 -#define XML_TOK_INSTANCE_START 29 - -/* The following occur only in element type declarations */ -#define XML_TOK_NAME_QUESTION 30          /* name? */ -#define XML_TOK_NAME_ASTERISK 31          /* name* */ -#define XML_TOK_NAME_PLUS 32              /* name+ */ -#define XML_TOK_COND_SECT_OPEN 33         /* <![ */ -#define XML_TOK_COND_SECT_CLOSE 34        /* ]]> */ -#define XML_TOK_CLOSE_PAREN_QUESTION 35   /* )? */ -#define XML_TOK_CLOSE_PAREN_ASTERISK 36   /* )* */ -#define XML_TOK_CLOSE_PAREN_PLUS 37       /* )+ */ -#define XML_TOK_COMMA 38 - -/* The following token is returned only by XmlAttributeValueTok */ -#define XML_TOK_ATTRIBUTE_VALUE_S 39 - -/* The following token is returned only by XmlCdataSectionTok */ -#define XML_TOK_CDATA_SECT_CLOSE 40 - -/* With namespace processing this is returned by XmlPrologTok for a -   name with a colon. -*/ -#define XML_TOK_PREFIXED_NAME 41 - -#ifdef XML_DTD -#define XML_TOK_IGNORE_SECT 42 -#endif /* XML_DTD */ - -#ifdef XML_DTD -#define XML_N_STATES 4 -#else /* not XML_DTD */ -#define XML_N_STATES 3 -#endif /* not XML_DTD */ - -#define XML_PROLOG_STATE 0 -#define XML_CONTENT_STATE 1 -#define XML_CDATA_SECTION_STATE 2 -#ifdef XML_DTD -#define XML_IGNORE_SECTION_STATE 3 -#endif /* XML_DTD */ - -#define XML_N_LITERAL_TYPES 2 -#define XML_ATTRIBUTE_VALUE_LITERAL 0 -#define XML_ENTITY_VALUE_LITERAL 1 - -/* The size of the buffer passed to XmlUtf8Encode must be at least this. */ -#define XML_UTF8_ENCODE_MAX 4 -/* The size of the buffer passed to XmlUtf16Encode must be at least this. */ -#define XML_UTF16_ENCODE_MAX 2 - -typedef struct position { -  /* first line and first column are 0 not 1 */ -  unsigned long lineNumber; -  unsigned long columnNumber; -} POSITION; - -typedef struct { -  const char *name; -  const char *valuePtr; -  const char *valueEnd; -  char normalized; -} ATTRIBUTE; - -struct encoding; -typedef struct encoding ENCODING; - -typedef int (FASTCALL *SCANNER)(const ENCODING *, -                                const char *, -                                const char *, -                                const char **); - -struct encoding { -  SCANNER scanners[XML_N_STATES]; -  SCANNER literalScanners[XML_N_LITERAL_TYPES]; -  int (FASTCALL *sameName)(const ENCODING *, -                           const char *, -                           const char *); -  int (FASTCALL *nameMatchesAscii)(const ENCODING *, -                                   const char *, -                                   const char *, -                                   const char *); -  int (FASTCALL *nameLength)(const ENCODING *, const char *); -  const char *(FASTCALL *skipS)(const ENCODING *, const char *); -  int (FASTCALL *getAtts)(const ENCODING *enc, -                          const char *ptr, -                          int attsMax, -                          ATTRIBUTE *atts); -  int (FASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr); -  int (FASTCALL *predefinedEntityName)(const ENCODING *, -                                       const char *, -                                       const char *); -  void (FASTCALL *updatePosition)(const ENCODING *, -                                  const char *ptr, -                                  const char *end, -                                  POSITION *); -  int (FASTCALL *isPublicId)(const ENCODING *enc, -                             const char *ptr, -                             const char *end, -                             const char **badPtr); -  void (FASTCALL *utf8Convert)(const ENCODING *enc, -                               const char **fromP, -                               const char *fromLim, -                               char **toP, -                               const char *toLim); -  void (FASTCALL *utf16Convert)(const ENCODING *enc, -                                const char **fromP, -                                const char *fromLim, -                                unsigned short **toP, -                                const unsigned short *toLim); -  int minBytesPerChar; -  char isUtf8; -  char isUtf16; -}; - -/* Scan the string starting at ptr until the end of the next complete -   token, but do not scan past eptr.  Return an integer giving the -   type of token. - -   Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set. - -   Return XML_TOK_PARTIAL when the string does not contain a complete -   token; nextTokPtr will not be set. - -   Return XML_TOK_INVALID when the string does not start a valid -   token; nextTokPtr will be set to point to the character which made -   the token invalid. - -   Otherwise the string starts with a valid token; nextTokPtr will be -   set to point to the character following the end of that token. - -   Each data character counts as a single token, but adjacent data -   characters may be returned together.  Similarly for characters in -   the prolog outside literals, comments and processing instructions. -*/ - - -#define XmlTok(enc, state, ptr, end, nextTokPtr) \ -  (((enc)->scanners[state])(enc, ptr, end, nextTokPtr)) - -#define XmlPrologTok(enc, ptr, end, nextTokPtr) \ -   XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr) - -#define XmlContentTok(enc, ptr, end, nextTokPtr) \ -   XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr) - -#define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \ -   XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr) - -#ifdef XML_DTD - -#define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \ -   XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr) - -#endif /* XML_DTD */ - -/* This is used for performing a 2nd-level tokenization on the content -   of a literal that has already been returned by XmlTok. -*/ -#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \ -  (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr)) - -#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \ -   XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr) - -#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \ -   XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr) - -#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2)) - -#define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \ -  (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2)) - -#define XmlNameLength(enc, ptr) \ -  (((enc)->nameLength)(enc, ptr)) - -#define XmlSkipS(enc, ptr) \ -  (((enc)->skipS)(enc, ptr)) - -#define XmlGetAttributes(enc, ptr, attsMax, atts) \ -  (((enc)->getAtts)(enc, ptr, attsMax, atts)) - -#define XmlCharRefNumber(enc, ptr) \ -  (((enc)->charRefNumber)(enc, ptr)) - -#define XmlPredefinedEntityName(enc, ptr, end) \ -  (((enc)->predefinedEntityName)(enc, ptr, end)) - -#define XmlUpdatePosition(enc, ptr, end, pos) \ -  (((enc)->updatePosition)(enc, ptr, end, pos)) - -#define XmlIsPublicId(enc, ptr, end, badPtr) \ -  (((enc)->isPublicId)(enc, ptr, end, badPtr)) - -#define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \ -  (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim)) - -#define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \ -  (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim)) - -typedef struct { -  ENCODING initEnc; -  const ENCODING **encPtr; -} INIT_ENCODING; - -int  XmlParseXmlDecl(int isGeneralTextEntity, -                              const ENCODING *enc, -                              const char *ptr, -                              const char *end, -                              const char **badPtr, -                              const char **versionPtr, -                              const char **versionEndPtr, -                              const char **encodingNamePtr, -                              const ENCODING **namedEncodingPtr, -                              int *standalonePtr); - -int  XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name); -const ENCODING  *XmlGetUtf8InternalEncoding(void); -const ENCODING  *XmlGetUtf16InternalEncoding(void); -int  XmlUtf8Encode(int charNumber, char *buf); -int  XmlUtf16Encode(int charNumber, unsigned short *buf); - -int  XmlSizeOfUnknownEncoding(void); -ENCODING  * -XmlInitUnknownEncoding(void *mem, -                       int *table, -                       int (*conv)(void *userData, const char *p), -                       void *userData); - -int  XmlParseXmlDeclNS(int isGeneralTextEntity, -                                const ENCODING *enc, -                                const char *ptr, -                                const char *end, -                                const char **badPtr, -                                const char **versionPtr, -                                const char **versionEndPtr, -                                const char **encodingNamePtr, -                                const ENCODING **namedEncodingPtr, -                                int *standalonePtr); -int  XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name); -const ENCODING  *XmlGetUtf8InternalEncodingNS(void); -const ENCODING  *XmlGetUtf16InternalEncodingNS(void); -ENCODING  * -XmlInitUnknownEncodingNS(void *mem, -                         int *table, -                         int (*conv)(void *userData, const char *p), -                         void *userData); -#ifdef __cplusplus -} -#endif - -#endif /* not XmlTok_INCLUDED */ diff --git a/ext/xml/expat/xmltok_impl.c b/ext/xml/expat/xmltok_impl.c deleted file mode 100644 index be3d1d31ca..0000000000 --- a/ext/xml/expat/xmltok_impl.c +++ /dev/null @@ -1,1778 +0,0 @@ -/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -   See the file COPYING for copying permission. -*/ - -#ifndef IS_INVALID_CHAR -#define IS_INVALID_CHAR(enc, ptr, n) (0) -#endif - -#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \ -    case BT_LEAD ## n: \ -      if (end - ptr < n) \ -        return XML_TOK_PARTIAL_CHAR; \ -      if (IS_INVALID_CHAR(enc, ptr, n)) { \ -        *(nextTokPtr) = (ptr); \ -        return XML_TOK_INVALID; \ -      } \ -      ptr += n; \ -      break; - -#define INVALID_CASES(ptr, nextTokPtr) \ -  INVALID_LEAD_CASE(2, ptr, nextTokPtr) \ -  INVALID_LEAD_CASE(3, ptr, nextTokPtr) \ -  INVALID_LEAD_CASE(4, ptr, nextTokPtr) \ -  case BT_NONXML: \ -  case BT_MALFORM: \ -  case BT_TRAIL: \ -    *(nextTokPtr) = (ptr); \ -    return XML_TOK_INVALID; - -#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \ -   case BT_LEAD ## n: \ -     if (end - ptr < n) \ -       return XML_TOK_PARTIAL_CHAR; \ -     if (!IS_NAME_CHAR(enc, ptr, n)) { \ -       *nextTokPtr = ptr; \ -       return XML_TOK_INVALID; \ -     } \ -     ptr += n; \ -     break; - -#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \ -  case BT_NONASCII: \ -    if (!IS_NAME_CHAR_MINBPC(enc, ptr)) { \ -      *nextTokPtr = ptr; \ -      return XML_TOK_INVALID; \ -    } \ -  case BT_NMSTRT: \ -  case BT_HEX: \ -  case BT_DIGIT: \ -  case BT_NAME: \ -  case BT_MINUS: \ -    ptr += MINBPC(enc); \ -    break; \ -  CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \ -  CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \ -  CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr) - -#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \ -   case BT_LEAD ## n: \ -     if (end - ptr < n) \ -       return XML_TOK_PARTIAL_CHAR; \ -     if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ -       *nextTokPtr = ptr; \ -       return XML_TOK_INVALID; \ -     } \ -     ptr += n; \ -     break; - -#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \ -  case BT_NONASCII: \ -    if (!IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \ -      *nextTokPtr = ptr; \ -      return XML_TOK_INVALID; \ -    } \ -  case BT_NMSTRT: \ -  case BT_HEX: \ -    ptr += MINBPC(enc); \ -    break; \ -  CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \ -  CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \ -  CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr) - -#ifndef PREFIX -#define PREFIX(ident) ident -#endif - -/* ptr points to character following "<!-" */ - -static int FASTCALL -PREFIX(scanComment)(const ENCODING *enc, const char *ptr, -                    const char *end, const char **nextTokPtr) -{ -  if (ptr != end) { -    if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) { -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -    ptr += MINBPC(enc); -    while (ptr != end) { -      switch (BYTE_TYPE(enc, ptr)) { -      INVALID_CASES(ptr, nextTokPtr) -      case BT_MINUS: -        if ((ptr += MINBPC(enc)) == end) -          return XML_TOK_PARTIAL; -        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) { -          if ((ptr += MINBPC(enc)) == end) -            return XML_TOK_PARTIAL; -          if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { -            *nextTokPtr = ptr; -            return XML_TOK_INVALID; -          } -          *nextTokPtr = ptr + MINBPC(enc); -          return XML_TOK_COMMENT; -        } -        break; -      default: -        ptr += MINBPC(enc); -        break; -      } -    } -  } -  return XML_TOK_PARTIAL; -} - -/* ptr points to character following "<!" */ - -static int FASTCALL -PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, -                 const char *end, const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  case BT_MINUS: -    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_LSQB: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_COND_SECT_OPEN; -  case BT_NMSTRT: -  case BT_HEX: -    ptr += MINBPC(enc); -    break; -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_PERCNT: -      if (ptr + MINBPC(enc) == end) -        return XML_TOK_PARTIAL; -      /* don't allow <!ENTITY% foo "whatever"> */ -      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) { -      case BT_S: case BT_CR: case BT_LF: case BT_PERCNT: -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      /* fall through */ -    case BT_S: case BT_CR: case BT_LF: -      *nextTokPtr = ptr; -      return XML_TOK_DECL_OPEN; -    case BT_NMSTRT: -    case BT_HEX: -      ptr += MINBPC(enc); -      break; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -static int FASTCALL -PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, -                      const char *end, int *tokPtr) -{ -  int upper = 0; -  *tokPtr = XML_TOK_PI; -  if (end - ptr != MINBPC(enc)*3) -    return 1; -  switch (BYTE_TO_ASCII(enc, ptr)) { -  case ASCII_x: -    break; -  case ASCII_X: -    upper = 1; -    break; -  default: -    return 1; -  } -  ptr += MINBPC(enc); -  switch (BYTE_TO_ASCII(enc, ptr)) { -  case ASCII_m: -    break; -  case ASCII_M: -    upper = 1; -    break; -  default: -    return 1; -  } -  ptr += MINBPC(enc); -  switch (BYTE_TO_ASCII(enc, ptr)) { -  case ASCII_l: -    break; -  case ASCII_L: -    upper = 1; -    break; -  default: -    return 1; -  } -  if (upper) -    return 0; -  *tokPtr = XML_TOK_XML_DECL; -  return 1; -} - -/* ptr points to character following "<?" */ - -static int FASTCALL -PREFIX(scanPi)(const ENCODING *enc, const char *ptr, -               const char *end, const char **nextTokPtr) -{ -  int tok; -  const char *target = ptr; -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -    case BT_S: case BT_CR: case BT_LF: -      if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      ptr += MINBPC(enc); -      while (ptr != end) { -        switch (BYTE_TYPE(enc, ptr)) { -        INVALID_CASES(ptr, nextTokPtr) -        case BT_QUEST: -          ptr += MINBPC(enc); -          if (ptr == end) -            return XML_TOK_PARTIAL; -          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { -            *nextTokPtr = ptr + MINBPC(enc); -            return tok; -          } -          break; -        default: -          ptr += MINBPC(enc); -          break; -        } -      } -      return XML_TOK_PARTIAL; -    case BT_QUEST: -      if (!PREFIX(checkPiTarget)(enc, target, ptr, &tok)) { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      ptr += MINBPC(enc); -      if (ptr == end) -        return XML_TOK_PARTIAL; -      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { -        *nextTokPtr = ptr + MINBPC(enc); -        return tok; -      } -      /* fall through */ -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -static int FASTCALL -PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, -                         const char *end, const char **nextTokPtr) -{ -  static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A, -                                     ASCII_T, ASCII_A, ASCII_LSQB }; -  int i; -  /* CDATA[ */ -  if (end - ptr < 6 * MINBPC(enc)) -    return XML_TOK_PARTIAL; -  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) { -    if (!CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) { -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  *nextTokPtr = ptr; -  return XML_TOK_CDATA_SECT_OPEN; -} - -static int FASTCALL -PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, -                        const char *end, const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_NONE; -  if (MINBPC(enc) > 1) { -    size_t n = end - ptr; -    if (n & (MINBPC(enc) - 1)) { -      n &= ~(MINBPC(enc) - 1); -      if (n == 0) -        return XML_TOK_PARTIAL; -      end = ptr + n; -    } -  } -  switch (BYTE_TYPE(enc, ptr)) { -  case BT_RSQB: -    ptr += MINBPC(enc); -    if (ptr == end) -      return XML_TOK_PARTIAL; -    if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) -      break; -    ptr += MINBPC(enc); -    if (ptr == end) -      return XML_TOK_PARTIAL; -    if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { -      ptr -= MINBPC(enc); -      break; -    } -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_CDATA_SECT_CLOSE; -  case BT_CR: -    ptr += MINBPC(enc); -    if (ptr == end) -      return XML_TOK_PARTIAL; -    if (BYTE_TYPE(enc, ptr) == BT_LF) -      ptr += MINBPC(enc); -    *nextTokPtr = ptr; -    return XML_TOK_DATA_NEWLINE; -  case BT_LF: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_DATA_NEWLINE; -  INVALID_CASES(ptr, nextTokPtr) -  default: -    ptr += MINBPC(enc); -    break; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: \ -      if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ -        *nextTokPtr = ptr; \ -        return XML_TOK_DATA_CHARS; \ -      } \ -      ptr += n; \ -      break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_NONXML: -    case BT_MALFORM: -    case BT_TRAIL: -    case BT_CR: -    case BT_LF: -    case BT_RSQB: -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    default: -      ptr += MINBPC(enc); -      break; -    } -  } -  *nextTokPtr = ptr; -  return XML_TOK_DATA_CHARS; -} - -/* ptr points to character following "</" */ - -static int FASTCALL -PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, -                   const char *end, const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -    case BT_S: case BT_CR: case BT_LF: -      for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) { -        switch (BYTE_TYPE(enc, ptr)) { -        case BT_S: case BT_CR: case BT_LF: -          break; -        case BT_GT: -          *nextTokPtr = ptr + MINBPC(enc); -          return XML_TOK_END_TAG; -        default: -          *nextTokPtr = ptr; -          return XML_TOK_INVALID; -        } -      } -      return XML_TOK_PARTIAL; -#ifdef XML_NS -    case BT_COLON: -      /* no need to check qname syntax here, -         since end-tag must match exactly */ -      ptr += MINBPC(enc); -      break; -#endif -    case BT_GT: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_END_TAG; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -/* ptr points to character following "&#X" */ - -static int FASTCALL -PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, -                       const char *end, const char **nextTokPtr) -{ -  if (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_DIGIT: -    case BT_HEX: -      break; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -    for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) { -      switch (BYTE_TYPE(enc, ptr)) { -      case BT_DIGIT: -      case BT_HEX: -        break; -      case BT_SEMI: -        *nextTokPtr = ptr + MINBPC(enc); -        return XML_TOK_CHAR_REF; -      default: -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -    } -  } -  return XML_TOK_PARTIAL; -} - -/* ptr points to character following "&#" */ - -static int FASTCALL -PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, -                    const char *end, const char **nextTokPtr) -{ -  if (ptr != end) { -    if (CHAR_MATCHES(enc, ptr, ASCII_x)) -      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_DIGIT: -      break; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -    for (ptr += MINBPC(enc); ptr != end; ptr += MINBPC(enc)) { -      switch (BYTE_TYPE(enc, ptr)) { -      case BT_DIGIT: -        break; -      case BT_SEMI: -        *nextTokPtr = ptr + MINBPC(enc); -        return XML_TOK_CHAR_REF; -      default: -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -    } -  } -  return XML_TOK_PARTIAL; -} - -/* ptr points to character following "&" */ - -static int FASTCALL -PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end, -                const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -  case BT_NUM: -    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -    case BT_SEMI: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_ENTITY_REF; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -/* ptr points to character following first character of attribute name */ - -static int FASTCALL -PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end, -                 const char **nextTokPtr) -{ -#ifdef XML_NS -  int hadColon = 0; -#endif -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -#ifdef XML_NS -    case BT_COLON: -      if (hadColon) { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      hadColon = 1; -      ptr += MINBPC(enc); -      if (ptr == end) -        return XML_TOK_PARTIAL; -      switch (BYTE_TYPE(enc, ptr)) { -      CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -      default: -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      break; -#endif -    case BT_S: case BT_CR: case BT_LF: -      for (;;) { -        int t; - -        ptr += MINBPC(enc); -        if (ptr == end) -          return XML_TOK_PARTIAL; -        t = BYTE_TYPE(enc, ptr); -        if (t == BT_EQUALS) -          break; -        switch (t) { -        case BT_S: -        case BT_LF: -        case BT_CR: -          break; -        default: -          *nextTokPtr = ptr; -          return XML_TOK_INVALID; -        } -      } -    /* fall through */ -    case BT_EQUALS: -      { -        int open; -#ifdef XML_NS -        hadColon = 0; -#endif -        for (;;) { -          ptr += MINBPC(enc); -          if (ptr == end) -            return XML_TOK_PARTIAL; -          open = BYTE_TYPE(enc, ptr); -          if (open == BT_QUOT || open == BT_APOS) -            break; -          switch (open) { -          case BT_S: -          case BT_LF: -          case BT_CR: -            break; -          default: -            *nextTokPtr = ptr; -            return XML_TOK_INVALID; -          } -        } -        ptr += MINBPC(enc); -        /* in attribute value */ -        for (;;) { -          int t; -          if (ptr == end) -            return XML_TOK_PARTIAL; -          t = BYTE_TYPE(enc, ptr); -          if (t == open) -            break; -          switch (t) { -          INVALID_CASES(ptr, nextTokPtr) -          case BT_AMP: -            { -              int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr); -              if (tok <= 0) { -                if (tok == XML_TOK_INVALID) -                  *nextTokPtr = ptr; -                return tok; -              } -              break; -            } -          case BT_LT: -            *nextTokPtr = ptr; -            return XML_TOK_INVALID; -          default: -            ptr += MINBPC(enc); -            break; -          } -        } -        ptr += MINBPC(enc); -        if (ptr == end) -          return XML_TOK_PARTIAL; -        switch (BYTE_TYPE(enc, ptr)) { -        case BT_S: -        case BT_CR: -        case BT_LF: -          break; -        case BT_SOL: -          goto sol; -        case BT_GT: -          goto gt; -        default: -          *nextTokPtr = ptr; -          return XML_TOK_INVALID; -        } -        /* ptr points to closing quote */ -        for (;;) { -          ptr += MINBPC(enc); -          if (ptr == end) -            return XML_TOK_PARTIAL; -          switch (BYTE_TYPE(enc, ptr)) { -          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -          case BT_S: case BT_CR: case BT_LF: -            continue; -          case BT_GT: -          gt: -            *nextTokPtr = ptr + MINBPC(enc); -            return XML_TOK_START_TAG_WITH_ATTS; -          case BT_SOL: -          sol: -            ptr += MINBPC(enc); -            if (ptr == end) -              return XML_TOK_PARTIAL; -            if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { -              *nextTokPtr = ptr; -              return XML_TOK_INVALID; -            } -            *nextTokPtr = ptr + MINBPC(enc); -            return XML_TOK_EMPTY_ELEMENT_WITH_ATTS; -          default: -            *nextTokPtr = ptr; -            return XML_TOK_INVALID; -          } -          break; -        } -        break; -      } -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -/* ptr points to character following "<" */ - -static int FASTCALL -PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end, -               const char **nextTokPtr) -{ -#ifdef XML_NS -  int hadColon; -#endif -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -  case BT_EXCL: -    if ((ptr += MINBPC(enc)) == end) -      return XML_TOK_PARTIAL; -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_MINUS: -      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr); -    case BT_LSQB: -      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), -                                      end, nextTokPtr); -    } -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  case BT_QUEST: -    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_SOL: -    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -#ifdef XML_NS -  hadColon = 0; -#endif -  /* we have a start-tag */ -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -#ifdef XML_NS -    case BT_COLON: -      if (hadColon) { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      hadColon = 1; -      ptr += MINBPC(enc); -      if (ptr == end) -        return XML_TOK_PARTIAL; -      switch (BYTE_TYPE(enc, ptr)) { -      CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -      default: -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      break; -#endif -    case BT_S: case BT_CR: case BT_LF: -      { -        ptr += MINBPC(enc); -        while (ptr != end) { -          switch (BYTE_TYPE(enc, ptr)) { -          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -          case BT_GT: -            goto gt; -          case BT_SOL: -            goto sol; -          case BT_S: case BT_CR: case BT_LF: -            ptr += MINBPC(enc); -            continue; -          default: -            *nextTokPtr = ptr; -            return XML_TOK_INVALID; -          } -          return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr); -        } -        return XML_TOK_PARTIAL; -      } -    case BT_GT: -    gt: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_START_TAG_NO_ATTS; -    case BT_SOL: -    sol: -      ptr += MINBPC(enc); -      if (ptr == end) -        return XML_TOK_PARTIAL; -      if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_EMPTY_ELEMENT_NO_ATTS; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -static int FASTCALL -PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end, -                   const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_NONE; -  if (MINBPC(enc) > 1) { -    size_t n = end - ptr; -    if (n & (MINBPC(enc) - 1)) { -      n &= ~(MINBPC(enc) - 1); -      if (n == 0) -        return XML_TOK_PARTIAL; -      end = ptr + n; -    } -  } -  switch (BYTE_TYPE(enc, ptr)) { -  case BT_LT: -    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_AMP: -    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_CR: -    ptr += MINBPC(enc); -    if (ptr == end) -      return XML_TOK_TRAILING_CR; -    if (BYTE_TYPE(enc, ptr) == BT_LF) -      ptr += MINBPC(enc); -    *nextTokPtr = ptr; -    return XML_TOK_DATA_NEWLINE; -  case BT_LF: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_DATA_NEWLINE; -  case BT_RSQB: -    ptr += MINBPC(enc); -    if (ptr == end) -      return XML_TOK_TRAILING_RSQB; -    if (!CHAR_MATCHES(enc, ptr, ASCII_RSQB)) -      break; -    ptr += MINBPC(enc); -    if (ptr == end) -      return XML_TOK_TRAILING_RSQB; -    if (!CHAR_MATCHES(enc, ptr, ASCII_GT)) { -      ptr -= MINBPC(enc); -      break; -    } -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  INVALID_CASES(ptr, nextTokPtr) -  default: -    ptr += MINBPC(enc); -    break; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: \ -      if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \ -        *nextTokPtr = ptr; \ -        return XML_TOK_DATA_CHARS; \ -      } \ -      ptr += n; \ -      break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_RSQB: -      if (ptr + MINBPC(enc) != end) { -         if (!CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) { -           ptr += MINBPC(enc); -           break; -         } -         if (ptr + 2*MINBPC(enc) != end) { -           if (!CHAR_MATCHES(enc, ptr + 2*MINBPC(enc), ASCII_GT)) { -             ptr += MINBPC(enc); -             break; -           } -           *nextTokPtr = ptr + 2*MINBPC(enc); -           return XML_TOK_INVALID; -         } -      } -      /* fall through */ -    case BT_AMP: -    case BT_LT: -    case BT_NONXML: -    case BT_MALFORM: -    case BT_TRAIL: -    case BT_CR: -    case BT_LF: -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    default: -      ptr += MINBPC(enc); -      break; -    } -  } -  *nextTokPtr = ptr; -  return XML_TOK_DATA_CHARS; -} - -/* ptr points to character following "%" */ - -static int FASTCALL -PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end, -                    const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -  case BT_S: case BT_LF: case BT_CR: case BT_PERCNT: -    *nextTokPtr = ptr; -    return XML_TOK_PERCENT; -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -    case BT_SEMI: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_PARAM_ENTITY_REF; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return XML_TOK_PARTIAL; -} - -static int FASTCALL -PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end, -                      const char **nextTokPtr) -{ -  if (ptr == end) -    return XML_TOK_PARTIAL; -  switch (BYTE_TYPE(enc, ptr)) { -  CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -    case BT_CR: case BT_LF: case BT_S: -    case BT_RPAR: case BT_GT: case BT_PERCNT: case BT_VERBAR: -      *nextTokPtr = ptr; -      return XML_TOK_POUND_NAME; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return -XML_TOK_POUND_NAME; -} - -static int FASTCALL -PREFIX(scanLit)(int open, const ENCODING *enc, -                const char *ptr, const char *end, -                const char **nextTokPtr) -{ -  while (ptr != end) { -    int t = BYTE_TYPE(enc, ptr); -    switch (t) { -    INVALID_CASES(ptr, nextTokPtr) -    case BT_QUOT: -    case BT_APOS: -      ptr += MINBPC(enc); -      if (t != open) -        break; -      if (ptr == end) -        return -XML_TOK_LITERAL; -      *nextTokPtr = ptr; -      switch (BYTE_TYPE(enc, ptr)) { -      case BT_S: case BT_CR: case BT_LF: -      case BT_GT: case BT_PERCNT: case BT_LSQB: -        return XML_TOK_LITERAL; -      default: -        return XML_TOK_INVALID; -      } -    default: -      ptr += MINBPC(enc); -      break; -    } -  } -  return XML_TOK_PARTIAL; -} - -static int FASTCALL -PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end, -                  const char **nextTokPtr) -{ -  int tok; -  if (ptr == end) -    return XML_TOK_NONE; -  if (MINBPC(enc) > 1) { -    size_t n = end - ptr; -    if (n & (MINBPC(enc) - 1)) { -      n &= ~(MINBPC(enc) - 1); -      if (n == 0) -        return XML_TOK_PARTIAL; -      end = ptr + n; -    } -  } -  switch (BYTE_TYPE(enc, ptr)) { -  case BT_QUOT: -    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_APOS: -    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_LT: -    { -      ptr += MINBPC(enc); -      if (ptr == end) -        return XML_TOK_PARTIAL; -      switch (BYTE_TYPE(enc, ptr)) { -      case BT_EXCL: -        return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr); -      case BT_QUEST: -        return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr); -      case BT_NMSTRT: -      case BT_HEX: -      case BT_NONASCII: -      case BT_LEAD2: -      case BT_LEAD3: -      case BT_LEAD4: -        *nextTokPtr = ptr - MINBPC(enc); -        return XML_TOK_INSTANCE_START; -      } -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  case BT_CR: -    if (ptr + MINBPC(enc) == end) { -      *nextTokPtr = end; -      /* indicate that this might be part of a CR/LF pair */ -      return -XML_TOK_PROLOG_S; -    } -    /* fall through */ -  case BT_S: case BT_LF: -    for (;;) { -      ptr += MINBPC(enc); -      if (ptr == end) -        break; -      switch (BYTE_TYPE(enc, ptr)) { -      case BT_S: case BT_LF: -        break; -      case BT_CR: -        /* don't split CR/LF pair */ -        if (ptr + MINBPC(enc) != end) -          break; -        /* fall through */ -      default: -        *nextTokPtr = ptr; -        return XML_TOK_PROLOG_S; -      } -    } -    *nextTokPtr = ptr; -    return XML_TOK_PROLOG_S; -  case BT_PERCNT: -    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr); -  case BT_COMMA: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_COMMA; -  case BT_LSQB: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_OPEN_BRACKET; -  case BT_RSQB: -    ptr += MINBPC(enc); -    if (ptr == end) -      return -XML_TOK_CLOSE_BRACKET; -    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { -      if (ptr + MINBPC(enc) == end) -        return XML_TOK_PARTIAL; -      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) { -        *nextTokPtr = ptr + 2*MINBPC(enc); -        return XML_TOK_COND_SECT_CLOSE; -      } -    } -    *nextTokPtr = ptr; -    return XML_TOK_CLOSE_BRACKET; -  case BT_LPAR: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_OPEN_PAREN; -  case BT_RPAR: -    ptr += MINBPC(enc); -    if (ptr == end) -      return -XML_TOK_CLOSE_PAREN; -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_AST: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_CLOSE_PAREN_ASTERISK; -    case BT_QUEST: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_CLOSE_PAREN_QUESTION; -    case BT_PLUS: -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_CLOSE_PAREN_PLUS; -    case BT_CR: case BT_LF: case BT_S: -    case BT_GT: case BT_COMMA: case BT_VERBAR: -    case BT_RPAR: -      *nextTokPtr = ptr; -      return XML_TOK_CLOSE_PAREN; -    } -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  case BT_VERBAR: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_OR; -  case BT_GT: -    *nextTokPtr = ptr + MINBPC(enc); -    return XML_TOK_DECL_CLOSE; -  case BT_NUM: -    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr); -#define LEAD_CASE(n) \ -  case BT_LEAD ## n: \ -    if (end - ptr < n) \ -      return XML_TOK_PARTIAL_CHAR; \ -    if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ -      ptr += n; \ -      tok = XML_TOK_NAME; \ -      break; \ -    } \ -    if (IS_NAME_CHAR(enc, ptr, n)) { \ -      ptr += n; \ -      tok = XML_TOK_NMTOKEN; \ -      break; \ -    } \ -    *nextTokPtr = ptr; \ -    return XML_TOK_INVALID; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -  case BT_NMSTRT: -  case BT_HEX: -    tok = XML_TOK_NAME; -    ptr += MINBPC(enc); -    break; -  case BT_DIGIT: -  case BT_NAME: -  case BT_MINUS: -#ifdef XML_NS -  case BT_COLON: -#endif -    tok = XML_TOK_NMTOKEN; -    ptr += MINBPC(enc); -    break; -  case BT_NONASCII: -    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { -      ptr += MINBPC(enc); -      tok = XML_TOK_NAME; -      break; -    } -    if (IS_NAME_CHAR_MINBPC(enc, ptr)) { -      ptr += MINBPC(enc); -      tok = XML_TOK_NMTOKEN; -      break; -    } -    /* fall through */ -  default: -    *nextTokPtr = ptr; -    return XML_TOK_INVALID; -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -    case BT_GT: case BT_RPAR: case BT_COMMA: -    case BT_VERBAR: case BT_LSQB: case BT_PERCNT: -    case BT_S: case BT_CR: case BT_LF: -      *nextTokPtr = ptr; -      return tok; -#ifdef XML_NS -    case BT_COLON: -      ptr += MINBPC(enc); -      switch (tok) { -      case XML_TOK_NAME: -        if (ptr == end) -          return XML_TOK_PARTIAL; -        tok = XML_TOK_PREFIXED_NAME; -        switch (BYTE_TYPE(enc, ptr)) { -        CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) -        default: -          tok = XML_TOK_NMTOKEN; -          break; -        } -        break; -      case XML_TOK_PREFIXED_NAME: -        tok = XML_TOK_NMTOKEN; -        break; -      } -      break; -#endif -    case BT_PLUS: -      if (tok == XML_TOK_NMTOKEN)  { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_NAME_PLUS; -    case BT_AST: -      if (tok == XML_TOK_NMTOKEN)  { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_NAME_ASTERISK; -    case BT_QUEST: -      if (tok == XML_TOK_NMTOKEN)  { -        *nextTokPtr = ptr; -        return XML_TOK_INVALID; -      } -      *nextTokPtr = ptr + MINBPC(enc); -      return XML_TOK_NAME_QUESTION; -    default: -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    } -  } -  return -tok; -} - -static int FASTCALL -PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, -                          const char *end, const char **nextTokPtr) -{ -  const char *start; -  if (ptr == end) -    return XML_TOK_NONE; -  start = ptr; -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: ptr += n; break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_AMP: -      if (ptr == start) -        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    case BT_LT: -      /* this is for inside entity references */ -      *nextTokPtr = ptr; -      return XML_TOK_INVALID; -    case BT_LF: -      if (ptr == start) { -        *nextTokPtr = ptr + MINBPC(enc); -        return XML_TOK_DATA_NEWLINE; -      } -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    case BT_CR: -      if (ptr == start) { -        ptr += MINBPC(enc); -        if (ptr == end) -          return XML_TOK_TRAILING_CR; -        if (BYTE_TYPE(enc, ptr) == BT_LF) -          ptr += MINBPC(enc); -        *nextTokPtr = ptr; -        return XML_TOK_DATA_NEWLINE; -      } -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    case BT_S: -      if (ptr == start) { -        *nextTokPtr = ptr + MINBPC(enc); -        return XML_TOK_ATTRIBUTE_VALUE_S; -      } -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    default: -      ptr += MINBPC(enc); -      break; -    } -  } -  *nextTokPtr = ptr; -  return XML_TOK_DATA_CHARS; -} - -static int FASTCALL -PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, -                       const char *end, const char **nextTokPtr) -{ -  const char *start; -  if (ptr == end) -    return XML_TOK_NONE; -  start = ptr; -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: ptr += n; break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_AMP: -      if (ptr == start) -        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr); -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    case BT_PERCNT: -      if (ptr == start) { -        int tok =  PREFIX(scanPercent)(enc, ptr + MINBPC(enc), -                                       end, nextTokPtr); -        return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok; -      } -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    case BT_LF: -      if (ptr == start) { -        *nextTokPtr = ptr + MINBPC(enc); -        return XML_TOK_DATA_NEWLINE; -      } -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    case BT_CR: -      if (ptr == start) { -        ptr += MINBPC(enc); -        if (ptr == end) -          return XML_TOK_TRAILING_CR; -        if (BYTE_TYPE(enc, ptr) == BT_LF) -          ptr += MINBPC(enc); -        *nextTokPtr = ptr; -        return XML_TOK_DATA_NEWLINE; -      } -      *nextTokPtr = ptr; -      return XML_TOK_DATA_CHARS; -    default: -      ptr += MINBPC(enc); -      break; -    } -  } -  *nextTokPtr = ptr; -  return XML_TOK_DATA_CHARS; -} - -#ifdef XML_DTD - -static int FASTCALL -PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, -                         const char *end, const char **nextTokPtr) -{ -  int level = 0; -  if (MINBPC(enc) > 1) { -    size_t n = end - ptr; -    if (n & (MINBPC(enc) - 1)) { -      n &= ~(MINBPC(enc) - 1); -      end = ptr + n; -    } -  } -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -    INVALID_CASES(ptr, nextTokPtr) -    case BT_LT: -      if ((ptr += MINBPC(enc)) == end) -        return XML_TOK_PARTIAL; -      if (CHAR_MATCHES(enc, ptr, ASCII_EXCL)) { -        if ((ptr += MINBPC(enc)) == end) -          return XML_TOK_PARTIAL; -        if (CHAR_MATCHES(enc, ptr, ASCII_LSQB)) { -          ++level; -          ptr += MINBPC(enc); -        } -      } -      break; -    case BT_RSQB: -      if ((ptr += MINBPC(enc)) == end) -        return XML_TOK_PARTIAL; -      if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) { -        if ((ptr += MINBPC(enc)) == end) -          return XML_TOK_PARTIAL; -        if (CHAR_MATCHES(enc, ptr, ASCII_GT)) { -          ptr += MINBPC(enc); -          if (level == 0) { -            *nextTokPtr = ptr; -            return XML_TOK_IGNORE_SECT; -          } -          --level; -        } -      } -      break; -    default: -      ptr += MINBPC(enc); -      break; -    } -  } -  return XML_TOK_PARTIAL; -} - -#endif /* XML_DTD */ - -static int FASTCALL -PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end, -                   const char **badPtr) -{ -  ptr += MINBPC(enc); -  end -= MINBPC(enc); -  for (; ptr != end; ptr += MINBPC(enc)) { -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_DIGIT: -    case BT_HEX: -    case BT_MINUS: -    case BT_APOS: -    case BT_LPAR: -    case BT_RPAR: -    case BT_PLUS: -    case BT_COMMA: -    case BT_SOL: -    case BT_EQUALS: -    case BT_QUEST: -    case BT_CR: -    case BT_LF: -    case BT_SEMI: -    case BT_EXCL: -    case BT_AST: -    case BT_PERCNT: -    case BT_NUM: -#ifdef XML_NS -    case BT_COLON: -#endif -      break; -    case BT_S: -      if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) { -        *badPtr = ptr; -        return 0; -      } -      break; -    case BT_NAME: -    case BT_NMSTRT: -      if (!(BYTE_TO_ASCII(enc, ptr) & ~0x7f)) -        break; -    default: -      switch (BYTE_TO_ASCII(enc, ptr)) { -      case 0x24: /* $ */ -      case 0x40: /* @ */ -        break; -      default: -        *badPtr = ptr; -        return 0; -      } -      break; -    } -  } -  return 1; -} - -/* This must only be called for a well-formed start-tag or empty -   element tag.  Returns the number of attributes.  Pointers to the -   first attsMax attributes are stored in atts. -*/ - -static int FASTCALL -PREFIX(getAtts)(const ENCODING *enc, const char *ptr, -                int attsMax, ATTRIBUTE *atts) -{ -  enum { other, inName, inValue } state = inName; -  int nAtts = 0; -  int open = 0; /* defined when state == inValue; -                   initialization just to shut up compilers */ - -  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) { -    switch (BYTE_TYPE(enc, ptr)) { -#define START_NAME \ -      if (state == other) { \ -        if (nAtts < attsMax) { \ -          atts[nAtts].name = ptr; \ -          atts[nAtts].normalized = 1; \ -        } \ -        state = inName; \ -      } -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: START_NAME ptr += (n - MINBPC(enc)); break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_NONASCII: -    case BT_NMSTRT: -    case BT_HEX: -      START_NAME -      break; -#undef START_NAME -    case BT_QUOT: -      if (state != inValue) { -        if (nAtts < attsMax) -          atts[nAtts].valuePtr = ptr + MINBPC(enc); -        state = inValue; -        open = BT_QUOT; -      } -      else if (open == BT_QUOT) { -        state = other; -        if (nAtts < attsMax) -          atts[nAtts].valueEnd = ptr; -        nAtts++; -      } -      break; -    case BT_APOS: -      if (state != inValue) { -        if (nAtts < attsMax) -          atts[nAtts].valuePtr = ptr + MINBPC(enc); -        state = inValue; -        open = BT_APOS; -      } -      else if (open == BT_APOS) { -        state = other; -        if (nAtts < attsMax) -          atts[nAtts].valueEnd = ptr; -        nAtts++; -      } -      break; -    case BT_AMP: -      if (nAtts < attsMax) -        atts[nAtts].normalized = 0; -      break; -    case BT_S: -      if (state == inName) -        state = other; -      else if (state == inValue -               && nAtts < attsMax -               && atts[nAtts].normalized -               && (ptr == atts[nAtts].valuePtr -                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE -                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE -                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open)) -        atts[nAtts].normalized = 0; -      break; -    case BT_CR: case BT_LF: -      /* This case ensures that the first attribute name is counted -         Apart from that we could just change state on the quote. */ -      if (state == inName) -        state = other; -      else if (state == inValue && nAtts < attsMax) -        atts[nAtts].normalized = 0; -      break; -    case BT_GT: -    case BT_SOL: -      if (state != inValue) -        return nAtts; -      break; -    default: -      break; -    } -  } -  /* not reached */ -} - -static int FASTCALL -PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) -{ -  int result = 0; -  /* skip &# */ -  ptr += 2*MINBPC(enc); -  if (CHAR_MATCHES(enc, ptr, ASCII_x)) { -    for (ptr += MINBPC(enc); -         !CHAR_MATCHES(enc, ptr, ASCII_SEMI); -         ptr += MINBPC(enc)) { -      int c = BYTE_TO_ASCII(enc, ptr); -      switch (c) { -      case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4: -      case ASCII_5: case ASCII_6: case ASCII_7: case ASCII_8: case ASCII_9: -        result <<= 4; -        result |= (c - ASCII_0); -        break; -      case ASCII_A: case ASCII_B: case ASCII_C: -      case ASCII_D: case ASCII_E: case ASCII_F: -        result <<= 4; -        result += 10 + (c - ASCII_A); -        break; -      case ASCII_a: case ASCII_b: case ASCII_c: -      case ASCII_d: case ASCII_e: case ASCII_f: -        result <<= 4; -        result += 10 + (c - ASCII_a); -        break; -      } -      if (result >= 0x110000) -        return -1; -    } -  } -  else { -    for (; !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) { -      int c = BYTE_TO_ASCII(enc, ptr); -      result *= 10; -      result += (c - ASCII_0); -      if (result >= 0x110000) -        return -1; -    } -  } -  return checkCharRefNumber(result); -} - -static int FASTCALL -PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, -                             const char *end) -{ -  switch ((end - ptr)/MINBPC(enc)) { -  case 2: -    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) { -      switch (BYTE_TO_ASCII(enc, ptr)) { -      case ASCII_l: -        return ASCII_LT; -      case ASCII_g: -        return ASCII_GT; -      } -    } -    break; -  case 3: -    if (CHAR_MATCHES(enc, ptr, ASCII_a)) { -      ptr += MINBPC(enc); -      if (CHAR_MATCHES(enc, ptr, ASCII_m)) { -        ptr += MINBPC(enc); -        if (CHAR_MATCHES(enc, ptr, ASCII_p)) -          return ASCII_AMP; -      } -    } -    break; -  case 4: -    switch (BYTE_TO_ASCII(enc, ptr)) { -    case ASCII_q: -      ptr += MINBPC(enc); -      if (CHAR_MATCHES(enc, ptr, ASCII_u)) { -        ptr += MINBPC(enc); -        if (CHAR_MATCHES(enc, ptr, ASCII_o)) { -          ptr += MINBPC(enc); -          if (CHAR_MATCHES(enc, ptr, ASCII_t)) -            return ASCII_QUOT; -        } -      } -      break; -    case ASCII_a: -      ptr += MINBPC(enc); -      if (CHAR_MATCHES(enc, ptr, ASCII_p)) { -        ptr += MINBPC(enc); -        if (CHAR_MATCHES(enc, ptr, ASCII_o)) { -          ptr += MINBPC(enc); -          if (CHAR_MATCHES(enc, ptr, ASCII_s)) -            return ASCII_APOS; -        } -      } -      break; -    } -  } -  return 0; -} - -static int FASTCALL -PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2) -{ -  for (;;) { -    switch (BYTE_TYPE(enc, ptr1)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: \ -      if (*ptr1++ != *ptr2++) \ -        return 0; -    LEAD_CASE(4) LEAD_CASE(3) LEAD_CASE(2) -#undef LEAD_CASE -      /* fall through */ -      if (*ptr1++ != *ptr2++) -        return 0; -      break; -    case BT_NONASCII: -    case BT_NMSTRT: -#ifdef XML_NS -    case BT_COLON: -#endif -    case BT_HEX: -    case BT_DIGIT: -    case BT_NAME: -    case BT_MINUS: -      if (*ptr2++ != *ptr1++) -        return 0; -      if (MINBPC(enc) > 1) { -        if (*ptr2++ != *ptr1++) -          return 0; -        if (MINBPC(enc) > 2) { -          if (*ptr2++ != *ptr1++) -            return 0; -          if (MINBPC(enc) > 3) { -            if (*ptr2++ != *ptr1++) -              return 0; -          } -        } -      } -      break; -    default: -      if (MINBPC(enc) == 1 && *ptr1 == *ptr2) -        return 1; -      switch (BYTE_TYPE(enc, ptr2)) { -      case BT_LEAD2: -      case BT_LEAD3: -      case BT_LEAD4: -      case BT_NONASCII: -      case BT_NMSTRT: -#ifdef XML_NS -      case BT_COLON: -#endif -      case BT_HEX: -      case BT_DIGIT: -      case BT_NAME: -      case BT_MINUS: -        return 0; -      default: -        return 1; -      } -    } -  } -  /* not reached */ -} - -static int FASTCALL -PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1, -                         const char *end1, const char *ptr2) -{ -  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) { -    if (ptr1 == end1) -      return 0; -    if (!CHAR_MATCHES(enc, ptr1, *ptr2)) -      return 0; -  } -  return ptr1 == end1; -} - -static int FASTCALL -PREFIX(nameLength)(const ENCODING *enc, const char *ptr) -{ -  const char *start = ptr; -  for (;;) { -    switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: ptr += n; break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_NONASCII: -    case BT_NMSTRT: -#ifdef XML_NS -    case BT_COLON: -#endif -    case BT_HEX: -    case BT_DIGIT: -    case BT_NAME: -    case BT_MINUS: -      ptr += MINBPC(enc); -      break; -    default: -      return ptr - start; -    } -  } -} - -static const char * FASTCALL -PREFIX(skipS)(const ENCODING *enc, const char *ptr) -{ -  for (;;) { -    switch (BYTE_TYPE(enc, ptr)) { -    case BT_LF: -    case BT_CR: -    case BT_S: -      ptr += MINBPC(enc); -      break; -    default: -      return ptr; -    } -  } -} - -static void FASTCALL -PREFIX(updatePosition)(const ENCODING *enc, -                       const char *ptr, -                       const char *end, -                       POSITION *pos) -{ -  while (ptr != end) { -    switch (BYTE_TYPE(enc, ptr)) { -#define LEAD_CASE(n) \ -    case BT_LEAD ## n: \ -      ptr += n; \ -      break; -    LEAD_CASE(2) LEAD_CASE(3) LEAD_CASE(4) -#undef LEAD_CASE -    case BT_LF: -      pos->columnNumber = (unsigned)-1; -      pos->lineNumber++; -      ptr += MINBPC(enc); -      break; -    case BT_CR: -      pos->lineNumber++; -      ptr += MINBPC(enc); -      if (ptr != end && BYTE_TYPE(enc, ptr) == BT_LF) -        ptr += MINBPC(enc); -      pos->columnNumber = (unsigned)-1; -      break; -    default: -      ptr += MINBPC(enc); -      break; -    } -    pos->columnNumber++; -  } -} - -#undef DO_LEAD_CASE -#undef MULTIBYTE_CASES -#undef INVALID_CASES -#undef CHECK_NAME_CASE -#undef CHECK_NAME_CASES -#undef CHECK_NMSTRT_CASE -#undef CHECK_NMSTRT_CASES diff --git a/ext/xml/expat/xmltok_impl.h b/ext/xml/expat/xmltok_impl.h deleted file mode 100644 index da0ea60a65..0000000000 --- a/ext/xml/expat/xmltok_impl.h +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd -See the file COPYING for copying permission. -*/ - -enum { -  BT_NONXML, -  BT_MALFORM, -  BT_LT, -  BT_AMP, -  BT_RSQB, -  BT_LEAD2, -  BT_LEAD3, -  BT_LEAD4, -  BT_TRAIL, -  BT_CR, -  BT_LF, -  BT_GT, -  BT_QUOT, -  BT_APOS, -  BT_EQUALS, -  BT_QUEST, -  BT_EXCL, -  BT_SOL, -  BT_SEMI, -  BT_NUM, -  BT_LSQB, -  BT_S, -  BT_NMSTRT, -  BT_COLON, -  BT_HEX, -  BT_DIGIT, -  BT_NAME, -  BT_MINUS, -  BT_OTHER, /* known not to be a name or name start character */ -  BT_NONASCII, /* might be a name or name start character */ -  BT_PERCNT, -  BT_LPAR, -  BT_RPAR, -  BT_AST, -  BT_PLUS, -  BT_COMMA, -  BT_VERBAR -}; - -#include <stddef.h> diff --git a/ext/xml/expat/xmltok_ns.c b/ext/xml/expat/xmltok_ns.c deleted file mode 100644 index 011cb8f0c5..0000000000 --- a/ext/xml/expat/xmltok_ns.c +++ /dev/null @@ -1,106 +0,0 @@ -const ENCODING * -NS(XmlGetUtf8InternalEncoding)(void) -{ -  return &ns(internal_utf8_encoding).enc; -} - -const ENCODING * -NS(XmlGetUtf16InternalEncoding)(void) -{ -#if BYTEORDER == 1234 -  return &ns(internal_little2_encoding).enc; -#elif BYTEORDER == 4321 -  return &ns(internal_big2_encoding).enc; -#else -  const short n = 1; -  return (*(const char *)&n -          ? &ns(internal_little2_encoding).enc -          : &ns(internal_big2_encoding).enc); -#endif -} - -static const ENCODING *NS(encodings)[] = { -  &ns(latin1_encoding).enc, -  &ns(ascii_encoding).enc, -  &ns(utf8_encoding).enc, -  &ns(big2_encoding).enc, -  &ns(big2_encoding).enc, -  &ns(little2_encoding).enc, -  &ns(utf8_encoding).enc /* NO_ENC */ -}; - -static int FASTCALL -NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, -                   const char **nextTokPtr) -{ -  return initScan(NS(encodings), (const INIT_ENCODING *)enc, -                  XML_PROLOG_STATE, ptr, end, nextTokPtr); -} - -static int FASTCALL -NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, -                    const char **nextTokPtr) -{ -  return initScan(NS(encodings), (const INIT_ENCODING *)enc, -                  XML_CONTENT_STATE, ptr, end, nextTokPtr); -} - -int -NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, -                    const char *name) -{ -  int i = getEncodingIndex(name); -  if (i == UNKNOWN_ENC) -    return 0; -  SET_INIT_ENC_INDEX(p, i); -  p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); -  p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); -  p->initEnc.updatePosition = initUpdatePosition; -  p->encPtr = encPtr; -  *encPtr = &(p->initEnc); -  return 1; -} - -static const ENCODING * -NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) -{ -#define ENCODING_MAX 128 -  char buf[ENCODING_MAX]; -  char *p = buf; -  int i; -  XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); -  if (ptr != end) -    return 0; -  *p = 0; -  if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) -    return enc; -  i = getEncodingIndex(buf); -  if (i == UNKNOWN_ENC) -    return 0; -  return NS(encodings)[i]; -} - -int -NS(XmlParseXmlDecl)(int isGeneralTextEntity, -                    const ENCODING *enc, -                    const char *ptr, -                    const char *end, -                    const char **badPtr, -                    const char **versionPtr, -                    const char **versionEndPtr, -                    const char **encodingName, -                    const ENCODING **encoding, -                    int *standalone) -{ -  return doParseXmlDecl(NS(findEncoding), -                        isGeneralTextEntity, -                        enc, -                        ptr, -                        end, -                        badPtr, -                        versionPtr, -                        versionEndPtr, -                        encodingName, -                        encoding, -                        standalone); -}  | 
