Rev 202 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package org.kawai.tag.kcode;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.jsp.PageContext;
import org.mentaregex.Regex;
/**
* KCode class Code.
*
* @author Sergio Oliveira
*
*/
public class Code
implements KCode
{
/**
* {@inheritDoc}.
*/
@
Override
public boolean hasBody
() {
return true;
}
/**
* {@inheritDoc}
*/
@
Override
public String getTag
() {
return "code";
}
/**
* {@inheritDoc}
*/
@
Override
public String process
(PageContext context,
Map<String,
String> attrs,
String html
) {
StringBuilder sb =
new StringBuilder(1024 * 10);
boolean indent =
false;
if (attrs.
containsKey("ul")) {
indent = attrs.
get("ul").
equals("true");
}
if (indent
) sb.
append("<ul>");
sb.
append(buildOpenShTag
(attrs
));
sb.
append(escapeAngleBrackets
(html
));
sb.
append("</pre>");
if (indent
) sb.
append("</ul>");
boolean noBR =
true;
if (attrs.
containsKey("noBR")) {
noBR = attrs.
get("noBR").
equals("true");
}
if (!noBR
) sb.
append("<br/>");
return sb.
toString();
}
/**
* Escapes the angle brackets.
* @param html String
* @return String
*/
public static String escapeAngleBrackets
(String html
) {
String s = Regex.
sub(html,
"s/\\</\\<\\;/g");
s = Regex.
sub(s,
"s/\\>/\\>\\;/g");
return s
;
}
/**
* Builds the tag for syntax highlight.
* @param map Map<String, String>
* @return String
*/
private static String buildOpenShTag
(Map<String,
String> map
) {
StringBuilder sb =
new StringBuilder(256);
sb.
append("<pre class=\"");
if (map.
containsKey("brush")) {
sb.
append("brush: ").
append(map.
get("brush")).
append(";");
} else {
sb.
append("brush: java;");
}
map.
remove("brush");
if (map.
containsKey("highlight")) {
sb.
append(" highlight: [").
append(map.
get("highlight")).
append("];");
}
map.
remove("highlight");
Iterator<String> iter = map.
keySet().
iterator();
while (iter.
hasNext()) {
String name = iter.
next();
if (name.
equals("ul")) continue;
String value = map.
get(name
);
sb.
append(" ").
append(name
).
append(": ").
append(value
).
append(";");
}
sb.
append("\">");
return sb.
toString();
}
}