44# ifndef IS_INVALID_CHAR
45# define IS_INVALID_CHAR(enc, ptr, n) (0)
48# define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
51 return XML_TOK_PARTIAL_CHAR; \
52 if (IS_INVALID_CHAR(enc, ptr, n)) { \
53 *(nextTokPtr) = (ptr); \
54 return XML_TOK_INVALID; \
59# define INVALID_CASES(ptr, nextTokPtr) \
60 INVALID_LEAD_CASE(2, ptr, nextTokPtr) \
61 INVALID_LEAD_CASE(3, ptr, nextTokPtr) \
62 INVALID_LEAD_CASE(4, ptr, nextTokPtr) \
66 *(nextTokPtr) = (ptr); \
67 return XML_TOK_INVALID;
69# define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \
72 return XML_TOK_PARTIAL_CHAR; \
73 if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) { \
75 return XML_TOK_INVALID; \
80# define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \
82 if (! IS_NAME_CHAR_MINBPC(enc, ptr)) { \
84 return XML_TOK_INVALID; \
94 CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \
95 CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \
96 CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
98# define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \
100 if ((end) - (ptr) < (n)) \
101 return XML_TOK_PARTIAL_CHAR; \
102 if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) { \
104 return XML_TOK_INVALID; \
109# define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \
111 if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) { \
113 return XML_TOK_INVALID; \
118 ptr += MINBPC(enc); \
120 CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \
121 CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \
122 CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
125# define PREFIX(ident) ident
128# define HAS_CHARS(enc, ptr, end, count) \
129 ((end) - (ptr) >= ((count) * MINBPC(enc)))
131# define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
133# define REQUIRE_CHARS(enc, ptr, end, count) \
135 if (! HAS_CHARS(enc, ptr, end, count)) { \
136 return XML_TOK_PARTIAL; \
140# define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
279 const char *target = ptr;
344 for (
i = 0;
i < 6;
i++, ptr +=
MINBPC(enc)) {
360 size_t n =
end - ptr;
399# define LEAD_CASE(n) \
401 if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
403 return XML_TOK_DATA_CHARS; \
828 size_t n =
end - ptr;
874# define LEAD_CASE(n) \
876 if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
878 return XML_TOK_DATA_CHARS; \
1023 size_t n =
end - ptr;
1143# define LEAD_CASE(n) \
1145 if (end - ptr < n) \
1146 return XML_TOK_PARTIAL_CHAR; \
1147 if (IS_INVALID_CHAR(enc, ptr, n)) { \
1148 *nextTokPtr = ptr; \
1149 return XML_TOK_INVALID; \
1151 if (IS_NMSTRT_CHAR(enc, ptr, n)) { \
1153 tok = XML_TOK_NAME; \
1156 if (IS_NAME_CHAR(enc, ptr, n)) { \
1158 tok = XML_TOK_NMTOKEN; \
1161 *nextTokPtr = ptr; \
1162 return XML_TOK_INVALID;
1277# define LEAD_CASE(n) \
1346# define LEAD_CASE(n) \
1401 size_t n =
end - ptr;
1450 const char **badPtr) {
1518# define START_NAME \
1519 if (state == other) { \
1520 if (nAtts < attsMax) { \
1521 atts[nAtts].name = ptr; \
1522 atts[nAtts].normalized = 1; \
1526# define LEAD_CASE(n) \
1528 START_NAME ptr += (n - MINBPC(enc)); \
1542 if (
nAtts < attsMax)
1548 if (
nAtts < attsMax)
1549 atts[
nAtts].valueEnd = ptr;
1555 if (
nAtts < attsMax)
1561 if (
nAtts < attsMax)
1562 atts[
nAtts].valueEnd = ptr;
1567 if (
nAtts < attsMax)
1568 atts[
nAtts].normalized = 0;
1574 && (ptr == atts[
nAtts].valuePtr
1578 atts[
nAtts].normalized = 0;
1587 atts[
nAtts].normalized = 0;
1715 const char *
end1,
const char *
ptr2) {
1734 const char *
start = ptr;
1737# define LEAD_CASE(n) \
1757 return (
int)(ptr -
start);
1782# define LEAD_CASE(n) \
1785 pos->columnNumber++; \
1792 pos->columnNumber = 0;
1801 pos->columnNumber = 0;
1805 pos->columnNumber++;
1812# undef MULTIBYTE_CASES
1813# undef INVALID_CASES
1814# undef CHECK_NAME_CASE
1815# undef CHECK_NAME_CASES
1816# undef CHECK_NMSTRT_CASE
1817# undef CHECK_NMSTRT_CASES
apr_array_header_t const char int upper
#define PREFIX(str, length, ch)
apr_file_t apr_off_t start
apr_array_header_t ** result
apr_vformatter_buff_t * c
static int checkCharRefNumber(int result)
#define CHAR_MATCHES(enc, p, c)
#define IS_NAME_CHAR_MINBPC(enc, p)
#define BYTE_TYPE(enc, p)
#define BYTE_TO_ASCII(enc, p)
#define IS_NMSTRT_CHAR_MINBPC(enc, p)
#define XML_TOK_CLOSE_PAREN_ASTERISK
#define XML_TOK_DECL_OPEN
#define XML_TOK_PREFIXED_NAME
#define XML_TOK_OPEN_PAREN
#define XML_TOK_OPEN_BRACKET
#define XML_TOK_CLOSE_PAREN_PLUS
#define XML_TOK_EMPTY_ELEMENT_NO_ATTS
#define XML_TOK_ENTITY_REF
#define XML_TOK_CLOSE_PAREN
#define XML_TOK_NAME_ASTERISK
#define XML_TOK_DATA_NEWLINE
#define XML_TOK_DECL_CLOSE
#define XML_TOK_NAME_PLUS
#define XML_TOK_NAME_QUESTION
#define XML_TOK_COND_SECT_CLOSE
#define XML_TOK_START_TAG_WITH_ATTS
#define XML_TOK_CDATA_SECT_CLOSE
#define XML_TOK_DATA_CHARS
#define XML_TOK_COND_SECT_OPEN
#define XML_TOK_POUND_NAME
#define XML_TOK_PARAM_ENTITY_REF
#define XML_TOK_CLOSE_BRACKET
#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS
#define XML_TOK_TRAILING_RSQB
#define XML_TOK_ATTRIBUTE_VALUE_S
#define XML_TOK_START_TAG_NO_ATTS
#define XML_TOK_TRAILING_CR
#define XML_TOK_CDATA_SECT_OPEN
#define XML_TOK_INSTANCE_START
#define XML_TOK_CLOSE_PAREN_QUESTION