Annotation of XML/parserInternals.h, revision 1.40
1.1 daniel 1: /*
2: * parserInternals.h : internals routines exported by the parser.
3: *
4: * See Copyright for the status of this software.
5: *
6: * Daniel.Veillard@w3.org
1.40 ! veillard 7: *
! 8: * 14 Nov 2000 ht - truncated declaration of xmlParseElementChildrenContentDecl
! 9: * for VMS
! 10: *
1.1 daniel 11: */
12:
13: #ifndef __XML_PARSER_INTERNALS_H__
14: #define __XML_PARSER_INTERNALS_H__
15:
1.28 daniel 16: #include <libxml/parser.h>
1.1 daniel 17:
18: #ifdef __cplusplus
19: extern "C" {
20: #endif
21:
1.37 veillard 22: /*
23: * Identifiers can be longer, but this will be more costly
24: * at runtime.
25: */
1.35 veillard 26: #define XML_MAX_NAMELEN 100
1.14 daniel 27:
1.37 veillard 28: /*
29: * The parser tries to always have that amount of input ready
30: * one of the point is providing context when reporting errors
31: */
32: #define INPUT_CHUNK 250
33:
1.3 daniel 34: /************************************************************************
35: * *
36: * UNICODE version of the macros. *
37: * *
38: ************************************************************************/
39: /*
40: * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
41: * | [#x10000-#x10FFFF]
42: * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
43: */
44: #define IS_CHAR(c) \
1.32 daniel 45: (((c) == 0x09) || ((c) == 0x0A) || ((c) == 0x0D) || \
46: (((c) >= 0x20) && ((c) <= 0xD7FF)) || \
47: (((c) >= 0xE000) && ((c) <= 0xFFFD)) || \
48: (((c) >= 0x10000) && ((c) <= 0x10FFFF)))
1.3 daniel 49:
50: /*
51: * [3] S ::= (#x20 | #x9 | #xD | #xA)+
52: */
1.29 daniel 53: #define IS_BLANK(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) || \
1.3 daniel 54: ((c) == 0x0D))
55:
56: /*
57: * [85] BaseChar ::= ... long list see REC ...
58: */
1.36 veillard 59: #define IS_BASECHAR(c) xmlIsBaseChar(c)
1.3 daniel 60:
61: /*
62: * [88] Digit ::= ... long list see REC ...
63: */
1.36 veillard 64: #define IS_DIGIT(c) xmlIsDigit(c)
1.3 daniel 65:
66: /*
67: * [87] CombiningChar ::= ... long list see REC ...
68: */
1.36 veillard 69: #define IS_COMBINING(c) xmlIsCombining(c)
1.3 daniel 70:
71: /*
72: * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
73: * #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
74: * [#x309D-#x309E] | [#x30FC-#x30FE]
75: */
1.36 veillard 76: #define IS_EXTENDER(c) xmlIsExtender(c)
1.3 daniel 77:
78: /*
79: * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
80: */
1.36 veillard 81: #define IS_IDEOGRAPHIC(c) xmlIsIdeographic(c)
1.3 daniel 82:
83: /*
84: * [84] Letter ::= BaseChar | Ideographic
85: */
86: #define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
87:
88:
89: /*
90: * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
91: */
1.36 veillard 92: #define IS_PUBIDCHAR(c) xmlIsPubidChar(c)
1.3 daniel 93:
94: #define SKIP_EOL(p) \
95: if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; } \
96: if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
97:
98: #define MOVETO_ENDTAG(p) \
1.21 daniel 99: while ((*p) && (*(p) != '>')) (p)++
1.3 daniel 100:
101: #define MOVETO_STARTTAG(p) \
1.21 daniel 102: while ((*p) && (*(p) != '<')) (p)++
1.36 veillard 103:
1.37 veillard 104: /**
105: * Global vaiables affecting the default parser behaviour.
106: */
107:
1.39 veillard 108: LIBXML_DLL_IMPORT extern int xmlParserDebugEntities;
109: LIBXML_DLL_IMPORT extern int xmlGetWarningsDefaultValue;
110: LIBXML_DLL_IMPORT extern int xmlParserDebugEntities;
111: LIBXML_DLL_IMPORT extern int xmlSubstituteEntitiesDefaultValue;
112: LIBXML_DLL_IMPORT extern int xmlDoValidityCheckingDefaultValue;
113: LIBXML_DLL_IMPORT extern int xmlPedanticParserDefaultValue;
114: LIBXML_DLL_IMPORT extern int xmlKeepBlanksDefaultValue;
1.37 veillard 115:
1.36 veillard 116: /*
117: * Function to finish teh work of the macros where needed
118: */
119: int xmlIsBaseChar (int c);
120: int xmlIsBlank (int c);
121: int xmlIsPubidChar (int c);
122: int xmlIsLetter (int c);
123: int xmlIsDigit (int c);
124: int xmlIsIdeographic(int c);
125: int xmlIsCombining (int c);
126: int xmlIsExtender (int c);
127: int xmlIsCombining (int c);
128: int xmlIsChar (int c);
1.8 daniel 129:
130: /**
1.2 daniel 131: * Parser context
132: */
1.18 daniel 133: xmlParserCtxtPtr xmlCreateDocParserCtxt (xmlChar *cur);
1.15 daniel 134: xmlParserCtxtPtr xmlCreateFileParserCtxt (const char *filename);
135: xmlParserCtxtPtr xmlCreateMemoryParserCtxt(char *buffer,
136: int size);
137: xmlParserCtxtPtr xmlNewParserCtxt (void);
1.26 daniel 138: xmlParserCtxtPtr xmlCreateEntityParserCtxt(const xmlChar *URL,
139: const xmlChar *ID,
140: const xmlChar *base);
1.31 daniel 141: int xmlSwitchEncoding (xmlParserCtxtPtr ctxt,
1.15 daniel 142: xmlCharEncoding enc);
1.31 daniel 143: int xmlSwitchToEncoding (xmlParserCtxtPtr ctxt,
144: xmlCharEncodingHandlerPtr handler);
1.25 daniel 145: void xmlFreeParserCtxt (xmlParserCtxtPtr ctxt);
1.2 daniel 146:
147: /**
1.1 daniel 148: * Entities
149: */
1.15 daniel 150: void xmlHandleEntity (xmlParserCtxtPtr ctxt,
151: xmlEntityPtr entity);
1.1 daniel 152:
1.2 daniel 153: /**
154: * Input Streams
155: */
1.15 daniel 156: xmlParserInputPtr xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
157: xmlEntityPtr entity);
158: void xmlPushInput (xmlParserCtxtPtr ctxt,
159: xmlParserInputPtr input);
1.18 daniel 160: xmlChar xmlPopInput (xmlParserCtxtPtr ctxt);
1.15 daniel 161: void xmlFreeInputStream (xmlParserInputPtr input);
162: xmlParserInputPtr xmlNewInputFromFile (xmlParserCtxtPtr ctxt,
163: const char *filename);
1.37 veillard 164: xmlParserInputPtr xmlNewInputStream (xmlParserCtxtPtr ctxt);
1.2 daniel 165:
166: /**
1.1 daniel 167: * Namespaces.
168: */
1.23 daniel 169: xmlChar * xmlSplitQName (xmlParserCtxtPtr ctxt,
1.22 daniel 170: const xmlChar *name,
1.18 daniel 171: xmlChar **prefix);
1.23 daniel 172: xmlChar * xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
173: xmlChar * xmlNamespaceParseQName (xmlParserCtxtPtr ctxt,
1.18 daniel 174: xmlChar **prefix);
1.23 daniel 175: xmlChar * xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt);
176: xmlChar * xmlParseQuotedString (xmlParserCtxtPtr ctxt);
1.15 daniel 177: void xmlParseNamespace (xmlParserCtxtPtr ctxt);
1.1 daniel 178:
1.2 daniel 179: /**
1.1 daniel 180: * Generic production rules
181: */
1.23 daniel 182: xmlChar * xmlScanName (xmlParserCtxtPtr ctxt);
183: xmlChar * xmlParseName (xmlParserCtxtPtr ctxt);
184: xmlChar * xmlParseNmtoken (xmlParserCtxtPtr ctxt);
185: xmlChar * xmlParseEntityValue (xmlParserCtxtPtr ctxt,
1.18 daniel 186: xmlChar **orig);
1.23 daniel 187: xmlChar * xmlParseAttValue (xmlParserCtxtPtr ctxt);
188: xmlChar * xmlParseSystemLiteral (xmlParserCtxtPtr ctxt);
189: xmlChar * xmlParsePubidLiteral (xmlParserCtxtPtr ctxt);
1.15 daniel 190: void xmlParseCharData (xmlParserCtxtPtr ctxt,
191: int cdata);
1.23 daniel 192: xmlChar * xmlParseExternalID (xmlParserCtxtPtr ctxt,
1.18 daniel 193: xmlChar **publicID,
1.15 daniel 194: int strict);
195: void xmlParseComment (xmlParserCtxtPtr ctxt);
1.23 daniel 196: xmlChar * xmlParsePITarget (xmlParserCtxtPtr ctxt);
1.15 daniel 197: void xmlParsePI (xmlParserCtxtPtr ctxt);
198: void xmlParseNotationDecl (xmlParserCtxtPtr ctxt);
199: void xmlParseEntityDecl (xmlParserCtxtPtr ctxt);
200: int xmlParseDefaultDecl (xmlParserCtxtPtr ctxt,
1.18 daniel 201: xmlChar **value);
1.15 daniel 202: xmlEnumerationPtr xmlParseNotationType (xmlParserCtxtPtr ctxt);
203: xmlEnumerationPtr xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
204: int xmlParseEnumeratedType (xmlParserCtxtPtr ctxt,
205: xmlEnumerationPtr *tree);
206: int xmlParseAttributeType (xmlParserCtxtPtr ctxt,
207: xmlEnumerationPtr *tree);
208: void xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
209: xmlElementContentPtr xmlParseElementMixedContentDecl
210: (xmlParserCtxtPtr ctxt);
1.40 ! veillard 211: #ifdef VMS
! 212: xmlElementContentPtr xmlParseElementChildrenContentD
! 213: (xmlParserCtxtPtr ctxt);
! 214: #define xmlParseElementChildrenContentDecl xmlParseElementChildrenContentD
! 215: #else
1.15 daniel 216: xmlElementContentPtr xmlParseElementChildrenContentDecl
217: (xmlParserCtxtPtr ctxt);
1.40 ! veillard 218: #endif
1.15 daniel 219: int xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
1.18 daniel 220: xmlChar *name,
1.15 daniel 221: xmlElementContentPtr *result);
222: int xmlParseElementDecl (xmlParserCtxtPtr ctxt);
223: void xmlParseMarkupDecl (xmlParserCtxtPtr ctxt);
224: int xmlParseCharRef (xmlParserCtxtPtr ctxt);
225: xmlEntityPtr xmlParseEntityRef (xmlParserCtxtPtr ctxt);
226: void xmlParseReference (xmlParserCtxtPtr ctxt);
227: void xmlParsePEReference (xmlParserCtxtPtr ctxt);
228: void xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt);
1.23 daniel 229: xmlChar * xmlParseAttribute (xmlParserCtxtPtr ctxt,
1.18 daniel 230: xmlChar **value);
1.23 daniel 231: xmlChar * xmlParseStartTag (xmlParserCtxtPtr ctxt);
1.20 daniel 232: void xmlParseEndTag (xmlParserCtxtPtr ctxt);
1.15 daniel 233: void xmlParseCDSect (xmlParserCtxtPtr ctxt);
234: void xmlParseContent (xmlParserCtxtPtr ctxt);
235: void xmlParseElement (xmlParserCtxtPtr ctxt);
1.23 daniel 236: xmlChar * xmlParseVersionNum (xmlParserCtxtPtr ctxt);
237: xmlChar * xmlParseVersionInfo (xmlParserCtxtPtr ctxt);
238: xmlChar * xmlParseEncName (xmlParserCtxtPtr ctxt);
239: xmlChar * xmlParseEncodingDecl (xmlParserCtxtPtr ctxt);
1.15 daniel 240: int xmlParseSDDecl (xmlParserCtxtPtr ctxt);
241: void xmlParseXMLDecl (xmlParserCtxtPtr ctxt);
1.24 daniel 242: void xmlParseTextDecl (xmlParserCtxtPtr ctxt);
1.15 daniel 243: void xmlParseMisc (xmlParserCtxtPtr ctxt);
244: void xmlParseExternalSubset (xmlParserCtxtPtr ctxt,
1.18 daniel 245: const xmlChar *ExternalID,
246: const xmlChar *SystemID);
1.6 daniel 247: /*
248: * Entities substitution
249: */
250: #define XML_SUBSTITUTE_NONE 0
251: #define XML_SUBSTITUTE_REF 1
252: #define XML_SUBSTITUTE_PEREF 2
253: #define XML_SUBSTITUTE_BOTH 3
254:
1.27 daniel 255: xmlChar * xmlDecodeEntities (xmlParserCtxtPtr ctxt,
1.15 daniel 256: int len,
1.27 daniel 257: int what,
258: xmlChar end,
259: xmlChar end2,
260: xmlChar end3);
261: xmlChar * xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
262: const xmlChar *str,
1.15 daniel 263: int what,
1.18 daniel 264: xmlChar end,
265: xmlChar end2,
266: xmlChar end3);
1.1 daniel 267:
1.4 daniel 268: /*
269: * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP
270: */
1.15 daniel 271: int nodePush (xmlParserCtxtPtr ctxt,
272: xmlNodePtr value);
273: xmlNodePtr nodePop (xmlParserCtxtPtr ctxt);
274: int inputPush (xmlParserCtxtPtr ctxt,
275: xmlParserInputPtr value);
276: xmlParserInputPtr inputPop (xmlParserCtxtPtr ctxt);
1.37 veillard 277:
278: /*
279: * other comodities shared between parser.c and parserInternals
280: */
281: int xmlSkipBlankChars (xmlParserCtxtPtr ctxt);
282: int xmlStringCurrentChar (xmlParserCtxtPtr ctxt,
283: const xmlChar *cur,
284: int *len);
285: void xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
286: void xmlParserHandleReference(xmlParserCtxtPtr ctxt);
287: xmlChar *namePop (xmlParserCtxtPtr ctxt);
288: int xmlCheckLanguageID (const xmlChar *lang);
1.1 daniel 289:
1.33 veillard 290: /*
291: * Really core function shared with HTML parser
292: */
293: int xmlCurrentChar (xmlParserCtxtPtr ctxt,
294: int *len);
295: int xmlCopyChar (int len,
296: xmlChar *out,
297: int val);
298: void xmlNextChar (xmlParserCtxtPtr ctxt);
299: void xmlParserInputShrink (xmlParserInputPtr in);
1.38 veillard 300:
301: #ifdef LIBXML_HTML_ENABLED
302: /*
303: * Actually comes from the HTML parser but launched from the init stuff
304: */
305: void htmlInitAutoClose (void);
306: #endif
1.17 daniel 307: #ifdef __cplusplus
308: }
309: #endif
1.1 daniel 310: #endif /* __XML_PARSER_INTERNALS_H__ */
Webmaster