1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/parser/expat/lib/xmltok_ns.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,106 @@ 1.4 +const ENCODING * 1.5 +NS(XmlGetUtf8InternalEncoding)(void) 1.6 +{ 1.7 + return &ns(internal_utf8_encoding).enc; 1.8 +} 1.9 + 1.10 +const ENCODING * 1.11 +NS(XmlGetUtf16InternalEncoding)(void) 1.12 +{ 1.13 +#if BYTEORDER == 1234 1.14 + return &ns(internal_little2_encoding).enc; 1.15 +#elif BYTEORDER == 4321 1.16 + return &ns(internal_big2_encoding).enc; 1.17 +#else 1.18 + const short n = 1; 1.19 + return (*(const char *)&n 1.20 + ? &ns(internal_little2_encoding).enc 1.21 + : &ns(internal_big2_encoding).enc); 1.22 +#endif 1.23 +} 1.24 + 1.25 +static const ENCODING * const NS(encodings)[] = { 1.26 + &ns(latin1_encoding).enc, 1.27 + &ns(ascii_encoding).enc, 1.28 + &ns(utf8_encoding).enc, 1.29 + &ns(big2_encoding).enc, 1.30 + &ns(big2_encoding).enc, 1.31 + &ns(little2_encoding).enc, 1.32 + &ns(utf8_encoding).enc /* NO_ENC */ 1.33 +}; 1.34 + 1.35 +static int PTRCALL 1.36 +NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, 1.37 + const char **nextTokPtr) 1.38 +{ 1.39 + return initScan(NS(encodings), (const INIT_ENCODING *)enc, 1.40 + XML_PROLOG_STATE, ptr, end, nextTokPtr); 1.41 +} 1.42 + 1.43 +static int PTRCALL 1.44 +NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, 1.45 + const char **nextTokPtr) 1.46 +{ 1.47 + return initScan(NS(encodings), (const INIT_ENCODING *)enc, 1.48 + XML_CONTENT_STATE, ptr, end, nextTokPtr); 1.49 +} 1.50 + 1.51 +int 1.52 +NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, 1.53 + const char *name) 1.54 +{ 1.55 + int i = getEncodingIndex(name); 1.56 + if (i == UNKNOWN_ENC) 1.57 + return 0; 1.58 + SET_INIT_ENC_INDEX(p, i); 1.59 + p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); 1.60 + p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); 1.61 + p->initEnc.updatePosition = initUpdatePosition; 1.62 + p->encPtr = encPtr; 1.63 + *encPtr = &(p->initEnc); 1.64 + return 1; 1.65 +} 1.66 + 1.67 +static const ENCODING * 1.68 +NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) 1.69 +{ 1.70 +#define ENCODING_MAX 128 1.71 + char buf[ENCODING_MAX]; 1.72 + char *p = buf; 1.73 + int i; 1.74 + XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); 1.75 + if (ptr != end) 1.76 + return 0; 1.77 + *p = 0; 1.78 + if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) 1.79 + return enc; 1.80 + i = getEncodingIndex(buf); 1.81 + if (i == UNKNOWN_ENC) 1.82 + return 0; 1.83 + return NS(encodings)[i]; 1.84 +} 1.85 + 1.86 +int 1.87 +NS(XmlParseXmlDecl)(int isGeneralTextEntity, 1.88 + const ENCODING *enc, 1.89 + const char *ptr, 1.90 + const char *end, 1.91 + const char **badPtr, 1.92 + const char **versionPtr, 1.93 + const char **versionEndPtr, 1.94 + const char **encodingName, 1.95 + const ENCODING **encoding, 1.96 + int *standalone) 1.97 +{ 1.98 + return doParseXmlDecl(NS(findEncoding), 1.99 + isGeneralTextEntity, 1.100 + enc, 1.101 + ptr, 1.102 + end, 1.103 + badPtr, 1.104 + versionPtr, 1.105 + versionEndPtr, 1.106 + encodingName, 1.107 + encoding, 1.108 + standalone); 1.109 +}