Kawai Wiki

Rev

Rev 95 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
93 soliveira 1
package org.kawai.tag.kcode;
2
 
3
import java.util.Iterator;
4
import java.util.Map;
5
 
6
import javax.servlet.jsp.PageContext;
7
 
8
public class Code implements KCode {
9
 
10
        @Override
11
        public boolean hasBody() {
12
                return true;
13
        }
14
 
15
        @Override
16
        public String getTag() {
17
                return "code";
18
        }
19
 
20
        @Override
21
        public String process(PageContext context, Map<String, String> attrs, String html) {
22
 
23
                StringBuilder sb = new StringBuilder(1024 * 10);
24
 
25
                boolean indent = true;
26
 
27
                if (attrs.containsKey("ul")) {
28
                        indent = attrs.get("ul").equals("true");
29
                }
30
 
31
                if (indent) sb.append("<ul>");
32
                sb.append(buildOpenShTag(attrs));
33
                sb.append(html);
34
                sb.append("</pre>");
35
                if (indent) sb.append("</ul>");
36
                return sb.toString();
37
        }
38
 
39
        private static String buildOpenShTag(Map<String, String> map) {
40
                StringBuilder sb = new StringBuilder(256);
41
                sb.append("<pre class=\"");
42
                if (map.containsKey("brush")) {
43
                        sb.append("brush: ").append(map.get("brush")).append(";");
44
                } else {
45
                        sb.append("brush: java;");
46
                }
47
                map.remove("brush");
48
                if (map.containsKey("highlight")) {
49
                        sb.append(" highlight: [").append(map.get("highlight")).append("];");
50
                }
51
                map.remove("highlight");
52
                Iterator<String> iter = map.keySet().iterator();
53
                while(iter.hasNext()) {
54
                        String name = iter.next();
55
                        if (name.equals("ul")) continue;
56
                        String value = map.get(name);
57
                        sb.append(" ").append(name).append(": ").append(value).append(";");
58
                }
59
                sb.append("\">");
60
                return sb.toString();
61
        }
62
}