Formatting
[jalview.git] / src / com / stevesoft / pat / Range.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 /** Thrown when one encounters things like [z-a] */\r
13 class BadRangeArgs\r
14     extends RegSyntax\r
15 {};\r
16 \r
17 /** Implments a subelement (ranges) of the [] pattern element.\r
18  For example, [a-z023] is implemented using a range and tree oneChar\r
19  classes.\r
20  @see Bracket\r
21  @see oneChar\r
22  */\r
23 class Range\r
24     extends Pattern\r
25 {\r
26   char lo, hi, altlo, althi;\r
27   boolean printBrackets = false;\r
28   public String toString()\r
29   {\r
30     String s = protect("" + lo, PROTECT_THESE, ESC) + "-"\r
31         + protect("" + hi, PROTECT_THESE, ESC);\r
32     if (!printBrackets)\r
33     {\r
34       return s;\r
35     }\r
36     return "[" + s + "]";\r
37   }\r
38 \r
39   Range(char loi, char hii)\r
40       throws RegSyntax\r
41   {\r
42     lo = loi;\r
43     hi = hii;\r
44     oneChar o = null;\r
45     if (lo >= hi)\r
46     {\r
47       //throw new BadRangeArgs();\r
48       RegSyntaxError.endItAll("Badly formed []'s : " + lo + " >= " + hi);\r
49     }\r
50     o = new oneChar(lo);\r
51     altlo = o.altc;\r
52     o = new oneChar(hi);\r
53     althi = o.altc;\r
54   }\r
55 \r
56   public int matchInternal(int pos, Pthings pt)\r
57   {\r
58     if (pos >= pt.src.length())\r
59     {\r
60       return -1;\r
61     }\r
62     if (Masked(pos, pt))\r
63     {\r
64       return -1;\r
65     }\r
66     char c = pt.src.charAt(pos);\r
67     if (lo <= c && c <= hi ||\r
68         (pt.ignoreCase && (altlo <= c && c <= althi)))\r
69     {\r
70       return nextMatch(pos + 1, pt);\r
71     }\r
72     return -1;\r
73   }\r
74 \r
75   public patInt minChars()\r
76   {\r
77     return new patInt(1);\r
78   }\r
79 \r
80   public patInt maxChars()\r
81   {\r
82     return new patInt(1);\r
83   }\r
84 \r
85   public Pattern clone1(Hashtable h)\r
86   {\r
87     try\r
88     {\r
89       Range r = new Range(lo, hi);\r
90       r.printBrackets = printBrackets;\r
91       return r;\r
92     }\r
93     catch (RegSyntax rs)\r
94     {\r
95       return null;\r
96     }\r
97   }\r
98 };\r