22 import java.io.File; |
22 import java.io.File; |
23 import java.io.IOException; |
23 import java.io.IOException; |
24 import java.io.InputStream; |
24 import java.io.InputStream; |
25 import java.io.InputStreamReader; |
25 import java.io.InputStreamReader; |
26 import java.io.PrintWriter; |
26 import java.io.PrintWriter; |
27 import java.util.ArrayDeque; |
|
28 import java.util.ArrayList; |
27 import java.util.ArrayList; |
29 import java.util.Arrays; |
28 import java.util.Arrays; |
30 import java.util.Collection; |
29 import java.util.Collection; |
31 import java.util.Collections; |
30 import java.util.Collections; |
32 import java.util.Deque; |
|
33 import java.util.List; |
31 import java.util.List; |
34 import java.util.Map; |
32 import java.util.Map; |
|
33 import java.util.regex.Matcher; |
|
34 import java.util.regex.Pattern; |
35 |
35 |
36 /** |
36 /** |
37 * |
37 * |
38 * @author Ing. František Kučera (frantovo.cz) |
38 * @author Ing. František Kučera (frantovo.cz) |
39 */ |
39 */ |
40 public class Functions { |
40 public class Functions { |
|
41 |
|
42 private static final String NBSP = " "; |
|
43 private static final Pattern WHITESPACE_TO_REPLACE = Pattern.compile("\\n|\\r|\\t|" + NBSP); |
41 |
44 |
42 private Functions() { |
45 private Functions() { |
43 } |
46 } |
44 |
47 |
45 public static boolean equalz(Object a, Object b) { |
48 public static boolean equalz(Object a, Object b) { |
183 hierarchy.add(current); |
186 hierarchy.add(current); |
184 } |
187 } |
185 |
188 |
186 return hierarchy; |
189 return hierarchy; |
187 } |
190 } |
|
191 |
|
192 /** |
|
193 * TODO: support background or styles and move to ColorfulPrintWriter |
|
194 * |
|
195 * @param out |
|
196 * @param valueString |
|
197 * @param basicColor |
|
198 * @param escapeColor |
|
199 */ |
|
200 public static void printValueWithWhitespaceReplaced(ColorfulPrintWriter out, String valueString, ColorfulPrintWriter.TerminalColor basicColor, ColorfulPrintWriter.TerminalColor escapeColor) { |
|
201 |
|
202 Matcher m = WHITESPACE_TO_REPLACE.matcher(valueString); |
|
203 |
|
204 int start = 0; |
|
205 |
|
206 while (m.find(start)) { |
|
207 |
|
208 printColorOrNot(out, basicColor, valueString.substring(start, m.start())); |
|
209 |
|
210 switch (m.group()) { |
|
211 case "\n": |
|
212 out.print(escapeColor, "↲"); |
|
213 break; |
|
214 case "\r": |
|
215 out.print(escapeColor, "⏎"); |
|
216 break; |
|
217 case "\t": |
|
218 out.print(escapeColor, "↹"); |
|
219 break; |
|
220 case NBSP: |
|
221 out.print(escapeColor, "⎵"); |
|
222 break; |
|
223 default: |
|
224 throw new IllegalStateException("Unexpected whitespace token: „" + m.group() + "“"); |
|
225 } |
|
226 |
|
227 start = m.end(); |
|
228 } |
|
229 |
|
230 printColorOrNot(out, basicColor, valueString.substring(start, valueString.length())); |
|
231 } |
|
232 |
|
233 private static void printColorOrNot(ColorfulPrintWriter out, ColorfulPrintWriter.TerminalColor color, String text) { |
|
234 if (color == null) { |
|
235 out.print(text); |
|
236 } else { |
|
237 out.print(color, text); |
|
238 } |
|
239 } |
188 } |
240 } |