needed for applet search
[jalview.git] / src / com / stevesoft / pat / Group.java
diff --git a/src/com/stevesoft/pat/Group.java b/src/com/stevesoft/pat/Group.java
new file mode 100755 (executable)
index 0000000..4f73114
--- /dev/null
@@ -0,0 +1,42 @@
+//\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