Annotation of XML/parser.h, revision 1.32
1.1 veillard 1: /*
2: * parser.h : constants and stuff related to the XML parser.
1.6 veillard 3: *
4: * See Copyright for the status of this software.
5: *
1.23 daniel 6: * Daniel.Veillard@w3.org
1.1 veillard 7: */
8:
9: #ifndef __XML_PARSER_H__
10: #define __XML_PARSER_H__
11:
1.2 veillard 12: #include "tree.h"
1.32 ! daniel 13: #include "xmlIO.h"
1.2 veillard 14:
1.7 daniel 15: #ifdef __cplusplus
16: extern "C" {
17: #endif
18:
1.1 veillard 19: /*
20: * Constants.
21: */
22: #define XML_DEFAULT_VERSION "1.0"
23:
1.25 daniel 24: typedef void (* xmlParserInputDeallocate)(CHAR *);
1.14 daniel 25: typedef struct xmlParserInput {
1.32 ! daniel 26: /* Input buffer */
! 27: xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */
! 28:
1.14 daniel 29: const char *filename; /* The file analyzed, if any */
30: const CHAR *base; /* Base of the array to parse */
31: const CHAR *cur; /* Current char being parsed */
32: int line; /* Current line */
33: int col; /* Current column */
1.25 daniel 34: xmlParserInputDeallocate free; /* function to deallocate the base */
1.24 daniel 35: } xmlParserInput;
36: typedef xmlParserInput *xmlParserInputPtr;
1.7 daniel 37:
1.24 daniel 38: typedef struct _xmlParserNodeInfo {
1.13 daniel 39: const struct xmlNode* node;
40: /* Position & line # that text that created the node begins & ends on */
41: unsigned long begin_pos;
42: unsigned long begin_line;
43: unsigned long end_pos;
44: unsigned long end_line;
1.24 daniel 45: } _xmlParserNodeInfo;
46: typedef _xmlParserNodeInfo xmlParserNodeInfo;
1.13 daniel 47:
48: typedef struct xmlParserNodeInfoSeq {
49: unsigned long maximum;
50: unsigned long length;
51: xmlParserNodeInfo* buffer;
1.24 daniel 52: } _xmlParserNodeInfoSeq;
53: typedef _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
54: typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
1.13 daniel 55:
1.24 daniel 56: typedef struct _xmlParserCtxt {
1.17 daniel 57: struct xmlSAXHandler *sax; /* The SAX handler */
1.27 daniel 58: void *userData; /* the document being built */
59: xmlDocPtr myDoc; /* the document being built */
1.22 daniel 60: int wellFormed; /* is the document well formed */
1.30 daniel 61: int replaceEntities; /* shall we replace entities ? */
1.27 daniel 62: const CHAR *version; /* the XML version string */
63: const CHAR *encoding; /* encoding, if any */
64: int standalone; /* standalone document */
1.16 daniel 65:
1.14 daniel 66: /* Input stream stack */
1.15 daniel 67: xmlParserInputPtr input; /* Current input stream */
1.14 daniel 68: int inputNr; /* Number of current input streams */
69: int inputMax; /* Max number of input streams */
70: xmlParserInputPtr *inputTab; /* stack of inputs */
1.15 daniel 71:
72: /* Node analysis stack */
73: xmlNodePtr node; /* Current parsed Node */
74: int nodeNr; /* Depth of the parsing stack */
75: int nodeMax; /* Max depth of the parsing stack */
76: xmlNodePtr *nodeTab; /* array of nodes */
1.14 daniel 77:
1.13 daniel 78: int record_info; /* Whether node info should be kept */
79: xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
1.24 daniel 80: } _xmlParserCtxt;
81: typedef _xmlParserCtxt xmlParserCtxt;
82: typedef xmlParserCtxt *xmlParserCtxtPtr;
1.7 daniel 83:
84: /*
1.17 daniel 85: * a SAX Locator.
86: */
87:
88: typedef struct xmlSAXLocator {
1.28 daniel 89: const CHAR *(*getPublicId)(void *ctx);
90: const CHAR *(*getSystemId)(void *ctx);
91: int (*getLineNumber)(void *ctx);
92: int (*getColumnNumber)(void *ctx);
1.24 daniel 93: } _xmlSAXLocator;
94: typedef _xmlSAXLocator xmlSAXLocator;
95: typedef xmlSAXLocator *xmlSAXLocatorPtr;
1.17 daniel 96:
97: /*
98: * a SAX Exception.
99: */
100:
1.27 daniel 101: #include "entities.h"
102:
1.28 daniel 103: typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx,
1.18 daniel 104: const CHAR *publicId, const CHAR *systemId);
1.28 daniel 105: typedef void (*internalSubsetSAXFunc) (void *ctx, const CHAR *name,
1.27 daniel 106: const CHAR *ExternalID, const CHAR *SystemID);
1.28 daniel 107: typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx,
1.27 daniel 108: const CHAR *name);
1.28 daniel 109: typedef void (*entityDeclSAXFunc) (void *ctx,
1.27 daniel 110: const CHAR *name, int type, const CHAR *publicId,
111: const CHAR *systemId, CHAR *content);
1.28 daniel 112: typedef void (*notationDeclSAXFunc)(void *ctx, const CHAR *name,
1.18 daniel 113: const CHAR *publicId, const CHAR *systemId);
1.28 daniel 114: typedef void (*attributeDeclSAXFunc)(void *ctx, const CHAR *elem,
1.27 daniel 115: const CHAR *name, int type, int def,
116: const CHAR *defaultValue, xmlEnumerationPtr tree);
1.28 daniel 117: typedef void (*elementDeclSAXFunc)(void *ctx, const CHAR *name,
1.27 daniel 118: int type, xmlElementContentPtr content);
1.28 daniel 119: typedef void (*unparsedEntityDeclSAXFunc)(void *ctx,
1.18 daniel 120: const CHAR *name, const CHAR *publicId,
121: const CHAR *systemId, const CHAR *notationName);
1.28 daniel 122: typedef void (*setDocumentLocatorSAXFunc) (void *ctx,
1.18 daniel 123: xmlSAXLocatorPtr loc);
1.28 daniel 124: typedef void (*startDocumentSAXFunc) (void *ctx);
125: typedef void (*endDocumentSAXFunc) (void *ctx);
126: typedef void (*startElementSAXFunc) (void *ctx, const CHAR *name,
1.27 daniel 127: const CHAR **atts);
1.28 daniel 128: typedef void (*endElementSAXFunc) (void *ctx, const CHAR *name);
129: typedef void (*attributeSAXFunc) (void *ctx, const CHAR *name,
1.19 daniel 130: const CHAR *value);
1.28 daniel 131: typedef void (*referenceSAXFunc) (void *ctx, const CHAR *name);
132: typedef void (*charactersSAXFunc) (void *ctx, const CHAR *ch,
1.27 daniel 133: int len);
1.28 daniel 134: typedef void (*ignorableWhitespaceSAXFunc) (void *ctx,
1.27 daniel 135: const CHAR *ch, int len);
1.28 daniel 136: typedef void (*processingInstructionSAXFunc) (void *ctx,
1.18 daniel 137: const CHAR *target, const CHAR *data);
1.28 daniel 138: typedef void (*commentSAXFunc) (void *ctx, const CHAR *value);
139: typedef void (*warningSAXFunc) (void *ctx, const char *msg, ...);
140: typedef void (*errorSAXFunc) (void *ctx, const char *msg, ...);
141: typedef void (*fatalErrorSAXFunc) (void *ctx, const char *msg, ...);
142: typedef int (*isStandaloneSAXFunc) (void *ctx);
143: typedef int (*hasInternalSubsetSAXFunc) (void *ctx);
144: typedef int (*hasExternalSubsetSAXFunc) (void *ctx);
1.18 daniel 145:
1.17 daniel 146: typedef struct xmlSAXHandler {
1.27 daniel 147: internalSubsetSAXFunc internalSubset;
148: isStandaloneSAXFunc isStandalone;
149: hasInternalSubsetSAXFunc hasInternalSubset;
150: hasExternalSubsetSAXFunc hasExternalSubset;
1.18 daniel 151: resolveEntitySAXFunc resolveEntity;
1.27 daniel 152: getEntitySAXFunc getEntity;
153: entityDeclSAXFunc entityDecl;
1.18 daniel 154: notationDeclSAXFunc notationDecl;
1.27 daniel 155: attributeDeclSAXFunc attributeDecl;
156: elementDeclSAXFunc elementDecl;
1.18 daniel 157: unparsedEntityDeclSAXFunc unparsedEntityDecl;
158: setDocumentLocatorSAXFunc setDocumentLocator;
159: startDocumentSAXFunc startDocument;
160: endDocumentSAXFunc endDocument;
161: startElementSAXFunc startElement;
162: endElementSAXFunc endElement;
1.27 daniel 163: referenceSAXFunc reference;
1.18 daniel 164: charactersSAXFunc characters;
165: ignorableWhitespaceSAXFunc ignorableWhitespace;
166: processingInstructionSAXFunc processingInstruction;
1.27 daniel 167: commentSAXFunc comment;
1.18 daniel 168: warningSAXFunc warning;
169: errorSAXFunc error;
170: fatalErrorSAXFunc fatalError;
1.24 daniel 171: } xmlSAXHandler;
172: typedef xmlSAXHandler *xmlSAXHandlerPtr;
1.17 daniel 173:
174: /*
175: * Global variables: just the SAX interface tables we are looking for full
176: * reentrancy of the code !
177: */
1.19 daniel 178: extern xmlSAXLocator xmlDefaultSAXLocator;
179: extern xmlSAXHandler xmlDefaultSAXHandler;
180:
181: #include "entities.h"
1.26 daniel 182: #include "xml-error.h"
1.17 daniel 183:
184: /*
1.22 daniel 185: * CHAR handling
1.2 veillard 186: */
1.24 daniel 187: CHAR *xmlStrdup(const CHAR *cur);
188: CHAR *xmlStrndup(const CHAR *cur, int len);
189: CHAR *xmlStrchr(const CHAR *str, CHAR val);
190: int xmlStrcmp(const CHAR *str1, const CHAR *str2);
191: int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
192: int xmlStrlen(const CHAR *str);
193: CHAR *xmlStrcat(CHAR *cur, const CHAR *add);
194: CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len);
1.9 daniel 195:
1.22 daniel 196: /*
197: * Interfaces
198: */
1.24 daniel 199: xmlDocPtr xmlParseDoc(CHAR *cur);
200: xmlDocPtr xmlParseMemory(char *buffer, int size);
201: xmlDocPtr xmlParseFile(const char *filename);
1.31 daniel 202: int xmlSubstituteEntitiesDefault(int val);
1.22 daniel 203:
204: /*
205: * Recovery mode
206: */
1.24 daniel 207: xmlDocPtr xmlRecoverDoc(CHAR *cur);
208: xmlDocPtr xmlRecoverMemory(char *buffer, int size);
209: xmlDocPtr xmlRecoverFile(const char *filename);
1.22 daniel 210:
211: /*
212: * Internal routines
213: */
1.24 daniel 214: int xmlParseDocument(xmlParserCtxtPtr ctxt);
215: xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery);
216: xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer,
1.22 daniel 217: int size, int recovery);
1.24 daniel 218: xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
1.22 daniel 219: int recovery);
1.29 daniel 220: xmlDtdPtr xmlParseDTD(const CHAR *ExternalID, const CHAR *SystemID);
221: xmlDtdPtr xmlSAXParseDTD(xmlSAXHandlerPtr sax, const CHAR *ExternalID,
222: const CHAR *SystemID);
1.24 daniel 223: void xmlInitParserCtxt(xmlParserCtxtPtr ctxt);
224: void xmlClearParserCtxt(xmlParserCtxtPtr ctxt);
225: void xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const CHAR* buffer,
1.9 daniel 226: const char* filename);
227:
1.24 daniel 228: const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* ctxt,
229: const xmlNode* node);
230: void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
231: void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
1.13 daniel 232: unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq,
233: const xmlNode* node);
1.24 daniel 234: void xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
235: const xmlParserNodeInfo* info);
1.7 daniel 236:
1.24 daniel 237: void xmlDefaultSAXHandlerInit(void);
1.7 daniel 238: #ifdef __cplusplus
239: }
240: #endif
1.1 veillard 241:
242: #endif /* __XML_PARSER_H__ */
243:
Webmaster