Kawai Wiki

Rev

Rev 154 | Rev 195 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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