1.1 --- a/java/sql-dk/src/info/globalcode/sql/dk/Functions.java Sat Aug 15 14:40:48 2015 +0200
1.2 +++ b/java/sql-dk/src/info/globalcode/sql/dk/Functions.java Sat Aug 15 16:12:06 2015 +0200
1.3 @@ -24,14 +24,14 @@
1.4 import java.io.InputStream;
1.5 import java.io.InputStreamReader;
1.6 import java.io.PrintWriter;
1.7 -import java.util.ArrayDeque;
1.8 import java.util.ArrayList;
1.9 import java.util.Arrays;
1.10 import java.util.Collection;
1.11 import java.util.Collections;
1.12 -import java.util.Deque;
1.13 import java.util.List;
1.14 import java.util.Map;
1.15 +import java.util.regex.Matcher;
1.16 +import java.util.regex.Pattern;
1.17
1.18 /**
1.19 *
1.20 @@ -39,6 +39,9 @@
1.21 */
1.22 public class Functions {
1.23
1.24 + private static final String NBSP = " ";
1.25 + private static final Pattern WHITESPACE_TO_REPLACE = Pattern.compile("\\n|\\r|\\t|" + NBSP);
1.26 +
1.27 private Functions() {
1.28 }
1.29
1.30 @@ -185,4 +188,53 @@
1.31
1.32 return hierarchy;
1.33 }
1.34 +
1.35 + /**
1.36 + * TODO: support background or styles and move to ColorfulPrintWriter
1.37 + *
1.38 + * @param out
1.39 + * @param valueString
1.40 + * @param basicColor
1.41 + * @param escapeColor
1.42 + */
1.43 + public static void printValueWithWhitespaceReplaced(ColorfulPrintWriter out, String valueString, ColorfulPrintWriter.TerminalColor basicColor, ColorfulPrintWriter.TerminalColor escapeColor) {
1.44 +
1.45 + Matcher m = WHITESPACE_TO_REPLACE.matcher(valueString);
1.46 +
1.47 + int start = 0;
1.48 +
1.49 + while (m.find(start)) {
1.50 +
1.51 + printColorOrNot(out, basicColor, valueString.substring(start, m.start()));
1.52 +
1.53 + switch (m.group()) {
1.54 + case "\n":
1.55 + out.print(escapeColor, "↲");
1.56 + break;
1.57 + case "\r":
1.58 + out.print(escapeColor, "⏎");
1.59 + break;
1.60 + case "\t":
1.61 + out.print(escapeColor, "↹");
1.62 + break;
1.63 + case NBSP:
1.64 + out.print(escapeColor, "⎵");
1.65 + break;
1.66 + default:
1.67 + throw new IllegalStateException("Unexpected whitespace token: „" + m.group() + "“");
1.68 + }
1.69 +
1.70 + start = m.end();
1.71 + }
1.72 +
1.73 + printColorOrNot(out, basicColor, valueString.substring(start, valueString.length()));
1.74 + }
1.75 +
1.76 + private static void printColorOrNot(ColorfulPrintWriter out, ColorfulPrintWriter.TerminalColor color, String text) {
1.77 + if (color == null) {
1.78 + out.print(text);
1.79 + } else {
1.80 + out.print(color, text);
1.81 + }
1.82 + }
1.83 }