needed for applet search
[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 import java.util.Hashtable;\r
10 \r
11 /** Thrown when one encounters things like [z-a] */\r
12 class BadRangeArgs extends RegSyntax {};\r
13 \r
14 /** Implments a subelement (ranges) of the [] pattern element.\r
15 For example, [a-z023] is implemented using a range and tree oneChar\r
16 classes.\r
17 @see Bracket\r
18 @see oneChar\r
19 */\r
20 class Range extends Pattern {\r
21     char lo,hi,altlo,althi;\r
22     boolean printBrackets = false;\r
23     public String toString() {\r
24         String s=protect(""+lo,PROTECT_THESE,ESC)+"-"\r
25             +protect(""+hi,PROTECT_THESE,ESC);\r
26         if(!printBrackets)\r
27             return s;\r
28         return "["+s+"]";\r
29     }\r
30     Range(char loi,char hii) throws RegSyntax {\r
31         lo = loi; hi = hii;\r
32         oneChar o = null;\r
33         if(lo >= hi)\r
34             //throw new BadRangeArgs();\r
35             RegSyntaxError.endItAll("Badly formed []'s : "+lo+" >= "+hi);\r
36         o = new oneChar(lo);\r
37         altlo = o.altc;\r
38         o = new oneChar(hi);\r
39         althi = o.altc;\r
40     }\r
41     public int matchInternal(int pos,Pthings pt) {\r
42         if(pos >= pt.src.length()) return -1;\r
43         if(Masked(pos,pt)) return -1;\r
44         char c = pt.src.charAt(pos);\r
45         if(lo <= c && c <= hi ||\r
46                 (pt.ignoreCase && (altlo <= c && c <= althi)))\r
47             return nextMatch(pos+1,pt);\r
48         return -1;\r
49     }\r
50     public patInt minChars() { return new patInt(1); }\r
51     public patInt maxChars() { return new patInt(1); }\r
52     public Pattern clone1(Hashtable h) {\r
53         try {\r
54             Range r = new Range(lo,hi);\r
55             r.printBrackets = printBrackets;\r
56             return r;\r
57         } catch(RegSyntax rs) {\r
58             return null;\r
59         }\r
60     }\r
61 };\r