Annotation of XML/parser.h, revision 1.17
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.17 ! daniel 6: * $Id: parser.h,v 1.16 1998/08/08 22:25:21 daniel Exp $
1.1 veillard 7: */
8:
9: #ifndef __XML_PARSER_H__
10: #define __XML_PARSER_H__
11:
1.2 veillard 12: #include "tree.h"
13:
1.7 daniel 14: #ifdef __cplusplus
15: extern "C" {
16: #endif
17:
1.1 veillard 18: /*
19: * Constants.
20: */
21: #define XML_DEFAULT_VERSION "1.0"
22:
1.14 daniel 23: typedef 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, *xmlParserInputPtr;
1.7 daniel 30:
1.13 daniel 31: typedef struct xmlParserNodeInfo {
32: const struct xmlNode* node;
33: /* Position & line # that text that created the node begins & ends on */
34: unsigned long begin_pos;
35: unsigned long begin_line;
36: unsigned long end_pos;
37: unsigned long end_line;
38: } xmlParserNodeInfo;
39:
40: typedef struct xmlParserNodeInfoSeq {
41: unsigned long maximum;
42: unsigned long length;
43: xmlParserNodeInfo* buffer;
44: } xmlParserNodeInfoSeq, *xmlParserNodeInfoSeqPtr;
45:
1.7 daniel 46: typedef struct xmlParserCtxt {
1.17 ! daniel 47: struct xmlSAXHandler *sax; /* The SAX handler */
1.16 daniel 48: xmlDocPtr doc; /* the document being built */
49:
1.14 daniel 50: /* Input stream stack */
1.15 daniel 51: xmlParserInputPtr input; /* Current input stream */
1.14 daniel 52: int inputNr; /* Number of current input streams */
53: int inputMax; /* Max number of input streams */
54: xmlParserInputPtr *inputTab; /* stack of inputs */
1.15 daniel 55:
56: /* Node analysis stack */
57: xmlNodePtr node; /* Current parsed Node */
58: int nodeNr; /* Depth of the parsing stack */
59: int nodeMax; /* Max depth of the parsing stack */
60: xmlNodePtr *nodeTab; /* array of nodes */
1.14 daniel 61:
1.13 daniel 62: int record_info; /* Whether node info should be kept */
63: xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
1.7 daniel 64: } xmlParserCtxt, *xmlParserCtxtPtr;
65:
66: /*
1.17 ! daniel 67: * a SAX Locator.
! 68: */
! 69:
! 70: typedef struct xmlSAXLocator {
! 71: const CHAR *(*getPublicId)(xmlParserCtxtPtr ctxt);
! 72: const CHAR *(*getSystemId)(xmlParserCtxtPtr ctxt);
! 73: int (*getLineNumber)(xmlParserCtxtPtr ctxt);
! 74: int (*getColumnNumber)(xmlParserCtxtPtr ctxt);
! 75: } xmlSAXLocator, *xmlSAXLocatorPtr;
! 76:
! 77: /*
! 78: * a SAX Exception.
! 79: */
! 80:
! 81: typedef struct xmlSAXHandler {
! 82: xmlParserInputPtr (*resolveEntity)(xmlParserCtxtPtr ctxt,
! 83: const CHAR *publicId, const CHAR *systemId);
! 84: void (*notationDecl)(xmlParserCtxtPtr ctxt, const CHAR *name,
! 85: const CHAR *publicId, const CHAR *systemId);
! 86: void (*unparsedEntityDecl)(xmlParserCtxtPtr ctxt, const CHAR *name,
! 87: const CHAR *publicId, const CHAR *systemId,
! 88: const CHAR *notationName);
! 89: void (*setDocumentLocator) (xmlParserCtxtPtr ctxt, xmlSAXLocatorPtr loc);
! 90: void (*startDocument) (xmlParserCtxtPtr ctxt);
! 91: void (*endDocument) (xmlParserCtxtPtr ctxt);
! 92: void (*startElement) (xmlParserCtxtPtr ctxt, const CHAR *name);
! 93: void (*endElement) (xmlParserCtxtPtr ctxt, const CHAR *name);
! 94: void (*characters) (xmlParserCtxtPtr ctxt, const CHAR *ch,
! 95: int start, int len);
! 96: void (*ignorableWhitespace) (xmlParserCtxtPtr ctxt,
! 97: const CHAR *ch, int start, int len);
! 98: void (*processingInstruction) (xmlParserCtxtPtr ctxt, const CHAR *target,
! 99: const CHAR *data);
! 100: void (*warning) (xmlParserCtxtPtr ctxt, const char *msg, ...);
! 101: void (*error) (xmlParserCtxtPtr ctxt, const char *msg, ...);
! 102: void (*fatalError) (xmlParserCtxtPtr ctxt, const char *msg, ...);
! 103: } xmlSAXHandler, *xmlSAXHandlerPtr;
! 104:
! 105: /*
! 106: * Global variables: just the SAX interface tables we are looking for full
! 107: * reentrancy of the code !
! 108: */
! 109: xmlSAXLocator xmlDefaultSAXLocator;
! 110: xmlSAXHandler xmlDefaultSAXHandler;
! 111:
! 112: /*
1.2 veillard 113: * Interfaces
114: */
1.9 daniel 115: extern int xmlParseDocument(xmlParserCtxtPtr ctxt);
1.2 veillard 116: extern xmlDocPtr xmlParseDoc(CHAR *cur);
1.11 daniel 117: extern xmlDocPtr xmlParseMemory(char *buffer, int size);
1.4 httpng 118: extern xmlDocPtr xmlParseFile(const char *filename);
1.3 httpng 119: extern CHAR *xmlStrdup(const CHAR *input);
120: extern CHAR *xmlStrndup(const CHAR *input, int n);
1.5 veillard 121: extern CHAR *xmlStrchr(const CHAR *str, CHAR val);
122: extern int xmlStrcmp(const CHAR *str1, const CHAR *str2);
123: extern int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len);
1.9 daniel 124:
125: extern void xmlInitParserCtxt(xmlParserCtxtPtr ctx);
126: extern void xmlClearParserCtxt(xmlParserCtxtPtr ctx);
127: extern void xmlSetupParserForBuffer(xmlParserCtxtPtr ctx, const CHAR* buffer,
128: const char* filename);
129:
1.12 daniel 130: extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
1.13 daniel 131:
132: extern const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* c,
133: const xmlNode* node);
134: extern void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
135: extern void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq);
136: unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq,
137: const xmlNode* node);
138: extern void xmlParserAddNodeInfo(xmlParserCtxtPtr ctx,
139: const xmlParserNodeInfo* info);
1.7 daniel 140:
1.17 ! daniel 141: extern void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...);
! 142: extern void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...);
1.7 daniel 143: #ifdef __cplusplus
144: }
145: #endif
1.1 veillard 146:
147: #endif /* __XML_PARSER_H__ */
148:
Webmaster