# HG changeset patch # User František Kučera # Date 1439647926 -7200 # Node ID 8e38caf43ca824c4417ea8a9f45a8dce7e6fa019 # Parent 84bab99dda508847c8f8008b1474612df9722f4c SingleRecordFormatter: escape whitespace characters in the same way as in TabularFormatter diff -r 84bab99dda50 -r 8e38caf43ca8 java/sql-dk/src/info/globalcode/sql/dk/Functions.java --- a/java/sql-dk/src/info/globalcode/sql/dk/Functions.java Sat Aug 15 14:40:48 2015 +0200 +++ b/java/sql-dk/src/info/globalcode/sql/dk/Functions.java Sat Aug 15 16:12:06 2015 +0200 @@ -24,14 +24,14 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; -import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.Deque; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @@ -39,6 +39,9 @@ */ public class Functions { + private static final String NBSP = " "; + private static final Pattern WHITESPACE_TO_REPLACE = Pattern.compile("\\n|\\r|\\t|" + NBSP); + private Functions() { } @@ -185,4 +188,53 @@ return hierarchy; } + + /** + * TODO: support background or styles and move to ColorfulPrintWriter + * + * @param out + * @param valueString + * @param basicColor + * @param escapeColor + */ + public static void printValueWithWhitespaceReplaced(ColorfulPrintWriter out, String valueString, ColorfulPrintWriter.TerminalColor basicColor, ColorfulPrintWriter.TerminalColor escapeColor) { + + Matcher m = WHITESPACE_TO_REPLACE.matcher(valueString); + + int start = 0; + + while (m.find(start)) { + + printColorOrNot(out, basicColor, valueString.substring(start, m.start())); + + switch (m.group()) { + case "\n": + out.print(escapeColor, "↲"); + break; + case "\r": + out.print(escapeColor, "⏎"); + break; + case "\t": + out.print(escapeColor, "↹"); + break; + case NBSP: + out.print(escapeColor, "⎵"); + break; + default: + throw new IllegalStateException("Unexpected whitespace token: „" + m.group() + "“"); + } + + start = m.end(); + } + + printColorOrNot(out, basicColor, valueString.substring(start, valueString.length())); + } + + private static void printColorOrNot(ColorfulPrintWriter out, ColorfulPrintWriter.TerminalColor color, String text) { + if (color == null) { + out.print(text); + } else { + out.print(color, text); + } + } } diff -r 84bab99dda50 -r 8e38caf43ca8 java/sql-dk/src/info/globalcode/sql/dk/formatting/SingleRecordFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/SingleRecordFormatter.java Sat Aug 15 14:40:48 2015 +0200 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/SingleRecordFormatter.java Sat Aug 15 16:12:06 2015 +0200 @@ -18,6 +18,7 @@ package info.globalcode.sql.dk.formatting; import info.globalcode.sql.dk.ColorfulPrintWriter; +import info.globalcode.sql.dk.Functions; import info.globalcode.sql.dk.configuration.PropertyDeclaration; import static info.globalcode.sql.dk.formatting.CommonProperties.COLORFUL; import static info.globalcode.sql.dk.formatting.CommonProperties.COLORFUL_DESCRIPTION; @@ -61,10 +62,14 @@ super.writeColumnValue(value); String columnName = getCurrentColumnsHeader().getColumnDescriptors().get(getCurrentColumnsCount() - 1).getLabel(); out.print(ColorfulPrintWriter.TerminalColor.Green, columnName + ": "); - out.print(String.valueOf(value)); + Functions.printValueWithWhitespaceReplaced(out, toString(value), null, ColorfulPrintWriter.TerminalColor.Red); println(); } + private static String toString(Object value) { + return String.valueOf(value); + } + @Override public void writeUpdatesResult(int updatedRowsCount) { super.writeUpdatesResult(updatedRowsCount); diff -r 84bab99dda50 -r 8e38caf43ca8 java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java --- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Sat Aug 15 14:40:48 2015 +0200 +++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.java Sat Aug 15 16:12:06 2015 +0200 @@ -19,6 +19,7 @@ import info.globalcode.sql.dk.ColorfulPrintWriter; import static info.globalcode.sql.dk.ColorfulPrintWriter.*; +import info.globalcode.sql.dk.Functions; import static info.globalcode.sql.dk.Functions.lpad; import static info.globalcode.sql.dk.Functions.rpad; import static info.globalcode.sql.dk.Functions.repeat; @@ -26,8 +27,6 @@ import static info.globalcode.sql.dk.formatting.CommonProperties.COLORFUL; import static info.globalcode.sql.dk.formatting.CommonProperties.COLORFUL_DESCRIPTION; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** *

@@ -53,8 +52,6 @@ private static final String HEADER_TYPE_SUFFIX = ")"; public static final String PROPERTY_ASCII = "ascii"; public static final String PROPERTY_TRIM = "trim"; - private static final String NBSP = " "; - private static final Pattern whitespaceToReplace = Pattern.compile("\\n|\\r|\\t|" + NBSP); protected ColorfulPrintWriter out; private boolean firstResult = true; private int[] columnWidth; @@ -165,8 +162,7 @@ printTableBorder(" │ "); } - String valueString = toString(value); - printValueWithWhitespaceReplaced(valueString); + Functions.printValueWithWhitespaceReplaced(out, toString(value), TerminalColor.Cyan, TerminalColor.Red); if (isCurrentColumnLast()) { printTableBorder(" │"); @@ -277,36 +273,4 @@ protected void printTableIndent() { out.print(" "); } - - protected void printValueWithWhitespaceReplaced(String valueString) { - - Matcher m = whitespaceToReplace.matcher(valueString); - - int start = 0; - while (m.find(start)) { - - out.print(TerminalColor.Cyan, valueString.substring(start, m.start())); - - switch (m.group()) { - case "\n": - out.print(TerminalColor.Red, "↲"); - break; - case "\r": - out.print(TerminalColor.Red, "⏎"); - break; - case "\t": - out.print(TerminalColor.Red, "↹"); - break; - case NBSP: - out.print(TerminalColor.Red, "⎵"); - break; - default: - throw new IllegalStateException("Unexpected whitespace token: „" + m.group() + "“"); - } - - start = m.end(); - } - - out.print(TerminalColor.Cyan, valueString.substring(start, valueString.length())); - } }