parser/expat/lib/xmltok_ns.c

changeset 0
6474c204b198
     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 +}

mercurial