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