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