JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / src / com / stevesoft / pat / Group.java
1 //
2 // This software is now distributed according to
3 // the Lesser Gnu Public License.  Please see
4 // http://www.gnu.org/copyleft/lesser.txt for
5 // the details.
6 //    -- Happy Computing!
7 //
8 package com.stevesoft.pat;
9
10 import java.util.*;
11
12 /**
13  * This class implements the (?@<>) syntax that matches a balanced parenthesis.
14  * Not in perl 5.
15  */
16 class Group extends Pattern
17 {
18   char op, cl;
19
20   Group(char opi, char cli)
21   {
22     op = opi;
23     cl = cli;
24   }
25
26   public int matchInternal(int pos, Pthings pt)
27   {
28     int i, count = 1;
29     if (pos < pt.src.length())
30     {
31       if (!Masked(pos, pt) && pt.src.charAt(pos) != op)
32       {
33         return -1;
34       }
35     }
36     for (i = pos + 1; i < pt.src.length(); i++)
37     {
38       char c = pt.src.charAt(i);
39       boolean b = !Masked(i, pt);
40       if (b && c == ESC)
41       {
42         i++;
43       }
44       else
45       {
46         if (b && c == cl)
47         {
48           count--;
49         }
50         if (count == 0)
51         {
52           return nextMatch(i + 1, pt);
53         }
54         if (b && c == op)
55         {
56           count++;
57         }
58       }
59     }
60     return -1;
61   }
62
63   public String toString()
64   {
65     return "(?@" + op + cl + ")" + nextString();
66   }
67
68   public patInt minChars()
69   {
70     return new patInt(2);
71   }
72
73   Pattern clone1(Hashtable h)
74   {
75     return new Group(op, cl);
76   }
77 };