2002-12-24 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
[mono.git] / mcs / class / System.XML / System.Xml / XmlChar.cs
1 // -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-\r
2 //\r
3 // System.Xml.XmlChar.cs\r
4 //\r
5 // Author:\r
6 //   Jason Diamond (jason@injektilo.org)\r
7 //\r
8 // (C) 2001 Jason Diamond  http://injektilo.org/\r
9 //\r
10 \r
11 namespace System.Xml\r
12 {\r
13         internal class XmlChar\r
14         {\r
15                 internal static bool IsWhitespace(int ch)\r
16                 {\r
17                         return ch == 0x20 || ch == 0x9 || ch == 0xD || ch == 0xA;\r
18                 }\r
19 \r
20                 internal static bool IsFirstNameChar(int ch)\r
21                 {\r
22                         bool result = false;\r
23 \r
24                         if (ch >= 0 && ch <= 0xFFFF)\r
25                         {\r
26                                 result = (nameBitmap[(firstNamePages[ch >> 8] << 3) + ((ch & 0xFF) >> 5)] & (1 << (ch & 0x1F))) != 0;\r
27                         }\r
28 \r
29                         return result;\r
30                 }\r
31 \r
32                 internal static bool IsNameChar(int ch)\r
33                 {\r
34                         bool result = false;\r
35 \r
36                         if (ch >= 0 && ch <= 0xFFFF)\r
37                         {\r
38                                 result = (nameBitmap[(namePages[ch >> 8] << 3) + ((ch & 0xFF) >> 5)] & (1 << (ch & 0x1F))) != 0;\r
39                         }\r
40 \r
41                         return result;\r
42                 }\r
43 \r
44                 internal static bool IsPubidChar(int ch)\r
45                 {\r
46                         return IsWhitespace(ch) | ('a' <= ch && ch <= 'z') | ('A' <= ch && ch <= 'Z') | ('0' <= ch && ch <= '9') | "-'()+,./:=?;!*#@$_%".IndexOf((char)ch) >= 0;\r
47                 }\r
48 \r
49                 private static byte[] firstNamePages =\r
50                 {\r
51                         0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x00,\r
52                         0x00, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,\r
53                         0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
54                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,\r
55                         0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
56                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
57                         0x15, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
58                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
59                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
60                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,\r
61                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
62                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
63                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
64                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
65                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
66                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
67                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
68                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
69                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
70                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,\r
71                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
72                         0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,\r
73                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
74                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
75                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
76                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
77                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,\r
78                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
79                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
80                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
81                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
82                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
83                 };\r
84 \r
85                 private static byte[] namePages =\r
86                 {\r
87                         0x19, 0x03, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x00,\r
88                         0x00, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,\r
89                         0x10, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
90                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13,\r
91                         0x26, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
92                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
93                         0x27, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
94                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
95                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
96                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,\r
97                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
98                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
99                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
100                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
101                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
102                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
103                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
104                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
105                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
106                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x17,\r
107                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
108                         0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,\r
109                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
110                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
111                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
112                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\r
113                         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18,\r
114                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
115                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
116                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
117                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\r
118                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
119                 };\r
120 \r
121                 private static uint[] nameBitmap =\r
122                 {\r
123                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
124                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
125                         0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\r
126                         0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\r
127                         0x00000000, 0x04000000, 0x87FFFFFE, 0x07FFFFFE,\r
128                         0x00000000, 0x00000000, 0xFF7FFFFF, 0xFF7FFFFF,\r
129                         0xFFFFFFFF, 0x7FF3FFFF, 0xFFFFFDFE, 0x7FFFFFFF,\r
130                         0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFE00F, 0xFC31FFFF,\r
131                         0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,\r
132                         0xFFFFFFFF, 0xF80001FF, 0x00000003, 0x00000000,\r
133                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
134                         0xFFFFD740, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,\r
135                         0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,\r
136                         0xFFFF0003, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,\r
137                         0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,\r
138                         0x0000007F, 0x00000000, 0xFFFF0000, 0x000707FF,\r
139                         0x00000000, 0x07FFFFFE, 0x000007FE, 0xFFFE0000,\r
140                         0xFFFFFFFF, 0x7CFFFFFF, 0x002F7FFF, 0x00000060,\r
141                         0xFFFFFFE0, 0x23FFFFFF, 0xFF000000, 0x00000003,\r
142                         0xFFF99FE0, 0x03C5FDFF, 0xB0000000, 0x00030003,\r
143                         0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000,\r
144                         0xFFFBAFE0, 0x23EDFDFF, 0x00000000, 0x00000001,\r
145                         0xFFF99FE0, 0x23CDFDFF, 0xB0000000, 0x00000003,\r
146                         0xD63DC7E0, 0x03BFC718, 0x00000000, 0x00000000,\r
147                         0xFFFDDFE0, 0x03EFFDFF, 0x00000000, 0x00000003,\r
148                         0xFFFDDFE0, 0x03EFFDFF, 0x40000000, 0x00000003,\r
149                         0xFFFDDFE0, 0x03FFFDFF, 0x00000000, 0x00000003,\r
150                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
151                         0xFFFFFFFE, 0x000D7FFF, 0x0000003F, 0x00000000,\r
152                         0xFEF02596, 0x200D6CAE, 0x0000001F, 0x00000000,\r
153                         0x00000000, 0x00000000, 0xFFFFFEFF, 0x000003FF,\r
154                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
155                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
156                         0x00000000, 0xFFFFFFFF, 0xFFFF003F, 0x007FFFFF,\r
157                         0x0007DAED, 0x50000000, 0x82315001, 0x002C62AB,\r
158                         0x40000000, 0xF580C900, 0x00000007, 0x02010800,\r
159                         0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\r
160                         0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF,\r
161                         0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF,\r
162                         0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF,\r
163                         0x00000000, 0x00004C40, 0x00000000, 0x00000000,\r
164                         0x00000007, 0x00000000, 0x00000000, 0x00000000,\r
165                         0x00000080, 0x000003FE, 0xFFFFFFFE, 0xFFFFFFFF,\r
166                         0x001FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x07FFFFFF,\r
167                         0xFFFFFFE0, 0x00001FFF, 0x00000000, 0x00000000,\r
168                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
169                         0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\r
170                         0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000,\r
171                         0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,\r
172                         0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000,\r
173                         0x00000000, 0x07FF6000, 0x87FFFFFE, 0x07FFFFFE,\r
174                         0x00000000, 0x00800000, 0xFF7FFFFF, 0xFF7FFFFF,\r
175                         0x00FFFFFF, 0x00000000, 0xFFFF0000, 0xFFFFFFFF,\r
176                         0xFFFFFFFF, 0xF80001FF, 0x00030003, 0x00000000,\r
177                         0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000003,\r
178                         0xFFFFD7C0, 0xFFFFFFFB, 0x547F7FFF, 0x000FFFFD,\r
179                         0xFFFFDFFE, 0xFFFFFFFF, 0xDFFEFFFF, 0xFFFFFFFF,\r
180                         0xFFFF007B, 0xFFFFFFFF, 0xFFFF199F, 0x033FCFFF,\r
181                         0x00000000, 0xFFFE0000, 0x027FFFFF, 0xFFFFFFFE,\r
182                         0xFFFE007F, 0xBBFFFFFB, 0xFFFF0016, 0x000707FF,\r
183                         0x00000000, 0x07FFFFFE, 0x0007FFFF, 0xFFFF03FF,\r
184                         0xFFFFFFFF, 0x7CFFFFFF, 0xFFEF7FFF, 0x03FF3DFF,\r
185                         0xFFFFFFEE, 0xF3FFFFFF, 0xFF1E3FFF, 0x0000FFCF,\r
186                         0xFFF99FEE, 0xD3C5FDFF, 0xB080399F, 0x0003FFCF,\r
187                         0xFFF987E4, 0xD36DFDFF, 0x5E003987, 0x001FFFC0,\r
188                         0xFFFBAFEE, 0xF3EDFDFF, 0x00003BBF, 0x0000FFC1,\r
189                         0xFFF99FEE, 0xF3CDFDFF, 0xB0C0398F, 0x0000FFC3,\r
190                         0xD63DC7EC, 0xC3BFC718, 0x00803DC7, 0x0000FF80,\r
191                         0xFFFDDFEE, 0xC3EFFDFF, 0x00603DDF, 0x0000FFC3,\r
192                         0xFFFDDFEC, 0xC3EFFDFF, 0x40603DDF, 0x0000FFC3,\r
193                         0xFFFDDFEC, 0xC3FFFDFF, 0x00803DCF, 0x0000FFC3,\r
194                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
195                         0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FFF, 0x00000000,\r
196                         0xFEF02596, 0x3BFF6CAE, 0x03FF3F5F, 0x00000000,\r
197                         0x03000000, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE03FF,\r
198                         0xFEBF0FDF, 0x02FE3FFF, 0x00000000, 0x00000000,\r
199                         0x00000000, 0x00000000, 0x00000000, 0x00000000,\r
200                         0x00000000, 0x00000000, 0x1FFF0000, 0x00000002,\r
201                         0x000000A0, 0x003EFFFE, 0xFFFFFFFE, 0xFFFFFFFF,\r
202                         0x661FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x77FFFFFF\r
203                 };\r
204         }\r
205 }\r