fix #2243 add formatCode
This commit is contained in:
parent
f5cc83de6a
commit
d0ec71ccb5
3 changed files with 82 additions and 0 deletions
|
@ -27,6 +27,7 @@ import java.text.NumberFormat;
|
|||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Base64;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
|
@ -37,6 +38,8 @@ import java.util.Map;
|
|||
import java.util.Objects;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -359,4 +362,33 @@ public class FessFunctions {
|
|||
}
|
||||
return input.toString().replaceAll(regex, replacement);
|
||||
}
|
||||
|
||||
public static String formatCode(final String prefix, final String input, final String style) {
|
||||
if (input == null) {
|
||||
return StringUtil.EMPTY;
|
||||
}
|
||||
final Pattern pattern = Pattern.compile("^" + prefix + "([0-9]+):(.*)$");
|
||||
final String[] values = input.split("\n");
|
||||
final List<String> list = new ArrayList<>(values.length);
|
||||
int lineNum = 0;
|
||||
for (final String line : values) {
|
||||
final Matcher matcher = pattern.matcher(line);
|
||||
if (matcher.matches()) {
|
||||
if (lineNum == 0) {
|
||||
lineNum = Integer.parseInt(matcher.group(1));
|
||||
list.clear();
|
||||
}
|
||||
list.add(matcher.group(2));
|
||||
} else {
|
||||
list.add(line);
|
||||
}
|
||||
}
|
||||
if (list.get(list.size() - 1).endsWith("...")) {
|
||||
list.remove(list.size() - 1);
|
||||
}
|
||||
if (lineNum == 0) {
|
||||
return "<pre class=\"" + style + "\">" + list.stream().collect(Collectors.joining("\n")) + "</pre>";
|
||||
}
|
||||
return "<pre class=\"" + style + " linenums:" + lineNum + "\">" + list.stream().collect(Collectors.joining("\n")) + "</pre>";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -249,4 +249,12 @@
|
|||
<function-signature>java.lang.String replace(java.lang.Object, java.lang.String, java.lang.String)</function-signature>
|
||||
<example>${fe:replace(input, regex, replacement)}</example>
|
||||
</function>
|
||||
|
||||
<function>
|
||||
<description>Format a content as code.</description>
|
||||
<name>formatCode</name>
|
||||
<function-class>org.codelibs.fess.taglib.FessFunctions</function-class>
|
||||
<function-signature>java.lang.String formatCode(java.lang.String, java.lang.String, java.lang.String)</function-signature>
|
||||
<example>${fe:formatCode("L", doc.content_description, "prettyprint")}</example>
|
||||
</function>
|
||||
</taglib>
|
||||
|
|
|
@ -59,4 +59,46 @@ public class FessFunctionsTest extends UnitFessTestCase {
|
|||
date = FessFunctions.parseDate("D:20040401033456-05'00'", "pdf_date");
|
||||
assertEquals("2004-04-01T08:34:56.000Z", FessFunctions.formatDate(date));
|
||||
}
|
||||
|
||||
public void test_formatCode() {
|
||||
String code;
|
||||
String value;
|
||||
|
||||
code = "";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint\"></pre>", value);
|
||||
|
||||
code = "aaa";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint\">aaa</pre>", value);
|
||||
|
||||
code = "aaa\nbbb";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint\">aaa\nbbb</pre>", value);
|
||||
|
||||
code = "aaa\nbbb\nccc";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint\">aaa\nbbb\nccc</pre>", value);
|
||||
|
||||
code = "L10:aaa";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint linenums:10\">aaa</pre>", value);
|
||||
|
||||
code = "L10:aaa\nL11:bbb";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint linenums:10\">aaa\nbbb</pre>", value);
|
||||
|
||||
code = "L10:aaa\nL11:bbb\nL12:ccc";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint linenums:10\">aaa\nbbb\nccc</pre>", value);
|
||||
|
||||
code = "aaa\nL11:bbb\nL12:ccc";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint linenums:11\">bbb\nccc</pre>", value);
|
||||
|
||||
code = "L10:aaa\nL11:bbb\nL12:ccc...";
|
||||
value = FessFunctions.formatCode("L", code, "prettyprint");
|
||||
assertEquals("<pre class=\"prettyprint linenums:10\">aaa\nbbb</pre>", value);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue