// -- Happy Computing!\r
//\r
package com.stevesoft.pat;\r
-import java.util.Hashtable;\r
+\r
+import java.util.*;\r
\r
/** This class implements the (?@<>) syntax that matches\r
a balanced parenthesis. Not in perl 5. */\r
-class Group extends Pattern {\r
- char op,cl;\r
- Group(char opi,char cli) {\r
- op = opi;\r
- cl = cli;\r
- }\r
- public int matchInternal(int pos,Pthings pt) {\r
- int i,count=1;\r
- if(pos < pt.src.length())\r
- if(!Masked(pos,pt) && pt.src.charAt(pos) != op)\r
- return -1;\r
- for(i=pos+1;i<pt.src.length();i++) {\r
- char c = pt.src.charAt(i);\r
- boolean b = !Masked(i,pt);\r
- if(b && c == ESC) {\r
- i++;\r
- } else {\r
- if(b && c == cl) count--;\r
- if(count == 0) return nextMatch(i+1,pt);\r
- if(b && c == op) count++;\r
- }\r
- }\r
+class Group\r
+ extends Pattern\r
+{\r
+ char op, cl;\r
+ Group(char opi, char cli)\r
+ {\r
+ op = opi;\r
+ cl = cli;\r
+ }\r
+\r
+ public int matchInternal(int pos, Pthings pt)\r
+ {\r
+ int i, count = 1;\r
+ if (pos < pt.src.length())\r
+ {\r
+ if (!Masked(pos, pt) && pt.src.charAt(pos) != op)\r
+ {\r
return -1;\r
+ }\r
}\r
- public String toString() {\r
- return "(?@"+op+cl+")"+nextString();\r
+ for (i = pos + 1; i < pt.src.length(); i++)\r
+ {\r
+ char c = pt.src.charAt(i);\r
+ boolean b = !Masked(i, pt);\r
+ if (b && c == ESC)\r
+ {\r
+ i++;\r
+ }\r
+ else\r
+ {\r
+ if (b && c == cl)\r
+ {\r
+ count--;\r
+ }\r
+ if (count == 0)\r
+ {\r
+ return nextMatch(i + 1, pt);\r
+ }\r
+ if (b && c == op)\r
+ {\r
+ count++;\r
+ }\r
+ }\r
}\r
- public patInt minChars() { return new patInt(2); }\r
- Pattern clone1(Hashtable h) { return new Group(op,cl); }\r
+ return -1;\r
+ }\r
+\r
+ public String toString()\r
+ {\r
+ return "(?@" + op + cl + ")" + nextString();\r
+ }\r
+\r
+ public patInt minChars()\r
+ {\r
+ return new patInt(2);\r
+ }\r
+\r
+ Pattern clone1(Hashtable h)\r
+ {\r
+ return new Group(op, cl);\r
+ }\r
};\r