d6481b4d307db8c684431dacd75aa0f14ff83f4a
[jalview.git] / src / com / stevesoft / pat / Boundary.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 word boundary pattern element: \b. */\r
13 class Boundary\r
14     extends Pattern\r
15 {\r
16   public String toString()\r
17   {\r
18     return "\\b" + nextString();\r
19   }\r
20 \r
21   boolean isAChar(char c)\r
22   {\r
23     if (c >= 'a' && c <= 'z')\r
24     {\r
25       return true;\r
26     }\r
27     if (c >= 'A' && c <= 'Z')\r
28     {\r
29       return true;\r
30     }\r
31     if (c >= '0' && c <= '9')\r
32     {\r
33       return true;\r
34     }\r
35     if (c == '_')\r
36     {\r
37       return true;\r
38     }\r
39     return false;\r
40   }\r
41 \r
42   boolean matchLeft(int pos, Pthings pt)\r
43   {\r
44     if (pos <= 0)\r
45     {\r
46       return true;\r
47     }\r
48     if (isAChar(pt.src.charAt(pos))\r
49         && isAChar(pt.src.charAt(pos - 1)))\r
50     {\r
51       return false;\r
52     }\r
53     return true;\r
54   }\r
55 \r
56   boolean matchRight(int pos, Pthings pt)\r
57   {\r
58     if (pos < 0)\r
59     {\r
60       return false;\r
61     }\r
62     if (pos + 1 >= pt.src.length())\r
63     {\r
64       return true;\r
65     }\r
66     if (isAChar(pt.src.charAt(pos))\r
67         && isAChar(pt.src.charAt(pos + 1)))\r
68     {\r
69       return false;\r
70     }\r
71     return true;\r
72   }\r
73 \r
74   public int matchInternal(int pos, Pthings pt)\r
75   {\r
76     if (matchRight(pos - 1, pt) || matchLeft(pos, pt))\r
77     {\r
78       return nextMatch(pos, pt);\r
79     }\r
80     return -1;\r
81   }\r
82 \r
83   public patInt maxChars()\r
84   {\r
85     return new patInt(0);\r
86   }\r
87 \r
88   public Pattern clone1(Hashtable h)\r
89   {\r
90     return new Boundary();\r
91   }\r
92 };\r