parser.h revision be70ff7162ea612ceb3afeb9be1b1c07a5a3e4d1
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#include "xmlIO.h" 14 15#ifdef __cplusplus 16extern "C" { 17#endif 18 19/* 20 * Constants. 21 */ 22#define XML_DEFAULT_VERSION "1.0" 23 24typedef void (* xmlParserInputDeallocate)(CHAR *); 25typedef struct xmlParserInput { 26 /* Input buffer */ 27 xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */ 28 29 const char *filename; /* The file analyzed, if any */ 30 const CHAR *base; /* Base of the array to parse */ 31 const CHAR *cur; /* Current char being parsed */ 32 int line; /* Current line */ 33 int col; /* Current column */ 34 xmlParserInputDeallocate free; /* function to deallocate the base */ 35} xmlParserInput; 36typedef xmlParserInput *xmlParserInputPtr; 37 38typedef struct _xmlParserNodeInfo { 39 const struct xmlNode* node; 40 /* Position & line # that text that created the node begins & ends on */ 41 unsigned long begin_pos; 42 unsigned long begin_line; 43 unsigned long end_pos; 44 unsigned long end_line; 45} _xmlParserNodeInfo; 46typedef _xmlParserNodeInfo xmlParserNodeInfo; 47 48typedef struct xmlParserNodeInfoSeq { 49 unsigned long maximum; 50 unsigned long length; 51 xmlParserNodeInfo* buffer; 52} _xmlParserNodeInfoSeq; 53typedef _xmlParserNodeInfoSeq xmlParserNodeInfoSeq; 54typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr; 55 56typedef struct _xmlParserCtxt { 57 struct xmlSAXHandler *sax; /* The SAX handler */ 58 void *userData; /* the document being built */ 59 xmlDocPtr myDoc; /* the document being built */ 60 int wellFormed; /* is the document well formed */ 61 int replaceEntities; /* shall we replace entities ? */ 62 const CHAR *version; /* the XML version string */ 63 const CHAR *encoding; /* encoding, if any */ 64 int standalone; /* standalone document */ 65 int html; /* are we parsing an HTML document */ 66 67 /* Input stream stack */ 68 xmlParserInputPtr input; /* Current input stream */ 69 int inputNr; /* Number of current input streams */ 70 int inputMax; /* Max number of input streams */ 71 xmlParserInputPtr *inputTab; /* stack of inputs */ 72 73 /* Node analysis stack */ 74 xmlNodePtr node; /* Current parsed Node */ 75 int nodeNr; /* Depth of the parsing stack */ 76 int nodeMax; /* Max depth of the parsing stack */ 77 xmlNodePtr *nodeTab; /* array of nodes */ 78 79 int record_info; /* Whether node info should be kept */ 80 xmlParserNodeInfoSeq node_seq; /* info about each node parsed */ 81} _xmlParserCtxt; 82typedef _xmlParserCtxt xmlParserCtxt; 83typedef xmlParserCtxt *xmlParserCtxtPtr; 84 85/* 86 * a SAX Locator. 87 */ 88 89typedef struct xmlSAXLocator { 90 const CHAR *(*getPublicId)(void *ctx); 91 const CHAR *(*getSystemId)(void *ctx); 92 int (*getLineNumber)(void *ctx); 93 int (*getColumnNumber)(void *ctx); 94} _xmlSAXLocator; 95typedef _xmlSAXLocator xmlSAXLocator; 96typedef xmlSAXLocator *xmlSAXLocatorPtr; 97 98/* 99 * a SAX Exception. 100 */ 101 102#include "entities.h" 103 104typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx, 105 const CHAR *publicId, const CHAR *systemId); 106typedef void (*internalSubsetSAXFunc) (void *ctx, const CHAR *name, 107 const CHAR *ExternalID, const CHAR *SystemID); 108typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx, 109 const CHAR *name); 110typedef void (*entityDeclSAXFunc) (void *ctx, 111 const CHAR *name, int type, const CHAR *publicId, 112 const CHAR *systemId, CHAR *content); 113typedef void (*notationDeclSAXFunc)(void *ctx, const CHAR *name, 114 const CHAR *publicId, const CHAR *systemId); 115typedef void (*attributeDeclSAXFunc)(void *ctx, const CHAR *elem, 116 const CHAR *name, int type, int def, 117 const CHAR *defaultValue, xmlEnumerationPtr tree); 118typedef void (*elementDeclSAXFunc)(void *ctx, const CHAR *name, 119 int type, xmlElementContentPtr content); 120typedef void (*unparsedEntityDeclSAXFunc)(void *ctx, 121 const CHAR *name, const CHAR *publicId, 122 const CHAR *systemId, const CHAR *notationName); 123typedef void (*setDocumentLocatorSAXFunc) (void *ctx, 124 xmlSAXLocatorPtr loc); 125typedef void (*startDocumentSAXFunc) (void *ctx); 126typedef void (*endDocumentSAXFunc) (void *ctx); 127typedef void (*startElementSAXFunc) (void *ctx, const CHAR *name, 128 const CHAR **atts); 129typedef void (*endElementSAXFunc) (void *ctx, const CHAR *name); 130typedef void (*attributeSAXFunc) (void *ctx, const CHAR *name, 131 const CHAR *value); 132typedef void (*referenceSAXFunc) (void *ctx, const CHAR *name); 133typedef void (*charactersSAXFunc) (void *ctx, const CHAR *ch, 134 int len); 135typedef void (*ignorableWhitespaceSAXFunc) (void *ctx, 136 const CHAR *ch, int len); 137typedef void (*processingInstructionSAXFunc) (void *ctx, 138 const CHAR *target, const CHAR *data); 139typedef void (*commentSAXFunc) (void *ctx, const CHAR *value); 140typedef void (*warningSAXFunc) (void *ctx, const char *msg, ...); 141typedef void (*errorSAXFunc) (void *ctx, const char *msg, ...); 142typedef void (*fatalErrorSAXFunc) (void *ctx, const char *msg, ...); 143typedef int (*isStandaloneSAXFunc) (void *ctx); 144typedef int (*hasInternalSubsetSAXFunc) (void *ctx); 145typedef int (*hasExternalSubsetSAXFunc) (void *ctx); 146 147typedef struct xmlSAXHandler { 148 internalSubsetSAXFunc internalSubset; 149 isStandaloneSAXFunc isStandalone; 150 hasInternalSubsetSAXFunc hasInternalSubset; 151 hasExternalSubsetSAXFunc hasExternalSubset; 152 resolveEntitySAXFunc resolveEntity; 153 getEntitySAXFunc getEntity; 154 entityDeclSAXFunc entityDecl; 155 notationDeclSAXFunc notationDecl; 156 attributeDeclSAXFunc attributeDecl; 157 elementDeclSAXFunc elementDecl; 158 unparsedEntityDeclSAXFunc unparsedEntityDecl; 159 setDocumentLocatorSAXFunc setDocumentLocator; 160 startDocumentSAXFunc startDocument; 161 endDocumentSAXFunc endDocument; 162 startElementSAXFunc startElement; 163 endElementSAXFunc endElement; 164 referenceSAXFunc reference; 165 charactersSAXFunc characters; 166 ignorableWhitespaceSAXFunc ignorableWhitespace; 167 processingInstructionSAXFunc processingInstruction; 168 commentSAXFunc comment; 169 warningSAXFunc warning; 170 errorSAXFunc error; 171 fatalErrorSAXFunc fatalError; 172} xmlSAXHandler; 173typedef xmlSAXHandler *xmlSAXHandlerPtr; 174 175/* 176 * Global variables: just the SAX interface tables we are looking for full 177 * reentrancy of the code and version infos. 178 */ 179extern const char *xmlParserVersion; 180 181extern xmlSAXLocator xmlDefaultSAXLocator; 182extern xmlSAXHandler xmlDefaultSAXHandler; 183extern xmlSAXHandler htmlDefaultSAXHandler; 184 185#include "entities.h" 186#include "xml-error.h" 187 188/* 189 * CHAR handling 190 */ 191CHAR *xmlStrdup(const CHAR *cur); 192CHAR *xmlStrndup(const CHAR *cur, int len); 193CHAR *xmlStrchr(const CHAR *str, CHAR val); 194int xmlStrcmp(const CHAR *str1, const CHAR *str2); 195int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len); 196int xmlStrlen(const CHAR *str); 197CHAR *xmlStrcat(CHAR *cur, const CHAR *add); 198CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len); 199 200/* 201 * Interfaces 202 */ 203xmlDocPtr xmlParseDoc(CHAR *cur); 204xmlDocPtr xmlParseMemory(char *buffer, int size); 205xmlDocPtr xmlParseFile(const char *filename); 206int xmlSubstituteEntitiesDefault(int val); 207 208/* 209 * Recovery mode 210 */ 211xmlDocPtr xmlRecoverDoc(CHAR *cur); 212xmlDocPtr xmlRecoverMemory(char *buffer, int size); 213xmlDocPtr xmlRecoverFile(const char *filename); 214 215/* 216 * Internal routines 217 */ 218int xmlParseDocument(xmlParserCtxtPtr ctxt); 219xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery); 220xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer, 221 int size, int recovery); 222xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename, 223 int recovery); 224xmlDtdPtr xmlParseDTD(const CHAR *ExternalID, const CHAR *SystemID); 225xmlDtdPtr xmlSAXParseDTD(xmlSAXHandlerPtr sax, const CHAR *ExternalID, 226 const CHAR *SystemID); 227void xmlInitParserCtxt(xmlParserCtxtPtr ctxt); 228void xmlClearParserCtxt(xmlParserCtxtPtr ctxt); 229void xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const CHAR* buffer, 230 const char* filename); 231 232const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* ctxt, 233 const xmlNode* node); 234void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq); 235void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq); 236unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq, 237 const xmlNode* node); 238void xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt, 239 const xmlParserNodeInfo* info); 240 241void xmlDefaultSAXHandlerInit(void); 242void htmlDefaultSAXHandlerInit(void); 243#ifdef __cplusplus 244} 245#endif 246 247#endif /* __XML_PARSER_H__ */ 248 249