source: trunk/third/expat/lib/xmltok_ns.c @ 18502

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