diff --git a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java index 6c0757c92..bb03059a0 100644 --- a/src/main/java/org/codelibs/fess/taglib/FessFunctions.java +++ b/src/main/java/org/codelibs/fess/taglib/FessFunctions.java @@ -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 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 "
" + list.stream().collect(Collectors.joining("\n")) + "
"; + } + return "
" + list.stream().collect(Collectors.joining("\n")) + "
"; + } } diff --git a/src/main/webapp/WEB-INF/fe.tld b/src/main/webapp/WEB-INF/fe.tld index 7e2193d49..5b0f9ef75 100644 --- a/src/main/webapp/WEB-INF/fe.tld +++ b/src/main/webapp/WEB-INF/fe.tld @@ -249,4 +249,12 @@ java.lang.String replace(java.lang.Object, java.lang.String, java.lang.String) ${fe:replace(input, regex, replacement)} + + + Format a content as code. + formatCode + org.codelibs.fess.taglib.FessFunctions + java.lang.String formatCode(java.lang.String, java.lang.String, java.lang.String) + ${fe:formatCode("L", doc.content_description, "prettyprint")} + diff --git a/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java b/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java index e02e1cbc3..76ad90d8d 100644 --- a/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java +++ b/src/test/java/org/codelibs/fess/taglib/FessFunctionsTest.java @@ -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("
", value);
+
+        code = "aaa";
+        value = FessFunctions.formatCode("L", code, "prettyprint");
+        assertEquals("
aaa
", value); + + code = "aaa\nbbb"; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
aaa\nbbb
", value); + + code = "aaa\nbbb\nccc"; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
aaa\nbbb\nccc
", value); + + code = "L10:aaa"; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
aaa
", value); + + code = "L10:aaa\nL11:bbb"; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
aaa\nbbb
", value); + + code = "L10:aaa\nL11:bbb\nL12:ccc"; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
aaa\nbbb\nccc
", value); + + code = "aaa\nL11:bbb\nL12:ccc"; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
bbb\nccc
", value); + + code = "L10:aaa\nL11:bbb\nL12:ccc..."; + value = FessFunctions.formatCode("L", code, "prettyprint"); + assertEquals("
aaa\nbbb
", value); + + } }