blob: a06d4818ef8207c23b16346475f7cf22bfdf0da9 [file] [log] [blame]
Daniel Veillard260a68f1998-08-13 03:39:55 +00001/*
2 * parser.h : constants and stuff related to the XML parser.
3 *
4 * See Copyright for the status of this software.
5 *
Daniel Veillard39a1f9a1999-01-17 19:11:59 +00006 * Daniel.Veillard@w3.org
Daniel Veillard260a68f1998-08-13 03:39:55 +00007 */
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, *xmlParserInputPtr;
30
31typedef struct xmlParserNodeInfo {
32 const struct xmlNode* node;
33 /* Position & line # that text that created the node begins & ends on */
34 unsigned long begin_pos;
35 unsigned long begin_line;
36 unsigned long end_pos;
37 unsigned long end_line;
38} xmlParserNodeInfo;
39
40typedef struct xmlParserNodeInfoSeq {
41 unsigned long maximum;
42 unsigned long length;
43 xmlParserNodeInfo* buffer;
44} xmlParserNodeInfoSeq, *xmlParserNodeInfoSeqPtr;
45
46typedef struct xmlParserCtxt {
47 struct xmlSAXHandler *sax; /* The SAX handler */
48 xmlDocPtr doc; /* the document being built */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +000049 int wellFormed; /* is the document well formed */
Daniel Veillard260a68f1998-08-13 03:39:55 +000050
51 /* Input stream stack */
52 xmlParserInputPtr input; /* Current input stream */
53 int inputNr; /* Number of current input streams */
54 int inputMax; /* Max number of input streams */
55 xmlParserInputPtr *inputTab; /* stack of inputs */
56
57 /* Node analysis stack */
58 xmlNodePtr node; /* Current parsed Node */
59 int nodeNr; /* Depth of the parsing stack */
60 int nodeMax; /* Max depth of the parsing stack */
61 xmlNodePtr *nodeTab; /* array of nodes */
62
63 int record_info; /* Whether node info should be kept */
64 xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
65} xmlParserCtxt, *xmlParserCtxtPtr;
66
67/*
68 * a SAX Locator.
69 */
70
71typedef struct xmlSAXLocator {
72 const CHAR *(*getPublicId)(xmlParserCtxtPtr ctxt);
73 const CHAR *(*getSystemId)(xmlParserCtxtPtr ctxt);
74 int (*getLineNumber)(xmlParserCtxtPtr ctxt);
75 int (*getColumnNumber)(xmlParserCtxtPtr ctxt);
76} xmlSAXLocator, *xmlSAXLocatorPtr;
77
78/*
79 * a SAX Exception.
80 */
81
82typedef xmlParserInputPtr (*resolveEntitySAXFunc) (xmlParserCtxtPtr ctxt,
83 const CHAR *publicId, const CHAR *systemId);
84typedef void (*notationDeclSAXFunc)(xmlParserCtxtPtr ctxt, const CHAR *name,
85 const CHAR *publicId, const CHAR *systemId);
86typedef void (*unparsedEntityDeclSAXFunc)(xmlParserCtxtPtr ctxt,
87 const CHAR *name, const CHAR *publicId,
88 const CHAR *systemId, const CHAR *notationName);
89typedef void (*setDocumentLocatorSAXFunc) (xmlParserCtxtPtr ctxt,
90 xmlSAXLocatorPtr loc);
91typedef void (*startDocumentSAXFunc) (xmlParserCtxtPtr ctxt);
92typedef void (*endDocumentSAXFunc) (xmlParserCtxtPtr ctxt);
93typedef void (*startElementSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name);
94typedef void (*endElementSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name);
Daniel Veillard11e00581998-10-24 18:27:49 +000095typedef void (*attributeSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name,
96 const CHAR *value);
Daniel Veillard260a68f1998-08-13 03:39:55 +000097typedef void (*charactersSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *ch,
98 int start, int len);
99typedef void (*ignorableWhitespaceSAXFunc) (xmlParserCtxtPtr ctxt,
100 const CHAR *ch, int start, int len);
101typedef void (*processingInstructionSAXFunc) (xmlParserCtxtPtr ctxt,
102 const CHAR *target, const CHAR *data);
103typedef void (*warningSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
104typedef void (*errorSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
105typedef void (*fatalErrorSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
106
107typedef struct xmlSAXHandler {
108 resolveEntitySAXFunc resolveEntity;
109 notationDeclSAXFunc notationDecl;
110 unparsedEntityDeclSAXFunc unparsedEntityDecl;
111 setDocumentLocatorSAXFunc setDocumentLocator;
112 startDocumentSAXFunc startDocument;
113 endDocumentSAXFunc endDocument;
114 startElementSAXFunc startElement;
115 endElementSAXFunc endElement;
Daniel Veillard11e00581998-10-24 18:27:49 +0000116 attributeSAXFunc attribute;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000117 charactersSAXFunc characters;
118 ignorableWhitespaceSAXFunc ignorableWhitespace;
119 processingInstructionSAXFunc processingInstruction;
120 warningSAXFunc warning;
121 errorSAXFunc error;
122 fatalErrorSAXFunc fatalError;
123} xmlSAXHandler, *xmlSAXHandlerPtr;
124
125/*
126 * Global variables: just the SAX interface tables we are looking for full
127 * reentrancy of the code !
128 */
Daniel Veillard151b1b01998-09-23 00:49:46 +0000129extern xmlSAXLocator xmlDefaultSAXLocator;
130extern xmlSAXHandler xmlDefaultSAXHandler;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000131
Daniel Veillardccb09631998-10-27 06:21:04 +0000132#include "entities.h"
133
Daniel Veillard260a68f1998-08-13 03:39:55 +0000134/*
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000135 * CHAR handling
Daniel Veillard260a68f1998-08-13 03:39:55 +0000136 */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000137extern CHAR *xmlStrdup(const CHAR *input);
138extern CHAR *xmlStrndup(const CHAR *input, int n);
139extern CHAR *xmlStrchr(const CHAR *str, CHAR val);
140extern int xmlStrcmp(const CHAR *str1, const CHAR *str2);
141extern int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
142extern int xmlStrlen(const CHAR *str);
143extern CHAR *xmlStrcat(CHAR *cur, const CHAR *add);
144extern CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len);
145
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000146/*
147 * Interfaces
148 */
149extern xmlDocPtr xmlParseDoc(CHAR *cur);
150extern xmlDocPtr xmlParseMemory(char *buffer, int size);
151extern xmlDocPtr xmlParseFile(const char *filename);
152
153/*
154 * Recovery mode
155 */
156extern xmlDocPtr xmlRecoverDoc(CHAR *cur);
157extern xmlDocPtr xmlRecoverMemory(char *buffer, int size);
158extern xmlDocPtr xmlRecoverFile(const char *filename);
159
160/*
161 * Internal routines
162 */
163extern int xmlParseDocument(xmlParserCtxtPtr ctxt);
164extern xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery);
165extern xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer,
166 int size, int recovery);
167extern xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
168 int recovery);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000169extern void xmlInitParserCtxt(xmlParserCtxtPtr ctx);
170extern void xmlClearParserCtxt(xmlParserCtxtPtr ctx);
171extern void xmlSetupParserForBuffer(xmlParserCtxtPtr ctx, const CHAR* buffer,
172 const char* filename);
173
174extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
175
176extern const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* c,
177 const xmlNode* node);
178extern void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
179extern void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
180unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq,
181 const xmlNode* node);
182extern void xmlParserAddNodeInfo(xmlParserCtxtPtr ctx,
183 const xmlParserNodeInfo* info);
184
185extern void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...);
186extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
187extern void xmlDefaultSAXHandlerInit(void);
188#ifdef __cplusplus
189}
190#endif
191
192#endif /* __XML_PARSER_H__ */
193