1 // -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
\r
3 // System.Xml.XmlChar.cs
\r
6 // Jason Diamond (jason@injektilo.org)
\r
8 // (C) 2001 Jason Diamond http://injektilo.org/
\r
11 namespace System.Xml
\r
13 internal class XmlChar
\r
15 internal static bool IsWhitespace(int ch)
\r
17 return ch == 0x20 || ch == 0x9 || ch == 0xD || ch == 0xA;
\r
20 internal static bool IsFirstNameChar(int ch)
\r
22 bool result = false;
\r
24 if (ch >= 0 && ch <= 0xFFFF)
\r
26 result = (nameBitmap[(firstNamePages[ch >> 8] << 3) + ((ch & 0xFF) >> 5)] & (1 << (ch & 0x1F))) != 0;
\r
32 internal static bool IsNameChar(int ch)
\r
34 bool result = false;
\r
36 if (ch >= 0 && ch <= 0xFFFF)
\r
38 result = (nameBitmap[(namePages[ch >> 8] << 3) + ((ch & 0xFF) >> 5)] & (1 << (ch & 0x1F))) != 0;
\r
44 internal static bool IsPubidChar(int ch)
\r
46 return IsWhitespace(ch) | ('a' <= ch && ch <= 'z') | ('A' <= ch && ch <= 'Z') | ('0' <= ch && ch <= '9') | "-'()+,./:=?;!*#@$_%".IndexOf((char)ch) >= 0;
\r
49 private static byte[] firstNamePages =
\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
85 private static byte[] namePages =
\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
121 private static uint[] nameBitmap =
\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