1
16
17 import org.as2lib.core.BasicClass;
18
19
25
26 class org.as2lib.regexp.AsciiUtil extends BasicClass {
27
28 public static var UPPER:Number = 0x00000100;
29
30 public static var LOWER:Number = 0x00000200;
31
32 public static var DIGIT:Number = 0x00000400;
33
34 public static var SPACE:Number = 0x00000800;
35
36 public static var PUNCT:Number = 0x00001000;
37
38 public static var CNTRL:Number = 0x00002000;
39
40 public static var BLANK:Number = 0x00004000;
41
42 public static var HEX:Number = 0x00008000;
43
44 public static var UNDER:Number = 0x00010000;
45
46 public static var ASCII:Number = 0x0000FF00;
47
48 public static var ALPHA:Number = (UPPER|LOWER);
49
50 public static var ALNUM:Number = (UPPER|LOWER|DIGIT);
51
52 public static var GRAPH:Number = (PUNCT|UPPER|LOWER|DIGIT);
53
54 public static var WORD:Number = (UPPER|LOWER|UNDER|DIGIT);
55
56 public static var XDIGIT:Number = HEX;
57
58 private static var charTypes:Array = [
59 CNTRL,
60 CNTRL,
61 CNTRL,
62 CNTRL,
63 CNTRL,
64 CNTRL,
65 CNTRL,
66 CNTRL,
67 CNTRL,
68 SPACE+CNTRL+BLANK,
69 SPACE+CNTRL,
70 SPACE+CNTRL,
71 SPACE+CNTRL,
72 SPACE+CNTRL,
73 CNTRL,
74 CNTRL,
75 CNTRL,
76 CNTRL,
77 CNTRL,
78 CNTRL,
79 CNTRL,
80 CNTRL,
81 CNTRL,
82 CNTRL,
83 CNTRL,
84 CNTRL,
85 CNTRL,
86 CNTRL,
87 CNTRL,
88 CNTRL,
89 CNTRL,
90 CNTRL,
91 SPACE+BLANK,
92 PUNCT,
93 PUNCT,
94 PUNCT,
95 PUNCT,
96 PUNCT,
97 PUNCT,
98 PUNCT,
99 PUNCT,
100 PUNCT,
101 PUNCT,
102 PUNCT,
103 PUNCT,
104 PUNCT,
105 PUNCT,
106 PUNCT,
107 DIGIT+HEX+0,
108 DIGIT+HEX+1,
109 DIGIT+HEX+2,
110 DIGIT+HEX+3,
111 DIGIT+HEX+4,
112 DIGIT+HEX+5,
113 DIGIT+HEX+6,
114 DIGIT+HEX+7,
115 DIGIT+HEX+8,
116 DIGIT+HEX+9,
117 PUNCT,
118 PUNCT,
119 PUNCT,
120 PUNCT,
121 PUNCT,
122 PUNCT,
123 PUNCT,
124 UPPER+HEX+10,
125 UPPER+HEX+11,
126 UPPER+HEX+12,
127 UPPER+HEX+13,
128 UPPER+HEX+14,
129 UPPER+HEX+15,
130 UPPER+16,
131 UPPER+17,
132 UPPER+18,
133 UPPER+19,
134 UPPER+20,
135 UPPER+21,
136 UPPER+22,
137 UPPER+23,
138 UPPER+24,
139 UPPER+25,
140 UPPER+26,
141 UPPER+27,
142 UPPER+28,
143 UPPER+29,
144 UPPER+30,
145 UPPER+31,
146 UPPER+32,
147 UPPER+33,
148 UPPER+34,
149 UPPER+35,
150 PUNCT,
151 PUNCT,
152 PUNCT,
153 PUNCT,
154 PUNCT|UNDER,
155 PUNCT,
156 LOWER+HEX+10,
157 LOWER+HEX+11,
158 LOWER+HEX+12,
159 LOWER+HEX+13,
160 LOWER+HEX+14,
161 LOWER+HEX+15,
162 LOWER+16,
163 LOWER+17,
164 LOWER+18,
165 LOWER+19,
166 LOWER+20,
167 LOWER+21,
168 LOWER+22,
169 LOWER+23,
170 LOWER+24,
171 LOWER+25,
172 LOWER+26,
173 LOWER+27,
174 LOWER+28,
175 LOWER+29,
176 LOWER+30,
177 LOWER+31,
178 LOWER+32,
179 LOWER+33,
180 LOWER+34,
181 LOWER+35,
182 PUNCT,
183 PUNCT,
184 PUNCT,
185 PUNCT,
186 CNTRL
187 ];
188
189 private function AsciiUtil(Void) {
190 super();
191 }
192
193 public static function getType(ch:Number):Number {
194 return ((ch & 0xFFFFFF80) == 0 ? charTypes[ch] : 0);
195 }
196
197 public static function isType(ch:Number, type:Number):Boolean {
198 return (getType(ch) & type) != 0;
199 }
200
201 public static function isAscii(ch:Number):Boolean {
202 return ((ch & 0xFFFFFF80) == 0);
203 }
204
205 public static function isAlpha(ch:Number):Boolean {
206 return isType(ch, ALPHA);
207 }
208
209 public static function isDigit(ch:Number):Boolean {
210 return ((ch - 0x30) | (0x39 - ch)) >= 0;
211 }
212
213 public static function isAlnum(ch:Number):Boolean {
214 return isType(ch, ALNUM);
215 }
216
217 public static function isGraph(ch:Number):Boolean {
218 return isType(ch, GRAPH);
219 }
220
221 public static function isPrint(ch:Number):Boolean {
222 return ((ch - 0x20) | (0x7E - ch)) >= 0;
223 }
224
225 public static function isPunct(ch:Number):Boolean {
226 return isType(ch, PUNCT);
227 }
228
229 public static function isSpace(ch:Number):Boolean {
230 return isType(ch, SPACE);
231 }
232
233 public static function isHexDigit(ch:Number):Boolean {
234 return isType(ch, HEX);
235 }
236
237 public static function isOctDigit(ch:Number):Boolean {
238 return ((ch - 0x30) | (0x37 - ch)) >= 0;
239 }
240
241 public static function isCntrl(ch:Number):Boolean {
242 return isType(ch, CNTRL);
243 }
244
245 public static function isLower(ch:Number):Boolean {
246 return ((ch - 0x61) | (0x7A - ch)) >= 0;
247 }
248
249 public static function isUpper(ch:Number):Boolean {
250 return ((ch - 0x41) | (0x5A - ch)) >= 0;
251 }
252
253 public static function isWord(ch:Number):Boolean {
254 return isType(ch, WORD);
255 }
256
257 public static function toDigit(ch:Number):Number {
258 return (charTypes[ch & 0x7F] & 0x3F);
259 }
260
261 public static function toLower(ch:Number):Number {
262 return isUpper(ch) ? (ch + 0x20) : ch;
263 }
264
265 public static function toUpper(ch:Number):Number {
266 return isLower(ch) ? (ch - 0x20) : ch;
267 }
268
269 }