Reactos
at master 663 lines 17 kB view raw
1/* 2 * Summary: internals routines and limits exported by the parser. 3 * Description: this module exports a number of internal parsing routines 4 * they are not really all intended for applications but 5 * can prove useful doing low level processing. 6 * 7 * Copy: See Copyright for the status of this software. 8 * 9 * Author: Daniel Veillard 10 */ 11 12#ifndef __XML_PARSER_INTERNALS_H__ 13#define __XML_PARSER_INTERNALS_H__ 14 15#include <libxml/xmlversion.h> 16#include <libxml/parser.h> 17#include <libxml/HTMLparser.h> 18#include <libxml/chvalid.h> 19#include <libxml/SAX2.h> 20 21#ifdef __cplusplus 22extern "C" { 23#endif 24 25/** 26 * xmlParserMaxDepth: 27 * 28 * arbitrary depth limit for the XML documents that we allow to 29 * process. This is not a limitation of the parser but a safety 30 * boundary feature, use XML_PARSE_HUGE option to override it. 31 */ 32XMLPUBVAR unsigned int xmlParserMaxDepth; 33 34/** 35 * XML_MAX_TEXT_LENGTH: 36 * 37 * Maximum size allowed for a single text node when building a tree. 38 * This is not a limitation of the parser but a safety boundary feature, 39 * use XML_PARSE_HUGE option to override it. 40 * Introduced in 2.9.0 41 */ 42#define XML_MAX_TEXT_LENGTH 10000000 43 44/** 45 * XML_MAX_HUGE_LENGTH: 46 * 47 * Maximum size allowed when XML_PARSE_HUGE is set. 48 */ 49#define XML_MAX_HUGE_LENGTH 1000000000 50 51/** 52 * XML_MAX_NAME_LENGTH: 53 * 54 * Maximum size allowed for a markup identifier. 55 * This is not a limitation of the parser but a safety boundary feature, 56 * use XML_PARSE_HUGE option to override it. 57 * Note that with the use of parsing dictionaries overriding the limit 58 * may result in more runtime memory usage in face of "unfriendly' content 59 * Introduced in 2.9.0 60 */ 61#define XML_MAX_NAME_LENGTH 50000 62 63/** 64 * XML_MAX_DICTIONARY_LIMIT: 65 * 66 * Maximum size allowed by the parser for a dictionary by default 67 * This is not a limitation of the parser but a safety boundary feature, 68 * use XML_PARSE_HUGE option to override it. 69 * Introduced in 2.9.0 70 */ 71#define XML_MAX_DICTIONARY_LIMIT 10000000 72 73/** 74 * XML_MAX_LOOKUP_LIMIT: 75 * 76 * Maximum size allowed by the parser for ahead lookup 77 * This is an upper boundary enforced by the parser to avoid bad 78 * behaviour on "unfriendly' content 79 * Introduced in 2.9.0 80 */ 81#define XML_MAX_LOOKUP_LIMIT 10000000 82 83/** 84 * XML_MAX_NAMELEN: 85 * 86 * Identifiers can be longer, but this will be more costly 87 * at runtime. 88 */ 89#define XML_MAX_NAMELEN 100 90 91/** 92 * INPUT_CHUNK: 93 * 94 * The parser tries to always have that amount of input ready. 95 * One of the point is providing context when reporting errors. 96 */ 97#define INPUT_CHUNK 250 98 99/************************************************************************ 100 * * 101 * UNICODE version of the macros. * 102 * * 103 ************************************************************************/ 104/** 105 * IS_BYTE_CHAR: 106 * @c: an byte value (int) 107 * 108 * Macro to check the following production in the XML spec: 109 * 110 * [2] Char ::= #x9 | #xA | #xD | [#x20...] 111 * any byte character in the accepted range 112 */ 113#define IS_BYTE_CHAR(c) xmlIsChar_ch(c) 114 115/** 116 * IS_CHAR: 117 * @c: an UNICODE value (int) 118 * 119 * Macro to check the following production in the XML spec: 120 * 121 * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] 122 * | [#x10000-#x10FFFF] 123 * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. 124 */ 125#define IS_CHAR(c) xmlIsCharQ(c) 126 127/** 128 * IS_CHAR_CH: 129 * @c: an xmlChar (usually an unsigned char) 130 * 131 * Behaves like IS_CHAR on single-byte value 132 */ 133#define IS_CHAR_CH(c) xmlIsChar_ch(c) 134 135/** 136 * IS_BLANK: 137 * @c: an UNICODE value (int) 138 * 139 * Macro to check the following production in the XML spec: 140 * 141 * [3] S ::= (#x20 | #x9 | #xD | #xA)+ 142 */ 143#define IS_BLANK(c) xmlIsBlankQ(c) 144 145/** 146 * IS_BLANK_CH: 147 * @c: an xmlChar value (normally unsigned char) 148 * 149 * Behaviour same as IS_BLANK 150 */ 151#define IS_BLANK_CH(c) xmlIsBlank_ch(c) 152 153/** 154 * IS_BASECHAR: 155 * @c: an UNICODE value (int) 156 * 157 * Macro to check the following production in the XML spec: 158 * 159 * [85] BaseChar ::= ... long list see REC ... 160 */ 161#define IS_BASECHAR(c) xmlIsBaseCharQ(c) 162 163/** 164 * IS_DIGIT: 165 * @c: an UNICODE value (int) 166 * 167 * Macro to check the following production in the XML spec: 168 * 169 * [88] Digit ::= ... long list see REC ... 170 */ 171#define IS_DIGIT(c) xmlIsDigitQ(c) 172 173/** 174 * IS_DIGIT_CH: 175 * @c: an xmlChar value (usually an unsigned char) 176 * 177 * Behaves like IS_DIGIT but with a single byte argument 178 */ 179#define IS_DIGIT_CH(c) xmlIsDigit_ch(c) 180 181/** 182 * IS_COMBINING: 183 * @c: an UNICODE value (int) 184 * 185 * Macro to check the following production in the XML spec: 186 * 187 * [87] CombiningChar ::= ... long list see REC ... 188 */ 189#define IS_COMBINING(c) xmlIsCombiningQ(c) 190 191/** 192 * IS_COMBINING_CH: 193 * @c: an xmlChar (usually an unsigned char) 194 * 195 * Always false (all combining chars > 0xff) 196 */ 197#define IS_COMBINING_CH(c) 0 198 199/** 200 * IS_EXTENDER: 201 * @c: an UNICODE value (int) 202 * 203 * Macro to check the following production in the XML spec: 204 * 205 * 206 * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | 207 * #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | 208 * [#x309D-#x309E] | [#x30FC-#x30FE] 209 */ 210#define IS_EXTENDER(c) xmlIsExtenderQ(c) 211 212/** 213 * IS_EXTENDER_CH: 214 * @c: an xmlChar value (usually an unsigned char) 215 * 216 * Behaves like IS_EXTENDER but with a single-byte argument 217 */ 218#define IS_EXTENDER_CH(c) xmlIsExtender_ch(c) 219 220/** 221 * IS_IDEOGRAPHIC: 222 * @c: an UNICODE value (int) 223 * 224 * Macro to check the following production in the XML spec: 225 * 226 * 227 * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] 228 */ 229#define IS_IDEOGRAPHIC(c) xmlIsIdeographicQ(c) 230 231/** 232 * IS_LETTER: 233 * @c: an UNICODE value (int) 234 * 235 * Macro to check the following production in the XML spec: 236 * 237 * 238 * [84] Letter ::= BaseChar | Ideographic 239 */ 240#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c)) 241 242/** 243 * IS_LETTER_CH: 244 * @c: an xmlChar value (normally unsigned char) 245 * 246 * Macro behaves like IS_LETTER, but only check base chars 247 * 248 */ 249#define IS_LETTER_CH(c) xmlIsBaseChar_ch(c) 250 251/** 252 * IS_ASCII_LETTER: 253 * @c: an xmlChar value 254 * 255 * Macro to check [a-zA-Z] 256 * 257 */ 258#define IS_ASCII_LETTER(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \ 259 ((0x61 <= (c)) && ((c) <= 0x7a))) 260 261/** 262 * IS_ASCII_DIGIT: 263 * @c: an xmlChar value 264 * 265 * Macro to check [0-9] 266 * 267 */ 268#define IS_ASCII_DIGIT(c) ((0x30 <= (c)) && ((c) <= 0x39)) 269 270/** 271 * IS_PUBIDCHAR: 272 * @c: an UNICODE value (int) 273 * 274 * Macro to check the following production in the XML spec: 275 * 276 * 277 * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] 278 */ 279#define IS_PUBIDCHAR(c) xmlIsPubidCharQ(c) 280 281/** 282 * IS_PUBIDCHAR_CH: 283 * @c: an xmlChar value (normally unsigned char) 284 * 285 * Same as IS_PUBIDCHAR but for single-byte value 286 */ 287#define IS_PUBIDCHAR_CH(c) xmlIsPubidChar_ch(c) 288 289/** 290 * Global variables used for predefined strings. 291 */ 292XMLPUBVAR const xmlChar xmlStringText[]; 293XMLPUBVAR const xmlChar xmlStringTextNoenc[]; 294XMLPUBVAR const xmlChar xmlStringComment[]; 295 296/* 297 * Function to finish the work of the macros where needed. 298 */ 299XMLPUBFUN int xmlIsLetter (int c); 300 301/** 302 * Parser context. 303 */ 304XMLPUBFUN xmlParserCtxtPtr 305 xmlCreateFileParserCtxt (const char *filename); 306XMLPUBFUN xmlParserCtxtPtr 307 xmlCreateURLParserCtxt (const char *filename, 308 int options); 309XMLPUBFUN xmlParserCtxtPtr 310 xmlCreateMemoryParserCtxt(const char *buffer, 311 int size); 312XMLPUBFUN xmlParserCtxtPtr 313 xmlCreateEntityParserCtxt(const xmlChar *URL, 314 const xmlChar *ID, 315 const xmlChar *base); 316XMLPUBFUN int 317 xmlSwitchEncoding (xmlParserCtxtPtr ctxt, 318 xmlCharEncoding enc); 319XMLPUBFUN int 320 xmlSwitchToEncoding (xmlParserCtxtPtr ctxt, 321 xmlCharEncodingHandlerPtr handler); 322XML_DEPRECATED 323XMLPUBFUN int 324 xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt, 325 xmlParserInputPtr input, 326 xmlCharEncodingHandlerPtr handler); 327 328/** 329 * Input Streams. 330 */ 331XMLPUBFUN xmlParserInputPtr 332 xmlNewStringInputStream (xmlParserCtxtPtr ctxt, 333 const xmlChar *buffer); 334XML_DEPRECATED 335XMLPUBFUN xmlParserInputPtr 336 xmlNewEntityInputStream (xmlParserCtxtPtr ctxt, 337 xmlEntityPtr entity); 338XMLPUBFUN int 339 xmlPushInput (xmlParserCtxtPtr ctxt, 340 xmlParserInputPtr input); 341XMLPUBFUN xmlChar 342 xmlPopInput (xmlParserCtxtPtr ctxt); 343XMLPUBFUN void 344 xmlFreeInputStream (xmlParserInputPtr input); 345XMLPUBFUN xmlParserInputPtr 346 xmlNewInputFromFile (xmlParserCtxtPtr ctxt, 347 const char *filename); 348XMLPUBFUN xmlParserInputPtr 349 xmlNewInputStream (xmlParserCtxtPtr ctxt); 350 351/** 352 * Namespaces. 353 */ 354XMLPUBFUN xmlChar * 355 xmlSplitQName (xmlParserCtxtPtr ctxt, 356 const xmlChar *name, 357 xmlChar **prefix); 358 359/** 360 * Generic production rules. 361 */ 362XML_DEPRECATED 363XMLPUBFUN const xmlChar * 364 xmlParseName (xmlParserCtxtPtr ctxt); 365XML_DEPRECATED 366XMLPUBFUN xmlChar * 367 xmlParseNmtoken (xmlParserCtxtPtr ctxt); 368XML_DEPRECATED 369XMLPUBFUN xmlChar * 370 xmlParseEntityValue (xmlParserCtxtPtr ctxt, 371 xmlChar **orig); 372XML_DEPRECATED 373XMLPUBFUN xmlChar * 374 xmlParseAttValue (xmlParserCtxtPtr ctxt); 375XML_DEPRECATED 376XMLPUBFUN xmlChar * 377 xmlParseSystemLiteral (xmlParserCtxtPtr ctxt); 378XML_DEPRECATED 379XMLPUBFUN xmlChar * 380 xmlParsePubidLiteral (xmlParserCtxtPtr ctxt); 381XML_DEPRECATED 382XMLPUBFUN void 383 xmlParseCharData (xmlParserCtxtPtr ctxt, 384 int cdata); 385XML_DEPRECATED 386XMLPUBFUN xmlChar * 387 xmlParseExternalID (xmlParserCtxtPtr ctxt, 388 xmlChar **publicID, 389 int strict); 390XML_DEPRECATED 391XMLPUBFUN void 392 xmlParseComment (xmlParserCtxtPtr ctxt); 393XML_DEPRECATED 394XMLPUBFUN const xmlChar * 395 xmlParsePITarget (xmlParserCtxtPtr ctxt); 396XML_DEPRECATED 397XMLPUBFUN void 398 xmlParsePI (xmlParserCtxtPtr ctxt); 399XML_DEPRECATED 400XMLPUBFUN void 401 xmlParseNotationDecl (xmlParserCtxtPtr ctxt); 402XML_DEPRECATED 403XMLPUBFUN void 404 xmlParseEntityDecl (xmlParserCtxtPtr ctxt); 405XML_DEPRECATED 406XMLPUBFUN int 407 xmlParseDefaultDecl (xmlParserCtxtPtr ctxt, 408 xmlChar **value); 409XML_DEPRECATED 410XMLPUBFUN xmlEnumerationPtr 411 xmlParseNotationType (xmlParserCtxtPtr ctxt); 412XML_DEPRECATED 413XMLPUBFUN xmlEnumerationPtr 414 xmlParseEnumerationType (xmlParserCtxtPtr ctxt); 415XML_DEPRECATED 416XMLPUBFUN int 417 xmlParseEnumeratedType (xmlParserCtxtPtr ctxt, 418 xmlEnumerationPtr *tree); 419XML_DEPRECATED 420XMLPUBFUN int 421 xmlParseAttributeType (xmlParserCtxtPtr ctxt, 422 xmlEnumerationPtr *tree); 423XML_DEPRECATED 424XMLPUBFUN void 425 xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); 426XML_DEPRECATED 427XMLPUBFUN xmlElementContentPtr 428 xmlParseElementMixedContentDecl 429 (xmlParserCtxtPtr ctxt, 430 int inputchk); 431XML_DEPRECATED 432XMLPUBFUN xmlElementContentPtr 433 xmlParseElementChildrenContentDecl 434 (xmlParserCtxtPtr ctxt, 435 int inputchk); 436XML_DEPRECATED 437XMLPUBFUN int 438 xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, 439 const xmlChar *name, 440 xmlElementContentPtr *result); 441XML_DEPRECATED 442XMLPUBFUN int 443 xmlParseElementDecl (xmlParserCtxtPtr ctxt); 444XML_DEPRECATED 445XMLPUBFUN void 446 xmlParseMarkupDecl (xmlParserCtxtPtr ctxt); 447XML_DEPRECATED 448XMLPUBFUN int 449 xmlParseCharRef (xmlParserCtxtPtr ctxt); 450XML_DEPRECATED 451XMLPUBFUN xmlEntityPtr 452 xmlParseEntityRef (xmlParserCtxtPtr ctxt); 453XML_DEPRECATED 454XMLPUBFUN void 455 xmlParseReference (xmlParserCtxtPtr ctxt); 456XML_DEPRECATED 457XMLPUBFUN void 458 xmlParsePEReference (xmlParserCtxtPtr ctxt); 459XML_DEPRECATED 460XMLPUBFUN void 461 xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt); 462#ifdef LIBXML_SAX1_ENABLED 463XML_DEPRECATED 464XMLPUBFUN const xmlChar * 465 xmlParseAttribute (xmlParserCtxtPtr ctxt, 466 xmlChar **value); 467XML_DEPRECATED 468XMLPUBFUN const xmlChar * 469 xmlParseStartTag (xmlParserCtxtPtr ctxt); 470XML_DEPRECATED 471XMLPUBFUN void 472 xmlParseEndTag (xmlParserCtxtPtr ctxt); 473#endif /* LIBXML_SAX1_ENABLED */ 474XML_DEPRECATED 475XMLPUBFUN void 476 xmlParseCDSect (xmlParserCtxtPtr ctxt); 477XMLPUBFUN void 478 xmlParseContent (xmlParserCtxtPtr ctxt); 479XML_DEPRECATED 480XMLPUBFUN void 481 xmlParseElement (xmlParserCtxtPtr ctxt); 482XML_DEPRECATED 483XMLPUBFUN xmlChar * 484 xmlParseVersionNum (xmlParserCtxtPtr ctxt); 485XML_DEPRECATED 486XMLPUBFUN xmlChar * 487 xmlParseVersionInfo (xmlParserCtxtPtr ctxt); 488XML_DEPRECATED 489XMLPUBFUN xmlChar * 490 xmlParseEncName (xmlParserCtxtPtr ctxt); 491XML_DEPRECATED 492XMLPUBFUN const xmlChar * 493 xmlParseEncodingDecl (xmlParserCtxtPtr ctxt); 494XML_DEPRECATED 495XMLPUBFUN int 496 xmlParseSDDecl (xmlParserCtxtPtr ctxt); 497XML_DEPRECATED 498XMLPUBFUN void 499 xmlParseXMLDecl (xmlParserCtxtPtr ctxt); 500XML_DEPRECATED 501XMLPUBFUN void 502 xmlParseTextDecl (xmlParserCtxtPtr ctxt); 503XML_DEPRECATED 504XMLPUBFUN void 505 xmlParseMisc (xmlParserCtxtPtr ctxt); 506XMLPUBFUN void 507 xmlParseExternalSubset (xmlParserCtxtPtr ctxt, 508 const xmlChar *ExternalID, 509 const xmlChar *SystemID); 510/** 511 * XML_SUBSTITUTE_NONE: 512 * 513 * If no entities need to be substituted. 514 */ 515#define XML_SUBSTITUTE_NONE 0 516/** 517 * XML_SUBSTITUTE_REF: 518 * 519 * Whether general entities need to be substituted. 520 */ 521#define XML_SUBSTITUTE_REF 1 522/** 523 * XML_SUBSTITUTE_PEREF: 524 * 525 * Whether parameter entities need to be substituted. 526 */ 527#define XML_SUBSTITUTE_PEREF 2 528/** 529 * XML_SUBSTITUTE_BOTH: 530 * 531 * Both general and parameter entities need to be substituted. 532 */ 533#define XML_SUBSTITUTE_BOTH 3 534 535XML_DEPRECATED 536XMLPUBFUN xmlChar * 537 xmlStringDecodeEntities (xmlParserCtxtPtr ctxt, 538 const xmlChar *str, 539 int what, 540 xmlChar end, 541 xmlChar end2, 542 xmlChar end3); 543XML_DEPRECATED 544XMLPUBFUN xmlChar * 545 xmlStringLenDecodeEntities (xmlParserCtxtPtr ctxt, 546 const xmlChar *str, 547 int len, 548 int what, 549 xmlChar end, 550 xmlChar end2, 551 xmlChar end3); 552 553/* 554 * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP. 555 */ 556XML_DEPRECATED 557XMLPUBFUN int nodePush (xmlParserCtxtPtr ctxt, 558 xmlNodePtr value); 559XML_DEPRECATED 560XMLPUBFUN xmlNodePtr nodePop (xmlParserCtxtPtr ctxt); 561XMLPUBFUN int inputPush (xmlParserCtxtPtr ctxt, 562 xmlParserInputPtr value); 563XMLPUBFUN xmlParserInputPtr inputPop (xmlParserCtxtPtr ctxt); 564XML_DEPRECATED 565XMLPUBFUN const xmlChar * namePop (xmlParserCtxtPtr ctxt); 566XML_DEPRECATED 567XMLPUBFUN int namePush (xmlParserCtxtPtr ctxt, 568 const xmlChar *value); 569 570/* 571 * other commodities shared between parser.c and parserInternals. 572 */ 573XML_DEPRECATED 574XMLPUBFUN int xmlSkipBlankChars (xmlParserCtxtPtr ctxt); 575XML_DEPRECATED 576XMLPUBFUN int xmlStringCurrentChar (xmlParserCtxtPtr ctxt, 577 const xmlChar *cur, 578 int *len); 579XML_DEPRECATED 580XMLPUBFUN void xmlParserHandlePEReference(xmlParserCtxtPtr ctxt); 581XML_DEPRECATED 582XMLPUBFUN int xmlCheckLanguageID (const xmlChar *lang); 583 584/* 585 * Really core function shared with HTML parser. 586 */ 587XML_DEPRECATED 588XMLPUBFUN int xmlCurrentChar (xmlParserCtxtPtr ctxt, 589 int *len); 590XMLPUBFUN int xmlCopyCharMultiByte (xmlChar *out, 591 int val); 592XMLPUBFUN int xmlCopyChar (int len, 593 xmlChar *out, 594 int val); 595XML_DEPRECATED 596XMLPUBFUN void xmlNextChar (xmlParserCtxtPtr ctxt); 597XML_DEPRECATED 598XMLPUBFUN void xmlParserInputShrink (xmlParserInputPtr in); 599 600/* 601 * Specific function to keep track of entities references 602 * and used by the XSLT debugger. 603 */ 604#ifdef LIBXML_LEGACY_ENABLED 605/** 606 * xmlEntityReferenceFunc: 607 * @ent: the entity 608 * @firstNode: the fist node in the chunk 609 * @lastNode: the last nod in the chunk 610 * 611 * Callback function used when one needs to be able to track back the 612 * provenance of a chunk of nodes inherited from an entity replacement. 613 */ 614typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent, 615 xmlNodePtr firstNode, 616 xmlNodePtr lastNode); 617 618XML_DEPRECATED 619XMLPUBFUN void xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func); 620 621XML_DEPRECATED 622XMLPUBFUN xmlChar * 623 xmlParseQuotedString (xmlParserCtxtPtr ctxt); 624XML_DEPRECATED 625XMLPUBFUN void 626 xmlParseNamespace (xmlParserCtxtPtr ctxt); 627XML_DEPRECATED 628XMLPUBFUN xmlChar * 629 xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); 630XML_DEPRECATED 631XMLPUBFUN xmlChar * 632 xmlScanName (xmlParserCtxtPtr ctxt); 633XML_DEPRECATED 634XMLPUBFUN xmlChar * 635 xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); 636XML_DEPRECATED 637XMLPUBFUN void xmlParserHandleReference(xmlParserCtxtPtr ctxt); 638XML_DEPRECATED 639XMLPUBFUN xmlChar * 640 xmlNamespaceParseQName (xmlParserCtxtPtr ctxt, 641 xmlChar **prefix); 642/** 643 * Entities 644 */ 645XML_DEPRECATED 646XMLPUBFUN xmlChar * 647 xmlDecodeEntities (xmlParserCtxtPtr ctxt, 648 int len, 649 int what, 650 xmlChar end, 651 xmlChar end2, 652 xmlChar end3); 653XML_DEPRECATED 654XMLPUBFUN void 655 xmlHandleEntity (xmlParserCtxtPtr ctxt, 656 xmlEntityPtr entity); 657 658#endif /* LIBXML_LEGACY_ENABLED */ 659 660#ifdef __cplusplus 661} 662#endif 663#endif /* __XML_PARSER_INTERNALS_H__ */