package krasa.grepconsole.ansi;
public class ColorTest {
final static String CSI = "\u001b[";
final static String RESET = CSI + "0m";
final static Prefix[] prefixes = { new Prefix(0, " 0 normal"), new Prefix(1, " 1 bold/increased intensity"),
new Prefix(3, " 3 italic on"), new Prefix(7, " 7 image negative"), new Prefix(8, " 8 conceal"),
new Prefix(51, "51 framed"), new Prefix(9, " 9 crossed out (strike)"),
new Prefix(4, " 4 underlined, single"), new Prefix(21, "21 undeline double") };
final static Integer[] colors = { 30, // normal
40, // background
90, // high intensity normal
100 // high intensity background
};
static void test16() {
int color;
final StringBuilder sb = new StringBuilder();
sb.append(String.format("==== ATTRIBUTES ====\n"));
sb.append(String.format(" %-28s", "Changing fg, default bg"));
sb.append(String.format("%-28s", "Default fg, changing bg"));
sb.append(String.format("%-28s", "High fg, default bg"));
sb.append(String.format("%s%n", "Default fg, high bg"));
for (Prefix prefix : prefixes) {
sb.append(String.format("%03d: ", prefix.val));
for (Integer command : colors) {
for (color = 0; color <= 7; color++)
sb.append(String.format(CSI + "%d;%dm{x}", prefix.val, command + color));
sb.append(RESET + " ");
}
sb.append(String.format(RESET + " // %s%n", prefix.desc));
print(sb);
}
System.out.println(RESET);
}
private static void print(StringBuilder sb) {
System.out.print(sb.toString());
sb.setLength(0);
}
static void test16matrix() {
final StringBuilder sb = new StringBuilder();
sb.append(String.format("==== 16 COLOR MATRIX ====\n"));
sb.append(String.format(" %-28s", "Normal fg, Normal bg"));
sb.append(String.format("%-28s", "Normal fg, high bg"));
sb.append(String.format("%-28s", "High fg, default bg"));
sb.append(String.format("%s%n", "High fg, high bg"));
for (int fg = 0; fg < 8; fg++) {
sb.append(String.format("%03d: ", fg));
for (int bg = 0; bg < 8; bg++)
sb.append(String.format(CSI + "%d;%dm{x}", 30 + fg, 40 + bg));
sb.append(RESET + " ");
for (int bg = 0; bg < 8; bg++)
sb.append(String.format(CSI + "%d;%dm{x}", 30 + fg, 100 + bg));
sb.append(RESET + " ");
for (int bg = 0; bg < 8; bg++)
sb.append(String.format(CSI + "%d;%dm{x}", 90 + fg, 40 + bg));
sb.append(RESET + " ");
for (int bg = 0; bg < 8; bg++)
sb.append(String.format(CSI + "%d;%dm{x}", 90 + fg, 100 + bg));
print(sb);
System.out.println(RESET);
}
System.out.println(RESET);
}
/* Java port of 256colors2.pl, http://www.frexx.de/xterm-256-notes */
static void test256() {
final StringBuilder sb = new StringBuilder();
int color;
// first the system ones:
sb.append("===== 256 COLORS =====\n");
sb.append("System colors:\n");
for (color = 0; color < 16; color++)
sb.append(String.format(CSI + "38;5;%dm{x}", color));
print(sb);
System.out.println(RESET);
for (color = 0; color < 16; color++)
sb.append(String.format(CSI + "48;5;%dm{x}", color));
print(sb);
System.out.println(RESET);
// now the color cube
sb.append("Color cube, 6x6x6:\n");
for (int green = 0; green < 6; green++) {
for (int red = 0; red < 6; red++) {
for (int blue = 0; blue < 6; blue++) {
color = 16 + (red * 36) + (green * 6) + blue;
sb.append(String.format(CSI + "38;5;%dm{x}", color));
}
sb.append(RESET + " ");
}
sb.append("\n");
print(sb);
}
for (int green = 0; green < 6; green++) {
for (int red = 0; red < 6; red++) {
for (int blue = 0; blue < 6; blue++) {
color = 16 + (red * 36) + (green * 6) + blue;
sb.append(String.format(CSI + "48;5;%dm ", color));
}
sb.append(RESET + " ");
}
sb.append("\n");
print(sb);
}
// now the grayscale ramp
sb.append("Grayscale ramp:\n");
for (color = 232; color < 256; color++)
sb.append(String.format(CSI + "38;5;%dm{x}", color));
print(sb);
System.out.println(RESET);
for (color = 232; color < 256; color++)
sb.append(String.format(CSI + "48;5;%dm ", color));
print(sb);
System.out.println(RESET + "\n");
}
public static void main(String[] args) {
test16();
test16matrix();
test256();
}
/**
* @author Vojtech Krasa
*/
static class Prefix {
int val;
String desc;
Prefix(int value, String description) {
val = value;
desc = description;
}
}
}