Copyright test
[jalview.git] / src / com / stevesoft / pat / Range.java
1 /*******************************************************************************
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $(date) The Jalview Authors
4  *
5  * This file is part of Jalview.
6  *  
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *   
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  *******************************************************************************/
21 //
22 // This software is now distributed according to
23 // the Lesser Gnu Public License.  Please see
24 // http://www.gnu.org/copyleft/lesser.txt for
25 // the details.
26 //    -- Happy Computing!
27 //
28 package com.stevesoft.pat;
29
30 import java.util.Hashtable;
31
32 /** Thrown when one encounters things like [z-a] */
33 class BadRangeArgs extends RegSyntax
34 {
35 };
36
37 /**
38  * Implments a subelement (ranges) of the [] pattern element. For example,
39  * [a-z023] is implemented using a range and tree oneChar classes.
40  * 
41  * @see Bracket
42  * @see oneChar
43  */
44 class Range extends Pattern
45 {
46   char lo, hi, altlo, althi;
47
48   boolean printBrackets = false;
49
50   public String toString()
51   {
52     String s = protect("" + lo, PROTECT_THESE, ESC) + "-"
53             + protect("" + hi, PROTECT_THESE, ESC);
54     if (!printBrackets)
55     {
56       return s;
57     }
58     return "[" + s + "]";
59   }
60
61   Range(char loi, char hii) throws RegSyntax
62   {
63     lo = loi;
64     hi = hii;
65     oneChar o = null;
66     if (lo >= hi)
67     {
68       // throw new BadRangeArgs();
69       RegSyntaxError.endItAll("Badly formed []'s : " + lo + " >= " + hi);
70     }
71     o = new oneChar(lo);
72     altlo = o.altc;
73     o = new oneChar(hi);
74     althi = o.altc;
75   }
76
77   public int matchInternal(int pos, Pthings pt)
78   {
79     if (pos >= pt.src.length())
80     {
81       return -1;
82     }
83     if (Masked(pos, pt))
84     {
85       return -1;
86     }
87     char c = pt.src.charAt(pos);
88     if (lo <= c && c <= hi || (pt.ignoreCase && (altlo <= c && c <= althi)))
89     {
90       return nextMatch(pos + 1, pt);
91     }
92     return -1;
93   }
94
95   public patInt minChars()
96   {
97     return new patInt(1);
98   }
99
100   public patInt maxChars()
101   {
102     return new patInt(1);
103   }
104
105   public Pattern clone1(Hashtable h)
106   {
107     try
108     {
109       Range r = new Range(lo, hi);
110       r.printBrackets = printBrackets;
111       return r;
112     } catch (RegSyntax rs)
113     {
114       return null;
115     }
116   }
117 };