1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
package com.stevesoft.pat; |
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
|
14 |
|
@see |
15 |
|
|
|
|
| 46.9% |
Uncovered Elements: 156 (294) |
Complexity: 86 |
Complexity Density: 0.45 |
|
16 |
|
class parsePerl |
17 |
|
{ |
|
|
| 52.9% |
Uncovered Elements: 8 (17) |
Complexity: 5 |
Complexity Density: 0.56 |
|
18 |
68 |
final static char close(char c)... |
19 |
|
{ |
20 |
|
|
21 |
|
|
22 |
|
|
23 |
|
|
24 |
|
|
25 |
|
|
26 |
|
|
27 |
68 |
if (c == '<') |
28 |
|
{ |
29 |
0 |
return '>'; |
30 |
|
} |
31 |
68 |
if (c == '[') |
32 |
|
{ |
33 |
0 |
return ']'; |
34 |
|
} |
35 |
68 |
if (c == '(') |
36 |
|
{ |
37 |
0 |
return ')'; |
38 |
|
} |
39 |
68 |
if (c == '{') |
40 |
|
{ |
41 |
0 |
return '}'; |
42 |
|
} |
43 |
68 |
return c; |
44 |
|
} |
45 |
|
|
|
|
| 100% |
Uncovered Elements: 0 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
46 |
1508 |
final public static String codify(String s, boolean keepbs)... |
47 |
|
{ |
48 |
1508 |
return codify(s, 0, s.length(), keepbs); |
49 |
|
} |
50 |
|
|
|
|
| 55.7% |
Uncovered Elements: 35 (79) |
Complexity: 20 |
Complexity Density: 0.36 |
|
51 |
1508 |
final public static String codify(String s, int i0, int iN, boolean keepbs)... |
52 |
|
{ |
53 |
1508 |
StringBuffer sb = new StringBuffer(); |
54 |
1508 |
boolean ucmode = false, lcmode = false, litmode = false; |
55 |
1508 |
boolean uc1 = false, lc1 = false; |
56 |
1508 |
boolean modified = false; |
57 |
21601 |
for (int i = i0; i < iN; i++) |
58 |
|
{ |
59 |
20093 |
char c = s.charAt(i); |
60 |
20093 |
boolean mf = true, app = true; |
61 |
20093 |
if (c == '\\') |
62 |
|
{ |
63 |
2342 |
app = false; |
64 |
2342 |
i++; |
65 |
2342 |
if (i < s.length()) |
66 |
|
{ |
67 |
2342 |
char c2 = s.charAt(i); |
68 |
2342 |
switch (c2) |
69 |
|
{ |
70 |
0 |
case 'Q': |
71 |
0 |
litmode = true; |
72 |
0 |
break; |
73 |
0 |
case 'U': |
74 |
0 |
ucmode = true; |
75 |
0 |
break; |
76 |
0 |
case 'L': |
77 |
0 |
lcmode = true; |
78 |
0 |
break; |
79 |
0 |
case 'u': |
80 |
0 |
uc1 = true; |
81 |
0 |
break; |
82 |
0 |
case 'l': |
83 |
0 |
lc1 = true; |
84 |
0 |
break; |
85 |
0 |
case 'E': |
86 |
0 |
uc1 = lc1 = ucmode = lcmode = litmode = false; |
87 |
0 |
break; |
88 |
2342 |
default: |
89 |
2342 |
if (keepbs) |
90 |
|
{ |
91 |
2342 |
sb.append('\\'); |
92 |
|
} |
93 |
2342 |
c = c2; |
94 |
2342 |
if (keepbs) |
95 |
|
{ |
96 |
2342 |
mf = false; |
97 |
|
} |
98 |
2342 |
app = true; |
99 |
2342 |
break; |
100 |
|
} |
101 |
2342 |
modified |= mf; |
102 |
|
} |
103 |
|
} |
104 |
20093 |
if (app) |
105 |
|
{ |
106 |
20093 |
if (lc1) |
107 |
|
{ |
108 |
0 |
c = lc(c); |
109 |
0 |
lc1 = false; |
110 |
|
} |
111 |
20093 |
else if (uc1) |
112 |
|
{ |
113 |
0 |
c = uc(c); |
114 |
0 |
uc1 = false; |
115 |
|
} |
116 |
20093 |
else if (ucmode) |
117 |
|
{ |
118 |
0 |
c = uc(c); |
119 |
|
} |
120 |
20093 |
else if (lcmode) |
121 |
|
{ |
122 |
0 |
c = lc(c); |
123 |
|
} |
124 |
20093 |
if (litmode && needbs(c)) |
125 |
|
{ |
126 |
0 |
sb.append('\\'); |
127 |
|
} |
128 |
20093 |
sb.append(c); |
129 |
|
} |
130 |
|
} |
131 |
1508 |
return modified ? sb.toString() : s; |
132 |
|
} |
133 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
134 |
0 |
final static char uc(char c)... |
135 |
|
{ |
136 |
0 |
return CaseMgr.toUpperCase(c); |
137 |
|
} |
138 |
|
|
|
|
| 0% |
Uncovered Elements: 1 (1) |
Complexity: 1 |
Complexity Density: 1 |
|
139 |
0 |
final static char lc(char c)... |
140 |
|
{ |
141 |
0 |
return CaseMgr.toLowerCase(c); |
142 |
|
} |
143 |
|
|
|
|
| 0% |
Uncovered Elements: 17 (17) |
Complexity: 8 |
Complexity Density: 0.89 |
|
144 |
0 |
final static boolean needbs(char c)... |
145 |
|
{ |
146 |
0 |
if (c >= 'a' && c <= 'z') |
147 |
|
{ |
148 |
0 |
return false; |
149 |
|
} |
150 |
0 |
if (c >= 'A' && c <= 'Z') |
151 |
|
{ |
152 |
0 |
return false; |
153 |
|
} |
154 |
0 |
if (c >= '0' && c <= '9') |
155 |
|
{ |
156 |
0 |
return false; |
157 |
|
} |
158 |
0 |
if (c == '_') |
159 |
|
{ |
160 |
0 |
return false; |
161 |
|
} |
162 |
0 |
return true; |
163 |
|
} |
164 |
|
|
|
|
| 56.3% |
Uncovered Elements: 62 (142) |
Complexity: 43 |
Complexity Density: 0.43 |
|
165 |
80 |
final static Regex parse(String s)... |
166 |
|
{ |
167 |
80 |
boolean igncase = false, optim = false, gFlag = false; |
168 |
80 |
boolean sFlag = false, mFlag = false, xFlag = false; |
169 |
|
|
170 |
80 |
StringBuffer s1 = new StringBuffer(); |
171 |
80 |
StringBuffer s2 = new StringBuffer(); |
172 |
80 |
int i = 0, count = 0; |
173 |
80 |
char mode, delim = '/', cdelim = '/'; |
174 |
80 |
if (s.length() >= 3 && s.charAt(0) == 's') |
175 |
|
{ |
176 |
48 |
mode = 's'; |
177 |
48 |
delim = s.charAt(1); |
178 |
48 |
cdelim = close(delim); |
179 |
48 |
i = 2; |
180 |
|
} |
181 |
32 |
else if (s.length() >= 2 && s.charAt(0) == 'm') |
182 |
|
{ |
183 |
20 |
mode = 'm'; |
184 |
20 |
delim = s.charAt(1); |
185 |
20 |
cdelim = close(delim); |
186 |
20 |
i = 2; |
187 |
|
} |
188 |
12 |
else if (s.length() >= 1 && s.charAt(0) == '/') |
189 |
|
{ |
190 |
12 |
mode = 'm'; |
191 |
12 |
i = 1; |
192 |
|
} |
193 |
|
else |
194 |
|
{ |
195 |
0 |
try |
196 |
|
{ |
197 |
0 |
RegSyntaxError.endItAll("Regex.perlCode should be of the " |
198 |
|
+ "form s/// or m// or //"); |
199 |
|
} catch (RegSyntax rs) |
200 |
|
{ |
201 |
|
} |
202 |
0 |
return null; |
203 |
|
} |
204 |
708 |
for (; i < s.length(); i++) |
205 |
|
{ |
206 |
708 |
if (s.charAt(i) == '\\') |
207 |
|
{ |
208 |
62 |
s1.append('\\'); |
209 |
62 |
i++; |
210 |
|
} |
211 |
646 |
else if (s.charAt(i) == cdelim && count == 0) |
212 |
|
{ |
213 |
80 |
i++; |
214 |
80 |
break; |
215 |
|
} |
216 |
566 |
else if (s.charAt(i) == delim && cdelim != delim) |
217 |
|
{ |
218 |
0 |
count++; |
219 |
|
} |
220 |
566 |
else if (s.charAt(i) == cdelim && cdelim != delim) |
221 |
|
{ |
222 |
0 |
count--; |
223 |
|
} |
224 |
628 |
s1.append(s.charAt(i)); |
225 |
|
} |
226 |
80 |
if (mode == 's' && cdelim != delim) |
227 |
|
{ |
228 |
0 |
while (i < s.length() && Prop.isWhite(s.charAt(i))) |
229 |
|
{ |
230 |
0 |
i++; |
231 |
|
} |
232 |
0 |
if (i >= s.length()) |
233 |
|
{ |
234 |
0 |
try |
235 |
|
{ |
236 |
0 |
RegSyntaxError.endItAll("" + mode + delim + " needs " + cdelim); |
237 |
|
} catch (RegSyntax rs) |
238 |
|
{ |
239 |
|
} |
240 |
0 |
return null; |
241 |
|
} |
242 |
0 |
cdelim = close(delim = s.charAt(i)); |
243 |
0 |
i++; |
244 |
|
} |
245 |
80 |
count = 0; |
246 |
80 |
if (mode == 's') |
247 |
|
{ |
248 |
116 |
for (; i < s.length(); i++) |
249 |
|
{ |
250 |
116 |
if (s.charAt(i) == '\\') |
251 |
|
{ |
252 |
0 |
s2.append('\\'); |
253 |
0 |
i++; |
254 |
|
} |
255 |
116 |
else if (s.charAt(i) == cdelim && count == 0) |
256 |
|
{ |
257 |
48 |
i++; |
258 |
48 |
break; |
259 |
|
} |
260 |
68 |
else if (s.charAt(i) == delim && cdelim != delim) |
261 |
|
{ |
262 |
0 |
count++; |
263 |
|
} |
264 |
68 |
else if (s.charAt(i) == cdelim && cdelim != delim) |
265 |
|
{ |
266 |
0 |
count--; |
267 |
|
} |
268 |
68 |
s2.append(s.charAt(i)); |
269 |
|
} |
270 |
|
} |
271 |
80 |
for (; i < s.length(); i++) |
272 |
|
{ |
273 |
0 |
char c = s.charAt(i); |
274 |
0 |
switch (c) |
275 |
|
{ |
276 |
0 |
case 'x': |
277 |
0 |
xFlag = true; |
278 |
0 |
break; |
279 |
0 |
case 'i': |
280 |
0 |
igncase = true; |
281 |
0 |
break; |
282 |
0 |
case 'o': |
283 |
0 |
optim = true; |
284 |
0 |
break; |
285 |
0 |
case 's': |
286 |
0 |
sFlag = true; |
287 |
0 |
break; |
288 |
0 |
case 'm': |
289 |
0 |
mFlag = true; |
290 |
0 |
break; |
291 |
0 |
case 'g': |
292 |
0 |
gFlag = true; |
293 |
0 |
break; |
294 |
0 |
default: |
295 |
|
|
296 |
|
|
297 |
0 |
try |
298 |
|
{ |
299 |
0 |
RegSyntaxError.endItAll("Illegal flag to pattern: " + c); |
300 |
|
} catch (RegSyntax rs) |
301 |
|
{ |
302 |
|
} |
303 |
0 |
return null; |
304 |
|
} |
305 |
|
} |
306 |
80 |
Regex r = new Regex(); |
307 |
80 |
try |
308 |
|
{ |
309 |
80 |
String pat = s1.toString(), reprul = s2.toString(); |
310 |
80 |
if (xFlag) |
311 |
|
{ |
312 |
0 |
pat = strip(pat); |
313 |
0 |
reprul = strip(reprul); |
314 |
|
} |
315 |
80 |
r.compile(pat); |
316 |
79 |
r.ignoreCase |= igncase; |
317 |
79 |
r.gFlag |= gFlag; |
318 |
79 |
r.sFlag |= sFlag; |
319 |
79 |
r.mFlag |= mFlag; |
320 |
79 |
if (optim) |
321 |
|
{ |
322 |
0 |
r.optimize(); |
323 |
|
} |
324 |
79 |
if (delim == '\'') |
325 |
|
{ |
326 |
0 |
r.setReplaceRule(new StringRule(reprul)); |
327 |
|
} |
328 |
|
else |
329 |
|
{ |
330 |
79 |
r.setReplaceRule(ReplaceRule.perlCode(reprul)); |
331 |
|
} |
332 |
|
} catch (RegSyntax rs) |
333 |
|
{ |
334 |
1 |
r = null; |
335 |
|
} |
336 |
80 |
return r; |
337 |
|
} |
338 |
|
|
|
|
| 0% |
Uncovered Elements: 28 (28) |
Complexity: 7 |
Complexity Density: 0.44 |
|
339 |
0 |
static String strip(String s)... |
340 |
|
{ |
341 |
0 |
StringBuffer sb = new StringBuffer(); |
342 |
0 |
for (int i = 0; i < s.length(); i++) |
343 |
|
{ |
344 |
0 |
char c = s.charAt(i); |
345 |
0 |
if (Prop.isWhite(c)) |
346 |
|
{ |
347 |
0 |
; |
348 |
|
} |
349 |
0 |
else if (c == '#') |
350 |
|
{ |
351 |
0 |
i++; |
352 |
0 |
while (i < s.length()) |
353 |
|
{ |
354 |
0 |
if (s.charAt(i) == '\n') |
355 |
|
{ |
356 |
0 |
break; |
357 |
|
} |
358 |
0 |
i++; |
359 |
|
} |
360 |
|
} |
361 |
0 |
else if (c == '\\') |
362 |
|
{ |
363 |
0 |
sb.append(c); |
364 |
0 |
sb.append(s.charAt(++i)); |
365 |
|
} |
366 |
|
else |
367 |
|
{ |
368 |
0 |
sb.append(c); |
369 |
|
} |
370 |
|
} |
371 |
0 |
return sb.toString(); |
372 |
|
} |
373 |
|
} |