SingleRecordFormatter: escape whitespace characters in the same way as in TabularFormatter
--- 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);
+ }
+ }
}
--- 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);
--- 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;
/**
* <p>
@@ -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()));
- }
}