java/sql-dk/src/info/globalcode/sql/dk/Functions.java
branchv_0
changeset 218 8e38caf43ca8
parent 213 39d154429f7a
child 220 0bc544b38cfa
     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  }