Kawai Wiki

Rev

Rev 154 | Rev 195 | Go to most recent revision | Details | Compare with Previous | 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
 
95 soliveira 8
import org.mentaregex.Regex;
9
 
194 helio.frota 10
/**
11
 * KCode class Code.
12
 *
13
 * @author Sergio Oliveira
14
 *
15
 */
93 soliveira 16
public class Code implements KCode {
17
 
194 helio.frota 18
        /**
19
     * {@inheritDoc}
20
     */
21
    @Override
22
    public boolean hasBody() {
23
        return true;
24
    }
25
 
26
    /**
27
     * {@inheritDoc}
28
     */
29
    @Override
30
    public String getTag() {
31
        return "code";
32
    }
33
 
34
    /**
35
     * {@inheritDoc}
36
     */
37
    @Override
38
    public String process(PageContext context, Map<String, String> attrs, String html) {
39
 
40
        StringBuilder sb = new StringBuilder(1024 * 10);
41
 
42
        boolean indent = true;
43
 
44
        if (attrs.containsKey("ul")) {
45
            indent = attrs.get("ul").equals("true");
46
        }
47
 
48
        if (indent) sb.append("<ul>");
49
        sb.append(buildOpenShTag(attrs));
50
        sb.append(escapeAngleBrackets(html));
51
        sb.append("</pre>");
52
        if (indent) sb.append("</ul>");
53
        sb.append("<br/>");
54
        return sb.toString();
55
    }
56
 
57
    private String escapeAngleBrackets(String html) {
58
        String s = Regex.sub(html, "s/\\</\\&lt\\;/g");
59
        s = Regex.sub(s, "s/\\>/\\&gt\\;/g");
60
        return s;
61
    }
62
 
63
    private static String buildOpenShTag(Map<String, String> map) {
64
        StringBuilder sb = new StringBuilder(256);
65
        sb.append("<pre class=\"");
66
        if (map.containsKey("brush")) {
67
            sb.append("brush: ").append(map.get("brush")).append(";");
68
        } else {
69
            sb.append("brush: java;");
70
        }
71
        map.remove("brush");
72
        if (map.containsKey("highlight")) {
73
            sb.append(" highlight: [").append(map.get("highlight")).append("];");
74
        }
75
        map.remove("highlight");
76
        Iterator<String> iter = map.keySet().iterator();
77
        while(iter.hasNext()) {
78
            String name = iter.next();
79
            if (name.equals("ul")) continue;
80
            String value = map.get(name);
81
            sb.append(" ").append(name).append(": ").append(value).append(";");
82
        }
83
        sb.append("\">");
84
        return sb.toString();
85
    }
86
}