1 6 package tests.jfun.parsec.coloring; 7 import java.util.HashMap ; 8 13 final class HtmlBuffer { 14 private final StringBuffer buf = new StringBuffer (); 15 private final HashMap decorators = new HashMap (); 16 public String toString(){ 17 return "<html><body>\n"+buf.toString()+"\n</body></html>"; 18 } 19 public void add(final String name, final CharSequence cs, final int from, final int len){ 20 getDecorator(name).decorate(cs, from, len); 21 } 22 private void setDecorator(final String name, final Decorator decor){ 23 decorators.put(name, decor); 24 } 25 private Decorator getDecorator(final String name){ 26 final Decorator decor = (Decorator)decorators.get(name); 27 if(decor==null) return default_decor; 28 return decor; 29 } 30 public HtmlBuffer setColor(final String name, final String cl){ 31 setDecorator(name, new Decorator(){ 32 public void decorate(final CharSequence cs, final int from, final int len){ 33 color(buf, cl, cs, from, len); 34 } 35 }); 36 return this; 37 } 38 private final Decorator default_decor = new Decorator(){ 39 public void decorate(final CharSequence cs, final int from, final int len){ 40 encode(buf, cs, from, len); 41 } 42 }; 43 private static StringBuffer append(final StringBuffer buf, final String s, final int n){ 44 for(int i=0; i<n; i++){ 45 buf.append(s); 46 } 47 return buf; 48 } 49 private static StringBuffer encode(final StringBuffer buf, final CharSequence cs, final int from, final int len){ 50 for(int i=from; i<from+len; i++){ 51 final char c = cs.charAt(i); 52 switch(c){ 53 case ' ' : buf.append(" "); break; 54 case '\t': append(buf, " ", 1); break; 55 case '\r': break; 56 case '\n': buf.append("<br>\n"); break; 57 case '<' : buf.append("<"); break; 58 case '>' : buf.append(">"); break; 59 default: buf.append(c); 60 } 61 } 62 return buf; 63 } 64 private static StringBuffer color( 65 final StringBuffer buf, final String c, 66 final CharSequence cs, final int from, final int len){ 67 buf.append("<font color=").append(c).append(">"); 68 encode(buf, cs, from, len); 69 buf.append("</font>"); 70 return buf; 71 } 72 } 73 | Popular Tags |