SingleRecordFormatter: escape whitespace characters in the same way as in TabularFormatter v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sat, 15 Aug 2015 16:12:06 +0200
branchv_0
changeset 218 8e38caf43ca8
parent 217 84bab99dda50
child 219 3b1733fb3793
SingleRecordFormatter: escape whitespace characters in the same way as in TabularFormatter
java/sql-dk/src/info/globalcode/sql/dk/Functions.java
java/sql-dk/src/info/globalcode/sql/dk/formatting/SingleRecordFormatter.java
java/sql-dk/src/info/globalcode/sql/dk/formatting/TabularFormatter.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);
+		}
+	}
 }
--- 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()));
-	}
 }