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