From 6b1da343efc475cf97efb7685ae793e026d077c9 Mon Sep 17 00:00:00 2001 From: stepan <stepan.sindelar@oracle.com> Date: Fri, 31 Mar 2017 20:30:42 +0200 Subject: [PATCH] FastR Grid: implement L_validUnit --- .../fastrGrid/FastRGridExternalLookup.java | 7 +- .../r/library/fastrGrid/GridColorUtils.java | 1332 ++++++++--------- .../r/library/fastrGrid/LValidUnit.java | 116 ++ .../truffle/r/library/fastrGrid/Unit.java | 36 +- mx.fastr/copyrights/overrides | 1 + 5 files changed, 802 insertions(+), 690 deletions(-) create mode 100644 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/FastRGridExternalLookup.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/FastRGridExternalLookup.java index dc2ca5e33d..e8711d0537 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/FastRGridExternalLookup.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/FastRGridExternalLookup.java @@ -87,6 +87,8 @@ public final class FastRGridExternalLookup { return new LNewPage(); case "L_convert": return LConvert.create(); + case "L_validUnits": + return LValidUnit.create(); // Viewport management case "L_upviewport": @@ -155,11 +157,6 @@ public final class FastRGridExternalLookup { case "L_newpagerecording": return new IgnoredGridExternal(RNull.instance); - // These methods do not use graphics system or any global state. For now, - // we can re-use the native implementation, which in the future should be rewritten - // to managed code. - case "L_validUnits": - return null; default: if (name.startsWith("L_")) { throw RInternalError.shouldNotReachHere("Unimplemented grid external " + name); diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridColorUtils.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridColorUtils.java index 07a01a98c4..939a90546e 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridColorUtils.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridColorUtils.java @@ -19,8 +19,6 @@ import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError.Message; public final class GridColorUtils { - private static HashMap<String, Object> synonymToColor; - private GridColorUtils() { // only static members } @@ -67,10 +65,7 @@ public final class GridColorUtils { } private static Object findByName(String synonym) { - if (synonymToColor == null) { - initialize(); - } - return synonymToColor.get(normalizeColorName(synonym)); + return NamesHolder.NAMES.get(normalizeColorName(synonym)); } // GnuR compares the user given color name to the dictionary ignoring spaces and case. We remove @@ -84,666 +79,669 @@ public final class GridColorUtils { return isNormalized ? synonym : synonym.replace(" ", "").toLowerCase(Locale.ROOT); } - private static void initialize() { - synonymToColor = new HashMap<>(700); - synonymToColor.put("transparent", GridColor.TRANSPARENT); - synonymToColor.put("NA", GridColor.TRANSPARENT); - synonymToColor.put("white", "#FFFFFF"); - synonymToColor.put("aliceblue", "#F0F8FF"); - synonymToColor.put("antiquewhite", "#FAEBD7"); - synonymToColor.put("antiquewhite1", "#FFEFDB"); - synonymToColor.put("antiquewhite2", "#EEDFCC"); - synonymToColor.put("antiquewhite3", "#CDC0B0"); - synonymToColor.put("antiquewhite4", "#8B8378"); - synonymToColor.put("aquamarine", "#7FFFD4"); - synonymToColor.put("aquamarine1", "#7FFFD4"); - synonymToColor.put("aquamarine2", "#76EEC6"); - synonymToColor.put("aquamarine3", "#66CDAA"); - synonymToColor.put("aquamarine4", "#458B74"); - synonymToColor.put("azure", "#F0FFFF"); - synonymToColor.put("azure1", "#F0FFFF"); - synonymToColor.put("azure2", "#E0EEEE"); - synonymToColor.put("azure3", "#C1CDCD"); - synonymToColor.put("azure4", "#838B8B"); - synonymToColor.put("beige", "#F5F5DC"); - synonymToColor.put("bisque", "#FFE4C4"); - synonymToColor.put("bisque1", "#FFE4C4"); - synonymToColor.put("bisque2", "#EED5B7"); - synonymToColor.put("bisque3", "#CDB79E"); - synonymToColor.put("bisque4", "#8B7D6B"); - synonymToColor.put("black", "#000000"); - synonymToColor.put("blanchedalmond", "#FFEBCD"); - synonymToColor.put("blue", "#0000FF"); - synonymToColor.put("blue1", "#0000FF"); - synonymToColor.put("blue2", "#0000EE"); - synonymToColor.put("blue3", "#0000CD"); - synonymToColor.put("blue4", "#00008B"); - synonymToColor.put("blueviolet", "#8A2BE2"); - synonymToColor.put("brown", "#A52A2A"); - synonymToColor.put("brown1", "#FF4040"); - synonymToColor.put("brown2", "#EE3B3B"); - synonymToColor.put("brown3", "#CD3333"); - synonymToColor.put("brown4", "#8B2323"); - synonymToColor.put("burlywood", "#DEB887"); - synonymToColor.put("burlywood1", "#FFD39B"); - synonymToColor.put("burlywood2", "#EEC591"); - synonymToColor.put("burlywood3", "#CDAA7D"); - synonymToColor.put("burlywood4", "#8B7355"); - synonymToColor.put("cadetblue", "#5F9EA0"); - synonymToColor.put("cadetblue1", "#98F5FF"); - synonymToColor.put("cadetblue2", "#8EE5EE"); - synonymToColor.put("cadetblue3", "#7AC5CD"); - synonymToColor.put("cadetblue4", "#53868B"); - synonymToColor.put("chartreuse", "#7FFF00"); - synonymToColor.put("chartreuse1", "#7FFF00"); - synonymToColor.put("chartreuse2", "#76EE00"); - synonymToColor.put("chartreuse3", "#66CD00"); - synonymToColor.put("chartreuse4", "#458B00"); - synonymToColor.put("chocolate", "#D2691E"); - synonymToColor.put("chocolate1", "#FF7F24"); - synonymToColor.put("chocolate2", "#EE7621"); - synonymToColor.put("chocolate3", "#CD661D"); - synonymToColor.put("chocolate4", "#8B4513"); - synonymToColor.put("coral", "#FF7F50"); - synonymToColor.put("coral1", "#FF7256"); - synonymToColor.put("coral2", "#EE6A50"); - synonymToColor.put("coral3", "#CD5B45"); - synonymToColor.put("coral4", "#8B3E2F"); - synonymToColor.put("cornflowerblue", "#6495ED"); - synonymToColor.put("cornsilk", "#FFF8DC"); - synonymToColor.put("cornsilk1", "#FFF8DC"); - synonymToColor.put("cornsilk2", "#EEE8CD"); - synonymToColor.put("cornsilk3", "#CDC8B1"); - synonymToColor.put("cornsilk4", "#8B8878"); - synonymToColor.put("cyan", "#00FFFF"); - synonymToColor.put("cyan1", "#00FFFF"); - synonymToColor.put("cyan2", "#00EEEE"); - synonymToColor.put("cyan3", "#00CDCD"); - synonymToColor.put("cyan4", "#008B8B"); - synonymToColor.put("darkblue", "#00008B"); - synonymToColor.put("darkcyan", "#008B8B"); - synonymToColor.put("darkgoldenrod", "#B8860B"); - synonymToColor.put("darkgoldenrod1", "#FFB90F"); - synonymToColor.put("darkgoldenrod2", "#EEAD0E"); - synonymToColor.put("darkgoldenrod3", "#CD950C"); - synonymToColor.put("darkgoldenrod4", "#8B6508"); - synonymToColor.put("darkgray", "#A9A9A9"); - synonymToColor.put("darkgreen", "#006400"); - synonymToColor.put("darkgrey", "#A9A9A9"); - synonymToColor.put("darkkhaki", "#BDB76B"); - synonymToColor.put("darkmagenta", "#8B008B"); - synonymToColor.put("darkolivegreen", "#556B2F"); - synonymToColor.put("darkolivegreen1", "#CAFF70"); - synonymToColor.put("darkolivegreen2", "#BCEE68"); - synonymToColor.put("darkolivegreen3", "#A2CD5A"); - synonymToColor.put("darkolivegreen4", "#6E8B3D"); - synonymToColor.put("darkorange", "#FF8C00"); - synonymToColor.put("darkorange1", "#FF7F00"); - synonymToColor.put("darkorange2", "#EE7600"); - synonymToColor.put("darkorange3", "#CD6600"); - synonymToColor.put("darkorange4", "#8B4500"); - synonymToColor.put("darkorchid", "#9932CC"); - synonymToColor.put("darkorchid1", "#BF3EFF"); - synonymToColor.put("darkorchid2", "#B23AEE"); - synonymToColor.put("darkorchid3", "#9A32CD"); - synonymToColor.put("darkorchid4", "#68228B"); - synonymToColor.put("darkred", "#8B0000"); - synonymToColor.put("darksalmon", "#E9967A"); - synonymToColor.put("darkseagreen", "#8FBC8F"); - synonymToColor.put("darkseagreen1", "#C1FFC1"); - synonymToColor.put("darkseagreen2", "#B4EEB4"); - synonymToColor.put("darkseagreen3", "#9BCD9B"); - synonymToColor.put("darkseagreen4", "#698B69"); - synonymToColor.put("darkslateblue", "#483D8B"); - synonymToColor.put("darkslategray", "#2F4F4F"); - synonymToColor.put("darkslategray1", "#97FFFF"); - synonymToColor.put("darkslategray2", "#8DEEEE"); - synonymToColor.put("darkslategray3", "#79CDCD"); - synonymToColor.put("darkslategray4", "#528B8B"); - synonymToColor.put("darkslategrey", "#2F4F4F"); - synonymToColor.put("darkturquoise", "#00CED1"); - synonymToColor.put("darkviolet", "#9400D3"); - synonymToColor.put("deeppink", "#FF1493"); - synonymToColor.put("deeppink1", "#FF1493"); - synonymToColor.put("deeppink2", "#EE1289"); - synonymToColor.put("deeppink3", "#CD1076"); - synonymToColor.put("deeppink4", "#8B0A50"); - synonymToColor.put("deepskyblue", "#00BFFF"); - synonymToColor.put("deepskyblue1", "#00BFFF"); - synonymToColor.put("deepskyblue2", "#00B2EE"); - synonymToColor.put("deepskyblue3", "#009ACD"); - synonymToColor.put("deepskyblue4", "#00688B"); - synonymToColor.put("dimgray", "#696969"); - synonymToColor.put("dimgrey", "#696969"); - synonymToColor.put("dodgerblue", "#1E90FF"); - synonymToColor.put("dodgerblue1", "#1E90FF"); - synonymToColor.put("dodgerblue2", "#1C86EE"); - synonymToColor.put("dodgerblue3", "#1874CD"); - synonymToColor.put("dodgerblue4", "#104E8B"); - synonymToColor.put("firebrick", "#B22222"); - synonymToColor.put("firebrick1", "#FF3030"); - synonymToColor.put("firebrick2", "#EE2C2C"); - synonymToColor.put("firebrick3", "#CD2626"); - synonymToColor.put("firebrick4", "#8B1A1A"); - synonymToColor.put("floralwhite", "#FFFAF0"); - synonymToColor.put("forestgreen", "#228B22"); - synonymToColor.put("gainsboro", "#DCDCDC"); - synonymToColor.put("ghostwhite", "#F8F8FF"); - synonymToColor.put("gold", "#FFD700"); - synonymToColor.put("gold1", "#FFD700"); - synonymToColor.put("gold2", "#EEC900"); - synonymToColor.put("gold3", "#CDAD00"); - synonymToColor.put("gold4", "#8B7500"); - synonymToColor.put("goldenrod", "#DAA520"); - synonymToColor.put("goldenrod1", "#FFC125"); - synonymToColor.put("goldenrod2", "#EEB422"); - synonymToColor.put("goldenrod3", "#CD9B1D"); - synonymToColor.put("goldenrod4", "#8B6914"); - synonymToColor.put("gray", "#BEBEBE"); - synonymToColor.put("gray0", "#000000"); - synonymToColor.put("gray1", "#030303"); - synonymToColor.put("gray2", "#050505"); - synonymToColor.put("gray3", "#080808"); - synonymToColor.put("gray4", "#0A0A0A"); - synonymToColor.put("gray5", "#0D0D0D"); - synonymToColor.put("gray6", "#0F0F0F"); - synonymToColor.put("gray7", "#121212"); - synonymToColor.put("gray8", "#141414"); - synonymToColor.put("gray9", "#171717"); - synonymToColor.put("gray10", "#1A1A1A"); - synonymToColor.put("gray11", "#1C1C1C"); - synonymToColor.put("gray12", "#1F1F1F"); - synonymToColor.put("gray13", "#212121"); - synonymToColor.put("gray14", "#242424"); - synonymToColor.put("gray15", "#262626"); - synonymToColor.put("gray16", "#292929"); - synonymToColor.put("gray17", "#2B2B2B"); - synonymToColor.put("gray18", "#2E2E2E"); - synonymToColor.put("gray19", "#303030"); - synonymToColor.put("gray20", "#333333"); - synonymToColor.put("gray21", "#363636"); - synonymToColor.put("gray22", "#383838"); - synonymToColor.put("gray23", "#3B3B3B"); - synonymToColor.put("gray24", "#3D3D3D"); - synonymToColor.put("gray25", "#404040"); - synonymToColor.put("gray26", "#424242"); - synonymToColor.put("gray27", "#454545"); - synonymToColor.put("gray28", "#474747"); - synonymToColor.put("gray29", "#4A4A4A"); - synonymToColor.put("gray30", "#4D4D4D"); - synonymToColor.put("gray31", "#4F4F4F"); - synonymToColor.put("gray32", "#525252"); - synonymToColor.put("gray33", "#545454"); - synonymToColor.put("gray34", "#575757"); - synonymToColor.put("gray35", "#595959"); - synonymToColor.put("gray36", "#5C5C5C"); - synonymToColor.put("gray37", "#5E5E5E"); - synonymToColor.put("gray38", "#616161"); - synonymToColor.put("gray39", "#636363"); - synonymToColor.put("gray40", "#666666"); - synonymToColor.put("gray41", "#696969"); - synonymToColor.put("gray42", "#6B6B6B"); - synonymToColor.put("gray43", "#6E6E6E"); - synonymToColor.put("gray44", "#707070"); - synonymToColor.put("gray45", "#737373"); - synonymToColor.put("gray46", "#757575"); - synonymToColor.put("gray47", "#787878"); - synonymToColor.put("gray48", "#7A7A7A"); - synonymToColor.put("gray49", "#7D7D7D"); - synonymToColor.put("gray50", "#7F7F7F"); - synonymToColor.put("gray51", "#828282"); - synonymToColor.put("gray52", "#858585"); - synonymToColor.put("gray53", "#878787"); - synonymToColor.put("gray54", "#8A8A8A"); - synonymToColor.put("gray55", "#8C8C8C"); - synonymToColor.put("gray56", "#8F8F8F"); - synonymToColor.put("gray57", "#919191"); - synonymToColor.put("gray58", "#949494"); - synonymToColor.put("gray59", "#969696"); - synonymToColor.put("gray60", "#999999"); - synonymToColor.put("gray61", "#9C9C9C"); - synonymToColor.put("gray62", "#9E9E9E"); - synonymToColor.put("gray63", "#A1A1A1"); - synonymToColor.put("gray64", "#A3A3A3"); - synonymToColor.put("gray65", "#A6A6A6"); - synonymToColor.put("gray66", "#A8A8A8"); - synonymToColor.put("gray67", "#ABABAB"); - synonymToColor.put("gray68", "#ADADAD"); - synonymToColor.put("gray69", "#B0B0B0"); - synonymToColor.put("gray70", "#B3B3B3"); - synonymToColor.put("gray71", "#B5B5B5"); - synonymToColor.put("gray72", "#B8B8B8"); - synonymToColor.put("gray73", "#BABABA"); - synonymToColor.put("gray74", "#BDBDBD"); - synonymToColor.put("gray75", "#BFBFBF"); - synonymToColor.put("gray76", "#C2C2C2"); - synonymToColor.put("gray77", "#C4C4C4"); - synonymToColor.put("gray78", "#C7C7C7"); - synonymToColor.put("gray79", "#C9C9C9"); - synonymToColor.put("gray80", "#CCCCCC"); - synonymToColor.put("gray81", "#CFCFCF"); - synonymToColor.put("gray82", "#D1D1D1"); - synonymToColor.put("gray83", "#D4D4D4"); - synonymToColor.put("gray84", "#D6D6D6"); - synonymToColor.put("gray85", "#D9D9D9"); - synonymToColor.put("gray86", "#DBDBDB"); - synonymToColor.put("gray87", "#DEDEDE"); - synonymToColor.put("gray88", "#E0E0E0"); - synonymToColor.put("gray89", "#E3E3E3"); - synonymToColor.put("gray90", "#E5E5E5"); - synonymToColor.put("gray91", "#E8E8E8"); - synonymToColor.put("gray92", "#EBEBEB"); - synonymToColor.put("gray93", "#EDEDED"); - synonymToColor.put("gray94", "#F0F0F0"); - synonymToColor.put("gray95", "#F2F2F2"); - synonymToColor.put("gray96", "#F5F5F5"); - synonymToColor.put("gray97", "#F7F7F7"); - synonymToColor.put("gray98", "#FAFAFA"); - synonymToColor.put("gray99", "#FCFCFC"); - synonymToColor.put("gray100", "#FFFFFF"); - synonymToColor.put("green", "#00FF00"); - synonymToColor.put("green1", "#00FF00"); - synonymToColor.put("green2", "#00EE00"); - synonymToColor.put("green3", "#00CD00"); - synonymToColor.put("green4", "#008B00"); - synonymToColor.put("greenyellow", "#ADFF2F"); - synonymToColor.put("grey", "#BEBEBE"); - synonymToColor.put("grey0", "#000000"); - synonymToColor.put("grey1", "#030303"); - synonymToColor.put("grey2", "#050505"); - synonymToColor.put("grey3", "#080808"); - synonymToColor.put("grey4", "#0A0A0A"); - synonymToColor.put("grey5", "#0D0D0D"); - synonymToColor.put("grey6", "#0F0F0F"); - synonymToColor.put("grey7", "#121212"); - synonymToColor.put("grey8", "#141414"); - synonymToColor.put("grey9", "#171717"); - synonymToColor.put("grey10", "#1A1A1A"); - synonymToColor.put("grey11", "#1C1C1C"); - synonymToColor.put("grey12", "#1F1F1F"); - synonymToColor.put("grey13", "#212121"); - synonymToColor.put("grey14", "#242424"); - synonymToColor.put("grey15", "#262626"); - synonymToColor.put("grey16", "#292929"); - synonymToColor.put("grey17", "#2B2B2B"); - synonymToColor.put("grey18", "#2E2E2E"); - synonymToColor.put("grey19", "#303030"); - synonymToColor.put("grey20", "#333333"); - synonymToColor.put("grey21", "#363636"); - synonymToColor.put("grey22", "#383838"); - synonymToColor.put("grey23", "#3B3B3B"); - synonymToColor.put("grey24", "#3D3D3D"); - synonymToColor.put("grey25", "#404040"); - synonymToColor.put("grey26", "#424242"); - synonymToColor.put("grey27", "#454545"); - synonymToColor.put("grey28", "#474747"); - synonymToColor.put("grey29", "#4A4A4A"); - synonymToColor.put("grey30", "#4D4D4D"); - synonymToColor.put("grey31", "#4F4F4F"); - synonymToColor.put("grey32", "#525252"); - synonymToColor.put("grey33", "#545454"); - synonymToColor.put("grey34", "#575757"); - synonymToColor.put("grey35", "#595959"); - synonymToColor.put("grey36", "#5C5C5C"); - synonymToColor.put("grey37", "#5E5E5E"); - synonymToColor.put("grey38", "#616161"); - synonymToColor.put("grey39", "#636363"); - synonymToColor.put("grey40", "#666666"); - synonymToColor.put("grey41", "#696969"); - synonymToColor.put("grey42", "#6B6B6B"); - synonymToColor.put("grey43", "#6E6E6E"); - synonymToColor.put("grey44", "#707070"); - synonymToColor.put("grey45", "#737373"); - synonymToColor.put("grey46", "#757575"); - synonymToColor.put("grey47", "#787878"); - synonymToColor.put("grey48", "#7A7A7A"); - synonymToColor.put("grey49", "#7D7D7D"); - synonymToColor.put("grey50", "#7F7F7F"); - synonymToColor.put("grey51", "#828282"); - synonymToColor.put("grey52", "#858585"); - synonymToColor.put("grey53", "#878787"); - synonymToColor.put("grey54", "#8A8A8A"); - synonymToColor.put("grey55", "#8C8C8C"); - synonymToColor.put("grey56", "#8F8F8F"); - synonymToColor.put("grey57", "#919191"); - synonymToColor.put("grey58", "#949494"); - synonymToColor.put("grey59", "#969696"); - synonymToColor.put("grey60", "#999999"); - synonymToColor.put("grey61", "#9C9C9C"); - synonymToColor.put("grey62", "#9E9E9E"); - synonymToColor.put("grey63", "#A1A1A1"); - synonymToColor.put("grey64", "#A3A3A3"); - synonymToColor.put("grey65", "#A6A6A6"); - synonymToColor.put("grey66", "#A8A8A8"); - synonymToColor.put("grey67", "#ABABAB"); - synonymToColor.put("grey68", "#ADADAD"); - synonymToColor.put("grey69", "#B0B0B0"); - synonymToColor.put("grey70", "#B3B3B3"); - synonymToColor.put("grey71", "#B5B5B5"); - synonymToColor.put("grey72", "#B8B8B8"); - synonymToColor.put("grey73", "#BABABA"); - synonymToColor.put("grey74", "#BDBDBD"); - synonymToColor.put("grey75", "#BFBFBF"); - synonymToColor.put("grey76", "#C2C2C2"); - synonymToColor.put("grey77", "#C4C4C4"); - synonymToColor.put("grey78", "#C7C7C7"); - synonymToColor.put("grey79", "#C9C9C9"); - synonymToColor.put("grey80", "#CCCCCC"); - synonymToColor.put("grey81", "#CFCFCF"); - synonymToColor.put("grey82", "#D1D1D1"); - synonymToColor.put("grey83", "#D4D4D4"); - synonymToColor.put("grey84", "#D6D6D6"); - synonymToColor.put("grey85", "#D9D9D9"); - synonymToColor.put("grey86", "#DBDBDB"); - synonymToColor.put("grey87", "#DEDEDE"); - synonymToColor.put("grey88", "#E0E0E0"); - synonymToColor.put("grey89", "#E3E3E3"); - synonymToColor.put("grey90", "#E5E5E5"); - synonymToColor.put("grey91", "#E8E8E8"); - synonymToColor.put("grey92", "#EBEBEB"); - synonymToColor.put("grey93", "#EDEDED"); - synonymToColor.put("grey94", "#F0F0F0"); - synonymToColor.put("grey95", "#F2F2F2"); - synonymToColor.put("grey96", "#F5F5F5"); - synonymToColor.put("grey97", "#F7F7F7"); - synonymToColor.put("grey98", "#FAFAFA"); - synonymToColor.put("grey99", "#FCFCFC"); - synonymToColor.put("grey100", "#FFFFFF"); - synonymToColor.put("honeydew", "#F0FFF0"); - synonymToColor.put("honeydew1", "#F0FFF0"); - synonymToColor.put("honeydew2", "#E0EEE0"); - synonymToColor.put("honeydew3", "#C1CDC1"); - synonymToColor.put("honeydew4", "#838B83"); - synonymToColor.put("hotpink", "#FF69B4"); - synonymToColor.put("hotpink1", "#FF6EB4"); - synonymToColor.put("hotpink2", "#EE6AA7"); - synonymToColor.put("hotpink3", "#CD6090"); - synonymToColor.put("hotpink4", "#8B3A62"); - synonymToColor.put("indianred", "#CD5C5C"); - synonymToColor.put("indianred1", "#FF6A6A"); - synonymToColor.put("indianred2", "#EE6363"); - synonymToColor.put("indianred3", "#CD5555"); - synonymToColor.put("indianred4", "#8B3A3A"); - synonymToColor.put("ivory", "#FFFFF0"); - synonymToColor.put("ivory1", "#FFFFF0"); - synonymToColor.put("ivory2", "#EEEEE0"); - synonymToColor.put("ivory3", "#CDCDC1"); - synonymToColor.put("ivory4", "#8B8B83"); - synonymToColor.put("khaki", "#F0E68C"); - synonymToColor.put("khaki1", "#FFF68F"); - synonymToColor.put("khaki2", "#EEE685"); - synonymToColor.put("khaki3", "#CDC673"); - synonymToColor.put("khaki4", "#8B864E"); - synonymToColor.put("lavender", "#E6E6FA"); - synonymToColor.put("lavenderblush", "#FFF0F5"); - synonymToColor.put("lavenderblush1", "#FFF0F5"); - synonymToColor.put("lavenderblush2", "#EEE0E5"); - synonymToColor.put("lavenderblush3", "#CDC1C5"); - synonymToColor.put("lavenderblush4", "#8B8386"); - synonymToColor.put("lawngreen", "#7CFC00"); - synonymToColor.put("lemonchiffon", "#FFFACD"); - synonymToColor.put("lemonchiffon1", "#FFFACD"); - synonymToColor.put("lemonchiffon2", "#EEE9BF"); - synonymToColor.put("lemonchiffon3", "#CDC9A5"); - synonymToColor.put("lemonchiffon4", "#8B8970"); - synonymToColor.put("lightblue", "#ADD8E6"); - synonymToColor.put("lightblue1", "#BFEFFF"); - synonymToColor.put("lightblue2", "#B2DFEE"); - synonymToColor.put("lightblue3", "#9AC0CD"); - synonymToColor.put("lightblue4", "#68838B"); - synonymToColor.put("lightcoral", "#F08080"); - synonymToColor.put("lightcyan", "#E0FFFF"); - synonymToColor.put("lightcyan1", "#E0FFFF"); - synonymToColor.put("lightcyan2", "#D1EEEE"); - synonymToColor.put("lightcyan3", "#B4CDCD"); - synonymToColor.put("lightcyan4", "#7A8B8B"); - synonymToColor.put("lightgoldenrod", "#EEDD82"); - synonymToColor.put("lightgoldenrod1", "#FFEC8B"); - synonymToColor.put("lightgoldenrod2", "#EEDC82"); - synonymToColor.put("lightgoldenrod3", "#CDBE70"); - synonymToColor.put("lightgoldenrod4", "#8B814C"); - synonymToColor.put("lightgoldenrodyellow", "#FAFAD2"); - synonymToColor.put("lightgray", "#D3D3D3"); - synonymToColor.put("lightgreen", "#90EE90"); - synonymToColor.put("lightgrey", "#D3D3D3"); - synonymToColor.put("lightpink", "#FFB6C1"); - synonymToColor.put("lightpink1", "#FFAEB9"); - synonymToColor.put("lightpink2", "#EEA2AD"); - synonymToColor.put("lightpink3", "#CD8C95"); - synonymToColor.put("lightpink4", "#8B5F65"); - synonymToColor.put("lightsalmon", "#FFA07A"); - synonymToColor.put("lightsalmon1", "#FFA07A"); - synonymToColor.put("lightsalmon2", "#EE9572"); - synonymToColor.put("lightsalmon3", "#CD8162"); - synonymToColor.put("lightsalmon4", "#8B5742"); - synonymToColor.put("lightseagreen", "#20B2AA"); - synonymToColor.put("lightskyblue", "#87CEFA"); - synonymToColor.put("lightskyblue1", "#B0E2FF"); - synonymToColor.put("lightskyblue2", "#A4D3EE"); - synonymToColor.put("lightskyblue3", "#8DB6CD"); - synonymToColor.put("lightskyblue4", "#607B8B"); - synonymToColor.put("lightslateblue", "#8470FF"); - synonymToColor.put("lightslategray", "#778899"); - synonymToColor.put("lightslategrey", "#778899"); - synonymToColor.put("lightsteelblue", "#B0C4DE"); - synonymToColor.put("lightsteelblue1", "#CAE1FF"); - synonymToColor.put("lightsteelblue2", "#BCD2EE"); - synonymToColor.put("lightsteelblue3", "#A2B5CD"); - synonymToColor.put("lightsteelblue4", "#6E7B8B"); - synonymToColor.put("lightyellow", "#FFFFE0"); - synonymToColor.put("lightyellow1", "#FFFFE0"); - synonymToColor.put("lightyellow2", "#EEEED1"); - synonymToColor.put("lightyellow3", "#CDCDB4"); - synonymToColor.put("lightyellow4", "#8B8B7A"); - synonymToColor.put("limegreen", "#32CD32"); - synonymToColor.put("linen", "#FAF0E6"); - synonymToColor.put("magenta", "#FF00FF"); - synonymToColor.put("magenta1", "#FF00FF"); - synonymToColor.put("magenta2", "#EE00EE"); - synonymToColor.put("magenta3", "#CD00CD"); - synonymToColor.put("magenta4", "#8B008B"); - synonymToColor.put("maroon", "#B03060"); - synonymToColor.put("maroon1", "#FF34B3"); - synonymToColor.put("maroon2", "#EE30A7"); - synonymToColor.put("maroon3", "#CD2990"); - synonymToColor.put("maroon4", "#8B1C62"); - synonymToColor.put("mediumaquamarine", "#66CDAA"); - synonymToColor.put("mediumblue", "#0000CD"); - synonymToColor.put("mediumorchid", "#BA55D3"); - synonymToColor.put("mediumorchid1", "#E066FF"); - synonymToColor.put("mediumorchid2", "#D15FEE"); - synonymToColor.put("mediumorchid3", "#B452CD"); - synonymToColor.put("mediumorchid4", "#7A378B"); - synonymToColor.put("mediumpurple", "#9370DB"); - synonymToColor.put("mediumpurple1", "#AB82FF"); - synonymToColor.put("mediumpurple2", "#9F79EE"); - synonymToColor.put("mediumpurple3", "#8968CD"); - synonymToColor.put("mediumpurple4", "#5D478B"); - synonymToColor.put("mediumseagreen", "#3CB371"); - synonymToColor.put("mediumslateblue", "#7B68EE"); - synonymToColor.put("mediumspringgreen", "#00FA9A"); - synonymToColor.put("mediumturquoise", "#48D1CC"); - synonymToColor.put("mediumvioletred", "#C71585"); - synonymToColor.put("midnightblue", "#191970"); - synonymToColor.put("mintcream", "#F5FFFA"); - synonymToColor.put("mistyrose", "#FFE4E1"); - synonymToColor.put("mistyrose1", "#FFE4E1"); - synonymToColor.put("mistyrose2", "#EED5D2"); - synonymToColor.put("mistyrose3", "#CDB7B5"); - synonymToColor.put("mistyrose4", "#8B7D7B"); - synonymToColor.put("moccasin", "#FFE4B5"); - synonymToColor.put("navajowhite", "#FFDEAD"); - synonymToColor.put("navajowhite1", "#FFDEAD"); - synonymToColor.put("navajowhite2", "#EECFA1"); - synonymToColor.put("navajowhite3", "#CDB38B"); - synonymToColor.put("navajowhite4", "#8B795E"); - synonymToColor.put("navy", "#000080"); - synonymToColor.put("navyblue", "#000080"); - synonymToColor.put("oldlace", "#FDF5E6"); - synonymToColor.put("olivedrab", "#6B8E23"); - synonymToColor.put("olivedrab1", "#C0FF3E"); - synonymToColor.put("olivedrab2", "#B3EE3A"); - synonymToColor.put("olivedrab3", "#9ACD32"); - synonymToColor.put("olivedrab4", "#698B22"); - synonymToColor.put("orange", "#FFA500"); - synonymToColor.put("orange1", "#FFA500"); - synonymToColor.put("orange2", "#EE9A00"); - synonymToColor.put("orange3", "#CD8500"); - synonymToColor.put("orange4", "#8B5A00"); - synonymToColor.put("orangered", "#FF4500"); - synonymToColor.put("orangered1", "#FF4500"); - synonymToColor.put("orangered2", "#EE4000"); - synonymToColor.put("orangered3", "#CD3700"); - synonymToColor.put("orangered4", "#8B2500"); - synonymToColor.put("orchid", "#DA70D6"); - synonymToColor.put("orchid1", "#FF83FA"); - synonymToColor.put("orchid2", "#EE7AE9"); - synonymToColor.put("orchid3", "#CD69C9"); - synonymToColor.put("orchid4", "#8B4789"); - synonymToColor.put("palegoldenrod", "#EEE8AA"); - synonymToColor.put("palegreen", "#98FB98"); - synonymToColor.put("palegreen1", "#9AFF9A"); - synonymToColor.put("palegreen2", "#90EE90"); - synonymToColor.put("palegreen3", "#7CCD7C"); - synonymToColor.put("palegreen4", "#548B54"); - synonymToColor.put("paleturquoise", "#AFEEEE"); - synonymToColor.put("paleturquoise1", "#BBFFFF"); - synonymToColor.put("paleturquoise2", "#AEEEEE"); - synonymToColor.put("paleturquoise3", "#96CDCD"); - synonymToColor.put("paleturquoise4", "#668B8B"); - synonymToColor.put("palevioletred", "#DB7093"); - synonymToColor.put("palevioletred1", "#FF82AB"); - synonymToColor.put("palevioletred2", "#EE799F"); - synonymToColor.put("palevioletred3", "#CD6889"); - synonymToColor.put("palevioletred4", "#8B475D"); - synonymToColor.put("papayawhip", "#FFEFD5"); - synonymToColor.put("peachpuff", "#FFDAB9"); - synonymToColor.put("peachpuff1", "#FFDAB9"); - synonymToColor.put("peachpuff2", "#EECBAD"); - synonymToColor.put("peachpuff3", "#CDAF95"); - synonymToColor.put("peachpuff4", "#8B7765"); - synonymToColor.put("peru", "#CD853F"); - synonymToColor.put("pink", "#FFC0CB"); - synonymToColor.put("pink1", "#FFB5C5"); - synonymToColor.put("pink2", "#EEA9B8"); - synonymToColor.put("pink3", "#CD919E"); - synonymToColor.put("pink4", "#8B636C"); - synonymToColor.put("plum", "#DDA0DD"); - synonymToColor.put("plum1", "#FFBBFF"); - synonymToColor.put("plum2", "#EEAEEE"); - synonymToColor.put("plum3", "#CD96CD"); - synonymToColor.put("plum4", "#8B668B"); - synonymToColor.put("powderblue", "#B0E0E6"); - synonymToColor.put("purple", "#A020F0"); - synonymToColor.put("purple1", "#9B30FF"); - synonymToColor.put("purple2", "#912CEE"); - synonymToColor.put("purple3", "#7D26CD"); - synonymToColor.put("purple4", "#551A8B"); - synonymToColor.put("red", "#FF0000"); - synonymToColor.put("red1", "#FF0000"); - synonymToColor.put("red2", "#EE0000"); - synonymToColor.put("red3", "#CD0000"); - synonymToColor.put("red4", "#8B0000"); - synonymToColor.put("rosybrown", "#BC8F8F"); - synonymToColor.put("rosybrown1", "#FFC1C1"); - synonymToColor.put("rosybrown2", "#EEB4B4"); - synonymToColor.put("rosybrown3", "#CD9B9B"); - synonymToColor.put("rosybrown4", "#8B6969"); - synonymToColor.put("royalblue", "#4169E1"); - synonymToColor.put("royalblue1", "#4876FF"); - synonymToColor.put("royalblue2", "#436EEE"); - synonymToColor.put("royalblue3", "#3A5FCD"); - synonymToColor.put("royalblue4", "#27408B"); - synonymToColor.put("snewData.addlebrown", "#8B4513"); - synonymToColor.put("salmon", "#FA8072"); - synonymToColor.put("salmon1", "#FF8C69"); - synonymToColor.put("salmon2", "#EE8262"); - synonymToColor.put("salmon3", "#CD7054"); - synonymToColor.put("salmon4", "#8B4C39"); - synonymToColor.put("sandybrown", "#F4A460"); - synonymToColor.put("seagreen", "#2E8B57"); - synonymToColor.put("seagreen1", "#54FF9F"); - synonymToColor.put("seagreen2", "#4EEE94"); - synonymToColor.put("seagreen3", "#43CD80"); - synonymToColor.put("seagreen4", "#2E8B57"); - synonymToColor.put("seashell", "#FFF5EE"); - synonymToColor.put("seashell1", "#FFF5EE"); - synonymToColor.put("seashell2", "#EEE5DE"); - synonymToColor.put("seashell3", "#CDC5BF"); - synonymToColor.put("seashell4", "#8B8682"); - synonymToColor.put("sienna", "#A0522D"); - synonymToColor.put("sienna1", "#FF8247"); - synonymToColor.put("sienna2", "#EE7942"); - synonymToColor.put("sienna3", "#CD6839"); - synonymToColor.put("sienna4", "#8B4726"); - synonymToColor.put("skyblue", "#87CEEB"); - synonymToColor.put("skyblue1", "#87CEFF"); - synonymToColor.put("skyblue2", "#7EC0EE"); - synonymToColor.put("skyblue3", "#6CA6CD"); - synonymToColor.put("skyblue4", "#4A708B"); - synonymToColor.put("slateblue", "#6A5ACD"); - synonymToColor.put("slateblue1", "#836FFF"); - synonymToColor.put("slateblue2", "#7A67EE"); - synonymToColor.put("slateblue3", "#6959CD"); - synonymToColor.put("slateblue4", "#473C8B"); - synonymToColor.put("slategray", "#708090"); - synonymToColor.put("slategray1", "#C6E2FF"); - synonymToColor.put("slategray2", "#B9D3EE"); - synonymToColor.put("slategray3", "#9FB6CD"); - synonymToColor.put("slategray4", "#6C7B8B"); - synonymToColor.put("slategrey", "#708090"); - synonymToColor.put("snow", "#FFFAFA"); - synonymToColor.put("snow1", "#FFFAFA"); - synonymToColor.put("snow2", "#EEE9E9"); - synonymToColor.put("snow3", "#CDC9C9"); - synonymToColor.put("snow4", "#8B8989"); - synonymToColor.put("springgreen", "#00FF7F"); - synonymToColor.put("springgreen1", "#00FF7F"); - synonymToColor.put("springgreen2", "#00EE76"); - synonymToColor.put("springgreen3", "#00CD66"); - synonymToColor.put("springgreen4", "#008B45"); - synonymToColor.put("steelblue", "#4682B4"); - synonymToColor.put("steelblue1", "#63B8FF"); - synonymToColor.put("steelblue2", "#5CACEE"); - synonymToColor.put("steelblue3", "#4F94CD"); - synonymToColor.put("steelblue4", "#36648B"); - synonymToColor.put("tan", "#D2B48C"); - synonymToColor.put("tan1", "#FFA54F"); - synonymToColor.put("tan2", "#EE9A49"); - synonymToColor.put("tan3", "#CD853F"); - synonymToColor.put("tan4", "#8B5A2B"); - synonymToColor.put("thistle", "#D8BFD8"); - synonymToColor.put("thistle1", "#FFE1FF"); - synonymToColor.put("thistle2", "#EED2EE"); - synonymToColor.put("thistle3", "#CDB5CD"); - synonymToColor.put("thistle4", "#8B7B8B"); - synonymToColor.put("tomato", "#FF6347"); - synonymToColor.put("tomato1", "#FF6347"); - synonymToColor.put("tomato2", "#EE5C42"); - synonymToColor.put("tomato3", "#CD4F39"); - synonymToColor.put("tomato4", "#8B3626"); - synonymToColor.put("turquoise", "#40E0D0"); - synonymToColor.put("turquoise1", "#00F5FF"); - synonymToColor.put("turquoise2", "#00E5EE"); - synonymToColor.put("turquoise3", "#00C5CD"); - synonymToColor.put("turquoise4", "#00868B"); - synonymToColor.put("violet", "#EE82EE"); - synonymToColor.put("violetred", "#D02090"); - synonymToColor.put("violetred1", "#FF3E96"); - synonymToColor.put("violetred2", "#EE3A8C"); - synonymToColor.put("violetred3", "#CD3278"); - synonymToColor.put("violetred4", "#8B2252"); - synonymToColor.put("wheat", "#F5DEB3"); - synonymToColor.put("wheat1", "#FFE7BA"); - synonymToColor.put("wheat2", "#EED8AE"); - synonymToColor.put("wheat3", "#CDBA96"); - synonymToColor.put("wheat4", "#8B7E66"); - synonymToColor.put("whitesmoke", "#F5F5F5"); - synonymToColor.put("yellow", "#FFFF00"); - synonymToColor.put("yellow1", "#FFFF00"); - synonymToColor.put("yellow2", "#EEEE00"); - synonymToColor.put("yellow3", "#CDCD00"); - synonymToColor.put("yellow4", "#8B8B00"); - synonymToColor.put("yellowgreen", "#9ACD32"); + private static final class NamesHolder { + private static final HashMap<String, Object> NAMES = new HashMap<>(700); + + static { + NAMES.put("transparent", GridColor.TRANSPARENT); + NAMES.put("NA", GridColor.TRANSPARENT); + NAMES.put("white", "#FFFFFF"); + NAMES.put("aliceblue", "#F0F8FF"); + NAMES.put("antiquewhite", "#FAEBD7"); + NAMES.put("antiquewhite1", "#FFEFDB"); + NAMES.put("antiquewhite2", "#EEDFCC"); + NAMES.put("antiquewhite3", "#CDC0B0"); + NAMES.put("antiquewhite4", "#8B8378"); + NAMES.put("aquamarine", "#7FFFD4"); + NAMES.put("aquamarine1", "#7FFFD4"); + NAMES.put("aquamarine2", "#76EEC6"); + NAMES.put("aquamarine3", "#66CDAA"); + NAMES.put("aquamarine4", "#458B74"); + NAMES.put("azure", "#F0FFFF"); + NAMES.put("azure1", "#F0FFFF"); + NAMES.put("azure2", "#E0EEEE"); + NAMES.put("azure3", "#C1CDCD"); + NAMES.put("azure4", "#838B8B"); + NAMES.put("beige", "#F5F5DC"); + NAMES.put("bisque", "#FFE4C4"); + NAMES.put("bisque1", "#FFE4C4"); + NAMES.put("bisque2", "#EED5B7"); + NAMES.put("bisque3", "#CDB79E"); + NAMES.put("bisque4", "#8B7D6B"); + NAMES.put("black", "#000000"); + NAMES.put("blanchedalmond", "#FFEBCD"); + NAMES.put("blue", "#0000FF"); + NAMES.put("blue1", "#0000FF"); + NAMES.put("blue2", "#0000EE"); + NAMES.put("blue3", "#0000CD"); + NAMES.put("blue4", "#00008B"); + NAMES.put("blueviolet", "#8A2BE2"); + NAMES.put("brown", "#A52A2A"); + NAMES.put("brown1", "#FF4040"); + NAMES.put("brown2", "#EE3B3B"); + NAMES.put("brown3", "#CD3333"); + NAMES.put("brown4", "#8B2323"); + NAMES.put("burlywood", "#DEB887"); + NAMES.put("burlywood1", "#FFD39B"); + NAMES.put("burlywood2", "#EEC591"); + NAMES.put("burlywood3", "#CDAA7D"); + NAMES.put("burlywood4", "#8B7355"); + NAMES.put("cadetblue", "#5F9EA0"); + NAMES.put("cadetblue1", "#98F5FF"); + NAMES.put("cadetblue2", "#8EE5EE"); + NAMES.put("cadetblue3", "#7AC5CD"); + NAMES.put("cadetblue4", "#53868B"); + NAMES.put("chartreuse", "#7FFF00"); + NAMES.put("chartreuse1", "#7FFF00"); + NAMES.put("chartreuse2", "#76EE00"); + NAMES.put("chartreuse3", "#66CD00"); + NAMES.put("chartreuse4", "#458B00"); + NAMES.put("chocolate", "#D2691E"); + NAMES.put("chocolate1", "#FF7F24"); + NAMES.put("chocolate2", "#EE7621"); + NAMES.put("chocolate3", "#CD661D"); + NAMES.put("chocolate4", "#8B4513"); + NAMES.put("coral", "#FF7F50"); + NAMES.put("coral1", "#FF7256"); + NAMES.put("coral2", "#EE6A50"); + NAMES.put("coral3", "#CD5B45"); + NAMES.put("coral4", "#8B3E2F"); + NAMES.put("cornflowerblue", "#6495ED"); + NAMES.put("cornsilk", "#FFF8DC"); + NAMES.put("cornsilk1", "#FFF8DC"); + NAMES.put("cornsilk2", "#EEE8CD"); + NAMES.put("cornsilk3", "#CDC8B1"); + NAMES.put("cornsilk4", "#8B8878"); + NAMES.put("cyan", "#00FFFF"); + NAMES.put("cyan1", "#00FFFF"); + NAMES.put("cyan2", "#00EEEE"); + NAMES.put("cyan3", "#00CDCD"); + NAMES.put("cyan4", "#008B8B"); + NAMES.put("darkblue", "#00008B"); + NAMES.put("darkcyan", "#008B8B"); + NAMES.put("darkgoldenrod", "#B8860B"); + NAMES.put("darkgoldenrod1", "#FFB90F"); + NAMES.put("darkgoldenrod2", "#EEAD0E"); + NAMES.put("darkgoldenrod3", "#CD950C"); + NAMES.put("darkgoldenrod4", "#8B6508"); + NAMES.put("darkgray", "#A9A9A9"); + NAMES.put("darkgreen", "#006400"); + NAMES.put("darkgrey", "#A9A9A9"); + NAMES.put("darkkhaki", "#BDB76B"); + NAMES.put("darkmagenta", "#8B008B"); + NAMES.put("darkolivegreen", "#556B2F"); + NAMES.put("darkolivegreen1", "#CAFF70"); + NAMES.put("darkolivegreen2", "#BCEE68"); + NAMES.put("darkolivegreen3", "#A2CD5A"); + NAMES.put("darkolivegreen4", "#6E8B3D"); + NAMES.put("darkorange", "#FF8C00"); + NAMES.put("darkorange1", "#FF7F00"); + NAMES.put("darkorange2", "#EE7600"); + NAMES.put("darkorange3", "#CD6600"); + NAMES.put("darkorange4", "#8B4500"); + NAMES.put("darkorchid", "#9932CC"); + NAMES.put("darkorchid1", "#BF3EFF"); + NAMES.put("darkorchid2", "#B23AEE"); + NAMES.put("darkorchid3", "#9A32CD"); + NAMES.put("darkorchid4", "#68228B"); + NAMES.put("darkred", "#8B0000"); + NAMES.put("darksalmon", "#E9967A"); + NAMES.put("darkseagreen", "#8FBC8F"); + NAMES.put("darkseagreen1", "#C1FFC1"); + NAMES.put("darkseagreen2", "#B4EEB4"); + NAMES.put("darkseagreen3", "#9BCD9B"); + NAMES.put("darkseagreen4", "#698B69"); + NAMES.put("darkslateblue", "#483D8B"); + NAMES.put("darkslategray", "#2F4F4F"); + NAMES.put("darkslategray1", "#97FFFF"); + NAMES.put("darkslategray2", "#8DEEEE"); + NAMES.put("darkslategray3", "#79CDCD"); + NAMES.put("darkslategray4", "#528B8B"); + NAMES.put("darkslategrey", "#2F4F4F"); + NAMES.put("darkturquoise", "#00CED1"); + NAMES.put("darkviolet", "#9400D3"); + NAMES.put("deeppink", "#FF1493"); + NAMES.put("deeppink1", "#FF1493"); + NAMES.put("deeppink2", "#EE1289"); + NAMES.put("deeppink3", "#CD1076"); + NAMES.put("deeppink4", "#8B0A50"); + NAMES.put("deepskyblue", "#00BFFF"); + NAMES.put("deepskyblue1", "#00BFFF"); + NAMES.put("deepskyblue2", "#00B2EE"); + NAMES.put("deepskyblue3", "#009ACD"); + NAMES.put("deepskyblue4", "#00688B"); + NAMES.put("dimgray", "#696969"); + NAMES.put("dimgrey", "#696969"); + NAMES.put("dodgerblue", "#1E90FF"); + NAMES.put("dodgerblue1", "#1E90FF"); + NAMES.put("dodgerblue2", "#1C86EE"); + NAMES.put("dodgerblue3", "#1874CD"); + NAMES.put("dodgerblue4", "#104E8B"); + NAMES.put("firebrick", "#B22222"); + NAMES.put("firebrick1", "#FF3030"); + NAMES.put("firebrick2", "#EE2C2C"); + NAMES.put("firebrick3", "#CD2626"); + NAMES.put("firebrick4", "#8B1A1A"); + NAMES.put("floralwhite", "#FFFAF0"); + NAMES.put("forestgreen", "#228B22"); + NAMES.put("gainsboro", "#DCDCDC"); + NAMES.put("ghostwhite", "#F8F8FF"); + NAMES.put("gold", "#FFD700"); + NAMES.put("gold1", "#FFD700"); + NAMES.put("gold2", "#EEC900"); + NAMES.put("gold3", "#CDAD00"); + NAMES.put("gold4", "#8B7500"); + NAMES.put("goldenrod", "#DAA520"); + NAMES.put("goldenrod1", "#FFC125"); + NAMES.put("goldenrod2", "#EEB422"); + NAMES.put("goldenrod3", "#CD9B1D"); + NAMES.put("goldenrod4", "#8B6914"); + NAMES.put("gray", "#BEBEBE"); + NAMES.put("gray0", "#000000"); + NAMES.put("gray1", "#030303"); + NAMES.put("gray2", "#050505"); + NAMES.put("gray3", "#080808"); + NAMES.put("gray4", "#0A0A0A"); + NAMES.put("gray5", "#0D0D0D"); + NAMES.put("gray6", "#0F0F0F"); + NAMES.put("gray7", "#121212"); + NAMES.put("gray8", "#141414"); + NAMES.put("gray9", "#171717"); + NAMES.put("gray10", "#1A1A1A"); + NAMES.put("gray11", "#1C1C1C"); + NAMES.put("gray12", "#1F1F1F"); + NAMES.put("gray13", "#212121"); + NAMES.put("gray14", "#242424"); + NAMES.put("gray15", "#262626"); + NAMES.put("gray16", "#292929"); + NAMES.put("gray17", "#2B2B2B"); + NAMES.put("gray18", "#2E2E2E"); + NAMES.put("gray19", "#303030"); + NAMES.put("gray20", "#333333"); + NAMES.put("gray21", "#363636"); + NAMES.put("gray22", "#383838"); + NAMES.put("gray23", "#3B3B3B"); + NAMES.put("gray24", "#3D3D3D"); + NAMES.put("gray25", "#404040"); + NAMES.put("gray26", "#424242"); + NAMES.put("gray27", "#454545"); + NAMES.put("gray28", "#474747"); + NAMES.put("gray29", "#4A4A4A"); + NAMES.put("gray30", "#4D4D4D"); + NAMES.put("gray31", "#4F4F4F"); + NAMES.put("gray32", "#525252"); + NAMES.put("gray33", "#545454"); + NAMES.put("gray34", "#575757"); + NAMES.put("gray35", "#595959"); + NAMES.put("gray36", "#5C5C5C"); + NAMES.put("gray37", "#5E5E5E"); + NAMES.put("gray38", "#616161"); + NAMES.put("gray39", "#636363"); + NAMES.put("gray40", "#666666"); + NAMES.put("gray41", "#696969"); + NAMES.put("gray42", "#6B6B6B"); + NAMES.put("gray43", "#6E6E6E"); + NAMES.put("gray44", "#707070"); + NAMES.put("gray45", "#737373"); + NAMES.put("gray46", "#757575"); + NAMES.put("gray47", "#787878"); + NAMES.put("gray48", "#7A7A7A"); + NAMES.put("gray49", "#7D7D7D"); + NAMES.put("gray50", "#7F7F7F"); + NAMES.put("gray51", "#828282"); + NAMES.put("gray52", "#858585"); + NAMES.put("gray53", "#878787"); + NAMES.put("gray54", "#8A8A8A"); + NAMES.put("gray55", "#8C8C8C"); + NAMES.put("gray56", "#8F8F8F"); + NAMES.put("gray57", "#919191"); + NAMES.put("gray58", "#949494"); + NAMES.put("gray59", "#969696"); + NAMES.put("gray60", "#999999"); + NAMES.put("gray61", "#9C9C9C"); + NAMES.put("gray62", "#9E9E9E"); + NAMES.put("gray63", "#A1A1A1"); + NAMES.put("gray64", "#A3A3A3"); + NAMES.put("gray65", "#A6A6A6"); + NAMES.put("gray66", "#A8A8A8"); + NAMES.put("gray67", "#ABABAB"); + NAMES.put("gray68", "#ADADAD"); + NAMES.put("gray69", "#B0B0B0"); + NAMES.put("gray70", "#B3B3B3"); + NAMES.put("gray71", "#B5B5B5"); + NAMES.put("gray72", "#B8B8B8"); + NAMES.put("gray73", "#BABABA"); + NAMES.put("gray74", "#BDBDBD"); + NAMES.put("gray75", "#BFBFBF"); + NAMES.put("gray76", "#C2C2C2"); + NAMES.put("gray77", "#C4C4C4"); + NAMES.put("gray78", "#C7C7C7"); + NAMES.put("gray79", "#C9C9C9"); + NAMES.put("gray80", "#CCCCCC"); + NAMES.put("gray81", "#CFCFCF"); + NAMES.put("gray82", "#D1D1D1"); + NAMES.put("gray83", "#D4D4D4"); + NAMES.put("gray84", "#D6D6D6"); + NAMES.put("gray85", "#D9D9D9"); + NAMES.put("gray86", "#DBDBDB"); + NAMES.put("gray87", "#DEDEDE"); + NAMES.put("gray88", "#E0E0E0"); + NAMES.put("gray89", "#E3E3E3"); + NAMES.put("gray90", "#E5E5E5"); + NAMES.put("gray91", "#E8E8E8"); + NAMES.put("gray92", "#EBEBEB"); + NAMES.put("gray93", "#EDEDED"); + NAMES.put("gray94", "#F0F0F0"); + NAMES.put("gray95", "#F2F2F2"); + NAMES.put("gray96", "#F5F5F5"); + NAMES.put("gray97", "#F7F7F7"); + NAMES.put("gray98", "#FAFAFA"); + NAMES.put("gray99", "#FCFCFC"); + NAMES.put("gray100", "#FFFFFF"); + NAMES.put("green", "#00FF00"); + NAMES.put("green1", "#00FF00"); + NAMES.put("green2", "#00EE00"); + NAMES.put("green3", "#00CD00"); + NAMES.put("green4", "#008B00"); + NAMES.put("greenyellow", "#ADFF2F"); + NAMES.put("grey", "#BEBEBE"); + NAMES.put("grey0", "#000000"); + NAMES.put("grey1", "#030303"); + NAMES.put("grey2", "#050505"); + NAMES.put("grey3", "#080808"); + NAMES.put("grey4", "#0A0A0A"); + NAMES.put("grey5", "#0D0D0D"); + NAMES.put("grey6", "#0F0F0F"); + NAMES.put("grey7", "#121212"); + NAMES.put("grey8", "#141414"); + NAMES.put("grey9", "#171717"); + NAMES.put("grey10", "#1A1A1A"); + NAMES.put("grey11", "#1C1C1C"); + NAMES.put("grey12", "#1F1F1F"); + NAMES.put("grey13", "#212121"); + NAMES.put("grey14", "#242424"); + NAMES.put("grey15", "#262626"); + NAMES.put("grey16", "#292929"); + NAMES.put("grey17", "#2B2B2B"); + NAMES.put("grey18", "#2E2E2E"); + NAMES.put("grey19", "#303030"); + NAMES.put("grey20", "#333333"); + NAMES.put("grey21", "#363636"); + NAMES.put("grey22", "#383838"); + NAMES.put("grey23", "#3B3B3B"); + NAMES.put("grey24", "#3D3D3D"); + NAMES.put("grey25", "#404040"); + NAMES.put("grey26", "#424242"); + NAMES.put("grey27", "#454545"); + NAMES.put("grey28", "#474747"); + NAMES.put("grey29", "#4A4A4A"); + NAMES.put("grey30", "#4D4D4D"); + NAMES.put("grey31", "#4F4F4F"); + NAMES.put("grey32", "#525252"); + NAMES.put("grey33", "#545454"); + NAMES.put("grey34", "#575757"); + NAMES.put("grey35", "#595959"); + NAMES.put("grey36", "#5C5C5C"); + NAMES.put("grey37", "#5E5E5E"); + NAMES.put("grey38", "#616161"); + NAMES.put("grey39", "#636363"); + NAMES.put("grey40", "#666666"); + NAMES.put("grey41", "#696969"); + NAMES.put("grey42", "#6B6B6B"); + NAMES.put("grey43", "#6E6E6E"); + NAMES.put("grey44", "#707070"); + NAMES.put("grey45", "#737373"); + NAMES.put("grey46", "#757575"); + NAMES.put("grey47", "#787878"); + NAMES.put("grey48", "#7A7A7A"); + NAMES.put("grey49", "#7D7D7D"); + NAMES.put("grey50", "#7F7F7F"); + NAMES.put("grey51", "#828282"); + NAMES.put("grey52", "#858585"); + NAMES.put("grey53", "#878787"); + NAMES.put("grey54", "#8A8A8A"); + NAMES.put("grey55", "#8C8C8C"); + NAMES.put("grey56", "#8F8F8F"); + NAMES.put("grey57", "#919191"); + NAMES.put("grey58", "#949494"); + NAMES.put("grey59", "#969696"); + NAMES.put("grey60", "#999999"); + NAMES.put("grey61", "#9C9C9C"); + NAMES.put("grey62", "#9E9E9E"); + NAMES.put("grey63", "#A1A1A1"); + NAMES.put("grey64", "#A3A3A3"); + NAMES.put("grey65", "#A6A6A6"); + NAMES.put("grey66", "#A8A8A8"); + NAMES.put("grey67", "#ABABAB"); + NAMES.put("grey68", "#ADADAD"); + NAMES.put("grey69", "#B0B0B0"); + NAMES.put("grey70", "#B3B3B3"); + NAMES.put("grey71", "#B5B5B5"); + NAMES.put("grey72", "#B8B8B8"); + NAMES.put("grey73", "#BABABA"); + NAMES.put("grey74", "#BDBDBD"); + NAMES.put("grey75", "#BFBFBF"); + NAMES.put("grey76", "#C2C2C2"); + NAMES.put("grey77", "#C4C4C4"); + NAMES.put("grey78", "#C7C7C7"); + NAMES.put("grey79", "#C9C9C9"); + NAMES.put("grey80", "#CCCCCC"); + NAMES.put("grey81", "#CFCFCF"); + NAMES.put("grey82", "#D1D1D1"); + NAMES.put("grey83", "#D4D4D4"); + NAMES.put("grey84", "#D6D6D6"); + NAMES.put("grey85", "#D9D9D9"); + NAMES.put("grey86", "#DBDBDB"); + NAMES.put("grey87", "#DEDEDE"); + NAMES.put("grey88", "#E0E0E0"); + NAMES.put("grey89", "#E3E3E3"); + NAMES.put("grey90", "#E5E5E5"); + NAMES.put("grey91", "#E8E8E8"); + NAMES.put("grey92", "#EBEBEB"); + NAMES.put("grey93", "#EDEDED"); + NAMES.put("grey94", "#F0F0F0"); + NAMES.put("grey95", "#F2F2F2"); + NAMES.put("grey96", "#F5F5F5"); + NAMES.put("grey97", "#F7F7F7"); + NAMES.put("grey98", "#FAFAFA"); + NAMES.put("grey99", "#FCFCFC"); + NAMES.put("grey100", "#FFFFFF"); + NAMES.put("honeydew", "#F0FFF0"); + NAMES.put("honeydew1", "#F0FFF0"); + NAMES.put("honeydew2", "#E0EEE0"); + NAMES.put("honeydew3", "#C1CDC1"); + NAMES.put("honeydew4", "#838B83"); + NAMES.put("hotpink", "#FF69B4"); + NAMES.put("hotpink1", "#FF6EB4"); + NAMES.put("hotpink2", "#EE6AA7"); + NAMES.put("hotpink3", "#CD6090"); + NAMES.put("hotpink4", "#8B3A62"); + NAMES.put("indianred", "#CD5C5C"); + NAMES.put("indianred1", "#FF6A6A"); + NAMES.put("indianred2", "#EE6363"); + NAMES.put("indianred3", "#CD5555"); + NAMES.put("indianred4", "#8B3A3A"); + NAMES.put("ivory", "#FFFFF0"); + NAMES.put("ivory1", "#FFFFF0"); + NAMES.put("ivory2", "#EEEEE0"); + NAMES.put("ivory3", "#CDCDC1"); + NAMES.put("ivory4", "#8B8B83"); + NAMES.put("khaki", "#F0E68C"); + NAMES.put("khaki1", "#FFF68F"); + NAMES.put("khaki2", "#EEE685"); + NAMES.put("khaki3", "#CDC673"); + NAMES.put("khaki4", "#8B864E"); + NAMES.put("lavender", "#E6E6FA"); + NAMES.put("lavenderblush", "#FFF0F5"); + NAMES.put("lavenderblush1", "#FFF0F5"); + NAMES.put("lavenderblush2", "#EEE0E5"); + NAMES.put("lavenderblush3", "#CDC1C5"); + NAMES.put("lavenderblush4", "#8B8386"); + NAMES.put("lawngreen", "#7CFC00"); + NAMES.put("lemonchiffon", "#FFFACD"); + NAMES.put("lemonchiffon1", "#FFFACD"); + NAMES.put("lemonchiffon2", "#EEE9BF"); + NAMES.put("lemonchiffon3", "#CDC9A5"); + NAMES.put("lemonchiffon4", "#8B8970"); + NAMES.put("lightblue", "#ADD8E6"); + NAMES.put("lightblue1", "#BFEFFF"); + NAMES.put("lightblue2", "#B2DFEE"); + NAMES.put("lightblue3", "#9AC0CD"); + NAMES.put("lightblue4", "#68838B"); + NAMES.put("lightcoral", "#F08080"); + NAMES.put("lightcyan", "#E0FFFF"); + NAMES.put("lightcyan1", "#E0FFFF"); + NAMES.put("lightcyan2", "#D1EEEE"); + NAMES.put("lightcyan3", "#B4CDCD"); + NAMES.put("lightcyan4", "#7A8B8B"); + NAMES.put("lightgoldenrod", "#EEDD82"); + NAMES.put("lightgoldenrod1", "#FFEC8B"); + NAMES.put("lightgoldenrod2", "#EEDC82"); + NAMES.put("lightgoldenrod3", "#CDBE70"); + NAMES.put("lightgoldenrod4", "#8B814C"); + NAMES.put("lightgoldenrodyellow", "#FAFAD2"); + NAMES.put("lightgray", "#D3D3D3"); + NAMES.put("lightgreen", "#90EE90"); + NAMES.put("lightgrey", "#D3D3D3"); + NAMES.put("lightpink", "#FFB6C1"); + NAMES.put("lightpink1", "#FFAEB9"); + NAMES.put("lightpink2", "#EEA2AD"); + NAMES.put("lightpink3", "#CD8C95"); + NAMES.put("lightpink4", "#8B5F65"); + NAMES.put("lightsalmon", "#FFA07A"); + NAMES.put("lightsalmon1", "#FFA07A"); + NAMES.put("lightsalmon2", "#EE9572"); + NAMES.put("lightsalmon3", "#CD8162"); + NAMES.put("lightsalmon4", "#8B5742"); + NAMES.put("lightseagreen", "#20B2AA"); + NAMES.put("lightskyblue", "#87CEFA"); + NAMES.put("lightskyblue1", "#B0E2FF"); + NAMES.put("lightskyblue2", "#A4D3EE"); + NAMES.put("lightskyblue3", "#8DB6CD"); + NAMES.put("lightskyblue4", "#607B8B"); + NAMES.put("lightslateblue", "#8470FF"); + NAMES.put("lightslategray", "#778899"); + NAMES.put("lightslategrey", "#778899"); + NAMES.put("lightsteelblue", "#B0C4DE"); + NAMES.put("lightsteelblue1", "#CAE1FF"); + NAMES.put("lightsteelblue2", "#BCD2EE"); + NAMES.put("lightsteelblue3", "#A2B5CD"); + NAMES.put("lightsteelblue4", "#6E7B8B"); + NAMES.put("lightyellow", "#FFFFE0"); + NAMES.put("lightyellow1", "#FFFFE0"); + NAMES.put("lightyellow2", "#EEEED1"); + NAMES.put("lightyellow3", "#CDCDB4"); + NAMES.put("lightyellow4", "#8B8B7A"); + NAMES.put("limegreen", "#32CD32"); + NAMES.put("linen", "#FAF0E6"); + NAMES.put("magenta", "#FF00FF"); + NAMES.put("magenta1", "#FF00FF"); + NAMES.put("magenta2", "#EE00EE"); + NAMES.put("magenta3", "#CD00CD"); + NAMES.put("magenta4", "#8B008B"); + NAMES.put("maroon", "#B03060"); + NAMES.put("maroon1", "#FF34B3"); + NAMES.put("maroon2", "#EE30A7"); + NAMES.put("maroon3", "#CD2990"); + NAMES.put("maroon4", "#8B1C62"); + NAMES.put("mediumaquamarine", "#66CDAA"); + NAMES.put("mediumblue", "#0000CD"); + NAMES.put("mediumorchid", "#BA55D3"); + NAMES.put("mediumorchid1", "#E066FF"); + NAMES.put("mediumorchid2", "#D15FEE"); + NAMES.put("mediumorchid3", "#B452CD"); + NAMES.put("mediumorchid4", "#7A378B"); + NAMES.put("mediumpurple", "#9370DB"); + NAMES.put("mediumpurple1", "#AB82FF"); + NAMES.put("mediumpurple2", "#9F79EE"); + NAMES.put("mediumpurple3", "#8968CD"); + NAMES.put("mediumpurple4", "#5D478B"); + 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("mistyrose1", "#FFE4E1"); + NAMES.put("mistyrose2", "#EED5D2"); + NAMES.put("mistyrose3", "#CDB7B5"); + NAMES.put("mistyrose4", "#8B7D7B"); + NAMES.put("moccasin", "#FFE4B5"); + NAMES.put("navajowhite", "#FFDEAD"); + NAMES.put("navajowhite1", "#FFDEAD"); + NAMES.put("navajowhite2", "#EECFA1"); + NAMES.put("navajowhite3", "#CDB38B"); + NAMES.put("navajowhite4", "#8B795E"); + NAMES.put("navy", "#000080"); + NAMES.put("navyblue", "#000080"); + NAMES.put("oldlace", "#FDF5E6"); + NAMES.put("olivedrab", "#6B8E23"); + NAMES.put("olivedrab1", "#C0FF3E"); + NAMES.put("olivedrab2", "#B3EE3A"); + NAMES.put("olivedrab3", "#9ACD32"); + NAMES.put("olivedrab4", "#698B22"); + NAMES.put("orange", "#FFA500"); + NAMES.put("orange1", "#FFA500"); + NAMES.put("orange2", "#EE9A00"); + NAMES.put("orange3", "#CD8500"); + NAMES.put("orange4", "#8B5A00"); + NAMES.put("orangered", "#FF4500"); + NAMES.put("orangered1", "#FF4500"); + NAMES.put("orangered2", "#EE4000"); + NAMES.put("orangered3", "#CD3700"); + NAMES.put("orangered4", "#8B2500"); + NAMES.put("orchid", "#DA70D6"); + NAMES.put("orchid1", "#FF83FA"); + NAMES.put("orchid2", "#EE7AE9"); + NAMES.put("orchid3", "#CD69C9"); + NAMES.put("orchid4", "#8B4789"); + NAMES.put("palegoldenrod", "#EEE8AA"); + NAMES.put("palegreen", "#98FB98"); + NAMES.put("palegreen1", "#9AFF9A"); + NAMES.put("palegreen2", "#90EE90"); + NAMES.put("palegreen3", "#7CCD7C"); + NAMES.put("palegreen4", "#548B54"); + NAMES.put("paleturquoise", "#AFEEEE"); + NAMES.put("paleturquoise1", "#BBFFFF"); + NAMES.put("paleturquoise2", "#AEEEEE"); + NAMES.put("paleturquoise3", "#96CDCD"); + NAMES.put("paleturquoise4", "#668B8B"); + NAMES.put("palevioletred", "#DB7093"); + NAMES.put("palevioletred1", "#FF82AB"); + NAMES.put("palevioletred2", "#EE799F"); + NAMES.put("palevioletred3", "#CD6889"); + NAMES.put("palevioletred4", "#8B475D"); + NAMES.put("papayawhip", "#FFEFD5"); + NAMES.put("peachpuff", "#FFDAB9"); + NAMES.put("peachpuff1", "#FFDAB9"); + NAMES.put("peachpuff2", "#EECBAD"); + NAMES.put("peachpuff3", "#CDAF95"); + NAMES.put("peachpuff4", "#8B7765"); + NAMES.put("peru", "#CD853F"); + NAMES.put("pink", "#FFC0CB"); + NAMES.put("pink1", "#FFB5C5"); + NAMES.put("pink2", "#EEA9B8"); + NAMES.put("pink3", "#CD919E"); + NAMES.put("pink4", "#8B636C"); + NAMES.put("plum", "#DDA0DD"); + NAMES.put("plum1", "#FFBBFF"); + NAMES.put("plum2", "#EEAEEE"); + NAMES.put("plum3", "#CD96CD"); + NAMES.put("plum4", "#8B668B"); + NAMES.put("powderblue", "#B0E0E6"); + NAMES.put("purple", "#A020F0"); + NAMES.put("purple1", "#9B30FF"); + NAMES.put("purple2", "#912CEE"); + NAMES.put("purple3", "#7D26CD"); + NAMES.put("purple4", "#551A8B"); + NAMES.put("red", "#FF0000"); + NAMES.put("red1", "#FF0000"); + NAMES.put("red2", "#EE0000"); + NAMES.put("red3", "#CD0000"); + NAMES.put("red4", "#8B0000"); + NAMES.put("rosybrown", "#BC8F8F"); + NAMES.put("rosybrown1", "#FFC1C1"); + NAMES.put("rosybrown2", "#EEB4B4"); + NAMES.put("rosybrown3", "#CD9B9B"); + NAMES.put("rosybrown4", "#8B6969"); + NAMES.put("royalblue", "#4169E1"); + NAMES.put("royalblue1", "#4876FF"); + NAMES.put("royalblue2", "#436EEE"); + NAMES.put("royalblue3", "#3A5FCD"); + NAMES.put("royalblue4", "#27408B"); + NAMES.put("snewData.addlebrown", "#8B4513"); + NAMES.put("salmon", "#FA8072"); + NAMES.put("salmon1", "#FF8C69"); + NAMES.put("salmon2", "#EE8262"); + NAMES.put("salmon3", "#CD7054"); + NAMES.put("salmon4", "#8B4C39"); + NAMES.put("sandybrown", "#F4A460"); + NAMES.put("seagreen", "#2E8B57"); + NAMES.put("seagreen1", "#54FF9F"); + NAMES.put("seagreen2", "#4EEE94"); + NAMES.put("seagreen3", "#43CD80"); + NAMES.put("seagreen4", "#2E8B57"); + NAMES.put("seashell", "#FFF5EE"); + NAMES.put("seashell1", "#FFF5EE"); + NAMES.put("seashell2", "#EEE5DE"); + NAMES.put("seashell3", "#CDC5BF"); + NAMES.put("seashell4", "#8B8682"); + NAMES.put("sienna", "#A0522D"); + NAMES.put("sienna1", "#FF8247"); + NAMES.put("sienna2", "#EE7942"); + NAMES.put("sienna3", "#CD6839"); + NAMES.put("sienna4", "#8B4726"); + NAMES.put("skyblue", "#87CEEB"); + NAMES.put("skyblue1", "#87CEFF"); + NAMES.put("skyblue2", "#7EC0EE"); + NAMES.put("skyblue3", "#6CA6CD"); + NAMES.put("skyblue4", "#4A708B"); + NAMES.put("slateblue", "#6A5ACD"); + NAMES.put("slateblue1", "#836FFF"); + NAMES.put("slateblue2", "#7A67EE"); + NAMES.put("slateblue3", "#6959CD"); + NAMES.put("slateblue4", "#473C8B"); + NAMES.put("slategray", "#708090"); + NAMES.put("slategray1", "#C6E2FF"); + NAMES.put("slategray2", "#B9D3EE"); + NAMES.put("slategray3", "#9FB6CD"); + NAMES.put("slategray4", "#6C7B8B"); + NAMES.put("slategrey", "#708090"); + NAMES.put("snow", "#FFFAFA"); + NAMES.put("snow1", "#FFFAFA"); + NAMES.put("snow2", "#EEE9E9"); + NAMES.put("snow3", "#CDC9C9"); + NAMES.put("snow4", "#8B8989"); + NAMES.put("springgreen", "#00FF7F"); + NAMES.put("springgreen1", "#00FF7F"); + NAMES.put("springgreen2", "#00EE76"); + NAMES.put("springgreen3", "#00CD66"); + NAMES.put("springgreen4", "#008B45"); + NAMES.put("steelblue", "#4682B4"); + NAMES.put("steelblue1", "#63B8FF"); + NAMES.put("steelblue2", "#5CACEE"); + NAMES.put("steelblue3", "#4F94CD"); + NAMES.put("steelblue4", "#36648B"); + NAMES.put("tan", "#D2B48C"); + NAMES.put("tan1", "#FFA54F"); + NAMES.put("tan2", "#EE9A49"); + NAMES.put("tan3", "#CD853F"); + NAMES.put("tan4", "#8B5A2B"); + NAMES.put("thistle", "#D8BFD8"); + NAMES.put("thistle1", "#FFE1FF"); + NAMES.put("thistle2", "#EED2EE"); + NAMES.put("thistle3", "#CDB5CD"); + NAMES.put("thistle4", "#8B7B8B"); + NAMES.put("tomato", "#FF6347"); + NAMES.put("tomato1", "#FF6347"); + NAMES.put("tomato2", "#EE5C42"); + NAMES.put("tomato3", "#CD4F39"); + NAMES.put("tomato4", "#8B3626"); + NAMES.put("turquoise", "#40E0D0"); + NAMES.put("turquoise1", "#00F5FF"); + NAMES.put("turquoise2", "#00E5EE"); + NAMES.put("turquoise3", "#00C5CD"); + NAMES.put("turquoise4", "#00868B"); + NAMES.put("violet", "#EE82EE"); + NAMES.put("violetred", "#D02090"); + NAMES.put("violetred1", "#FF3E96"); + NAMES.put("violetred2", "#EE3A8C"); + NAMES.put("violetred3", "#CD3278"); + NAMES.put("violetred4", "#8B2252"); + NAMES.put("wheat", "#F5DEB3"); + NAMES.put("wheat1", "#FFE7BA"); + NAMES.put("wheat2", "#EED8AE"); + NAMES.put("wheat3", "#CDBA96"); + NAMES.put("wheat4", "#8B7E66"); + NAMES.put("whitesmoke", "#F5F5F5"); + NAMES.put("yellow", "#FFFF00"); + NAMES.put("yellow1", "#FFFF00"); + NAMES.put("yellow2", "#EEEE00"); + NAMES.put("yellow3", "#CDCD00"); + NAMES.put("yellow4", "#8B8B00"); + NAMES.put("yellowgreen", "#9ACD32"); + } } } diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java new file mode 100644 index 0000000000..e7d405b43f --- /dev/null +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java @@ -0,0 +1,116 @@ +/* + * This material is distributed under the GNU General Public License + * Version 2. You may review the terms of this license at + * http://www.gnu.org/licenses/gpl-2.0.html + * + * Copyright (C) 2001-3 Paul Murrell + * Copyright (c) 1998-2013, The R Core Team + * Copyright (c) 2017, Oracle and/or its affiliates + * + * All rights reserved. + */ +package com.oracle.truffle.r.library.fastrGrid; + +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.notEmpty; +import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue; + +import java.util.HashMap; + +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; +import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode; +import com.oracle.truffle.r.runtime.RError.Message; +import com.oracle.truffle.r.runtime.data.RDataFactory; +import com.oracle.truffle.r.runtime.data.RIntVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; + +/** + * External builtin that converts the string representation of a unit, e.g. "cm", to internal + * numerical value. This values are then stored in special attribute "valid.unit". + */ +public abstract class LValidUnit extends RExternalBuiltinNode.Arg1 { + static { + Casts casts = new Casts(LValidUnit.class); + casts.arg(0).mustBe(stringValue(), Message.GENERIC, "'units' must be character").asStringVector().mustBe(notEmpty(), Message.GENERIC, "'units' must be of length > 0"); + } + + public static LValidUnit create() { + return LValidUnitNodeGen.create(); + } + + @Specialization + RIntVector convert(RAbstractStringVector units) { + int[] result = new int[units.getLength()]; + for (int i = 0; i < units.getLength(); i++) { + result[i] = convertSingle(units.getDataAt(i)); + } + return RDataFactory.createIntVector(result, RDataFactory.COMPLETE_VECTOR); + } + + protected int convertSingle(String name) { + if (name.equals("npc")) { + // seems to be by far the most common unit + return Unit.NPC; + } + return convertSingleSlowPath(name); + } + + @TruffleBoundary + private int convertSingleSlowPath(String name) { + Integer result = NamesHolder.NAMES.get(name); + if (result == null) { + error(Message.GENERIC, "invalid unit"); + } + return result; + } + + private static final class NamesHolder { + private static final HashMap<String, Integer> NAMES = new HashMap<>(30); + static { + NAMES.put("npc", Unit.NPC); + NAMES.put("cm", Unit.CM); + NAMES.put("inches", Unit.INCHES); + NAMES.put("lines", Unit.LINES); + NAMES.put("native", Unit.NATIVE); + NAMES.put("null", Unit.NULL); + NAMES.put("snpc", Unit.SNPC); + NAMES.put("mm", Unit.MM); + NAMES.put("points", Unit.POINTS); + NAMES.put("picas", Unit.PICAS); + NAMES.put("bigpts", Unit.BIGPOINTS); + NAMES.put("dida", Unit.DIDA); + NAMES.put("cicero", Unit.CICERO); + NAMES.put("scaledpts", Unit.SCALEDPOINTS); + NAMES.put("strwidth", Unit.STRINGWIDTH); + NAMES.put("strheight", Unit.STRINGHEIGHT); + NAMES.put("strascent", Unit.STRINGASCENT); + NAMES.put("strdescent", Unit.STRINGDESCENT); + + NAMES.put("char", Unit.CHAR); + NAMES.put("grobx", Unit.GROBX); + NAMES.put("groby", Unit.GROBY); + NAMES.put("grobwidth", Unit.GROBWIDTH); + NAMES.put("grobheight", Unit.GROBHEIGHT); + NAMES.put("grobascent", Unit.GROBASCENT); + NAMES.put("grobdescent", Unit.GROBDESCENT); + NAMES.put("mylines", Unit.MYLINES); + NAMES.put("mychar", Unit.MYCHAR); + NAMES.put("mystrwidth", Unit.MYSTRINGWIDTH); + NAMES.put("mystrheight", Unit.MYSTRINGHEIGHT); + // Some pseudonyms + NAMES.put("centimetre", Unit.CM); + NAMES.put("centimetres", Unit.CM); + NAMES.put("centimeter", Unit.CM); + NAMES.put("centimeters", Unit.CM); + NAMES.put("in", Unit.INCHES); + NAMES.put("inch", Unit.INCHES); + NAMES.put("line", Unit.LINES); + NAMES.put("millimetre", Unit.MM); + NAMES.put("millimetres", Unit.MM); + NAMES.put("millimeter", Unit.MM); + NAMES.put("millimeters", Unit.MM); + NAMES.put("point", Unit.POINTS); + NAMES.put("pt", Unit.POINTS); + } + } +} diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/Unit.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/Unit.java index 2eccf77f90..295d97a42e 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/Unit.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/Unit.java @@ -63,17 +63,17 @@ public final class Unit { static final String VALID_UNIT_ATTR = "valid.unit"; public static final int NPC = 0; - private static final int CM = 1; + public static final int CM = 1; public static final int INCHES = 2; - private static final int LINES = 3; + public static final int LINES = 3; public static final int NATIVE = 4; - private static final int NULL = 5; /* only used in layout specifications */ - private static final int SNPC = 6; - private static final int MM = 7; + public static final int NULL = 5; /* only used in layout specifications */ + public static final int SNPC = 6; + public static final int MM = 7; /* * Some units based on TeX's definition thereof */ - private static final int POINTS = 8; /* 72.27 pt = 1 in */ + public static final int POINTS = 8; /* 72.27 pt = 1 in */ public static final int PICAS = 9; /* 1 pc = 12 pt */ public static final int BIGPOINTS = 10; /* 72 bp = 1 in */ public static final int DIDA = 11; /* 1157 dd = 1238 pt */ @@ -82,28 +82,28 @@ public final class Unit { /* * Some units which require an object to query for a value. */ - private static final int STRINGWIDTH = 14; - private static final int STRINGHEIGHT = 15; + public static final int STRINGWIDTH = 14; + public static final int STRINGHEIGHT = 15; public static final int STRINGASCENT = 16; public static final int STRINGDESCENT = 17; /* * LINES now means multiples of the line height. This is multiples of the font size. */ - private static final int CHAR = 18; - private static final int GROBX = 19; - private static final int GROBY = 20; - private static final int GROBWIDTH = 21; - private static final int GROBHEIGHT = 22; + public static final int CHAR = 18; + public static final int GROBX = 19; + public static final int GROBY = 20; + public static final int GROBWIDTH = 21; + public static final int GROBHEIGHT = 22; public static final int GROBASCENT = 23; - private static final int GROBDESCENT = 24; + public static final int GROBDESCENT = 24; private static final int LAST_NORMAL_UNIT = GROBDESCENT; /* * No longer used */ - private static final int MYLINES = 103; - private static final int MYCHAR = 104; - private static final int MYSTRINGWIDTH = 105; - private static final int MYSTRINGHEIGHT = 106; + public static final int MYLINES = 103; + public static final int MYCHAR = 104; + public static final int MYSTRINGWIDTH = 105; + public static final int MYSTRINGHEIGHT = 106; // null layout arithmetic mode private static final int L_adding = 1; diff --git a/mx.fastr/copyrights/overrides b/mx.fastr/copyrights/overrides index a09bd8bac8..fca7942c32 100644 --- a/mx.fastr/copyrights/overrides +++ b/mx.fastr/copyrights/overrides @@ -757,6 +757,7 @@ com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LUnsetVi com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/ViewPort.java,gnu_r_murrel_core.copyright com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridUtils.java,gnu_r_murrel_core.copyright com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/Unit.java,gnu_r_murrel_core.copyright +com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/LValidUnit.java,gnu_r_murrel_core.copyright com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/ViewPortLocation.java,gnu_r_murrel_core.copyright com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/ViewPortContext.java,gnu_r_murrel_core.copyright com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridLinesNode.java,gnu_r_murrel_core.copyright -- GitLab