KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > tests > jfun > parsec > coloring > HtmlBuffer


1 /*
2  * Created on Dec 7, 2004
3  *
4  * Author Ben Yu
5  */

6 package tests.jfun.parsec.coloring;
7 import java.util.HashMap JavaDoc;
8 /**
9  * @author Ben Yu
10  *
11  * Dec 7, 2004
12  */

13 final class HtmlBuffer {
14   private final StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
15   private final HashMap JavaDoc decorators = new HashMap JavaDoc();
16   public String JavaDoc toString(){
17     return "<html><body>\n"+buf.toString()+"\n</body></html>";
18   }
19   public void add(final String JavaDoc name, final CharSequence JavaDoc cs, final int from, final int len){
20     getDecorator(name).decorate(cs, from, len);
21   }
22   private void setDecorator(final String JavaDoc name, final Decorator decor){
23     decorators.put(name, decor);
24   }
25   private Decorator getDecorator(final String JavaDoc 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 JavaDoc name, final String JavaDoc cl){
31     setDecorator(name, new Decorator(){
32       public void decorate(final CharSequence JavaDoc 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 JavaDoc cs, final int from, final int len){
40       encode(buf, cs, from, len);
41     }
42   };
43   private static StringBuffer JavaDoc append(final StringBuffer JavaDoc buf, final String JavaDoc 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 JavaDoc encode(final StringBuffer JavaDoc buf, final CharSequence JavaDoc 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("&nbsp;"); break;
54         case '\t': append(buf, "&nbsp;", 1); break;
55         case '\r': break;
56         case '\n': buf.append("<br>\n"); break;
57         case '<' : buf.append("&lt;"); break;
58         case '>' : buf.append("&gt;"); break;
59         default: buf.append(c);
60       }
61     }
62     return buf;
63   }
64   private static StringBuffer JavaDoc color(
65       final StringBuffer JavaDoc buf, final String JavaDoc c,
66     final CharSequence JavaDoc 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