Kawai Wiki

Rev

Rev 202 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 202 Rev 222
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
    /**
18
    /**
19
     * {@inheritDoc}.
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 = false;
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
       
53
       
54
        boolean noBR = false;
-
 
-
 
54
        boolean noBR = true;
55
        if (attrs.containsKey("noBR")) {
55
        if (attrs.containsKey("noBR")) {
56
                noBR = attrs.get("noBR").equals("true");
56
                noBR = attrs.get("noBR").equals("true");
57
        }
57
        }
58
        if (!noBR) sb.append("<br/>");
58
        if (!noBR) sb.append("<br/>");
59
        return sb.toString();
59
        return sb.toString();
60
    }
60
    }
61
61
62
    /**
62
    /**
63
     * Escapes the angle brackets.
63
     * Escapes the angle brackets.
64
     * @param html String
64
     * @param html String
65
     * @return String
65
     * @return String
66
     */
66
     */
67
    public static String escapeAngleBrackets(String html) {
67
    public static String escapeAngleBrackets(String html) {
68
        String s = Regex.sub(html, "s/\\</\\&lt\\;/g");
68
        String s = Regex.sub(html, "s/\\</\\&lt\\;/g");
69
        s = Regex.sub(s, "s/\\>/\\&gt\\;/g");
69
        s = Regex.sub(s, "s/\\>/\\&gt\\;/g");
70
        return s;
70
        return s;
71
    }
71
    }
72
72
73
    /**
73
    /**
74
     * Builds the tag for syntax highlight.
74
     * Builds the tag for syntax highlight.
75
     * @param map Map<String, String>
75
     * @param map Map<String, String>
76
     * @return String
76
     * @return String
77
     */
77
     */
78
    private static String buildOpenShTag(Map<String, String> map) {
78
    private static String buildOpenShTag(Map<String, String> map) {
79
        StringBuilder sb = new StringBuilder(256);
79
        StringBuilder sb = new StringBuilder(256);
80
        sb.append("<pre class=\"");
80
        sb.append("<pre class=\"");
81
        if (map.containsKey("brush")) {
81
        if (map.containsKey("brush")) {
82
            sb.append("brush: ").append(map.get("brush")).append(";");
82
            sb.append("brush: ").append(map.get("brush")).append(";");
83
        } else {
83
        } else {
84
            sb.append("brush: java;");
84
            sb.append("brush: java;");
85
        }
85
        }
86
        map.remove("brush");
86
        map.remove("brush");
87
        if (map.containsKey("highlight")) {
87
        if (map.containsKey("highlight")) {
88
            sb.append(" highlight: [").append(map.get("highlight")).append("];");
88
            sb.append(" highlight: [").append(map.get("highlight")).append("];");
89
        }
89
        }
90
        map.remove("highlight");
90
        map.remove("highlight");
91
        Iterator<String> iter = map.keySet().iterator();
91
        Iterator<String> iter = map.keySet().iterator();
92
        while (iter.hasNext()) {
92
        while (iter.hasNext()) {
93
            String name = iter.next();
93
            String name = iter.next();
94
            if (name.equals("ul")) continue;
94
            if (name.equals("ul")) continue;
95
            String value = map.get(name);
95
            String value = map.get(name);
96
            sb.append(" ").append(name).append(": ").append(value).append(";");
96
            sb.append(" ").append(name).append(": ").append(value).append(";");
97
        }
97
        }
98
        sb.append("\">");
98
        sb.append("\">");
99
        return sb.toString();
99
        return sb.toString();
100
    }
100
    }
101
}
101
}
102
 
102