Reorganize the repository for new build system
This commit is contained in:
143
modules/xml/lib.h
Normal file
143
modules/xml/lib.h
Normal file
@@ -0,0 +1,143 @@
|
||||
#ifndef __LIB_H__
|
||||
#define __LIB_H__
|
||||
|
||||
#include "ph7.h"
|
||||
#include "ph7int.h"
|
||||
|
||||
/*
|
||||
* Lexer token codes
|
||||
* The following set of constants are the token value recognized
|
||||
* by the lexer when processing XML input.
|
||||
*/
|
||||
#define SXML_TOK_INVALID 0xFFFF /* Invalid Token */
|
||||
#define SXML_TOK_COMMENT 0x01 /* Comment */
|
||||
#define SXML_TOK_PI 0x02 /* Processing instruction */
|
||||
#define SXML_TOK_DOCTYPE 0x04 /* Doctype directive */
|
||||
#define SXML_TOK_RAW 0x08 /* Raw text */
|
||||
#define SXML_TOK_START_TAG 0x10 /* Starting tag */
|
||||
#define SXML_TOK_CDATA 0x20 /* CDATA */
|
||||
#define SXML_TOK_END_TAG 0x40 /* Ending tag */
|
||||
#define SXML_TOK_START_END 0x80 /* Tag */
|
||||
#define SXML_TOK_SPACE 0x100 /* Spaces (including new lines) */
|
||||
#define IS_XML_DIRTY(c) \
|
||||
( c == '<' || c == '$'|| c == '"' || c == '\''|| c == '&'|| c == '(' || c == ')' || c == '*' ||\
|
||||
c == '%' || c == '#' || c == '|' || c == '/'|| c == '~' || c == '{' || c == '}' ||\
|
||||
c == '[' || c == ']' || c == '\\'|| c == ';'||c == '^' || c == '`' )
|
||||
|
||||
/* XML processing control flags */
|
||||
#define SXML_ENABLE_NAMESPACE 0x01 /* Parse XML with namespace support enabled */
|
||||
#define SXML_ENABLE_QUERY 0x02 /* Not used */
|
||||
#define SXML_OPTION_CASE_FOLDING 0x04 /* Controls whether case-folding is enabled for this XML parser */
|
||||
#define SXML_OPTION_SKIP_TAGSTART 0x08 /* Specify how many characters should be skipped in the beginning of a tag name.*/
|
||||
#define SXML_OPTION_SKIP_WHITE 0x10 /* Whether to skip values consisting of whitespace characters. */
|
||||
#define SXML_OPTION_TARGET_ENCODING 0x20 /* Default encoding: UTF-8 */
|
||||
|
||||
/* XML error codes */
|
||||
enum xml_err_code {
|
||||
SXML_ERROR_NONE = 1,
|
||||
SXML_ERROR_NO_MEMORY,
|
||||
SXML_ERROR_SYNTAX,
|
||||
SXML_ERROR_NO_ELEMENTS,
|
||||
SXML_ERROR_INVALID_TOKEN,
|
||||
SXML_ERROR_UNCLOSED_TOKEN,
|
||||
SXML_ERROR_PARTIAL_CHAR,
|
||||
SXML_ERROR_TAG_MISMATCH,
|
||||
SXML_ERROR_DUPLICATE_ATTRIBUTE,
|
||||
SXML_ERROR_JUNK_AFTER_DOC_ELEMENT,
|
||||
SXML_ERROR_PARAM_ENTITY_REF,
|
||||
SXML_ERROR_UNDEFINED_ENTITY,
|
||||
SXML_ERROR_RECURSIVE_ENTITY_REF,
|
||||
SXML_ERROR_ASYNC_ENTITY,
|
||||
SXML_ERROR_BAD_CHAR_REF,
|
||||
SXML_ERROR_BINARY_ENTITY_REF,
|
||||
SXML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF,
|
||||
SXML_ERROR_MISPLACED_XML_PI,
|
||||
SXML_ERROR_UNKNOWN_ENCODING,
|
||||
SXML_ERROR_INCORRECT_ENCODING,
|
||||
SXML_ERROR_UNCLOSED_CDATA_SECTION,
|
||||
SXML_ERROR_EXTERNAL_ENTITY_HANDLING
|
||||
};
|
||||
|
||||
/*
|
||||
* An XML raw text,CDATA,tag name and son is parsed out and stored
|
||||
* in an instance of the following structure.
|
||||
*/
|
||||
typedef struct SyXMLRawStr SyXMLRawStr;
|
||||
struct SyXMLRawStr {
|
||||
const char *zString; /* Raw text [UTF-8 ENCODED EXCEPT CDATA] [NOT NULL TERMINATED] */
|
||||
sxu32 nByte; /* Text length */
|
||||
sxu32 nLine; /* Line number this text occurs */
|
||||
};
|
||||
|
||||
/*
|
||||
* An XML raw text,CDATA,tag name is parsed out and stored
|
||||
* in an instance of the following structure.
|
||||
*/
|
||||
typedef struct SyXMLRawStrNS SyXMLRawStrNS;
|
||||
struct SyXMLRawStrNS {
|
||||
/* Public field [Must match the SyXMLRawStr fields ] */
|
||||
const char *zString; /* Raw text [UTF-8 ENCODED EXCEPT CDATA] [NOT NULL TERMINATED] */
|
||||
sxu32 nByte; /* Text length */
|
||||
sxu32 nLine; /* Line number this text occurs */
|
||||
/* Private fields */
|
||||
SySet sNSset; /* Namespace entries */
|
||||
};
|
||||
|
||||
/*
|
||||
* Event callback signatures.
|
||||
*/
|
||||
typedef sxi32(*ProcXMLStartTagHandler)(SyXMLRawStr *, SyXMLRawStr *, sxu32, SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLTextHandler)(SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLEndTagHandler)(SyXMLRawStr *, SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLPIHandler)(SyXMLRawStr *, SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLDoctypeHandler)(SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLSyntaxErrorHandler)(const char *, int, SyToken *, void *);
|
||||
typedef sxi32(*ProcXMLStartDocument)(void *);
|
||||
typedef sxi32(*ProcXMLNameSpaceStart)(SyXMLRawStr *, SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLNameSpaceEnd)(SyXMLRawStr *, void *);
|
||||
typedef sxi32(*ProcXMLEndDocument)(void *);
|
||||
|
||||
/* Each active XML SAX parser is represented by an instance
|
||||
* of the following structure.
|
||||
*/
|
||||
typedef struct SyXMLParser SyXMLParser;
|
||||
struct SyXMLParser {
|
||||
SyMemBackend *pAllocator; /* Memory backend */
|
||||
void *pUserData; /* User private data forwarded verbatim by the XML parser
|
||||
* as the last argument to the users callbacks.
|
||||
*/
|
||||
SyHash hns; /* Namespace hashtable */
|
||||
SySet sToken; /* XML tokens */
|
||||
SyLex sLex; /* Lexical analyzer */
|
||||
sxi32 nFlags; /* Control flags */
|
||||
/* User callbacks */
|
||||
ProcXMLStartTagHandler xStartTag; /* Start element handler */
|
||||
ProcXMLEndTagHandler xEndTag; /* End element handler */
|
||||
ProcXMLTextHandler xRaw; /* Raw text/CDATA handler */
|
||||
ProcXMLDoctypeHandler xDoctype; /* DOCTYPE handler */
|
||||
ProcXMLPIHandler xPi; /* Processing instruction (PI) handler*/
|
||||
ProcXMLSyntaxErrorHandler xError; /* Error handler */
|
||||
ProcXMLStartDocument xStartDoc; /* StartDoc handler */
|
||||
ProcXMLEndDocument xEndDoc; /* EndDoc handler */
|
||||
ProcXMLNameSpaceStart xNameSpace; /* Namespace declaration handler */
|
||||
ProcXMLNameSpaceEnd xNameSpaceEnd; /* End namespace declaration handler */
|
||||
};
|
||||
|
||||
PH7_PRIVATE sxi32 SyXMLParserInit(SyXMLParser *pParser, SyMemBackend *pAllocator, sxi32 iFlags);
|
||||
PH7_PRIVATE sxi32 SyXMLParserSetEventHandler(SyXMLParser *pParser,
|
||||
void *pUserData,
|
||||
ProcXMLStartTagHandler xStartTag,
|
||||
ProcXMLTextHandler xRaw,
|
||||
ProcXMLSyntaxErrorHandler xErr,
|
||||
ProcXMLStartDocument xStartDoc,
|
||||
ProcXMLEndTagHandler xEndTag,
|
||||
ProcXMLPIHandler xPi,
|
||||
ProcXMLEndDocument xEndDoc,
|
||||
ProcXMLDoctypeHandler xDoctype,
|
||||
ProcXMLNameSpaceStart xNameSpace,
|
||||
ProcXMLNameSpaceEnd xNameSpaceEnd
|
||||
);
|
||||
PH7_PRIVATE sxi32 SyXMLProcess(SyXMLParser *pParser, const char *zInput, sxu32 nByte);
|
||||
PH7_PRIVATE sxi32 SyXMLParserRelease(SyXMLParser *pParser);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user