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
22 extern "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 */
32 XMLPUBVAR 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 */
292 XMLPUBVAR const xmlChar xmlStringText[];
293 XMLPUBVAR const xmlChar xmlStringTextNoenc[];
294 XMLPUBVAR const xmlChar xmlStringComment[];
295
296 /*
297 * Function to finish the work of the macros where needed.
298 */
299 XMLPUBFUN int xmlIsLetter (int c);
300
301 /**
302 * Parser context.
303 */
304 XMLPUBFUN xmlParserCtxtPtr
305 xmlCreateFileParserCtxt (const char *filename);
306 XMLPUBFUN xmlParserCtxtPtr
307 xmlCreateURLParserCtxt (const char *filename,
308 int options);
309 XMLPUBFUN xmlParserCtxtPtr
310 xmlCreateMemoryParserCtxt(const char *buffer,
311 int size);
312 XMLPUBFUN xmlParserCtxtPtr
313 xmlCreateEntityParserCtxt(const xmlChar *URL,
314 const xmlChar *ID,
315 const xmlChar *base);
316 XMLPUBFUN int
317 xmlSwitchEncoding (xmlParserCtxtPtr ctxt,
318 xmlCharEncoding enc);
319 XMLPUBFUN int
320 xmlSwitchToEncoding (xmlParserCtxtPtr ctxt,
321 xmlCharEncodingHandlerPtr handler);
322 XML_DEPRECATED
323 XMLPUBFUN int
324 xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt,
325 xmlParserInputPtr input,
326 xmlCharEncodingHandlerPtr handler);
327
328 /**
329 * Input Streams.
330 */
331 XMLPUBFUN xmlParserInputPtr
332 xmlNewStringInputStream (xmlParserCtxtPtr ctxt,
333 const xmlChar *buffer);
334 XML_DEPRECATED
335 XMLPUBFUN xmlParserInputPtr
336 xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
337 xmlEntityPtr entity);
338 XMLPUBFUN int
339 xmlPushInput (xmlParserCtxtPtr ctxt,
340 xmlParserInputPtr input);
341 XMLPUBFUN xmlChar
342 xmlPopInput (xmlParserCtxtPtr ctxt);
343 XMLPUBFUN void
344 xmlFreeInputStream (xmlParserInputPtr input);
345 XMLPUBFUN xmlParserInputPtr
346 xmlNewInputFromFile (xmlParserCtxtPtr ctxt,
347 const char *filename);
348 XMLPUBFUN xmlParserInputPtr
349 xmlNewInputStream (xmlParserCtxtPtr ctxt);
350
351 /**
352 * Namespaces.
353 */
354 XMLPUBFUN xmlChar *
355 xmlSplitQName (xmlParserCtxtPtr ctxt,
356 const xmlChar *name,
357 xmlChar **prefix);
358
359 /**
360 * Generic production rules.
361 */
362 XML_DEPRECATED
363 XMLPUBFUN const xmlChar *
364 xmlParseName (xmlParserCtxtPtr ctxt);
365 XML_DEPRECATED
366 XMLPUBFUN xmlChar *
367 xmlParseNmtoken (xmlParserCtxtPtr ctxt);
368 XML_DEPRECATED
369 XMLPUBFUN xmlChar *
370 xmlParseEntityValue (xmlParserCtxtPtr ctxt,
371 xmlChar **orig);
372 XML_DEPRECATED
373 XMLPUBFUN xmlChar *
374 xmlParseAttValue (xmlParserCtxtPtr ctxt);
375 XML_DEPRECATED
376 XMLPUBFUN xmlChar *
377 xmlParseSystemLiteral (xmlParserCtxtPtr ctxt);
378 XML_DEPRECATED
379 XMLPUBFUN xmlChar *
380 xmlParsePubidLiteral (xmlParserCtxtPtr ctxt);
381 XML_DEPRECATED
382 XMLPUBFUN void
383 xmlParseCharData (xmlParserCtxtPtr ctxt,
384 int cdata);
385 XML_DEPRECATED
386 XMLPUBFUN xmlChar *
387 xmlParseExternalID (xmlParserCtxtPtr ctxt,
388 xmlChar **publicID,
389 int strict);
390 XML_DEPRECATED
391 XMLPUBFUN void
392 xmlParseComment (xmlParserCtxtPtr ctxt);
393 XML_DEPRECATED
394 XMLPUBFUN const xmlChar *
395 xmlParsePITarget (xmlParserCtxtPtr ctxt);
396 XML_DEPRECATED
397 XMLPUBFUN void
398 xmlParsePI (xmlParserCtxtPtr ctxt);
399 XML_DEPRECATED
400 XMLPUBFUN void
401 xmlParseNotationDecl (xmlParserCtxtPtr ctxt);
402 XML_DEPRECATED
403 XMLPUBFUN void
404 xmlParseEntityDecl (xmlParserCtxtPtr ctxt);
405 XML_DEPRECATED
406 XMLPUBFUN int
407 xmlParseDefaultDecl (xmlParserCtxtPtr ctxt,
408 xmlChar **value);
409 XML_DEPRECATED
410 XMLPUBFUN xmlEnumerationPtr
411 xmlParseNotationType (xmlParserCtxtPtr ctxt);
412 XML_DEPRECATED
413 XMLPUBFUN xmlEnumerationPtr
414 xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
415 XML_DEPRECATED
416 XMLPUBFUN int
417 xmlParseEnumeratedType (xmlParserCtxtPtr ctxt,
418 xmlEnumerationPtr *tree);
419 XML_DEPRECATED
420 XMLPUBFUN int
421 xmlParseAttributeType (xmlParserCtxtPtr ctxt,
422 xmlEnumerationPtr *tree);
423 XML_DEPRECATED
424 XMLPUBFUN void
425 xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
426 XML_DEPRECATED
427 XMLPUBFUN xmlElementContentPtr
428 xmlParseElementMixedContentDecl
429 (xmlParserCtxtPtr ctxt,
430 int inputchk);
431 XML_DEPRECATED
432 XMLPUBFUN xmlElementContentPtr
433 xmlParseElementChildrenContentDecl
434 (xmlParserCtxtPtr ctxt,
435 int inputchk);
436 XML_DEPRECATED
437 XMLPUBFUN int
438 xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
439 const xmlChar *name,
440 xmlElementContentPtr *result);
441 XML_DEPRECATED
442 XMLPUBFUN int
443 xmlParseElementDecl (xmlParserCtxtPtr ctxt);
444 XML_DEPRECATED
445 XMLPUBFUN void
446 xmlParseMarkupDecl (xmlParserCtxtPtr ctxt);
447 XML_DEPRECATED
448 XMLPUBFUN int
449 xmlParseCharRef (xmlParserCtxtPtr ctxt);
450 XML_DEPRECATED
451 XMLPUBFUN xmlEntityPtr
452 xmlParseEntityRef (xmlParserCtxtPtr ctxt);
453 XML_DEPRECATED
454 XMLPUBFUN void
455 xmlParseReference (xmlParserCtxtPtr ctxt);
456 XML_DEPRECATED
457 XMLPUBFUN void
458 xmlParsePEReference (xmlParserCtxtPtr ctxt);
459 XML_DEPRECATED
460 XMLPUBFUN void
461 xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt);
462 #ifdef LIBXML_SAX1_ENABLED
463 XML_DEPRECATED
464 XMLPUBFUN const xmlChar *
465 xmlParseAttribute (xmlParserCtxtPtr ctxt,
466 xmlChar **value);
467 XML_DEPRECATED
468 XMLPUBFUN const xmlChar *
469 xmlParseStartTag (xmlParserCtxtPtr ctxt);
470 XML_DEPRECATED
471 XMLPUBFUN void
472 xmlParseEndTag (xmlParserCtxtPtr ctxt);
473 #endif /* LIBXML_SAX1_ENABLED */
474 XML_DEPRECATED
475 XMLPUBFUN void
476 xmlParseCDSect (xmlParserCtxtPtr ctxt);
477 XMLPUBFUN void
478 xmlParseContent (xmlParserCtxtPtr ctxt);
479 XML_DEPRECATED
480 XMLPUBFUN void
481 xmlParseElement (xmlParserCtxtPtr ctxt);
482 XML_DEPRECATED
483 XMLPUBFUN xmlChar *
484 xmlParseVersionNum (xmlParserCtxtPtr ctxt);
485 XML_DEPRECATED
486 XMLPUBFUN xmlChar *
487 xmlParseVersionInfo (xmlParserCtxtPtr ctxt);
488 XML_DEPRECATED
489 XMLPUBFUN xmlChar *
490 xmlParseEncName (xmlParserCtxtPtr ctxt);
491 XML_DEPRECATED
492 XMLPUBFUN const xmlChar *
493 xmlParseEncodingDecl (xmlParserCtxtPtr ctxt);
494 XML_DEPRECATED
495 XMLPUBFUN int
496 xmlParseSDDecl (xmlParserCtxtPtr ctxt);
497 XML_DEPRECATED
498 XMLPUBFUN void
499 xmlParseXMLDecl (xmlParserCtxtPtr ctxt);
500 XML_DEPRECATED
501 XMLPUBFUN void
502 xmlParseTextDecl (xmlParserCtxtPtr ctxt);
503 XML_DEPRECATED
504 XMLPUBFUN void
505 xmlParseMisc (xmlParserCtxtPtr ctxt);
506 XMLPUBFUN 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
535 XML_DEPRECATED
536 XMLPUBFUN xmlChar *
537 xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
538 const xmlChar *str,
539 int what,
540 xmlChar end,
541 xmlChar end2,
542 xmlChar end3);
543 XML_DEPRECATED
544 XMLPUBFUN 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 */
556 XML_DEPRECATED
557 XMLPUBFUN int nodePush (xmlParserCtxtPtr ctxt,
558 xmlNodePtr value);
559 XML_DEPRECATED
560 XMLPUBFUN xmlNodePtr nodePop (xmlParserCtxtPtr ctxt);
561 XMLPUBFUN int inputPush (xmlParserCtxtPtr ctxt,
562 xmlParserInputPtr value);
563 XMLPUBFUN xmlParserInputPtr inputPop (xmlParserCtxtPtr ctxt);
564 XML_DEPRECATED
565 XMLPUBFUN const xmlChar * namePop (xmlParserCtxtPtr ctxt);
566 XML_DEPRECATED
567 XMLPUBFUN int namePush (xmlParserCtxtPtr ctxt,
568 const xmlChar *value);
569
570 /*
571 * other commodities shared between parser.c and parserInternals.
572 */
573 XML_DEPRECATED
574 XMLPUBFUN int xmlSkipBlankChars (xmlParserCtxtPtr ctxt);
575 XML_DEPRECATED
576 XMLPUBFUN int xmlStringCurrentChar (xmlParserCtxtPtr ctxt,
577 const xmlChar *cur,
578 int *len);
579 XML_DEPRECATED
580 XMLPUBFUN void xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
581 XML_DEPRECATED
582 XMLPUBFUN int xmlCheckLanguageID (const xmlChar *lang);
583
584 /*
585 * Really core function shared with HTML parser.
586 */
587 XML_DEPRECATED
588 XMLPUBFUN int xmlCurrentChar (xmlParserCtxtPtr ctxt,
589 int *len);
590 XMLPUBFUN int xmlCopyCharMultiByte (xmlChar *out,
591 int val);
592 XMLPUBFUN int xmlCopyChar (int len,
593 xmlChar *out,
594 int val);
595 XML_DEPRECATED
596 XMLPUBFUN void xmlNextChar (xmlParserCtxtPtr ctxt);
597 XML_DEPRECATED
598 XMLPUBFUN 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 */
614 typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent,
615 xmlNodePtr firstNode,
616 xmlNodePtr lastNode);
617
618 XML_DEPRECATED
619 XMLPUBFUN void xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func);
620
621 XML_DEPRECATED
622 XMLPUBFUN xmlChar *
623 xmlParseQuotedString (xmlParserCtxtPtr ctxt);
624 XML_DEPRECATED
625 XMLPUBFUN void
626 xmlParseNamespace (xmlParserCtxtPtr ctxt);
627 XML_DEPRECATED
628 XMLPUBFUN xmlChar *
629 xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt);
630 XML_DEPRECATED
631 XMLPUBFUN xmlChar *
632 xmlScanName (xmlParserCtxtPtr ctxt);
633 XML_DEPRECATED
634 XMLPUBFUN xmlChar *
635 xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
636 XML_DEPRECATED
637 XMLPUBFUN void xmlParserHandleReference(xmlParserCtxtPtr ctxt);
638 XML_DEPRECATED
639 XMLPUBFUN xmlChar *
640 xmlNamespaceParseQName (xmlParserCtxtPtr ctxt,
641 xmlChar **prefix);
642 /**
643 * Entities
644 */
645 XML_DEPRECATED
646 XMLPUBFUN xmlChar *
647 xmlDecodeEntities (xmlParserCtxtPtr ctxt,
648 int len,
649 int what,
650 xmlChar end,
651 xmlChar end2,
652 xmlChar end3);
653 XML_DEPRECATED
654 XMLPUBFUN 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__ */