blob: a25e70af9d7ea94c14b6bf63e475c41d81ec4d75 [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 *
6 * $Id$
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, *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 */
49
50 /* Input stream stack */
51 xmlParserInputPtr input; /* Current input stream */
52 int inputNr; /* Number of current input streams */
53 int inputMax; /* Max number of input streams */
54 xmlParserInputPtr *inputTab; /* stack of inputs */
55
56 /* Node analysis stack */
57 xmlNodePtr node; /* Current parsed Node */
58 int nodeNr; /* Depth of the parsing stack */
59 int nodeMax; /* Max depth of the parsing stack */
60 xmlNodePtr *nodeTab; /* array of nodes */
61
62 int record_info; /* Whether node info should be kept */
63 xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
64} xmlParserCtxt, *xmlParserCtxtPtr;
65
66/*
67 * a SAX Locator.
68 */
69
70typedef struct xmlSAXLocator {
71 const CHAR *(*getPublicId)(xmlParserCtxtPtr ctxt);
72 const CHAR *(*getSystemId)(xmlParserCtxtPtr ctxt);
73 int (*getLineNumber)(xmlParserCtxtPtr ctxt);
74 int (*getColumnNumber)(xmlParserCtxtPtr ctxt);
75} xmlSAXLocator, *xmlSAXLocatorPtr;
76
77/*
78 * a SAX Exception.
79 */
80
81typedef xmlParserInputPtr (*resolveEntitySAXFunc) (xmlParserCtxtPtr ctxt,
82 const CHAR *publicId, const CHAR *systemId);
83typedef void (*notationDeclSAXFunc)(xmlParserCtxtPtr ctxt, const CHAR *name,
84 const CHAR *publicId, const CHAR *systemId);
85typedef void (*unparsedEntityDeclSAXFunc)(xmlParserCtxtPtr ctxt,
86 const CHAR *name, const CHAR *publicId,
87 const CHAR *systemId, const CHAR *notationName);
88typedef void (*setDocumentLocatorSAXFunc) (xmlParserCtxtPtr ctxt,
89 xmlSAXLocatorPtr loc);
90typedef void (*startDocumentSAXFunc) (xmlParserCtxtPtr ctxt);
91typedef void (*endDocumentSAXFunc) (xmlParserCtxtPtr ctxt);
92typedef void (*startElementSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name);
93typedef void (*endElementSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *name);
94typedef void (*charactersSAXFunc) (xmlParserCtxtPtr ctxt, const CHAR *ch,
95 int start, int len);
96typedef void (*ignorableWhitespaceSAXFunc) (xmlParserCtxtPtr ctxt,
97 const CHAR *ch, int start, int len);
98typedef void (*processingInstructionSAXFunc) (xmlParserCtxtPtr ctxt,
99 const CHAR *target, const CHAR *data);
100typedef void (*warningSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
101typedef void (*errorSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
102typedef void (*fatalErrorSAXFunc) (xmlParserCtxtPtr ctxt, const char *msg, ...);
103
104typedef struct xmlSAXHandler {
105 resolveEntitySAXFunc resolveEntity;
106 notationDeclSAXFunc notationDecl;
107 unparsedEntityDeclSAXFunc unparsedEntityDecl;
108 setDocumentLocatorSAXFunc setDocumentLocator;
109 startDocumentSAXFunc startDocument;
110 endDocumentSAXFunc endDocument;
111 startElementSAXFunc startElement;
112 endElementSAXFunc endElement;
113 charactersSAXFunc characters;
114 ignorableWhitespaceSAXFunc ignorableWhitespace;
115 processingInstructionSAXFunc processingInstruction;
116 warningSAXFunc warning;
117 errorSAXFunc error;
118 fatalErrorSAXFunc fatalError;
119} xmlSAXHandler, *xmlSAXHandlerPtr;
120
121/*
122 * Global variables: just the SAX interface tables we are looking for full
123 * reentrancy of the code !
124 */
125xmlSAXLocator xmlDefaultSAXLocator;
126xmlSAXHandler xmlDefaultSAXHandler;
127
128/*
129 * Interfaces
130 */
131extern int xmlParseDocument(xmlParserCtxtPtr ctxt);
132extern xmlDocPtr xmlParseDoc(CHAR *cur);
133extern xmlDocPtr xmlParseMemory(char *buffer, int size);
134extern xmlDocPtr xmlParseFile(const char *filename);
135extern CHAR *xmlStrdup(const CHAR *input);
136extern CHAR *xmlStrndup(const CHAR *input, int n);
137extern CHAR *xmlStrchr(const CHAR *str, CHAR val);
138extern int xmlStrcmp(const CHAR *str1, const CHAR *str2);
139extern int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
140extern int xmlStrlen(const CHAR *str);
141extern CHAR *xmlStrcat(CHAR *cur, const CHAR *add);
142extern CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len);
143
144extern void xmlInitParserCtxt(xmlParserCtxtPtr ctx);
145extern void xmlClearParserCtxt(xmlParserCtxtPtr ctx);
146extern void xmlSetupParserForBuffer(xmlParserCtxtPtr ctx, const CHAR* buffer,
147 const char* filename);
148
149extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
150
151extern const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* c,
152 const xmlNode* node);
153extern void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
154extern void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
155unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq,
156 const xmlNode* node);
157extern void xmlParserAddNodeInfo(xmlParserCtxtPtr ctx,
158 const xmlParserNodeInfo* info);
159
160extern void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...);
161extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
162extern void xmlDefaultSAXHandlerInit(void);
163#ifdef __cplusplus
164}
165#endif
166
167#endif /* __XML_PARSER_H__ */
168