⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmltok.c

📁 LINUX下
💻 C
📖 第 1 页 / 共 3 页
字号:
    unsigned char lo = GET_LO(from); \    unsigned char hi = GET_HI(from); \    switch (hi) { \    case 0: \      if (lo < 0x80) { \        if (*toP == toLim) { \          *fromP = from; \	  return; \        } \        *(*toP)++ = lo; \        break; \      } \      /* fall through */ \    case 0x1: case 0x2: case 0x3: \    case 0x4: case 0x5: case 0x6: case 0x7: \      if (toLim -  *toP < 2) { \        *fromP = from; \	return; \      } \      *(*toP)++ = ((lo >> 6) | (hi << 2) |  UTF8_cval2); \      *(*toP)++ = ((lo & 0x3f) | 0x80); \      break; \    default: \      if (toLim -  *toP < 3)  { \        *fromP = from; \	return; \      } \      /* 16 bits divided 4, 6, 6 amongst 3 bytes */ \      *(*toP)++ = ((hi >> 4) | UTF8_cval3); \      *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \      *(*toP)++ = ((lo & 0x3f) | 0x80); \      break; \    case 0xD8: case 0xD9: case 0xDA: case 0xDB: \      if (toLim -  *toP < 4) { \	*fromP = from; \	return; \      } \      plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \      *(*toP)++ = ((plane >> 2) | UTF8_cval4); \      *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \      from += 2; \      lo2 = GET_LO(from); \      *(*toP)++ = (((lo & 0x3) << 4) \	           | ((GET_HI(from) & 0x3) << 2) \		   | (lo2 >> 6) \		   | 0x80); \      *(*toP)++ = ((lo2 & 0x3f) | 0x80); \      break; \    } \  } \  *fromP = from; \}#define DEFINE_UTF16_TO_UTF16(E) \static \void E ## toUtf16(const ENCODING *enc, \		  const char **fromP, const char *fromLim, \		  unsigned short **toP, const unsigned short *toLim) \{ \  (void)enc; \  /* Avoid copying first half only of surrogate */ \  if (fromLim - *fromP > ((toLim - *toP) << 1) \      && (GET_HI(fromLim - 2) & 0xF8) == 0xD8) \    fromLim -= 2; \  for (; *fromP != fromLim && *toP != toLim; *fromP += 2) \    *(*toP)++ = (GET_HI(*fromP) << 8) | GET_LO(*fromP); \}#define SET2(ptr, ch) \  (((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8)))#define GET_LO(ptr) ((unsigned char)(ptr)[0])#define GET_HI(ptr) ((unsigned char)(ptr)[1])DEFINE_UTF16_TO_UTF8(little2_)DEFINE_UTF16_TO_UTF16(little2_)#undef SET2#undef GET_LO#undef GET_HI#define SET2(ptr, ch) \  (((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF)))#define GET_LO(ptr) ((unsigned char)(ptr)[1])#define GET_HI(ptr) ((unsigned char)(ptr)[0])DEFINE_UTF16_TO_UTF8(big2_)DEFINE_UTF16_TO_UTF16(big2_)#undef SET2#undef GET_LO#undef GET_HI#define LITTLE2_BYTE_TYPE(enc, p) \ ((p)[1] == 0 \  ? ((struct normal_encoding *)(enc))->type[(unsigned char)*(p)] \  : unicode_byte_type((p)[1], (p)[0]))#define LITTLE2_BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1)#define LITTLE2_CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c)#define LITTLE2_IS_NAME_CHAR_MINBPC(enc, p) \  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])#define LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p) \  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])#ifdef XML_MIN_SIZEstaticint little2_byteType(const ENCODING *enc, const char *p){  return LITTLE2_BYTE_TYPE(enc, p);}staticint little2_byteToAscii(const ENCODING *enc, const char *p){  return LITTLE2_BYTE_TO_ASCII(enc, p);}staticint little2_charMatches(const ENCODING *enc, const char *p, int c){  return LITTLE2_CHAR_MATCHES(enc, p, c);}staticint little2_isNameMin(const ENCODING *enc, const char *p){  return LITTLE2_IS_NAME_CHAR_MINBPC(enc, p);}staticint little2_isNmstrtMin(const ENCODING *enc, const char *p){  return LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p);}#undef VTABLE#define VTABLE VTABLE1, little2_toUtf8, little2_toUtf16#else /* not XML_MIN_SIZE */#undef PREFIX#define PREFIX(ident) little2_ ## ident#define MINBPC(enc) 2/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(enc, p, c)#define IS_NAME_CHAR(enc, p, n) 0#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(enc, p)#define IS_NMSTRT_CHAR(enc, p, n) (0)#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(enc, p)#include "xmltok_impl.c"#undef MINBPC#undef BYTE_TYPE#undef BYTE_TO_ASCII#undef CHAR_MATCHES#undef IS_NAME_CHAR#undef IS_NAME_CHAR_MINBPC#undef IS_NMSTRT_CHAR#undef IS_NMSTRT_CHAR_MINBPC#undef IS_INVALID_CHAR#endif /* not XML_MIN_SIZE */#ifdef XML_NSstatic const struct normal_encoding little2_encoding_ns = {   { VTABLE, 2, 0,#if XML_BYTE_ORDER == 12    1#else    0#endif  },  {#include "asciitab.h"#include "latin1tab.h"  },  STANDARD_VTABLE(little2_),  0,  0,  0,  0,  0,  0,  0,  0};#endifstatic const struct normal_encoding little2_encoding = {   { VTABLE, 2, 0,#if XML_BYTE_ORDER == 12    1#else    0#endif  },  {#define BT_COLON BT_NMSTRT#include "asciitab.h"#undef BT_COLON#include "latin1tab.h"  },  STANDARD_VTABLE(little2_)  0, 0, 0, 0, 0, 0, 0, 0, 0};#if XML_BYTE_ORDER != 21#ifdef XML_NSstatic const struct normal_encoding internal_little2_encoding_ns = {   { VTABLE, 2, 0, 1 },  {#include "iasciitab.h"#include "latin1tab.h"  },  STANDARD_VTABLE(little2_)};#endifstatic const struct normal_encoding internal_little2_encoding = {   { VTABLE, 2, 0, 1 },  {#define BT_COLON BT_NMSTRT#include "iasciitab.h"#undef BT_COLON#include "latin1tab.h"  },  STANDARD_VTABLE(little2_)  0, 0, 0, 0, 0, 0, 0, 0, 0};#endif#define BIG2_BYTE_TYPE(enc, p) \ ((p)[0] == 0 \  ? ((struct normal_encoding *)(enc))->type[(unsigned char)(p)[1]] \  : unicode_byte_type((p)[0], (p)[1]))#define BIG2_BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1)#define BIG2_CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c)#define BIG2_IS_NAME_CHAR_MINBPC(enc, p) \  UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])#define BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p) \  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1])#ifdef XML_MIN_SIZEstaticint big2_byteType(const ENCODING *enc, const char *p){  return BIG2_BYTE_TYPE(enc, p);}staticint big2_byteToAscii(const ENCODING *enc, const char *p){  return BIG2_BYTE_TO_ASCII(enc, p);}staticint big2_charMatches(const ENCODING *enc, const char *p, int c){  return BIG2_CHAR_MATCHES(enc, p, c);}staticint big2_isNameMin(const ENCODING *enc, const char *p){  return BIG2_IS_NAME_CHAR_MINBPC(enc, p);}staticint big2_isNmstrtMin(const ENCODING *enc, const char *p){  return BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p);}#undef VTABLE#define VTABLE VTABLE1, big2_toUtf8, big2_toUtf16#else /* not XML_MIN_SIZE */#undef PREFIX#define PREFIX(ident) big2_ ## ident#define MINBPC(enc) 2/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)#define BYTE_TO_ASCII(enc, p) BIG2_BYTE_TO_ASCII(enc, p) #define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(enc, p, c)#define IS_NAME_CHAR(enc, p, n) 0#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(enc, p)#define IS_NMSTRT_CHAR(enc, p, n) (0)#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(enc, p)#include "xmltok_impl.c"#undef MINBPC#undef BYTE_TYPE#undef BYTE_TO_ASCII#undef CHAR_MATCHES#undef IS_NAME_CHAR#undef IS_NAME_CHAR_MINBPC#undef IS_NMSTRT_CHAR#undef IS_NMSTRT_CHAR_MINBPC#undef IS_INVALID_CHAR#endif /* not XML_MIN_SIZE */#ifdef XML_NSstatic const struct normal_encoding big2_encoding_ns = {  { VTABLE, 2, 0,#if XML_BYTE_ORDER == 21  1#else  0#endif  },  {#include "asciitab.h"#include "latin1tab.h"  },  STANDARD_VTABLE(big2_),  0,  0,  0,  0,  0,  0,  0,  0};#endifstatic const struct normal_encoding big2_encoding = {  { VTABLE, 2, 0,#if XML_BYTE_ORDER == 21  1#else  0#endif  },  {#define BT_COLON BT_NMSTRT#include "asciitab.h"#undef BT_COLON#include "latin1tab.h"  },  STANDARD_VTABLE(big2_)  0, 0, 0, 0, 0, 0, 0, 0, 0};#if XML_BYTE_ORDER != 12#ifdef XML_NSstatic const struct normal_encoding internal_big2_encoding_ns = {  { VTABLE, 2, 0, 1 },  {#include "iasciitab.h"#include "latin1tab.h"  },  STANDARD_VTABLE(big2_)};#endifstatic const struct normal_encoding internal_big2_encoding = {  { VTABLE, 2, 0, 1 },  {#define BT_COLON BT_NMSTRT#include "iasciitab.h"#undef BT_COLON#include "latin1tab.h"  },  STANDARD_VTABLE(big2_)  0, 0, 0, 0, 0, 0, 0, 0, 0};#endif#undef PREFIXstaticint streqci(const char *s1, const char *s2){  for (;;) {    char c1 = *s1++;    char c2 = *s2++;    if ('a' <= c1 && c1 <= 'z')      c1 += 'A' - 'a';    if ('a' <= c2 && c2 <= 'z')      c2 += 'A' - 'a';    if (c1 != c2)      return 0;    if (!c1)      break;  }  return 1;}staticvoid initUpdatePosition(const ENCODING *enc, const char *ptr,			const char *end, POSITION *pos){  (void)enc;  normal_updatePosition(&utf8_encoding.enc, ptr, end, pos);}staticint toAscii(const ENCODING *enc, const char *ptr, const char *end){  char buf[1];  char *p = buf;  XmlUtf8Convert(enc, &ptr, end, &p, p + 1);  if (p == buf)    return -1;  else    return buf[0];}staticint isSpace(int c){  switch (c) {  case 0x20:  case 0xD:  case 0xA:  case 0x9:	    return 1;  }  return 0;}/* Return 1 if there's just optional white spaceor there's an S followed by name=val. */staticint parsePseudoAttribute(const ENCODING *enc,			 const char *ptr,			 const char *end,			 const char **namePtr,			 const char **valPtr,			 const char **nextTokPtr){  int c;  char open;  if (ptr == end) {    *namePtr = 0;    return 1;  }  if (!isSpace(toAscii(enc, ptr, end))) {    *nextTokPtr = ptr;    return 0;  }  do {    ptr += enc->minBytesPerChar;  } while (isSpace(toAscii(enc, ptr, end)));  if (ptr == end) {    *namePtr = 0;    return 1;  }  *namePtr = ptr;  for (;;) {    c = toAscii(enc, ptr, end);    if (c == -1) {      *nextTokPtr = ptr;      return 0;    }    if (c == '=')      break;    if (isSpace(c)) {      do {	ptr += enc->minBytesPerChar;      } while (isSpace(c = toAscii(enc, ptr, end)));      if (c != '=') {	*nextTokPtr = ptr;	return 0;      }      break;    }    ptr += enc->minBytesPerChar;  }  if (ptr == *namePtr) {    *nextTokPtr = ptr;    return 0;  }  ptr += enc->minBytesPerChar;  c = toAscii(enc, ptr, end);  while (isSpace(c)) {    ptr += enc->minBytesPerChar;    c = toAscii(enc, ptr, end);  }  if (c != '"' && c != '\'') {    *nextTokPtr = ptr;    return 0;  }  open = c;  ptr += enc->minBytesPerChar;  *valPtr = ptr;  for (;; ptr += enc->minBytesPerChar) {    c = toAscii(enc, ptr, end);    if (c == open)      break;    if (!('a' <= c && c <= 'z')	&& !('A' <= c && c <= 'Z')	&& !('0' <= c && c <= '9')	&& c != '.'	&& c != '-'	&& c != '_') {      *nextTokPtr = ptr;      return 0;    }  }  *nextTokPtr = ptr + enc->minBytesPerChar;  return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -