1 package com.guinetik.hexafun.examples.tui;
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public final class Ansi {
16
17 private Ansi() {}
18
19
20
21
22
23 public static final String RESET = "\u001B[0m";
24 public static final String BOLD = "\u001B[1m";
25 public static final String DIM = "\u001B[2m";
26 public static final String ITALIC = "\u001B[3m";
27 public static final String UNDERLINE = "\u001B[4m";
28
29
30
31
32
33 public static final String BLACK = "\u001B[30m";
34 public static final String RED = "\u001B[31m";
35 public static final String GREEN = "\u001B[32m";
36 public static final String YELLOW = "\u001B[33m";
37 public static final String BLUE = "\u001B[34m";
38 public static final String MAGENTA = "\u001B[35m";
39 public static final String CYAN = "\u001B[36m";
40 public static final String WHITE = "\u001B[37m";
41
42
43 public static final String BRIGHT_BLACK = "\u001B[90m";
44 public static final String BRIGHT_RED = "\u001B[91m";
45 public static final String BRIGHT_GREEN = "\u001B[92m";
46 public static final String BRIGHT_YELLOW = "\u001B[93m";
47 public static final String BRIGHT_BLUE = "\u001B[94m";
48 public static final String BRIGHT_MAGENTA = "\u001B[95m";
49 public static final String BRIGHT_CYAN = "\u001B[96m";
50 public static final String BRIGHT_WHITE = "\u001B[97m";
51
52
53
54
55
56 public static final String BG_BLACK = "\u001B[40m";
57 public static final String BG_RED = "\u001B[41m";
58 public static final String BG_GREEN = "\u001B[42m";
59 public static final String BG_YELLOW = "\u001B[43m";
60 public static final String BG_BLUE = "\u001B[44m";
61 public static final String BG_MAGENTA = "\u001B[45m";
62 public static final String BG_CYAN = "\u001B[46m";
63 public static final String BG_WHITE = "\u001B[47m";
64
65
66
67
68
69 public static final String CLEAR_SCREEN = "\u001B[2J";
70 public static final String CLEAR = CLEAR_SCREEN;
71 public static final String CURSOR_HOME = "\u001B[H";
72 public static final String HIDE_CURSOR = "\u001B[?25l";
73 public static final String SHOW_CURSOR = "\u001B[?25h";
74
75
76 public static final String ALT_SCREEN_ON = "\u001B[?1049h";
77 public static final String ALT_SCREEN_OFF = "\u001B[?1049l";
78
79
80
81
82
83
84 public static final String BOX_TOP_LEFT = "\u250C";
85 public static final String BOX_TOP_RIGHT = "\u2510";
86 public static final String BOX_BOTTOM_LEFT = "\u2514";
87 public static final String BOX_BOTTOM_RIGHT = "\u2518";
88 public static final String BOX_HORIZONTAL = "\u2500";
89 public static final String BOX_VERTICAL = "\u2502";
90 public static final String BOX_T_DOWN = "\u252C";
91 public static final String BOX_T_UP = "\u2534";
92 public static final String BOX_T_RIGHT = "\u251C";
93 public static final String BOX_T_LEFT = "\u2524";
94 public static final String BOX_CROSS = "\u253C";
95
96
97 public static final String DBOX_TOP_LEFT = "\u2554";
98 public static final String DBOX_TOP_RIGHT = "\u2557";
99 public static final String DBOX_BOTTOM_LEFT = "\u255A";
100 public static final String DBOX_BOTTOM_RIGHT = "\u255D";
101 public static final String DBOX_HORIZONTAL = "\u2550";
102 public static final String DBOX_VERTICAL = "\u2551";
103
104
105
106
107
108
109 public static final String CHECK = "\uEAB2";
110 public static final String CROSS = "\uEA76";
111 public static final String BULLET = "\uEABC";
112 public static final String ARROW_RIGHT = "\uEA9C";
113 public static final String ARROW_LEFT = "\uEA9B";
114 public static final String STAR = "\uF005";
115 public static final String EMPTY_STAR = "\uEA6A";
116
117
118 public static final String ICON_TASK = "\uEB67";
119 public static final String ICON_DASHBOARD = "\uEACD";
120 public static final String ICON_ADD = "\uEA60";
121 public static final String ICON_TRASH = "\uEA81";
122 public static final String ICON_CHECK_ALL = "\uEBB1";
123 public static final String ICON_INBOX = "\uEB09";
124 public static final String ICON_FOLDER = "\uEA83";
125 public static final String ICON_FLAME = "\uEAF2";
126 public static final String ICON_GEAR = "\uEAF8";
127 public static final String ICON_EYE = "\uEAE5";
128 public static final String ICON_INFO = "\uEAFC";
129 public static final String ICON_EDIT = "\uEA73";
130 public static final String ICON_SEARCH = "\uEA6D";
131 public static final String ICON_HOME = "\uEAF0";
132 public static final String ICON_TERMINAL = "\uEA85";
133
134
135 public static final String BLOCK_FULL = "\u2588";
136 public static final String BLOCK_LIGHT = "\u2591";
137 public static final String BLOCK_MED = "\u2592";
138 public static final String BLOCK_DARK = "\u2593";
139
140
141 public static final String PL_LEFT = "\uE0B0";
142 public static final String PL_RIGHT = "\uE0B2";
143 public static final String PL_LEFT_SOFT = "\uE0B1";
144 public static final String PL_RIGHT_SOFT = "\uE0B3";
145
146
147
148
149
150
151 public static String color(String text, String... codes) {
152 if (codes.length == 0) return text;
153 StringBuilder sb = new StringBuilder();
154 for (String code : codes) {
155 sb.append(code);
156 }
157 return sb.append(text).append(RESET).toString();
158 }
159
160
161 public static String bold(String text) {
162 return BOLD + text + RESET;
163 }
164
165
166 public static String dim(String text) {
167 return DIM + text + RESET;
168 }
169
170
171 public static void clear() {
172 System.out.print(CLEAR_SCREEN + CURSOR_HOME);
173 System.out.flush();
174 }
175
176
177 public static void hideCursor() {
178 System.out.print(HIDE_CURSOR);
179 System.out.flush();
180 }
181
182
183 public static void showCursor() {
184 System.out.print(SHOW_CURSOR);
185 System.out.flush();
186 }
187
188
189
190
191
192
193 public static String repeat(char c, int count) {
194 return String.valueOf(c).repeat(Math.max(0, count));
195 }
196
197
198 public static String repeat(String s, int count) {
199 return s.repeat(Math.max(0, count));
200 }
201
202
203 public static String pad(String text, int width) {
204 if (text.length() >= width) {
205 return text.substring(0, width);
206 }
207 return text + " ".repeat(width - text.length());
208 }
209
210
211 public static String padLeft(String text, int width) {
212 if (text.length() >= width) {
213 return text.substring(0, width);
214 }
215 return " ".repeat(width - text.length()) + text;
216 }
217
218
219 public static String center(String text, int width) {
220 if (text.length() >= width) {
221 return text.substring(0, width);
222 }
223 int padding = (width - text.length()) / 2;
224 return (
225 " ".repeat(padding) +
226 text +
227 " ".repeat(width - text.length() - padding)
228 );
229 }
230
231
232 public static String truncate(String text, int maxWidth) {
233 if (text.length() <= maxWidth) return text;
234 return text.substring(0, Math.max(0, maxWidth - 3)) + "...";
235 }
236
237
238 public static String lines(String... lines) {
239 return String.join("\n", lines) + "\n";
240 }
241 }