Annotation of XML/parser.h, revision 1.32

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

Webmaster