parser.h revision 1e346af5e4b3d46e521d349890a60253bc696597
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
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/*
19 * Constants.
20 */
21#define XML_DEFAULT_VERSION	"1.0"
22
23typedef struct xmlParserInput {
24    const char *filename;             /* The file analyzed, if any */
25    const CHAR *base;                 /* Base of the array to parse */
26    const CHAR *cur;                  /* Current char being parsed */
27    int line;                         /* Current line */
28    int col;                          /* Current column */
29} xmlParserInput;
30typedef xmlParserInput *xmlParserInputPtr;
31
32typedef struct _xmlParserNodeInfo {
33  const struct xmlNode* node;
34  /* Position & line # that text that created the node begins & ends on */
35  unsigned long begin_pos;
36  unsigned long begin_line;
37  unsigned long end_pos;
38  unsigned long end_line;
39} _xmlParserNodeInfo;
40typedef _xmlParserNodeInfo xmlParserNodeInfo;
41
42typedef struct xmlParserNodeInfoSeq {
43  unsigned long maximum;
44  unsigned long length;
45  xmlParserNodeInfo* buffer;
46} _xmlParserNodeInfoSeq;
47typedef _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
48typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
49
50typedef struct _xmlParserCtxt {
51    struct xmlSAXHandler *sax;        /* The SAX handler */
52    xmlDocPtr doc;                    /* the document being built */
53    int            wellFormed;        /* is the document well formed */
54
55    /* Input stream stack */
56    xmlParserInputPtr  input;         /* Current input stream */
57    int                inputNr;       /* Number of current input streams */
58    int                inputMax;      /* Max number of input streams */
59    xmlParserInputPtr *inputTab;      /* stack of inputs */
60
61    /* Node analysis stack */
62    xmlNodePtr         node;          /* Current parsed Node */
63    int                nodeNr;        /* Depth of the parsing stack */
64    int                nodeMax;       /* Max depth of the parsing stack */
65    xmlNodePtr        *nodeTab;       /* array of nodes */
66
67    int record_info;                  /* Whether node info should be kept */
68    xmlParserNodeInfoSeq node_seq;    /* info about each node parsed */
69} _xmlParserCtxt;
70typedef _xmlParserCtxt xmlParserCtxt;
71typedef xmlParserCtxt *xmlParserCtxtPtr;
72
73/*
74 * a SAX Locator.
75 */
76
77typedef struct xmlSAXLocator {
78    const CHAR *(*getPublicId)(xmlParserCtxtPtr ctxt);
79    const CHAR *(*getSystemId)(xmlParserCtxtPtr ctxt);
80    int (*getLineNumber)(xmlParserCtxtPtr ctxt);
81    int (*getColumnNumber)(xmlParserCtxtPtr ctxt);
82} _xmlSAXLocator;
83typedef _xmlSAXLocator xmlSAXLocator;
84typedef xmlSAXLocator *xmlSAXLocatorPtr;
85
86/*
87 * a SAX Exception.
88 */
89
90typedef xmlParserInputPtr (*resolveEntitySAXFunc) (xmlParserCtxtPtr ctxt,
91			    const CHAR *publicId, const CHAR *systemId);
92typedef void (*notationDeclSAXFunc)(xmlParserCtxtPtr ctxt, const CHAR *name,
93			    const CHAR *publicId, const CHAR *systemId);
94typedef void (*unparsedEntityDeclSAXFunc)(xmlParserCtxtPtr ctxt,
95                            const CHAR *name, const CHAR *publicId,
96			    const CHAR *systemId, const CHAR *notationName);
97typedef void (*setDocumentLocatorSAXFunc) (xmlParserCtxtPtr ctxt,
98                            xmlSAXLocatorPtr loc);
99typedef void (*startDocumentSAXFunc) (xmlParserCtxtPtr ctxt);
100typedef void (*endDocumentSAXFunc) (xmlParserCtxtPtr ctxt);
101typedef void (*startElementSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name);
102typedef void (*endElementSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name);
103typedef void (*attributeSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name,
104                                  const CHAR *value);
105typedef void (*charactersSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *ch,
106		            int start, int len);
107typedef void (*ignorableWhitespaceSAXFunc) (xmlParserCtxtPtr ctxt,
108			    const CHAR *ch, int start, int len);
109typedef void (*processingInstructionSAXFunc) (xmlParserCtxtPtr ctxt,
110                            const CHAR *target, const CHAR *data);
111typedef void (*warningSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
112typedef void (*errorSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
113typedef void (*fatalErrorSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
114
115typedef struct xmlSAXHandler {
116    resolveEntitySAXFunc resolveEntity;
117    notationDeclSAXFunc notationDecl;
118    unparsedEntityDeclSAXFunc unparsedEntityDecl;
119    setDocumentLocatorSAXFunc setDocumentLocator;
120    startDocumentSAXFunc startDocument;
121    endDocumentSAXFunc endDocument;
122    startElementSAXFunc startElement;
123    endElementSAXFunc endElement;
124    attributeSAXFunc attribute;
125    charactersSAXFunc characters;
126    ignorableWhitespaceSAXFunc ignorableWhitespace;
127    processingInstructionSAXFunc processingInstruction;
128    warningSAXFunc warning;
129    errorSAXFunc error;
130    fatalErrorSAXFunc fatalError;
131} xmlSAXHandler;
132typedef xmlSAXHandler *xmlSAXHandlerPtr;
133
134/*
135 * Global variables: just the SAX interface tables we are looking for full
136 *      reentrancy of the code !
137 */
138extern xmlSAXLocator xmlDefaultSAXLocator;
139extern xmlSAXHandler xmlDefaultSAXHandler;
140
141#include "entities.h"
142#include "error.h"
143
144/*
145 * CHAR handling
146 */
147CHAR *xmlStrdup(const CHAR *cur);
148CHAR *xmlStrndup(const CHAR *cur, int len);
149CHAR *xmlStrchr(const CHAR *str, CHAR val);
150int xmlStrcmp(const CHAR *str1, const CHAR *str2);
151int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
152int xmlStrlen(const CHAR *str);
153CHAR *xmlStrcat(CHAR *cur, const CHAR *add);
154CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len);
155
156/*
157 * Interfaces
158 */
159xmlDocPtr xmlParseDoc(CHAR *cur);
160xmlDocPtr xmlParseMemory(char *buffer, int size);
161xmlDocPtr xmlParseFile(const char *filename);
162
163/*
164 * Recovery mode
165 */
166xmlDocPtr xmlRecoverDoc(CHAR *cur);
167xmlDocPtr xmlRecoverMemory(char *buffer, int size);
168xmlDocPtr xmlRecoverFile(const char *filename);
169
170/*
171 * Internal routines
172 */
173int xmlParseDocument(xmlParserCtxtPtr ctxt);
174xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery);
175xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer,
176                                   int size, int recovery);
177xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
178                                 int recovery);
179void xmlInitParserCtxt(xmlParserCtxtPtr ctxt);
180void xmlClearParserCtxt(xmlParserCtxtPtr ctxt);
181void xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const CHAR* buffer,
182                                    const char* filename);
183
184const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* ctxt,
185                                               const xmlNode* node);
186void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
187void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
188unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq,
189                                         const xmlNode* node);
190void xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
191                          const xmlParserNodeInfo* info);
192
193void xmlDefaultSAXHandlerInit(void);
194#ifdef __cplusplus
195}
196#endif
197
198#endif /* __XML_PARSER_H__ */
199
200