Kawai Wiki

Rev

Rev 194 | Rev 198 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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