Formatting
[jalview.git] / src / com / stevesoft / pat / BackMatch.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 /** Provides the ability to match a backreference from within\r
13  * a Pattern.\r
14  */\r
15 class BackMatch\r
16     extends Pattern\r
17 {\r
18   int id;\r
19   BackMatch(int id)\r
20   {\r
21     this.id = id;\r
22   }\r
23 \r
24   public String toString()\r
25   {\r
26     return "\\" + (id) + nextString();\r
27   }\r
28 \r
29   public int matchInternal(int pos, Pthings p)\r
30   {\r
31     int i1 = p.marks[id];\r
32     int i2 = p.marks[id + p.nMarks];\r
33     int imax = i2 - i1;\r
34     if (i1 < 0 || imax < 0 || pos + imax > p.src.length())\r
35     {\r
36       return -1;\r
37     }\r
38     int ns = p.src.length() - pos;\r
39     if (imax < ns)\r
40     {\r
41       ns = imax;\r
42     }\r
43     for (int i = 0; i < ns; i++)\r
44     {\r
45       if (p.src.charAt(i + i1) != p.src.charAt(pos + i))\r
46       {\r
47         return -1;\r
48       }\r
49     }\r
50     return nextMatch(pos + imax, p);\r
51   }\r
52 \r
53   Pattern clone1(Hashtable h)\r
54   {\r
55     return new BackMatch(id);\r
56   }\r
57 }\r