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
22extern "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 */
31typedef 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 */
45typedef 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 */
61typedef 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 */
73typedef 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 */
99typedef struct _xmlTextReader xmlTextReader;
100
101/**
102 * xmlTextReaderPtr:
103 *
104 * Pointer to an xmlReader context.
105 */
106typedef xmlTextReader *xmlTextReaderPtr;
107
108/*
109 * Constructors & Destructor
110 */
111XMLPUBFUN xmlTextReaderPtr XMLCALL
112			xmlNewTextReader	(xmlParserInputBufferPtr input,
113	                                         const char *URI);
114XMLPUBFUN xmlTextReaderPtr XMLCALL
115			xmlNewTextReaderFilename(const char *URI);
116
117XMLPUBFUN void XMLCALL
118			xmlFreeTextReader	(xmlTextReaderPtr reader);
119
120XMLPUBFUN int XMLCALL
121            xmlTextReaderSetup(xmlTextReaderPtr reader,
122                   xmlParserInputBufferPtr input, const char *URL,
123                   const char *encoding, int options);
124
125/*
126 * Iterators
127 */
128XMLPUBFUN int XMLCALL
129			xmlTextReaderRead	(xmlTextReaderPtr reader);
130
131#ifdef LIBXML_WRITER_ENABLED
132XMLPUBFUN xmlChar * XMLCALL
133			xmlTextReaderReadInnerXml	(xmlTextReaderPtr reader);
134
135XMLPUBFUN xmlChar * XMLCALL
136			xmlTextReaderReadOuterXml	(xmlTextReaderPtr reader);
137#endif
138
139XMLPUBFUN xmlChar * XMLCALL
140			xmlTextReaderReadString		(xmlTextReaderPtr reader);
141XMLPUBFUN int XMLCALL
142			xmlTextReaderReadAttributeValue	(xmlTextReaderPtr reader);
143
144/*
145 * Attributes of the node
146 */
147XMLPUBFUN int XMLCALL
148			xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
149XMLPUBFUN int XMLCALL
150			xmlTextReaderDepth	(xmlTextReaderPtr reader);
151XMLPUBFUN int XMLCALL
152			xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
153XMLPUBFUN int XMLCALL
154			xmlTextReaderHasValue(xmlTextReaderPtr reader);
155XMLPUBFUN int XMLCALL
156			xmlTextReaderIsDefault	(xmlTextReaderPtr reader);
157XMLPUBFUN int XMLCALL
158			xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
159XMLPUBFUN int XMLCALL
160			xmlTextReaderNodeType	(xmlTextReaderPtr reader);
161XMLPUBFUN int XMLCALL
162			xmlTextReaderQuoteChar	(xmlTextReaderPtr reader);
163XMLPUBFUN int XMLCALL
164			xmlTextReaderReadState	(xmlTextReaderPtr reader);
165XMLPUBFUN int XMLCALL
166                        xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
167
168XMLPUBFUN const xmlChar * XMLCALL
169		    xmlTextReaderConstBaseUri	(xmlTextReaderPtr reader);
170XMLPUBFUN const xmlChar * XMLCALL
171		    xmlTextReaderConstLocalName	(xmlTextReaderPtr reader);
172XMLPUBFUN const xmlChar * XMLCALL
173		    xmlTextReaderConstName	(xmlTextReaderPtr reader);
174XMLPUBFUN const xmlChar * XMLCALL
175		    xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
176XMLPUBFUN const xmlChar * XMLCALL
177		    xmlTextReaderConstPrefix	(xmlTextReaderPtr reader);
178XMLPUBFUN const xmlChar * XMLCALL
179		    xmlTextReaderConstXmlLang	(xmlTextReaderPtr reader);
180XMLPUBFUN const xmlChar * XMLCALL
181		    xmlTextReaderConstString	(xmlTextReaderPtr reader,
182						 const xmlChar *str);
183XMLPUBFUN 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 */
190XMLPUBFUN xmlChar * XMLCALL
191			xmlTextReaderBaseUri	(xmlTextReaderPtr reader);
192XMLPUBFUN xmlChar * XMLCALL
193			xmlTextReaderLocalName	(xmlTextReaderPtr reader);
194XMLPUBFUN xmlChar * XMLCALL
195			xmlTextReaderName	(xmlTextReaderPtr reader);
196XMLPUBFUN xmlChar * XMLCALL
197			xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
198XMLPUBFUN xmlChar * XMLCALL
199			xmlTextReaderPrefix	(xmlTextReaderPtr reader);
200XMLPUBFUN xmlChar * XMLCALL
201			xmlTextReaderXmlLang	(xmlTextReaderPtr reader);
202XMLPUBFUN xmlChar * XMLCALL
203			xmlTextReaderValue	(xmlTextReaderPtr reader);
204
205/*
206 * Methods of the XmlTextReader
207 */
208XMLPUBFUN int XMLCALL
209		    xmlTextReaderClose		(xmlTextReaderPtr reader);
210XMLPUBFUN xmlChar * XMLCALL
211		    xmlTextReaderGetAttributeNo	(xmlTextReaderPtr reader,
212						 int no);
213XMLPUBFUN xmlChar * XMLCALL
214		    xmlTextReaderGetAttribute	(xmlTextReaderPtr reader,
215						 const xmlChar *name);
216XMLPUBFUN xmlChar * XMLCALL
217		    xmlTextReaderGetAttributeNs	(xmlTextReaderPtr reader,
218						 const xmlChar *localName,
219						 const xmlChar *namespaceURI);
220XMLPUBFUN xmlParserInputBufferPtr XMLCALL
221		    xmlTextReaderGetRemainder	(xmlTextReaderPtr reader);
222XMLPUBFUN xmlChar * XMLCALL
223		    xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
224						 const xmlChar *prefix);
225XMLPUBFUN int XMLCALL
226		    xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
227						 int no);
228XMLPUBFUN int XMLCALL
229		    xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
230						 const xmlChar *name);
231XMLPUBFUN int XMLCALL
232		    xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
233						 const xmlChar *localName,
234						 const xmlChar *namespaceURI);
235XMLPUBFUN int XMLCALL
236		    xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
237XMLPUBFUN int XMLCALL
238		    xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
239XMLPUBFUN int XMLCALL
240		    xmlTextReaderMoveToElement	(xmlTextReaderPtr reader);
241XMLPUBFUN int XMLCALL
242		    xmlTextReaderNormalization	(xmlTextReaderPtr reader);
243XMLPUBFUN const xmlChar * XMLCALL
244		    xmlTextReaderConstEncoding  (xmlTextReaderPtr reader);
245
246/*
247 * Extensions
248 */
249XMLPUBFUN int XMLCALL
250		    xmlTextReaderSetParserProp	(xmlTextReaderPtr reader,
251						 int prop,
252						 int value);
253XMLPUBFUN int XMLCALL
254		    xmlTextReaderGetParserProp	(xmlTextReaderPtr reader,
255						 int prop);
256XMLPUBFUN xmlNodePtr XMLCALL
257		    xmlTextReaderCurrentNode	(xmlTextReaderPtr reader);
258
259XMLPUBFUN int XMLCALL
260            xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader);
261
262XMLPUBFUN int XMLCALL
263            xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader);
264
265XMLPUBFUN xmlNodePtr XMLCALL
266		    xmlTextReaderPreserve	(xmlTextReaderPtr reader);
267#ifdef LIBXML_PATTERN_ENABLED
268XMLPUBFUN int XMLCALL
269		    xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
270						 const xmlChar *pattern,
271						 const xmlChar **namespaces);
272#endif /* LIBXML_PATTERN_ENABLED */
273XMLPUBFUN xmlDocPtr XMLCALL
274		    xmlTextReaderCurrentDoc	(xmlTextReaderPtr reader);
275XMLPUBFUN xmlNodePtr XMLCALL
276		    xmlTextReaderExpand		(xmlTextReaderPtr reader);
277XMLPUBFUN int XMLCALL
278		    xmlTextReaderNext		(xmlTextReaderPtr reader);
279XMLPUBFUN int XMLCALL
280		    xmlTextReaderNextSibling	(xmlTextReaderPtr reader);
281XMLPUBFUN int XMLCALL
282		    xmlTextReaderIsValid	(xmlTextReaderPtr reader);
283#ifdef LIBXML_SCHEMAS_ENABLED
284XMLPUBFUN int XMLCALL
285		    xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
286						 const char *rng);
287XMLPUBFUN int XMLCALL
288		    xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
289						 xmlRelaxNGPtr schema);
290XMLPUBFUN int XMLCALL
291		    xmlTextReaderSchemaValidate	(xmlTextReaderPtr reader,
292						 const char *xsd);
293XMLPUBFUN int XMLCALL
294		    xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader,
295						 xmlSchemaValidCtxtPtr ctxt,
296						 int options);
297XMLPUBFUN int XMLCALL
298		    xmlTextReaderSetSchema	(xmlTextReaderPtr reader,
299						 xmlSchemaPtr schema);
300#endif
301XMLPUBFUN const xmlChar * XMLCALL
302		    xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
303XMLPUBFUN int XMLCALL
304		    xmlTextReaderStandalone     (xmlTextReaderPtr reader);
305
306
307/*
308 * Index lookup
309 */
310XMLPUBFUN long XMLCALL
311		xmlTextReaderByteConsumed	(xmlTextReaderPtr reader);
312
313/*
314 * New more complete APIs for simpler creation and reuse of readers
315 */
316XMLPUBFUN xmlTextReaderPtr XMLCALL
317		xmlReaderWalker		(xmlDocPtr doc);
318XMLPUBFUN xmlTextReaderPtr XMLCALL
319		xmlReaderForDoc		(const xmlChar * cur,
320					 const char *URL,
321					 const char *encoding,
322					 int options);
323XMLPUBFUN xmlTextReaderPtr XMLCALL
324		xmlReaderForFile	(const char *filename,
325					 const char *encoding,
326					 int options);
327XMLPUBFUN xmlTextReaderPtr XMLCALL
328		xmlReaderForMemory	(const char *buffer,
329					 int size,
330					 const char *URL,
331					 const char *encoding,
332					 int options);
333XMLPUBFUN xmlTextReaderPtr XMLCALL
334		xmlReaderForFd		(int fd,
335					 const char *URL,
336					 const char *encoding,
337					 int options);
338XMLPUBFUN xmlTextReaderPtr XMLCALL
339		xmlReaderForIO		(xmlInputReadCallback ioread,
340					 xmlInputCloseCallback ioclose,
341					 void *ioctx,
342					 const char *URL,
343					 const char *encoding,
344					 int options);
345
346XMLPUBFUN int XMLCALL
347		xmlReaderNewWalker	(xmlTextReaderPtr reader,
348					 xmlDocPtr doc);
349XMLPUBFUN int XMLCALL
350		xmlReaderNewDoc		(xmlTextReaderPtr reader,
351					 const xmlChar * cur,
352					 const char *URL,
353					 const char *encoding,
354					 int options);
355XMLPUBFUN int XMLCALL
356		xmlReaderNewFile	(xmlTextReaderPtr reader,
357					 const char *filename,
358					 const char *encoding,
359					 int options);
360XMLPUBFUN int XMLCALL
361		xmlReaderNewMemory	(xmlTextReaderPtr reader,
362					 const char *buffer,
363					 int size,
364					 const char *URL,
365					 const char *encoding,
366					 int options);
367XMLPUBFUN int XMLCALL
368		xmlReaderNewFd		(xmlTextReaderPtr reader,
369					 int fd,
370					 const char *URL,
371					 const char *encoding,
372					 int options);
373XMLPUBFUN 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 */
384typedef 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 */
395typedef void   (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
396						 const char *msg,
397						 xmlParserSeverities severity,
398						 xmlTextReaderLocatorPtr locator);
399XMLPUBFUN int XMLCALL
400		    xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
401/*int             xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
402XMLPUBFUN xmlChar * XMLCALL
403		    xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
404XMLPUBFUN void XMLCALL
405		    xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
406						 xmlTextReaderErrorFunc f,
407						 void *arg);
408XMLPUBFUN void XMLCALL
409		    xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
410							   xmlStructuredErrorFunc f,
411							   void *arg);
412XMLPUBFUN 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