4f731144091b91aecb22af871e8b4a75db6b54a5
[jalview.git] / src / com / stevesoft / pat / Group.java
1 //\r
2 // This software is now distributed according to\r
3 // the Lesser Gnu Public License.  Please see\r
4 // http://www.gnu.org/copyleft/lesser.txt for\r
5 // the details.\r
6 //    -- Happy Computing!\r
7 //\r
8 package com.stevesoft.pat;\r
9 import java.util.Hashtable;\r
10 \r
11 /** This class implements the (?@<>) syntax that matches\r
12  a balanced parenthesis.  Not in perl 5. */\r
13 class Group extends Pattern {\r
14     char op,cl;\r
15     Group(char opi,char cli) {\r
16         op = opi;\r
17         cl = cli;\r
18     }\r
19     public int matchInternal(int pos,Pthings pt) {\r
20         int i,count=1;\r
21         if(pos < pt.src.length())\r
22             if(!Masked(pos,pt) && pt.src.charAt(pos) != op)\r
23                 return -1;\r
24         for(i=pos+1;i<pt.src.length();i++) {\r
25             char c = pt.src.charAt(i);\r
26             boolean b = !Masked(i,pt);\r
27             if(b && c == ESC) {\r
28                 i++;\r
29             } else {\r
30                 if(b && c == cl) count--;\r
31                 if(count == 0) return nextMatch(i+1,pt);\r
32                 if(b && c == op) count++;\r
33             }\r
34         }\r
35         return -1;\r
36     }\r
37     public String toString() {\r
38         return "(?@"+op+cl+")"+nextString();\r
39     }\r
40     public patInt minChars() { return new patInt(2); }\r
41     Pattern clone1(Hashtable h) { return new Group(op,cl); }\r
42 };\r