6987eec87b7c6d7bdb6eb81e826e5e6286f6dab8
[jalview.git] / src / com / stevesoft / pat / StringBufferLike.java
1 package//\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 com.stevesoft.pat;\r
9 \r
10 import com.stevesoft.pat.*;\r
11 \r
12 /** A tool that is used to make the \E, \U, \L, and \Q\r
13     elements of a substitution. */\r
14 public class StringBufferLike implements BasicStringBufferLike {\r
15   BasicStringBufferLike sbl;\r
16   public StringBufferLike(BasicStringBufferLike sbl) {\r
17     this.sbl = sbl;\r
18   }\r
19   char mode = 'E', altMode = ' ';\r
20   public StringLike toStringLike() {\r
21     return sbl.toStringLike();\r
22   }\r
23   public String toString() {\r
24     return sbl.toString();\r
25   }\r
26   public void append(char c) {\r
27     \r
28     switch(mode) {\r
29     case 'u':\r
30       mode = altMode;\r
31       altMode = ' ';\r
32     case 'U':\r
33       sbl.append(CaseMgr.toUpperCase(c));\r
34       break;\r
35     case 'l':\r
36       mode = altMode;\r
37       altMode = ' ';\r
38     case 'L':\r
39       sbl.append(CaseMgr.toLowerCase(c));\r
40       break;\r
41     case 'Q':\r
42       if((c >= 'a' && c <= 'z')\r
43       || (c >= 'A' && c <= 'Z')\r
44       || (c >= '0' && c <= '9'))\r
45         ;\r
46       else\r
47         sbl.append('\\');\r
48     default:\r
49       sbl.append(c);\r
50       break;\r
51     }\r
52   }\r
53   public void append(String s) {\r
54     for(int i=0;i<s.length();i++)\r
55       append(s.charAt(i));\r
56   }\r
57   public void setMode(char c) {\r
58     if(c == 'u' || c == 'l')\r
59       if(altMode == ' ') altMode = mode;\r
60     mode = c;\r
61   }\r
62   public Object unwrap() {\r
63     return sbl.unwrap();\r
64   }\r
65 }\r