Kawai Wiki

Rev

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

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