1 Clazz.declarePackage ("com.stevesoft.pat");
\r
2 Clazz.load (null, "com.stevesoft.pat.parsePerl", ["com.stevesoft.pat.CaseMgr", "$.Prop", "$.RegSyntaxError", "$.Regex", "$.ReplaceRule", "$.StringRule", "java.lang.StringBuffer"], function () {
\r
3 c$ = Clazz.declareType (com.stevesoft.pat, "parsePerl");
\r
4 c$.close = Clazz.defineMethod (c$, "close",
\r
16 c$.codify = Clazz.defineMethod (c$, "codify",
\r
17 function (s, keepbs) {
\r
18 return com.stevesoft.pat.parsePerl.codifyRange (s, 0, s.length, keepbs);
\r
20 c$.codifyRange = Clazz.defineMethod (c$, "codifyRange",
\r
21 function (s, i0, iN, keepbs) {
\r
22 var sb = new StringBuffer ();
\r
25 var litmode = false;
\r
28 var modified = false;
\r
29 for (var i = i0; i < iN; i++) {
\r
30 var c = s.charAt (i);
\r
37 var c2 = s.charAt (i);
\r
55 uc1 = lc1 = ucmode = lcmode = litmode = false;
\r
66 modified = new Boolean (modified | mf).valueOf ();
\r
69 c = com.stevesoft.pat.parsePerl.lc (c);
\r
72 c = com.stevesoft.pat.parsePerl.uc (c);
\r
74 } else if (ucmode) {
\r
75 c = com.stevesoft.pat.parsePerl.uc (c);
\r
76 } else if (lcmode) {
\r
77 c = com.stevesoft.pat.parsePerl.lc (c);
\r
78 }if (litmode && com.stevesoft.pat.parsePerl.needbs (c)) {
\r
82 return modified ? sb.toString () : s;
\r
84 c$.uc = Clazz.defineMethod (c$, "uc",
\r
86 return com.stevesoft.pat.CaseMgr.toUpperCaseC (c);
\r
88 c$.lc = Clazz.defineMethod (c$, "lc",
\r
90 return com.stevesoft.pat.CaseMgr.toLowerCaseC (c);
\r
92 c$.needbs = Clazz.defineMethod (c$, "needbs",
\r
94 if (c >= 'a' && c <= 'z') {
\r
96 }if (c >= 'A' && c <= 'Z') {
\r
98 }if (c >= '0' && c <= '9') {
\r
104 c$.parse = Clazz.defineMethod (c$, "parse",
\r
106 var igncase = false;
\r
112 var s1 = new StringBuffer ();
\r
113 var s2 = new StringBuffer ();
\r
119 if (s.length >= 3 && s.charAt (0) == 's') {
\r
121 delim = s.charAt (1);
\r
122 cdelim = com.stevesoft.pat.parsePerl.close (delim);
\r
124 } else if (s.length >= 2 && s.charAt (0) == 'm') {
\r
126 delim = s.charAt (1);
\r
127 cdelim = com.stevesoft.pat.parsePerl.close (delim);
\r
129 } else if (s.length >= 1 && s.charAt (0) == '/') {
\r
134 com.stevesoft.pat.RegSyntaxError.endItAll ("Regex.perlCode should be of the form s/// or m// or //");
\r
136 if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
\r
142 }for (; i < s.length; i++) {
\r
143 if (s.charAt (i) == '\\') {
\r
146 } else if (s.charAt (i) == cdelim && count == 0) {
\r
149 } else if (s.charAt (i) == delim && cdelim != delim) {
\r
151 } else if (s.charAt (i) == cdelim && cdelim != delim) {
\r
153 }s1.append (s.charAt (i));
\r
155 if (mode == 's' && cdelim != delim) {
\r
156 while (i < s.length && com.stevesoft.pat.Prop.isWhite (s.charAt (i))) {
\r
159 if (i >= s.length) {
\r
161 com.stevesoft.pat.RegSyntaxError.endItAll ("" + mode + delim + " needs " + cdelim);
\r
163 if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
\r
169 }cdelim = com.stevesoft.pat.parsePerl.close (delim = s.charAt (i));
\r
173 for (; i < s.length; i++) {
\r
174 if (s.charAt (i) == '\\') {
\r
177 } else if (s.charAt (i) == cdelim && count == 0) {
\r
180 } else if (s.charAt (i) == delim && cdelim != delim) {
\r
182 } else if (s.charAt (i) == cdelim && cdelim != delim) {
\r
184 }s2.append (s.charAt (i));
\r
186 }for (; i < s.length; i++) {
\r
187 var c = s.charAt (i);
\r
209 com.stevesoft.pat.RegSyntaxError.endItAll ("Illegal flag to pattern: " + c);
\r
211 if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
\r
219 var r = new com.stevesoft.pat.Regex (null, "");
\r
221 var pat = s1.toString ();
\r
222 var reprul = s2.toString ();
\r
224 pat = com.stevesoft.pat.parsePerl.strip (pat);
\r
225 reprul = com.stevesoft.pat.parsePerl.strip (reprul);
\r
227 r.ignoreCase = new Boolean (r.ignoreCase | igncase).valueOf ();
\r
228 r.gFlag = new Boolean (r.gFlag | gFlag).valueOf ();
\r
229 r.sFlag = new Boolean (r.sFlag | sFlag).valueOf ();
\r
230 r.mFlag = new Boolean (r.mFlag | mFlag).valueOf ();
\r
233 }if (delim == '\'') {
\r
234 r.setReplaceRule ( new com.stevesoft.pat.StringRule (reprul));
\r
236 r.setReplaceRule (com.stevesoft.pat.ReplaceRule.perlCode (reprul));
\r
238 if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {
\r
246 c$.strip = Clazz.defineMethod (c$, "strip",
\r
248 var sb = new StringBuffer ();
\r
249 for (var i = 0; i < s.length; i++) {
\r
250 var c = s.charAt (i);
\r
251 if (com.stevesoft.pat.Prop.isWhite (c)) {
\r
252 ;} else if (c == '#') {
\r
254 while (i < s.length) {
\r
255 if (s.charAt (i) == '\n') {
\r
259 } else if (c == '\\') {
\r
261 sb.append (s.charAt (++i));
\r
265 return sb.toString ();
\r