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/\\</\\<\\;/g"); |
||
59 | s = Regex.sub(s, "s/\\>/\\>\\;/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 | } |