1 package gnu.jemacs.lang; 2 import gnu.kawa.functions.DisplayFormat; 3 import gnu.lists.Consumer; 4 5 public class Print extends DisplayFormat 6 { 7 public Print (boolean readable) 8 { 9 super(readable, 'E'); 10 } 11 12 public static String escapeChar(int ch) 13 { 14 StringBuffer sbuf = new StringBuffer (); 15 sbuf.append('?'); 16 if (ch < ' ') 17 { 18 sbuf.append('\\'); 19 switch (ch) 20 { 21 case '\t': sbuf.append('t'); break; 22 case '\n': sbuf.append('n'); break; 23 case '\r': sbuf.append('r'); break; 24 default: 25 sbuf.append('^'); 26 sbuf.append((char) (ch + 64)); 27 if ((ch + 64) == '\\') 28 sbuf.append('\\'); 29 } 30 } 31 else if (ch < 127) 32 { 33 34 switch (ch) 35 { 36 case ' ': 37 case '"': 38 case '#': 39 case '\'': 40 case '(': 41 case ')': 42 case ',': 43 case '.': 44 case ';': 45 case '?': 46 case '[': 47 case '\\': 48 case ']': 49 case '`': 50 sbuf.append('\\'); 51 } 52 sbuf.append((char) ch); 53 } 54 else if (ch == 127) 55 sbuf.append("\\^?"); 56 else 57 { 58 if (ch < 160) 59 sbuf.append("\\^"); 60 sbuf.append(ch); 61 } 62 return sbuf.toString(); 63 } 64 65 public void write (int v, Consumer out) 66 { 67 if (getReadableOutput ()) 68 write(Print.escapeChar(v), out); 69 else 70 out.write(v); 71 } 72 73 } 74 | Popular Tags |