--- /dev/null
+package//\r
+// This software is now distributed according to\r
+// the Lesser Gnu Public License. Please see\r
+// http://www.gnu.org/copyleft/lesser.txt for\r
+// the details.\r
+// -- Happy Computing!\r
+//\r
+com.stevesoft.pat;\r
+\r
+import com.stevesoft.pat.*;\r
+\r
+/** A tool that is used to make the \E, \U, \L, and \Q\r
+ elements of a substitution. */\r
+public class StringBufferLike implements BasicStringBufferLike {\r
+ BasicStringBufferLike sbl;\r
+ public StringBufferLike(BasicStringBufferLike sbl) {\r
+ this.sbl = sbl;\r
+ }\r
+ char mode = 'E', altMode = ' ';\r
+ public StringLike toStringLike() {\r
+ return sbl.toStringLike();\r
+ }\r
+ public String toString() {\r
+ return sbl.toString();\r
+ }\r
+ public void append(char c) {\r
+ \r
+ switch(mode) {\r
+ case 'u':\r
+ mode = altMode;\r
+ altMode = ' ';\r
+ case 'U':\r
+ sbl.append(CaseMgr.toUpperCase(c));\r
+ break;\r
+ case 'l':\r
+ mode = altMode;\r
+ altMode = ' ';\r
+ case 'L':\r
+ sbl.append(CaseMgr.toLowerCase(c));\r
+ break;\r
+ case 'Q':\r
+ if((c >= 'a' && c <= 'z')\r
+ || (c >= 'A' && c <= 'Z')\r
+ || (c >= '0' && c <= '9'))\r
+ ;\r
+ else\r
+ sbl.append('\\');\r
+ default:\r
+ sbl.append(c);\r
+ break;\r
+ }\r
+ }\r
+ public void append(String s) {\r
+ for(int i=0;i<s.length();i++)\r
+ append(s.charAt(i));\r
+ }\r
+ public void setMode(char c) {\r
+ if(c == 'u' || c == 'l')\r
+ if(altMode == ' ') altMode = mode;\r
+ mode = c;\r
+ }\r
+ public Object unwrap() {\r
+ return sbl.unwrap();\r
+ }\r
+}\r