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