JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / com / stevesoft / pat / RegOpt.js
1 Clazz.declarePackage ("com.stevesoft.pat");\r
2 Clazz.load (["com.stevesoft.pat.Pattern", "$.oneChar", "java.util.Hashtable", "$.Vector"], ["com.stevesoft.pat.Branch", "$.RegOpt", "$.FastChar"], ["com.stevesoft.pat.Any", "$.Bracket", "$.Custom", "$.FastBracket", "$.FastMulti", "$.Multi", "$.NullPattern", "$.Or", "$.Range", "$.UniValidator", "$.patInt", "java.lang.Character", "$.StringBuffer"], function () {\r
3 c$ = Clazz.declareType (com.stevesoft.pat, "FastChar", com.stevesoft.pat.oneChar);\r
4 Clazz.overrideMethod (c$, "matchInternal", \r
5 function (p, pt) {\r
6 return (p < pt.src.length () && pt.src.charAt (p) == this.c) ? this.nextMatch (p + 1, pt) : -1;\r
7 }, "~N,com.stevesoft.pat.Pthings");\r
8 Clazz.overrideMethod (c$, "clone1", \r
9 function (h) {\r
10 return  new com.stevesoft.pat.FastChar (this.c);\r
11 }, "java.util.Hashtable");\r
12 c$ = Clazz.decorateAsClass (function () {\r
13 this.h = null;\r
14 this.keys = null;\r
15 Clazz.instantialize (this, arguments);\r
16 }, com.stevesoft.pat, "Branch", com.stevesoft.pat.Pattern);\r
17 Clazz.prepareFields (c$, function () {\r
18 this.h =  new java.util.Hashtable ();\r
19 this.keys =  new java.util.Vector ();\r
20 });\r
21 Clazz.makeConstructor (c$, \r
22 function () {\r
23 Clazz.superConstructor (this, com.stevesoft.pat.Branch, []);\r
24 });\r
25 Clazz.overrideMethod (c$, "clone1", \r
26 function (x) {\r
27 var b =  new com.stevesoft.pat.Branch ();\r
28 b.keys = this.keys.clone ();\r
29 x.put (this, b);\r
30 x.put (b, b);\r
31 for (var i = 0; i < this.keys.size (); i++) {\r
32 var p = this.h.get (this.keys.elementAt (i));\r
33 b.h.put (this.keys.elementAt (i), p.clone (x));\r
34 }\r
35 return b;\r
36 }, "java.util.Hashtable");\r
37 Clazz.defineMethod (c$, "reduce", \r
38 function (ignoreCase, dontMinQ) {\r
39 if (this.h.size () == 1) {\r
40 var e = this.h.keys ();\r
41 var c = e.nextElement ();\r
42 var oc;\r
43 if (ignoreCase || dontMinQ) {\r
44 oc =  new com.stevesoft.pat.oneChar (c.charValue ());\r
45 } else {\r
46 oc =  new com.stevesoft.pat.FastChar (c.charValue ());\r
47 }oc.next = this.h.get (c);\r
48 oc.add (this.next);\r
49 return oc;\r
50 } else if (this.h.size () == 0) {\r
51 return null;\r
52 }return this;\r
53 }, "~B,~B");\r
54 Clazz.defineMethod (c$, "maxChars", \r
55 function () {\r
56 var e = this.h.keys ();\r
57 var count =  new com.stevesoft.pat.patInt (0);\r
58 while (e.hasMoreElements ()) {\r
59 var key = e.nextElement ();\r
60 var pa = this.h.get (key);\r
61 var pi = pa.maxChars ();\r
62 pi.inc ();\r
63 count.maxeq (pi);\r
64 }\r
65 return count;\r
66 });\r
67 Clazz.defineMethod (c$, "minChars", \r
68 function () {\r
69 var e = this.h.keys ();\r
70 var count =  new com.stevesoft.pat.patInt (0);\r
71 while (e.hasMoreElements ()) {\r
72 var key = e.nextElement ();\r
73 var pa = this.h.get (key);\r
74 var pi = pa.minChars ();\r
75 pi.inc ();\r
76 count.mineq (pi);\r
77 }\r
78 return count;\r
79 });\r
80 Clazz.defineMethod (c$, "addc", \r
81 function (o, ignoreCase, dontMinQ) {\r
82 var n = o.next;\r
83 if (n == null) {\r
84 n =  new com.stevesoft.pat.NullPattern ();\r
85 } else {\r
86 n = com.stevesoft.pat.RegOpt.opt (n, ignoreCase, dontMinQ);\r
87 }n.setParent (this);\r
88 this.set ( new Character (o.c), n, ignoreCase, dontMinQ);\r
89 if (ignoreCase) {\r
90 if (o.c != o.altc) {\r
91 this.set ( new Character (o.altc), n, ignoreCase, dontMinQ);\r
92 }if (o.c != o.altc2 && o.altc != o.altc2) {\r
93 this.set ( new Character (o.altc2), n, ignoreCase, dontMinQ);\r
94 }}}, "com.stevesoft.pat.oneChar,~B,~B");\r
95 Clazz.defineMethod (c$, "set", \r
96 function (c, n, igc, dontMinQ) {\r
97 var p = this.h.get (c);\r
98 this.next = null;\r
99 if (p == null) {\r
100 if (Clazz.instanceOf (n, com.stevesoft.pat.Or)) {\r
101 var np =  new com.stevesoft.pat.NullPattern ();\r
102 np.add (n);\r
103 this.h.put (c, np);\r
104 } else {\r
105 this.h.put (c, n);\r
106 }this.keys.addElement (c);\r
107 } else if (Clazz.instanceOf (p, com.stevesoft.pat.Or)) {\r
108 (p).addOr (n);\r
109 } else if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && Clazz.instanceOf (n, com.stevesoft.pat.oneChar) && (p).c != (n).c) {\r
110 var b =  new com.stevesoft.pat.Branch ();\r
111 b.addc (p, igc, dontMinQ);\r
112 b.addc (n, igc, dontMinQ);\r
113 this.h.put (c, b);\r
114 b.setParent (this);\r
115 } else if (Clazz.instanceOf (p, com.stevesoft.pat.Branch) && Clazz.instanceOf (n, com.stevesoft.pat.oneChar)) {\r
116 (p).addc (n, igc, dontMinQ);\r
117 n.setParent (p);\r
118 } else {\r
119 var o =  new com.stevesoft.pat.Or ();\r
120 o.setParent (this);\r
121 if (Clazz.instanceOf (p, com.stevesoft.pat.NullPattern) && p.parent == null && p.next != null) {\r
122 o.addOr (p.next);\r
123 } else {\r
124 o.addOr (p);\r
125 }o.addOr (n);\r
126 var optpat = com.stevesoft.pat.RegOpt.opt (o, igc, dontMinQ);\r
127 this.h.put (c, optpat);\r
128 optpat.setParent (this);\r
129 }}, "Character,com.stevesoft.pat.Pattern,~B,~B");\r
130 Clazz.overrideMethod (c$, "toString", \r
131 function () {\r
132 var sb =  new StringBuffer ();\r
133 sb.append ("(?:(?#branch)");\r
134 for (var i = 0; i < this.keys.size (); i++) {\r
135 var c = this.keys.elementAt (i);\r
136 sb.append (c);\r
137 sb.append (this.h.get (c));\r
138 if (i + 1 < this.keys.size ()) {\r
139 sb.append ("|");\r
140 }}\r
141 sb.append (")");\r
142 sb.append (this.nextString ());\r
143 return sb.toString ();\r
144 });\r
145 Clazz.defineMethod (c$, "matchInternal", \r
146 function (pos, pt) {\r
147 if (pos >= pt.src.length ()) {\r
148 return -1;\r
149 }var n = this.h.get ( new Character (pt.src.charAt (pos)));\r
150 if (n == null) {\r
151 return -1;\r
152 }if (pt.cbits != null && pt.cbits.get (pos)) {\r
153 return -1;\r
154 }return n.matchInternal (pos + 1, pt);\r
155 }, "~N,com.stevesoft.pat.Pthings");\r
156 c$ = Clazz.declareType (com.stevesoft.pat, "RegOpt");\r
157 c$.opt = Clazz.defineMethod (c$, "opt", \r
158 function (p, ignoreCase, dontMinQ) {\r
159 if (p == null) {\r
160 return p;\r
161 }if (Clazz.instanceOf (p, com.stevesoft.pat.Bracket)) {\r
162 var b = p;\r
163 p = com.stevesoft.pat.FastBracket.process (b, ignoreCase);\r
164 p.next = b.next;\r
165 p.parent = b.parent;\r
166 } else if (Clazz.instanceOf (p, com.stevesoft.pat.oneChar) && !ignoreCase && !dontMinQ) {\r
167 var o = p;\r
168 p =  new com.stevesoft.pat.FastChar (o.c);\r
169 p.next = o.next;\r
170 p.parent = o.parent;\r
171 } else if (Clazz.instanceOf (p, com.stevesoft.pat.Or) && (p).leftForm ().equals ("(?:") && (p).v.size () == 1) {\r
172 var o = p;\r
173 p = o.v.elementAt (0);\r
174 p.setParent (null);\r
175 p = com.stevesoft.pat.RegOpt.opt (p, ignoreCase, dontMinQ);\r
176 p.add (o.next);\r
177 } else if (Clazz.instanceOf (p, com.stevesoft.pat.Or)) {\r
178 var o = p;\r
179 o.pv = null;\r
180 var v = o.v;\r
181 o.v =  new java.util.Vector ();\r
182 var b =  new com.stevesoft.pat.Branch ();\r
183 b.parent = o.parent;\r
184 for (var i = 0; i < v.size (); i++) {\r
185 var pp = v.elementAt (i);\r
186 if (Clazz.instanceOf (pp, com.stevesoft.pat.oneChar) && (b.h.size () >= 1 || (i + 1 < v.size () && Clazz.instanceOf (v.elementAt (i + 1), com.stevesoft.pat.oneChar)))) {\r
187 b.addc (pp, ignoreCase, dontMinQ);\r
188 } else {\r
189 if (b.keys.size () > 0) {\r
190 var p2 = b.reduce (ignoreCase, dontMinQ);\r
191 if (p2 != null) {\r
192 o.addOr (p2);\r
193 b =  new com.stevesoft.pat.Branch ();\r
194 b.parent = o.parent;\r
195 }}o.addOr (com.stevesoft.pat.RegOpt.opt (pp, ignoreCase, dontMinQ));\r
196 }}\r
197 if (b.keys.size () > 0) {\r
198 var p2 = b.reduce (ignoreCase, dontMinQ);\r
199 if (p2 != null) {\r
200 o.addOr (p2);\r
201 }}if (o.v.size () == 1 && o.leftForm ().equals ("(?:")) {\r
202 p = o.v.elementAt (0);\r
203 p.setParent (null);\r
204 p = com.stevesoft.pat.RegOpt.opt (p, ignoreCase, dontMinQ);\r
205 p.add (o.next);\r
206 }} else if (Clazz.instanceOf (p, com.stevesoft.pat.FastMulti)) {\r
207 var ps = p;\r
208 ps.sub = com.stevesoft.pat.RegOpt.opt (ps.sub, ignoreCase, dontMinQ);\r
209 } else if (Clazz.instanceOf (p, com.stevesoft.pat.Multi) && com.stevesoft.pat.RegOpt.safe4fm ((p).sub)) {\r
210 var m = p;\r
211 var fm = null;\r
212 try {\r
213 fm =  new com.stevesoft.pat.FastMulti (m.a, m.b, com.stevesoft.pat.RegOpt.opt (m.sub, ignoreCase, dontMinQ));\r
214 } catch (rs) {\r
215 if (Clazz.exceptionOf (rs, com.stevesoft.pat.RegSyntax)) {\r
216 } else {\r
217 throw rs;\r
218 }\r
219 }\r
220 fm.parent = m.parent;\r
221 fm.matchFewest = m.matchFewest;\r
222 fm.next = m.next;\r
223 p = fm;\r
224 }if (p.next != null) {\r
225 p.next = com.stevesoft.pat.RegOpt.opt (p.next, ignoreCase, dontMinQ);\r
226 }return p;\r
227 }, "com.stevesoft.pat.Pattern,~B,~B");\r
228 c$.safe4fm = Clazz.defineMethod (c$, "safe4fm", \r
229 function (x) {\r
230 while (x != null) {\r
231 if (Clazz.instanceOf (x, com.stevesoft.pat.Bracket)) {\r
232 ;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Range)) {\r
233 ;} else if (Clazz.instanceOf (x, com.stevesoft.pat.oneChar)) {\r
234 ;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Any)) {\r
235 ;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Custom) && Clazz.instanceOf ((x).v, com.stevesoft.pat.UniValidator)) {\r
236 ;} else if (Clazz.instanceOf (x, com.stevesoft.pat.Or)) {\r
237 var o = x;\r
238 if (!o.leftForm ().equals ("(?:")) {\r
239 return false;\r
240 }var lo = o.countMinChars ();\r
241 var hi = o.countMaxChars ();\r
242 if (!lo.equals (hi)) {\r
243 return false;\r
244 }for (var i = 0; i < o.v.size (); i++) {\r
245 if (!com.stevesoft.pat.RegOpt.safe4fm (o.v.elementAt (i))) {\r
246 return false;\r
247 }}\r
248 } else {\r
249 return false;\r
250 }x = x.next;\r
251 }\r
252 return true;\r
253 }, "com.stevesoft.pat.Pattern");\r
254 });\r