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