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