wmi-1.3.16 from opsview.com
This commit is contained in:
@@ -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 */
|
||||
Reference in New Issue
Block a user