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