--- /dev/null
+//\r
+// This software is now distributed according to\r
+// the Lesser Gnu Public License. Please see\r
+// http://www.gnu.org/copyleft/lesser.txt for\r
+// the details.\r
+// -- Happy Computing!\r
+//\r
+package com.stevesoft.pat;\r
+import java.util.Hashtable;\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
+ return -1;\r
+ }\r
+ public String toString() {\r
+ return "(?@"+op+cl+")"+nextString();\r
+ }\r
+ public patInt minChars() { return new patInt(2); }\r
+ Pattern clone1(Hashtable h) { return new Group(op,cl); }\r
+};\r