parser/expat/lib/xmltok_ns.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

michael@0 1 const ENCODING *
michael@0 2 NS(XmlGetUtf8InternalEncoding)(void)
michael@0 3 {
michael@0 4 return &ns(internal_utf8_encoding).enc;
michael@0 5 }
michael@0 6
michael@0 7 const ENCODING *
michael@0 8 NS(XmlGetUtf16InternalEncoding)(void)
michael@0 9 {
michael@0 10 #if BYTEORDER == 1234
michael@0 11 return &ns(internal_little2_encoding).enc;
michael@0 12 #elif BYTEORDER == 4321
michael@0 13 return &ns(internal_big2_encoding).enc;
michael@0 14 #else
michael@0 15 const short n = 1;
michael@0 16 return (*(const char *)&n
michael@0 17 ? &ns(internal_little2_encoding).enc
michael@0 18 : &ns(internal_big2_encoding).enc);
michael@0 19 #endif
michael@0 20 }
michael@0 21
michael@0 22 static const ENCODING * const NS(encodings)[] = {
michael@0 23 &ns(latin1_encoding).enc,
michael@0 24 &ns(ascii_encoding).enc,
michael@0 25 &ns(utf8_encoding).enc,
michael@0 26 &ns(big2_encoding).enc,
michael@0 27 &ns(big2_encoding).enc,
michael@0 28 &ns(little2_encoding).enc,
michael@0 29 &ns(utf8_encoding).enc /* NO_ENC */
michael@0 30 };
michael@0 31
michael@0 32 static int PTRCALL
michael@0 33 NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
michael@0 34 const char **nextTokPtr)
michael@0 35 {
michael@0 36 return initScan(NS(encodings), (const INIT_ENCODING *)enc,
michael@0 37 XML_PROLOG_STATE, ptr, end, nextTokPtr);
michael@0 38 }
michael@0 39
michael@0 40 static int PTRCALL
michael@0 41 NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
michael@0 42 const char **nextTokPtr)
michael@0 43 {
michael@0 44 return initScan(NS(encodings), (const INIT_ENCODING *)enc,
michael@0 45 XML_CONTENT_STATE, ptr, end, nextTokPtr);
michael@0 46 }
michael@0 47
michael@0 48 int
michael@0 49 NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
michael@0 50 const char *name)
michael@0 51 {
michael@0 52 int i = getEncodingIndex(name);
michael@0 53 if (i == UNKNOWN_ENC)
michael@0 54 return 0;
michael@0 55 SET_INIT_ENC_INDEX(p, i);
michael@0 56 p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
michael@0 57 p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
michael@0 58 p->initEnc.updatePosition = initUpdatePosition;
michael@0 59 p->encPtr = encPtr;
michael@0 60 *encPtr = &(p->initEnc);
michael@0 61 return 1;
michael@0 62 }
michael@0 63
michael@0 64 static const ENCODING *
michael@0 65 NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
michael@0 66 {
michael@0 67 #define ENCODING_MAX 128
michael@0 68 char buf[ENCODING_MAX];
michael@0 69 char *p = buf;
michael@0 70 int i;
michael@0 71 XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
michael@0 72 if (ptr != end)
michael@0 73 return 0;
michael@0 74 *p = 0;
michael@0 75 if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
michael@0 76 return enc;
michael@0 77 i = getEncodingIndex(buf);
michael@0 78 if (i == UNKNOWN_ENC)
michael@0 79 return 0;
michael@0 80 return NS(encodings)[i];
michael@0 81 }
michael@0 82
michael@0 83 int
michael@0 84 NS(XmlParseXmlDecl)(int isGeneralTextEntity,
michael@0 85 const ENCODING *enc,
michael@0 86 const char *ptr,
michael@0 87 const char *end,
michael@0 88 const char **badPtr,
michael@0 89 const char **versionPtr,
michael@0 90 const char **versionEndPtr,
michael@0 91 const char **encodingName,
michael@0 92 const ENCODING **encoding,
michael@0 93 int *standalone)
michael@0 94 {
michael@0 95 return doParseXmlDecl(NS(findEncoding),
michael@0 96 isGeneralTextEntity,
michael@0 97 enc,
michael@0 98 ptr,
michael@0 99 end,
michael@0 100 badPtr,
michael@0 101 versionPtr,
michael@0 102 versionEndPtr,
michael@0 103 encodingName,
michael@0 104 encoding,
michael@0 105 standalone);
michael@0 106 }

mercurial