This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 3199da4a8ba72112d882a9f23d65953d1954606b Author: Mark Thomas <ma...@apache.org> AuthorDate: Tue May 25 22:02:42 2021 +0100 Update import/export to handle POEditor behaviours The end results for Tomcat-Export->Tomcat-Import and Tomcat-Export->POEditor-Import->POEditor-Export->Tomcat-Import are now much more similar --- .../apache/tomcat/buildutil/translate/Import.java | 2 +- .../apache/tomcat/buildutil/translate/Utils.java | 53 ++++++++++++++++------ .../tomcat/buildutil/translate/TestUtils.java | 39 ++++++++++++++-- 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/java/org/apache/tomcat/buildutil/translate/Import.java b/java/org/apache/tomcat/buildutil/translate/Import.java index ae40353..e1fe9a3 100644 --- a/java/org/apache/tomcat/buildutil/translate/Import.java +++ b/java/org/apache/tomcat/buildutil/translate/Import.java @@ -82,7 +82,7 @@ public class Import { w.write(System.lineSeparator()); } - w.write(cKey.key + "=" + Utils.formatValue(value)); + w.write(cKey.key + "=" + Utils.formatValueImport(value)); w.write(System.lineSeparator()); } if (w != null) { diff --git a/java/org/apache/tomcat/buildutil/translate/Utils.java b/java/org/apache/tomcat/buildutil/translate/Utils.java index 326d7fc..4550448 100644 --- a/java/org/apache/tomcat/buildutil/translate/Utils.java +++ b/java/org/apache/tomcat/buildutil/translate/Utils.java @@ -32,9 +32,10 @@ import java.util.regex.Pattern; public class Utils { - private static final Pattern ADD_CONTINUATION = Pattern.compile("\\n", Pattern.MULTILINE); private static final Pattern ESCAPE_LEADING_SPACE = Pattern.compile("^(\\s)", Pattern.MULTILINE); - private static final Pattern FIX_SINGLE_QUOTE = Pattern.compile("(?<!')'(?!')", Pattern.MULTILINE); + + // Package private so it is visible to tests + static final String PADDING = "POEDITOR_EXPORT_PADDING_DO_NOT_DELETE"; private Utils() { // Utility class. Hide default constructor. @@ -59,21 +60,47 @@ public class Utils { } - static String formatValue(String in) { - String result = ADD_CONTINUATION.matcher(in).replaceAll("\\\\n\\\\\n"); - if (result.endsWith("\\\n")) { - result = result.substring(0, result.length() - 2); + static String formatValueExport(String in) { + String result; + + if (in.startsWith("\n")) { + result = PADDING + in; + } else { + result = in; } - result = ESCAPE_LEADING_SPACE.matcher(result).replaceAll("\\\\$1"); - if (result.contains("\n\\\t")) { - result = result.replace("\n\\\t", "\n\\t"); + return formatValueCommon(result); + } + + + static String formatValueImport(String in) { + String result; + + if (in.startsWith(PADDING)) { + result = in.substring(PADDING.length()); + } else { + result = in; } - if (result.contains("[{0}]")) { - result = FIX_SINGLE_QUOTE.matcher(result).replaceAll("''"); + return formatValueCommon(result); + } + + + /* + * Common formatting to convert a String for storage as a value in a + * property file. + */ + static String formatValueCommon(String in) { + String result = in.replace("\n", "\\n\\\n"); + if (result.endsWith("\\n\\\n")) { + result = result.substring(0, result.length() - 2); } - return result.trim(); + + result = ESCAPE_LEADING_SPACE.matcher(result).replaceAll("\\\\$1"); + + result = result.replaceAll("\t", "\\t"); + + return result; } @@ -143,7 +170,7 @@ public class Utils { String[] keys = translation.keySet().toArray(new String[0]); Arrays.sort(keys); for (Object key : keys) { - w.write(key + "=" + Utils.formatValue(translation.getProperty((String) key)) + "\n"); + w.write(key + "=" + Utils.formatValueExport(translation.getProperty((String) key)) + "\n"); } } catch (IOException ioe) { ioe.printStackTrace(); diff --git a/test/org/apache/tomcat/buildutil/translate/TestUtils.java b/test/org/apache/tomcat/buildutil/translate/TestUtils.java index 533ed95..f8a20f1 100644 --- a/test/org/apache/tomcat/buildutil/translate/TestUtils.java +++ b/test/org/apache/tomcat/buildutil/translate/TestUtils.java @@ -23,28 +23,57 @@ public class TestUtils { @Test public void testQuoteReplacement01() { - Assert.assertEquals("[{0}] a''a", Utils.formatValue("[{0}] a'a")); + Assert.assertEquals("[{0}] a''a", Utils.formatValueImport("[{0}] a'a")); } @Test public void testQuoteReplacement02() { - Assert.assertEquals("[{0}] a''", Utils.formatValue("[{0}] a'")); + Assert.assertEquals("[{0}] a''", Utils.formatValueImport("[{0}] a'")); } @Test public void testQuoteReplacement03() { - Assert.assertEquals("''a [{0}]", Utils.formatValue("'a [{0}]")); + Assert.assertEquals("''a [{0}]", Utils.formatValueImport("'a [{0}]")); } @Test public void testQuoteReplacement05() { - Assert.assertEquals("[{0}] ''a'' bbb", Utils.formatValue("[{0}] 'a' bbb")); + Assert.assertEquals("[{0}] ''a'' bbb", Utils.formatValueImport("[{0}] 'a' bbb")); } @Test public void testQuoteReplacement06() { - Assert.assertEquals("[{0}] ''aa'' bbb", Utils.formatValue("[{0}] 'aa' bbb")); + Assert.assertEquals("[{0}] ''aa'' bbb", Utils.formatValueImport("[{0}] 'aa' bbb")); } + @Test + public void testFormatValue01() { + // Import from Tomcat + Assert.assertEquals("\\n\\\n</web-fragment>\\n", Utils.formatValueImport("\\n\\\n</web-fragment>\\n")); + } + + @Test + public void testFormatValue02() { + // Import from POEditor + Assert.assertEquals("\\n\\\n</web-fragment>\\n", Utils.formatValueImport("\\n</web-fragment>\\n")); + } + + @Test + public void testFormatValue03() { + // Export from Tomcat + Assert.assertEquals("line1\\n\\\nline2\\n\\\nline3", Utils.formatValueExport("line1\nline2\nline3")); + } + + @Test + public void testFormatValue04() { + // Export from Tomcat + Assert.assertEquals(Utils.PADDING + "\\n\\\nline2\\n\\\nline3", Utils.formatValueExport("\nline2\nline3")); + } + + @Test + public void testFormatValue05() { + // Export from Tomcat + Assert.assertEquals("line1\\n\\\n\\tline2\\n\\\n\\tline3", Utils.formatValueExport("line1\n\tline2\n\tline3")); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org