Formatting
[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 \r
10 import java.util.*;\r
11 \r
12 /** This class implements the (?@<>) syntax that matches\r
13  a balanced parenthesis.  Not in perl 5. */\r
14 class Group\r
15     extends Pattern\r
16 {\r
17   char op, cl;\r
18   Group(char opi, char cli)\r
19   {\r
20     op = opi;\r
21     cl = cli;\r
22   }\r
23 \r
24   public int matchInternal(int pos, Pthings pt)\r
25   {\r
26     int i, count = 1;\r
27     if (pos < pt.src.length())\r
28     {\r
29       if (!Masked(pos, pt) && pt.src.charAt(pos) != op)\r
30       {\r
31         return -1;\r
32       }\r
33     }\r
34     for (i = pos + 1; i < pt.src.length(); i++)\r
35     {\r
36       char c = pt.src.charAt(i);\r
37       boolean b = !Masked(i, pt);\r
38       if (b && c == ESC)\r
39       {\r
40         i++;\r
41       }\r
42       else\r
43       {\r
44         if (b && c == cl)\r
45         {\r
46           count--;\r
47         }\r
48         if (count == 0)\r
49         {\r
50           return nextMatch(i + 1, pt);\r
51         }\r
52         if (b && c == op)\r
53         {\r
54           count++;\r
55         }\r
56       }\r
57     }\r
58     return -1;\r
59   }\r
60 \r
61   public String toString()\r
62   {\r
63     return "(?@" + op + cl + ")" + nextString();\r
64   }\r
65 \r
66   public patInt minChars()\r
67   {\r
68     return new patInt(2);\r
69   }\r
70 \r
71   Pattern clone1(Hashtable h)\r
72   {\r
73     return new Group(op, cl);\r
74   }\r
75 };\r