package com.jediterm.terminal.emulator; import com.jediterm.terminal.TerminalColor; import java.awt.*; /** * @author traff */ @SuppressWarnings("UseJBColor") public abstract class ColorPalette { public static final ColorPalette XTERM_PALETTE = new ColorPalette() { @Override public Color[] getIndexColors() { return new Color[]{ new Color(0x000000), //Black new Color(0xcd0000), //Red new Color(0x00cd00), //Green new Color(0xcdcd00), //Yellow new Color(0x1e90ff), //Blue new Color(0xcd00cd), //Magenta new Color(0x00cdcd), //Cyan new Color(0xe5e5e5), //White //Bright versions of the ISO colors new Color(0x4c4c4c), //Black new Color(0xff0000), //Red new Color(0x00ff00), //Green new Color(0xffff00), //Yellow new Color(0x4682b4), //Blue new Color(0xff00ff), //Magenta new Color(0x00ffff), //Cyan new Color(0xffffff), //White }; } }; public static final ColorPalette WINDOWS_PALETTE = new ColorPalette() { @Override public Color[] getIndexColors() { return new Color[]{ new Color(0x000000), //Black new Color(0x800000), //Red new Color(0x008000), //Green new Color(0x808000), //Yellow new Color(0x000080), //Blue new Color(0x800080), //Magenta new Color(0x008080), //Cyan new Color(0xc0c0c0), //White //Bright versions of the ISO colors new Color(0x808080), //Black new Color(0xff0000), //Red new Color(0x00ff00), //Green new Color(0xffff00), //Yellow new Color(0x4682b4), //Blue new Color(0xff00ff), //Magenta new Color(0x00ffff), //Cyan new Color(0xffffff), //White }; } }; public abstract Color[] getIndexColors(); public Color getColor(TerminalColor color) { if (color.isIndexed()) { return getIndexColors()[color.getIndex()]; } else { return color.toAwtColor(); } } public static TerminalColor getIndexedColor(int index) { return (index < 16) ? TerminalColor.index(index) : getXTerm256(index); } private static TerminalColor getXTerm256(int index) { return index < 256 ? COL_RES_256[index - 16] : null; } //The code below is translation of xterm's 256colres.pl // colors 16-231 are a 6x6x6 color cube private static final TerminalColor[] COL_RES_256 = new TerminalColor[240]; static { for (int red = 0; red < 6; ++red) { for (int green = 0; green < 6; ++green) { for (int blue = 0; blue < 6; ++blue) { int code = 36 * red + 6 * green + blue; COL_RES_256[code] = new TerminalColor(red > 0 ? (40 * red + 55) : 0, green > 0 ? (40 * green + 55) : 0, blue > 0 ? (40 * blue + 55) : 0); } } } // colors 232-255 are a grayscale ramp, intentionally leaving out // black and white for (int gray = 0; gray < 24; ++gray) { int level = 10 * gray + 8; COL_RES_256[216 + gray] = new TerminalColor(level, level, level); } } }