1 /*
2  * Summary: the XMLReader implementation
3  * Description: API of the XML streaming API based on C# interfaces.
4  *
5  * Copy: See Copyright for the status of this software.
6  *
7  * Author: Daniel Veillard
8  */
9 
10 #ifndef __XML_XMLREADER_H__
11 #define __XML_XMLREADER_H__
12 
13 #include <libxml/xmlversion.h>
14 #include <libxml/tree.h>
15 #include <libxml/xmlIO.h>
16 #ifdef LIBXML_SCHEMAS_ENABLED
17 #include <libxml/relaxng.h>
18 #include <libxml/xmlschemas.h>
19 #endif
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /**
26  * xmlParserSeverities:
27  *
28  * How severe an error callback is when the per-reader error callback API
29  * is used.
30  */
31 typedef enum {
32     XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
33     XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
34     XML_PARSER_SEVERITY_WARNING = 3,
35     XML_PARSER_SEVERITY_ERROR = 4
36 } xmlParserSeverities;
37 
38 #ifdef LIBXML_READER_ENABLED
39 
40 /**
41  * xmlTextReaderMode:
42  *
43  * Internal state values for the reader.
44  */
45 typedef enum {
46     XML_TEXTREADER_MODE_INITIAL = 0,
47     XML_TEXTREADER_MODE_INTERACTIVE = 1,
48     XML_TEXTREADER_MODE_ERROR = 2,
49     XML_TEXTREADER_MODE_EOF =3,
50     XML_TEXTREADER_MODE_CLOSED = 4,
51     XML_TEXTREADER_MODE_READING = 5
52 } xmlTextReaderMode;
53 
54 /**
55  * xmlParserProperties:
56  *
57  * Some common options to use with xmlTextReaderSetParserProp, but it
58  * is better to use xmlParserOption and the xmlReaderNewxxx and
59  * xmlReaderForxxx APIs now.
60  */
61 typedef enum {
62     XML_PARSER_LOADDTD = 1,
63     XML_PARSER_DEFAULTATTRS = 2,
64     XML_PARSER_VALIDATE = 3,
65     XML_PARSER_SUBST_ENTITIES = 4
66 } xmlParserProperties;
67 
68 /**
69  * xmlReaderTypes:
70  *
71  * Predefined constants for the different types of nodes.
72  */
73 typedef enum {
74     XML_READER_TYPE_NONE = 0,
75     XML_READER_TYPE_ELEMENT = 1,
76     XML_READER_TYPE_ATTRIBUTE = 2,
77     XML_READER_TYPE_TEXT = 3,
78     XML_READER_TYPE_CDATA = 4,
79     XML_READER_TYPE_ENTITY_REFERENCE = 5,
80     XML_READER_TYPE_ENTITY = 6,
81     XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
82     XML_READER_TYPE_COMMENT = 8,
83     XML_READER_TYPE_DOCUMENT = 9,
84     XML_READER_TYPE_DOCUMENT_TYPE = 10,
85     XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
86     XML_READER_TYPE_NOTATION = 12,
87     XML_READER_TYPE_WHITESPACE = 13,
88     XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
89     XML_READER_TYPE_END_ELEMENT = 15,
90     XML_READER_TYPE_END_ENTITY = 16,
91     XML_READER_TYPE_XML_DECLARATION = 17
92 } xmlReaderTypes;
93 
94 /**
95  * xmlTextReader:
96  *
97  * Structure for an xmlReader context.
98  */
99 typedef struct _xmlTextReader xmlTextReader;
100 
101 /**
102  * xmlTextReaderPtr:
103  *
104  * Pointer to an xmlReader context.
105  */
106 typedef xmlTextReader *xmlTextReaderPtr;
107 
108 /*
109  * Constructors & Destructor
110  */
111 XMLPUBFUN xmlTextReaderPtr XMLCALL
112 			xmlNewTextReader	(xmlParserInputBufferPtr input,
113 	                                         const char *URI);
114 XMLPUBFUN xmlTextReaderPtr XMLCALL
115 			xmlNewTextReaderFilename(const char *URI);
116 
117 XMLPUBFUN void XMLCALL
118 			xmlFreeTextReader	(xmlTextReaderPtr reader);
119 
120 XMLPUBFUN int XMLCALL
121             xmlTextReaderSetup(xmlTextReaderPtr reader,
122                    xmlParserInputBufferPtr input, const char *URL,
123                    const char *encoding, int options);
124 
125 /*
126  * Iterators
127  */
128 XMLPUBFUN int XMLCALL
129 			xmlTextReaderRead	(xmlTextReaderPtr reader);
130 
131 #ifdef LIBXML_WRITER_ENABLED
132 XMLPUBFUN xmlChar * XMLCALL
133 			xmlTextReaderReadInnerXml	(xmlTextReaderPtr reader);
134 
135 XMLPUBFUN xmlChar * XMLCALL
136 			xmlTextReaderReadOuterXml	(xmlTextReaderPtr reader);
137 #endif
138 
139 XMLPUBFUN xmlChar * XMLCALL
140 			xmlTextReaderReadString		(xmlTextReaderPtr reader);
141 XMLPUBFUN int XMLCALL
142 			xmlTextReaderReadAttributeValue	(xmlTextReaderPtr reader);
143 
144 /*
145  * Attributes of the node
146  */
147 XMLPUBFUN int XMLCALL
148 			xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
149 XMLPUBFUN int XMLCALL
150 			xmlTextReaderDepth	(xmlTextReaderPtr reader);
151 XMLPUBFUN int XMLCALL
152 			xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
153 XMLPUBFUN int XMLCALL
154 			xmlTextReaderHasValue(xmlTextReaderPtr reader);
155 XMLPUBFUN int XMLCALL
156 			xmlTextReaderIsDefault	(xmlTextReaderPtr reader);
157 XMLPUBFUN int XMLCALL
158 			xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
159 XMLPUBFUN int XMLCALL
160 			xmlTextReaderNodeType	(xmlTextReaderPtr reader);
161 XMLPUBFUN int XMLCALL
162 			xmlTextReaderQuoteChar	(xmlTextReaderPtr reader);
163 XMLPUBFUN int XMLCALL
164 			xmlTextReaderReadState	(xmlTextReaderPtr reader);
165 XMLPUBFUN int XMLCALL
166                         xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
167 
168 XMLPUBFUN const xmlChar * XMLCALL
169 		    xmlTextReaderConstBaseUri	(xmlTextReaderPtr reader);
170 XMLPUBFUN const xmlChar * XMLCALL
171 		    xmlTextReaderConstLocalName	(xmlTextReaderPtr reader);
172 XMLPUBFUN const xmlChar * XMLCALL
173 		    xmlTextReaderConstName	(xmlTextReaderPtr reader);
174 XMLPUBFUN const xmlChar * XMLCALL
175 		    xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
176 XMLPUBFUN const xmlChar * XMLCALL
177 		    xmlTextReaderConstPrefix	(xmlTextReaderPtr reader);
178 XMLPUBFUN const xmlChar * XMLCALL
179 		    xmlTextReaderConstXmlLang	(xmlTextReaderPtr reader);
180 XMLPUBFUN const xmlChar * XMLCALL
181 		    xmlTextReaderConstString	(xmlTextReaderPtr reader,
182 						 const xmlChar *str);
183 XMLPUBFUN const xmlChar * XMLCALL
184 		    xmlTextReaderConstValue	(xmlTextReaderPtr reader);
185 
186 /*
187  * use the Const version of the routine for
188  * better performance and simpler code
189  */
190 XMLPUBFUN xmlChar * XMLCALL
191 			xmlTextReaderBaseUri	(xmlTextReaderPtr reader);
192 XMLPUBFUN xmlChar * XMLCALL
193 			xmlTextReaderLocalName	(xmlTextReaderPtr reader);
194 XMLPUBFUN xmlChar * XMLCALL
195 			xmlTextReaderName	(xmlTextReaderPtr reader);
196 XMLPUBFUN xmlChar * XMLCALL
197 			xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
198 XMLPUBFUN xmlChar * XMLCALL
199 			xmlTextReaderPrefix	(xmlTextReaderPtr reader);
200 XMLPUBFUN xmlChar * XMLCALL
201 			xmlTextReaderXmlLang	(xmlTextReaderPtr reader);
202 XMLPUBFUN xmlChar * XMLCALL
203 			xmlTextReaderValue	(xmlTextReaderPtr reader);
204 
205 /*
206  * Methods of the XmlTextReader
207  */
208 XMLPUBFUN int XMLCALL
209 		    xmlTextReaderClose		(xmlTextReaderPtr reader);
210 XMLPUBFUN xmlChar * XMLCALL
211 		    xmlTextReaderGetAttributeNo	(xmlTextReaderPtr reader,
212 						 int no);
213 XMLPUBFUN xmlChar * XMLCALL
214 		    xmlTextReaderGetAttribute	(xmlTextReaderPtr reader,
215 						 const xmlChar *name);
216 XMLPUBFUN xmlChar * XMLCALL
217 		    xmlTextReaderGetAttributeNs	(xmlTextReaderPtr reader,
218 						 const xmlChar *localName,
219 						 const xmlChar *namespaceURI);
220 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
221 		    xmlTextReaderGetRemainder	(xmlTextReaderPtr reader);
222 XMLPUBFUN xmlChar * XMLCALL
223 		    xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
224 						 const xmlChar *prefix);
225 XMLPUBFUN int XMLCALL
226 		    xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
227 						 int no);
228 XMLPUBFUN int XMLCALL
229 		    xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
230 						 const xmlChar *name);
231 XMLPUBFUN int XMLCALL
232 		    xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
233 						 const xmlChar *localName,
234 						 const xmlChar *namespaceURI);
235 XMLPUBFUN int XMLCALL
236 		    xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
237 XMLPUBFUN int XMLCALL
238 		    xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
239 XMLPUBFUN int XMLCALL
240 		    xmlTextReaderMoveToElement	(xmlTextReaderPtr reader);
241 XMLPUBFUN int XMLCALL
242 		    xmlTextReaderNormalization	(xmlTextReaderPtr reader);
243 XMLPUBFUN const xmlChar * XMLCALL
244 		    xmlTextReaderConstEncoding  (xmlTextReaderPtr reader);
245 
246 /*
247  * Extensions
248  */
249 XMLPUBFUN int XMLCALL
250 		    xmlTextReaderSetParserProp	(xmlTextReaderPtr reader,
251 						 int prop,
252 						 int value);
253 XMLPUBFUN int XMLCALL
254 		    xmlTextReaderGetParserProp	(xmlTextReaderPtr reader,
255 						 int prop);
256 XMLPUBFUN xmlNodePtr XMLCALL
257 		    xmlTextReaderCurrentNode	(xmlTextReaderPtr reader);
258 
259 XMLPUBFUN int XMLCALL
260             xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader);
261 
262 XMLPUBFUN int XMLCALL
263             xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader);
264 
265 XMLPUBFUN xmlNodePtr XMLCALL
266 		    xmlTextReaderPreserve	(xmlTextReaderPtr reader);
267 #ifdef LIBXML_PATTERN_ENABLED
268 XMLPUBFUN int XMLCALL
269 		    xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
270 						 const xmlChar *pattern,
271 						 const xmlChar **namespaces);
272 #endif /* LIBXML_PATTERN_ENABLED */
273 XMLPUBFUN xmlDocPtr XMLCALL
274 		    xmlTextReaderCurrentDoc	(xmlTextReaderPtr reader);
275 XMLPUBFUN xmlNodePtr XMLCALL
276 		    xmlTextReaderExpand		(xmlTextReaderPtr reader);
277 XMLPUBFUN int XMLCALL
278 		    xmlTextReaderNext		(xmlTextReaderPtr reader);
279 XMLPUBFUN int XMLCALL
280 		    xmlTextReaderNextSibling	(xmlTextReaderPtr reader);
281 XMLPUBFUN int XMLCALL
282 		    xmlTextReaderIsValid	(xmlTextReaderPtr reader);
283 #ifdef LIBXML_SCHEMAS_ENABLED
284 XMLPUBFUN int XMLCALL
285 		    xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
286 						 const char *rng);
287 XMLPUBFUN int XMLCALL
288 		    xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
289 						 xmlRelaxNGPtr schema);
290 XMLPUBFUN int XMLCALL
291 		    xmlTextReaderSchemaValidate	(xmlTextReaderPtr reader,
292 						 const char *xsd);
293 XMLPUBFUN int XMLCALL
294 		    xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader,
295 						 xmlSchemaValidCtxtPtr ctxt,
296 						 int options);
297 XMLPUBFUN int XMLCALL
298 		    xmlTextReaderSetSchema	(xmlTextReaderPtr reader,
299 						 xmlSchemaPtr schema);
300 #endif
301 XMLPUBFUN const xmlChar * XMLCALL
302 		    xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
303 XMLPUBFUN int XMLCALL
304 		    xmlTextReaderStandalone     (xmlTextReaderPtr reader);
305 
306 
307 /*
308  * Index lookup
309  */
310 XMLPUBFUN long XMLCALL
311 		xmlTextReaderByteConsumed	(xmlTextReaderPtr reader);
312 
313 /*
314  * New more complete APIs for simpler creation and reuse of readers
315  */
316 XMLPUBFUN xmlTextReaderPtr XMLCALL
317 		xmlReaderWalker		(xmlDocPtr doc);
318 XMLPUBFUN xmlTextReaderPtr XMLCALL
319 		xmlReaderForDoc		(const xmlChar * cur,
320 					 const char *URL,
321 					 const char *encoding,
322 					 int options);
323 XMLPUBFUN xmlTextReaderPtr XMLCALL
324 		xmlReaderForFile	(const char *filename,
325 					 const char *encoding,
326 					 int options);
327 XMLPUBFUN xmlTextReaderPtr XMLCALL
328 		xmlReaderForMemory	(const char *buffer,
329 					 int size,
330 					 const char *URL,
331 					 const char *encoding,
332 					 int options);
333 XMLPUBFUN xmlTextReaderPtr XMLCALL
334 		xmlReaderForFd		(int fd,
335 					 const char *URL,
336 					 const char *encoding,
337 					 int options);
338 XMLPUBFUN xmlTextReaderPtr XMLCALL
339 		xmlReaderForIO		(xmlInputReadCallback ioread,
340 					 xmlInputCloseCallback ioclose,
341 					 void *ioctx,
342 					 const char *URL,
343 					 const char *encoding,
344 					 int options);
345 
346 XMLPUBFUN int XMLCALL
347 		xmlReaderNewWalker	(xmlTextReaderPtr reader,
348 					 xmlDocPtr doc);
349 XMLPUBFUN int XMLCALL
350 		xmlReaderNewDoc		(xmlTextReaderPtr reader,
351 					 const xmlChar * cur,
352 					 const char *URL,
353 					 const char *encoding,
354 					 int options);
355 XMLPUBFUN int XMLCALL
356 		xmlReaderNewFile	(xmlTextReaderPtr reader,
357 					 const char *filename,
358 					 const char *encoding,
359 					 int options);
360 XMLPUBFUN int XMLCALL
361 		xmlReaderNewMemory	(xmlTextReaderPtr reader,
362 					 const char *buffer,
363 					 int size,
364 					 const char *URL,
365 					 const char *encoding,
366 					 int options);
367 XMLPUBFUN int XMLCALL
368 		xmlReaderNewFd		(xmlTextReaderPtr reader,
369 					 int fd,
370 					 const char *URL,
371 					 const char *encoding,
372 					 int options);
373 XMLPUBFUN int XMLCALL
374 		xmlReaderNewIO		(xmlTextReaderPtr reader,
375 					 xmlInputReadCallback ioread,
376 					 xmlInputCloseCallback ioclose,
377 					 void *ioctx,
378 					 const char *URL,
379 					 const char *encoding,
380 					 int options);
381 /*
382  * Error handling extensions
383  */
384 typedef void *  xmlTextReaderLocatorPtr;
385 
386 /**
387  * xmlTextReaderErrorFunc:
388  * @arg: the user argument
389  * @msg: the message
390  * @severity: the severity of the error
391  * @locator: a locator indicating where the error occured
392  *
393  * Signature of an error callback from a reader parser
394  */
395 typedef void   (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
396 						 const char *msg,
397 						 xmlParserSeverities severity,
398 						 xmlTextReaderLocatorPtr locator);
399 XMLPUBFUN int XMLCALL
400 		    xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
401 /*int             xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
402 XMLPUBFUN xmlChar * XMLCALL
403 		    xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
404 XMLPUBFUN void XMLCALL
405 		    xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
406 						 xmlTextReaderErrorFunc f,
407 						 void *arg);
408 XMLPUBFUN void XMLCALL
409 		    xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
410 							   xmlStructuredErrorFunc f,
411 							   void *arg);
412 XMLPUBFUN void XMLCALL
413 		    xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
414 						 xmlTextReaderErrorFunc *f,
415 						 void **arg);
416 
417 #endif /* LIBXML_READER_ENABLED */
418 
419 #ifdef __cplusplus
420 }
421 #endif
422 
423 #endif /* __XML_XMLREADER_H__ */
424 
425