xmltok_ns.c revision 178848
1178848Scokane/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
2178848Scokane   See the file COPYING for copying permission.
3178848Scokane*/
4178848Scokane
5178848Scokane/* This file is included! */
6178848Scokane#ifdef XML_TOK_NS_C
7178848Scokane
8104349Sphkconst ENCODING *
9104349SphkNS(XmlGetUtf8InternalEncoding)(void)
10104349Sphk{
11104349Sphk  return &ns(internal_utf8_encoding).enc;
12104349Sphk}
13104349Sphk
14104349Sphkconst ENCODING *
15104349SphkNS(XmlGetUtf16InternalEncoding)(void)
16104349Sphk{
17104349Sphk#if BYTEORDER == 1234
18104349Sphk  return &ns(internal_little2_encoding).enc;
19104349Sphk#elif BYTEORDER == 4321
20104349Sphk  return &ns(internal_big2_encoding).enc;
21104349Sphk#else
22104349Sphk  const short n = 1;
23104349Sphk  return (*(const char *)&n
24104349Sphk          ? &ns(internal_little2_encoding).enc
25104349Sphk          : &ns(internal_big2_encoding).enc);
26104349Sphk#endif
27104349Sphk}
28104349Sphk
29178848Scokanestatic const ENCODING * const NS(encodings)[] = {
30104349Sphk  &ns(latin1_encoding).enc,
31104349Sphk  &ns(ascii_encoding).enc,
32104349Sphk  &ns(utf8_encoding).enc,
33104349Sphk  &ns(big2_encoding).enc,
34104349Sphk  &ns(big2_encoding).enc,
35104349Sphk  &ns(little2_encoding).enc,
36104349Sphk  &ns(utf8_encoding).enc /* NO_ENC */
37104349Sphk};
38104349Sphk
39178848Scokanestatic int PTRCALL
40104349SphkNS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
41104349Sphk                   const char **nextTokPtr)
42104349Sphk{
43104349Sphk  return initScan(NS(encodings), (const INIT_ENCODING *)enc,
44104349Sphk                  XML_PROLOG_STATE, ptr, end, nextTokPtr);
45104349Sphk}
46104349Sphk
47178848Scokanestatic int PTRCALL
48104349SphkNS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
49104349Sphk                    const char **nextTokPtr)
50104349Sphk{
51104349Sphk  return initScan(NS(encodings), (const INIT_ENCODING *)enc,
52104349Sphk                  XML_CONTENT_STATE, ptr, end, nextTokPtr);
53104349Sphk}
54104349Sphk
55104349Sphkint
56104349SphkNS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
57104349Sphk                    const char *name)
58104349Sphk{
59104349Sphk  int i = getEncodingIndex(name);
60104349Sphk  if (i == UNKNOWN_ENC)
61104349Sphk    return 0;
62104349Sphk  SET_INIT_ENC_INDEX(p, i);
63104349Sphk  p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
64104349Sphk  p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
65104349Sphk  p->initEnc.updatePosition = initUpdatePosition;
66104349Sphk  p->encPtr = encPtr;
67104349Sphk  *encPtr = &(p->initEnc);
68104349Sphk  return 1;
69104349Sphk}
70104349Sphk
71104349Sphkstatic const ENCODING *
72104349SphkNS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
73104349Sphk{
74104349Sphk#define ENCODING_MAX 128
75104349Sphk  char buf[ENCODING_MAX];
76104349Sphk  char *p = buf;
77104349Sphk  int i;
78104349Sphk  XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
79104349Sphk  if (ptr != end)
80104349Sphk    return 0;
81104349Sphk  *p = 0;
82104349Sphk  if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
83104349Sphk    return enc;
84104349Sphk  i = getEncodingIndex(buf);
85104349Sphk  if (i == UNKNOWN_ENC)
86104349Sphk    return 0;
87104349Sphk  return NS(encodings)[i];
88104349Sphk}
89104349Sphk
90104349Sphkint
91104349SphkNS(XmlParseXmlDecl)(int isGeneralTextEntity,
92104349Sphk                    const ENCODING *enc,
93104349Sphk                    const char *ptr,
94104349Sphk                    const char *end,
95104349Sphk                    const char **badPtr,
96104349Sphk                    const char **versionPtr,
97104349Sphk                    const char **versionEndPtr,
98104349Sphk                    const char **encodingName,
99104349Sphk                    const ENCODING **encoding,
100104349Sphk                    int *standalone)
101104349Sphk{
102104349Sphk  return doParseXmlDecl(NS(findEncoding),
103104349Sphk                        isGeneralTextEntity,
104104349Sphk                        enc,
105104349Sphk                        ptr,
106104349Sphk                        end,
107104349Sphk                        badPtr,
108104349Sphk                        versionPtr,
109104349Sphk                        versionEndPtr,
110104349Sphk                        encodingName,
111104349Sphk                        encoding,
112104349Sphk                        standalone);
113104349Sphk}
114178848Scokane
115178848Scokane#endif /* XML_TOK_NS_C */
116