package com.github.sommeri.less4j.core.ast; import java.util.Collections; import java.util.HashMap; import java.util.Map; import com.github.sommeri.less4j.core.parser.ConversionUtils; import com.github.sommeri.less4j.core.parser.HiddenTokenAwareTree; /** * The list of all valid colors is taken from: http://www.w3schools.com/cssref/css_colornames.asp * */ public class NamedColorExpression extends ColorExpression { private static final Map<String, String> ALL_NAMES; static { Map<String, String> names = new HashMap<String, String>(); names.put("aliceblue", "#f0f8ff"); names.put("antiquewhite", "#faebd7"); names.put("aqua", "#00ffff"); names.put("aquamarine", "#7fffd4"); names.put("azure", "#f0ffff"); names.put("beige", "#f5f5dc"); names.put("bisque", "#ffe4c4"); names.put("black", "#000000"); names.put("blanchedalmond", "#ffebcd"); names.put("blue", "#0000ff"); names.put("blueviolet", "#8a2be2"); names.put("brown", "#a52a2a"); names.put("burlywood", "#deb887"); names.put("cadetblue", "#5f9ea0"); names.put("chartreuse", "#7fff00"); names.put("chocolate", "#d2691e"); names.put("coral", "#ff7f50"); names.put("cornflowerblue", "#6495ed"); names.put("cornsilk", "#fff8dc"); names.put("crimson", "#dc143c"); names.put("cyan", "#00ffff"); names.put("darkblue", "#00008b"); names.put("darkcyan", "#008b8b"); names.put("darkgoldenrod", "#b8860b"); names.put("darkgray", "#a9a9a9"); names.put("darkgrey", "#a9a9a9"); names.put("darkgreen", "#006400"); names.put("darkkhaki", "#bdb76b"); names.put("darkmagenta", "#8b008b"); names.put("darkolivegreen", "#556b2f"); names.put("darkorange", "#ff8c00"); names.put("darkorchid", "#9932cc"); names.put("darkred", "#8b0000"); names.put("darksalmon", "#e9967a"); names.put("darkseagreen", "#8fbc8f"); names.put("darkslateblue", "#483d8b"); names.put("darkslategray", "#2f4f4f"); names.put("darkslategrey", "#2f4f4f"); names.put("darkturquoise", "#00ced1"); names.put("darkviolet", "#9400d3"); names.put("deeppink", "#ff1493"); names.put("deepskyblue", "#00bfff"); names.put("dimgray", "#696969"); names.put("dimgrey", "#696969"); names.put("dodgerblue", "#1e90ff"); names.put("firebrick", "#b22222"); names.put("floralwhite", "#fffaf0"); names.put("forestgreen", "#228b22"); names.put("fuchsia", "#ff00ff"); names.put("gainsboro", "#dcdcdc"); names.put("ghostwhite", "#f8f8ff"); names.put("gold", "#ffd700"); names.put("goldenrod", "#daa520"); names.put("gray", "#808080"); names.put("grey", "#808080"); names.put("green", "#008000"); names.put("greenyellow", "#adff2f"); names.put("honeydew", "#f0fff0"); names.put("hotpink", "#ff69b4"); names.put("indianred ", "#cd5c5c"); names.put("indigo ", "#4b0082"); names.put("ivory", "#fffff0"); names.put("khaki", "#f0e68c"); names.put("lavender", "#e6e6fa"); names.put("lavenderblush", "#fff0f5"); names.put("lawngreen", "#7cfc00"); names.put("lemonchiffon", "#fffacd"); names.put("lightblue", "#add8e6"); names.put("lightcoral", "#f08080"); names.put("lightcyan", "#e0ffff"); names.put("lightgoldenrodyellow", "#fafad2"); names.put("lightgray", "#d3d3d3"); names.put("lightgrey", "#d3d3d3"); names.put("lightgreen", "#90ee90"); names.put("lightpink", "#ffb6c1"); names.put("lightsalmon", "#ffa07a"); names.put("lightseagreen", "#20b2aa"); names.put("lightskyblue", "#87cefa"); names.put("lightslategray", "#778899"); names.put("lightslategrey", "#778899"); names.put("lightsteelblue", "#b0c4de"); names.put("lightyellow", "#ffffe0"); names.put("lime", "#00ff00"); names.put("limegreen", "#32cd32"); names.put("linen", "#faf0e6"); names.put("magenta", "#ff00ff"); names.put("maroon", "#800000"); names.put("mediumaquamarine", "#66cdaa"); names.put("mediumblue", "#0000cd"); names.put("mediumorchid", "#ba55d3"); names.put("mediumpurple", "#9370d8"); names.put("mediumseagreen", "#3cb371"); names.put("mediumslateblue", "#7b68ee"); names.put("mediumspringgreen", "#00fa9a"); names.put("mediumturquoise", "#48d1cc"); names.put("mediumvioletred", "#c71585"); names.put("midnightblue", "#191970"); names.put("mintcream", "#f5fffa"); names.put("mistyrose", "#ffe4e1"); names.put("moccasin", "#ffe4b5"); names.put("navajowhite", "#ffdead"); names.put("navy", "#000080"); names.put("oldlace", "#fdf5e6"); names.put("olive", "#808000"); names.put("olivedrab", "#6b8e23"); names.put("orange", "#ffa500"); names.put("orangered", "#ff4500"); names.put("orchid", "#da70d6"); names.put("palegoldenrod", "#eee8aa"); names.put("palegreen", "#98fb98"); names.put("paleturquoise", "#afeeee"); names.put("palevioletred", "#d87093"); names.put("papayawhip", "#ffefd5"); names.put("peachpuff", "#ffdab9"); names.put("peru", "#cd853f"); names.put("pink", "#ffc0cb"); names.put("plum", "#dda0dd"); names.put("powderblue", "#b0e0e6"); names.put("purple", "#800080"); names.put("red", "#ff0000"); names.put("rosybrown", "#bc8f8f"); names.put("royalblue", "#4169e1"); names.put("saddlebrown", "#8b4513"); names.put("salmon", "#fa8072"); names.put("sandybrown", "#f4a460"); names.put("seagreen", "#2e8b57"); names.put("seashell", "#fff5ee"); names.put("sienna", "#a0522d"); names.put("silver", "#c0c0c0"); names.put("skyblue", "#87ceeb"); names.put("slateblue", "#6a5acd"); names.put("slategray", "#708090"); names.put("slategrey", "#708090"); names.put("snow", "#fffafa"); names.put("springgreen", "#00ff7f"); names.put("steelblue", "#4682b4"); names.put("tan", "#d2b48c"); names.put("teal", "#008080"); names.put("thistle", "#d8bfd8"); names.put("tomato", "#ff6347"); names.put("turquoise", "#40e0d0"); names.put("violet", "#ee82ee"); names.put("wheat", "#f5deb3"); names.put("white", "#ffffff"); names.put("whitesmoke", "#f5f5f5"); names.put("yellow", "#ffff00"); names.put("yellowgreen", "#9acd32"); names.put("transparent", "#00000000"); ALL_NAMES = Collections.unmodifiableMap(names); } private String colorName; public NamedColorExpression(HiddenTokenAwareTree token, String colorName, ColorExpression color) { super(token, color); this.colorName = colorName; } public String getColorName() { return colorName; } public void setColorName(String colorName) { this.colorName = colorName; } public static boolean isColorName(String value) { return ALL_NAMES.containsKey(value.toLowerCase()); } public static Map<String, String> getAllNames() { return ALL_NAMES; } public static ColorExpression createNamedColorExpression(HiddenTokenAwareTree token, String colorName) { ColorExpression color = ConversionUtils.parseColor(token, ALL_NAMES.get(colorName.toLowerCase())); if (!color.hasAlpha()) return new NamedColorExpression(token, colorName, color); return new NamedColorWithAlphaExpression(token, colorName, color); } public String getValue() { return getColorName(); } public boolean isNamed() { return true; } @Override public NamedColorExpression clone() { return (NamedColorExpression) super.clone(); } }