| const ENCODING * | 
 | NS(XmlGetUtf8InternalEncoding)(void) | 
 | { | 
 |   return &ns(internal_utf8_encoding).enc; | 
 | } | 
 |  | 
 | const ENCODING * | 
 | NS(XmlGetUtf16InternalEncoding)(void) | 
 | { | 
 | #if BYTEORDER == 1234 | 
 |   return &ns(internal_little2_encoding).enc; | 
 | #elif BYTEORDER == 4321 | 
 |   return &ns(internal_big2_encoding).enc; | 
 | #else | 
 |   const short n = 1; | 
 |   return (*(const char *)&n | 
 |           ? &ns(internal_little2_encoding).enc | 
 |           : &ns(internal_big2_encoding).enc); | 
 | #endif | 
 | } | 
 |  | 
 | static const ENCODING * const NS(encodings)[] = { | 
 |   &ns(latin1_encoding).enc, | 
 |   &ns(ascii_encoding).enc, | 
 |   &ns(utf8_encoding).enc, | 
 |   &ns(big2_encoding).enc, | 
 |   &ns(big2_encoding).enc, | 
 |   &ns(little2_encoding).enc, | 
 |   &ns(utf8_encoding).enc /* NO_ENC */ | 
 | }; | 
 |  | 
 | static int PTRCALL | 
 | NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, | 
 |                    const char **nextTokPtr) | 
 | { | 
 |   return initScan(NS(encodings), (const INIT_ENCODING *)enc, | 
 |                   XML_PROLOG_STATE, ptr, end, nextTokPtr); | 
 | } | 
 |  | 
 | static int PTRCALL | 
 | NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, | 
 |                     const char **nextTokPtr) | 
 | { | 
 |   return initScan(NS(encodings), (const INIT_ENCODING *)enc, | 
 |                   XML_CONTENT_STATE, ptr, end, nextTokPtr); | 
 | } | 
 |  | 
 | int | 
 | NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, | 
 |                     const char *name) | 
 | { | 
 |   int i = getEncodingIndex(name); | 
 |   if (i == UNKNOWN_ENC) | 
 |     return 0; | 
 |   SET_INIT_ENC_INDEX(p, i); | 
 |   p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); | 
 |   p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); | 
 |   p->initEnc.updatePosition = initUpdatePosition; | 
 |   p->encPtr = encPtr; | 
 |   *encPtr = &(p->initEnc); | 
 |   return 1; | 
 | } | 
 |  | 
 | static const ENCODING * | 
 | NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) | 
 | { | 
 | #define ENCODING_MAX 128 | 
 |   char buf[ENCODING_MAX]; | 
 |   char *p = buf; | 
 |   int i; | 
 |   XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); | 
 |   if (ptr != end) | 
 |     return 0; | 
 |   *p = 0; | 
 |   if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) | 
 |     return enc; | 
 |   i = getEncodingIndex(buf); | 
 |   if (i == UNKNOWN_ENC) | 
 |     return 0; | 
 |   return NS(encodings)[i]; | 
 | } | 
 |  | 
 | int | 
 | NS(XmlParseXmlDecl)(int isGeneralTextEntity, | 
 |                     const ENCODING *enc, | 
 |                     const char *ptr, | 
 |                     const char *end, | 
 |                     const char **badPtr, | 
 |                     const char **versionPtr, | 
 |                     const char **versionEndPtr, | 
 |                     const char **encodingName, | 
 |                     const ENCODING **encoding, | 
 |                     int *standalone) | 
 | { | 
 |   return doParseXmlDecl(NS(findEncoding), | 
 |                         isGeneralTextEntity, | 
 |                         enc, | 
 |                         ptr, | 
 |                         end, | 
 |                         badPtr, | 
 |                         versionPtr, | 
 |                         versionEndPtr, | 
 |                         encodingName, | 
 |                         encoding, | 
 |                         standalone); | 
 | } |