diff options
Diffstat (limited to 'source4/lib/appweb/ejs-2.0/exml/exml.h')
-rw-r--r-- | source4/lib/appweb/ejs-2.0/exml/exml.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/source4/lib/appweb/ejs-2.0/exml/exml.h b/source4/lib/appweb/ejs-2.0/exml/exml.h new file mode 100644 index 0000000000..44c50a56b9 --- /dev/null +++ b/source4/lib/appweb/ejs-2.0/exml/exml.h @@ -0,0 +1,94 @@ +/* + * exml.h -- Embedded Xml Parser header + * + * Copyright (c) Mbedthis Software, LLC, 2003-2003. All Rights Reserved. -- MOB + */ + +#ifndef _h_EXML +#define _h_EXML 1 + +/******************************** Description *********************************/ + +#include "mpr.h" + +/********************************** Defines ***********************************/ + +#if BLD_FEATURE_SQUEEZE + #define EXML_BUFSIZE 512 /* Read buffer size */ +#else + #define EXML_BUFSIZE 1024 /* Read buffer size */ +#endif + +/* + * XML parser states. The states that are passed to the user handler have + * "U" appended to the comment. The error states (ERR and EOF) must be + * negative. + */ +#define EXML_ERR -1 /* Error */ +#define EXML_EOF -2 /* End of input */ +#define EXML_BEGIN 1 /* Before next tag */ +#define EXML_AFTER_LS 2 /* Seen "<" */ +#define EXML_COMMENT 3 /* Seen "<!--" (usr) U */ +#define EXML_NEW_ELT 4 /* Seen "<tag" (usr) U */ +#define EXML_ATT_NAME 5 /* Seen "<tag att" */ +#define EXML_ATT_EQ 6 /* Seen "<tag att" = */ +#define EXML_NEW_ATT 7 /* Seen "<tag att = "val" U */ +#define EXML_SOLO_ELT_DEFINED 8 /* Seen "<tag../>" U */ +#define EXML_ELT_DEFINED 9 /* Seen "<tag...>" U */ +#define EXML_ELT_DATA 10 /* Seen "<tag>....<" U */ +#define EXML_END_ELT 11 /* Seen "<tag>....</tag>" U */ +#define EXML_PI 12 /* Seen "<?processingInst" U */ +#define EXML_CDATA 13 /* Seen "<![CDATA[" U */ + +/* + * Lex tokens + */ +typedef enum ExmlToken { + TOKEN_ERR, + TOKEN_TOO_BIG, /* Token is too big */ + TOKEN_CDATA, + TOKEN_COMMENT, + TOKEN_INSTRUCTIONS, + TOKEN_LS, /* "<" -- Opening a tag */ + TOKEN_LS_SLASH, /* "</" -- Closing a tag */ + TOKEN_GR, /* ">" -- End of an open tag */ + TOKEN_SLASH_GR, /* "/>" -- End of a solo tag */ + TOKEN_TEXT, + TOKEN_EQ, + TOKEN_EOF, + TOKEN_SPACE, +} ExmlToken; + +struct Exml; +typedef int (*ExmlHandler)(struct Exml *xp, int state, + const char *tagName, const char* attName, const char* value); +typedef int (*ExmlInputStream)(struct Exml *xp, void *arg, char *buf, int size); + +/* + * Per XML session structure + */ +typedef struct Exml { + ExmlHandler handler; /* Callback function */ + ExmlInputStream readFn; /* Read data function */ + MprBuf *inBuf; /* Input data queue */ + MprBuf *tokBuf; /* Parsed token buffer */ + int quoteChar; /* XdbAtt quote char */ + int lineNumber; /* Current line no for debug */ + void *parseArg; /* Arg passed to exmlParse() */ + void *inputArg; /* Arg passed to exmlSetInputStream() */ + char *errMsg; /* Error message text */ +} Exml; + +extern Exml *exmlOpen(MprCtx ctx, int initialSize, int maxSize); +extern void exmlClose(Exml *xp); +extern void exmlSetParserHandler(Exml *xp, ExmlHandler h); +extern void exmlSetInputStream(Exml *xp, ExmlInputStream s, void *arg); +extern int exmlParse(Exml *xp); +extern void exmlSetParseArg(Exml *xp, void *parseArg); +extern void *exmlGetParseArg(Exml *xp); +extern const char *exmlGetErrorMsg(Exml *xp); +extern int exmlGetLineNumber(Exml *xp); + +/******************************************************************************/ + +#endif /* _h_EXML */ |