From a9191e207a810bfccb057ed6532ea29d57413ff2 Mon Sep 17 00:00:00 2001 From: Tilman Date: Tue, 15 Sep 2020 17:09:55 +0200 Subject: [PATCH] Convert RGB colors from aCalendar to CSS colors --- .../de/tilman/scripting/FixIcsTimestamps.java | 202 +++++++++++++++++- 1 file changed, 199 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/tilman/scripting/FixIcsTimestamps.java b/src/main/java/de/tilman/scripting/FixIcsTimestamps.java index a387fc6..cd00eb5 100644 --- a/src/main/java/de/tilman/scripting/FixIcsTimestamps.java +++ b/src/main/java/de/tilman/scripting/FixIcsTimestamps.java @@ -5,7 +5,9 @@ import java.io.FileReader; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,6 +64,162 @@ END:VEVENT */ public class FixIcsTimestamps { + + // Colors from https://www.w3.org/TR/2011/REC-css3-color-20110607/#svg-color + // as referenced in https://tools.ietf.org/html/rfc7986#section-5.9 + static final Map cssColors; + static { + cssColors = new HashMap(); + + cssColors.put("aliceblue", new Integer[] {240,248,255}); + cssColors.put("antiquewhite", new Integer[] {250,235,215}); + cssColors.put("aqua", new Integer[] {0,255,255}); + cssColors.put("aquamarine", new Integer[] {127,255,212}); + cssColors.put("azure", new Integer[] {240,255,255}); + cssColors.put("beige", new Integer[] {245,245,220}); + cssColors.put("bisque", new Integer[] {255,228,196}); + cssColors.put("black", new Integer[] {0,0,0}); + cssColors.put("blanchedalmond", new Integer[] {255,235,205}); + cssColors.put("blue", new Integer[] {0,0,255}); + cssColors.put("blueviolet", new Integer[] {138,43,226}); + cssColors.put("brown", new Integer[] {165,42,42}); + cssColors.put("burlywood", new Integer[] {222,184,135}); + cssColors.put("cadetblue", new Integer[] {95,158,160}); + cssColors.put("chartreuse", new Integer[] {127,255,0}); + cssColors.put("chocolate", new Integer[] {210,105,30}); + cssColors.put("coral", new Integer[] {255,127,80}); + cssColors.put("cornflowerblue", new Integer[] {100,149,237}); + cssColors.put("cornsilk", new Integer[] {255,248,220}); + cssColors.put("crimson", new Integer[] {220,20,60}); + cssColors.put("cyan", new Integer[] {0,255,255}); + cssColors.put("darkblue", new Integer[] {0,0,139}); + cssColors.put("darkcyan", new Integer[] {0,139,139}); + cssColors.put("darkgoldenrod", new Integer[] {184,134,11}); + cssColors.put("darkgray", new Integer[] {169,169,169}); + cssColors.put("darkgreen", new Integer[] {0,100,0}); + cssColors.put("darkgrey", new Integer[] {169,169,169}); + cssColors.put("darkkhaki", new Integer[] {189,183,107}); + cssColors.put("darkmagenta", new Integer[] {139,0,139}); + cssColors.put("darkolivegreen", new Integer[] {85,107,47}); + cssColors.put("darkorange", new Integer[] {255,140,0}); + cssColors.put("darkorchid", new Integer[] {153,50,204}); + cssColors.put("darkred", new Integer[] {139,0,0}); + cssColors.put("darksalmon", new Integer[] {233,150,122}); + cssColors.put("darkseagreen", new Integer[] {143,188,143}); + cssColors.put("darkslateblue", new Integer[] {72,61,139}); + cssColors.put("darkslategray", new Integer[] {47,79,79}); + cssColors.put("darkslategrey", new Integer[] {47,79,79}); + cssColors.put("darkturquoise", new Integer[] {0,206,209}); + cssColors.put("darkviolet", new Integer[] {148,0,211}); + cssColors.put("deeppink", new Integer[] {255,20,147}); + cssColors.put("deepskyblue", new Integer[] {0,191,255}); + cssColors.put("dimgray", new Integer[] {105,105,105}); + cssColors.put("dimgrey", new Integer[] {105,105,105}); + cssColors.put("dodgerblue", new Integer[] {30,144,255}); + cssColors.put("firebrick", new Integer[] {178,34,34}); + cssColors.put("floralwhite", new Integer[] {255,250,240}); + cssColors.put("forestgreen", new Integer[] {34,139,34}); + cssColors.put("fuchsia", new Integer[] {255,0,255}); + cssColors.put("gainsboro", new Integer[] {220,220,220}); + cssColors.put("ghostwhite", new Integer[] {248,248,255}); + cssColors.put("gold", new Integer[] {255,215,0}); + cssColors.put("goldenrod", new Integer[] {218,165,32}); + cssColors.put("gray", new Integer[] {128,128,128}); + cssColors.put("green", new Integer[] {0,128,0}); + cssColors.put("greenyellow", new Integer[] {173,255,47}); + cssColors.put("grey", new Integer[] {128,128,128}); + cssColors.put("honeydew", new Integer[] {240,255,240}); + cssColors.put("hotpink", new Integer[] {255,105,180}); + cssColors.put("indianred", new Integer[] {205,92,92}); + cssColors.put("indigo", new Integer[] {75,0,130}); + cssColors.put("ivory", new Integer[] {255,255,240}); + cssColors.put("khaki", new Integer[] {240,230,140}); + cssColors.put("lavender", new Integer[] {230,230,250}); + cssColors.put("lavenderblush", new Integer[] {255,240,245}); + cssColors.put("lawngreen", new Integer[] {124,252,0}); + cssColors.put("lemonchiffon", new Integer[] {255,250,205}); + cssColors.put("lightblue", new Integer[] {173,216,230}); + cssColors.put("lightcoral", new Integer[] {240,128,128}); + cssColors.put("lightcyan", new Integer[] {224,255,255}); + cssColors.put("lightgoldenrodyellow", new Integer[] {250,250,210}); + cssColors.put("lightgray", new Integer[] {211,211,211}); + cssColors.put("lightgreen", new Integer[] {144,238,144}); + cssColors.put("lightgrey", new Integer[] {211,211,211}); + cssColors.put("lightpink", new Integer[] {255,182,193}); + cssColors.put("lightsalmon", new Integer[] {255,160,122}); + cssColors.put("lightseagreen", new Integer[] {32,178,170}); + cssColors.put("lightskyblue", new Integer[] {135,206,250}); + cssColors.put("lightslategray", new Integer[] {119,136,153}); + cssColors.put("lightslategrey", new Integer[] {119,136,153}); + cssColors.put("lightsteelblue", new Integer[] {176,196,222}); + cssColors.put("lightyellow", new Integer[] {255,255,224}); + cssColors.put("lime", new Integer[] {0,255,0}); + cssColors.put("limegreen", new Integer[] {50,205,50}); + cssColors.put("linen", new Integer[] {250,240,230}); + cssColors.put("magenta", new Integer[] {255,0,255}); + cssColors.put("maroon", new Integer[] {128,0,0}); + cssColors.put("mediumaquamarine", new Integer[] {102,205,170}); + cssColors.put("mediumblue", new Integer[] {0,0,205}); + cssColors.put("mediumorchid", new Integer[] {186,85,211}); + cssColors.put("mediumpurple", new Integer[] {147,112,219}); + cssColors.put("mediumseagreen", new Integer[] {60,179,113}); + cssColors.put("mediumslateblue", new Integer[] {123,104,238}); + cssColors.put("mediumspringgreen", new Integer[] {0,250,154}); + cssColors.put("mediumturquoise", new Integer[] {72,209,204}); + cssColors.put("mediumvioletred", new Integer[] {199,21,133}); + cssColors.put("midnightblue", new Integer[] {25,25,112}); + cssColors.put("mintcream", new Integer[] {245,255,250}); + cssColors.put("mistyrose", new Integer[] {255,228,225}); + cssColors.put("moccasin", new Integer[] {255,228,181}); + cssColors.put("navajowhite", new Integer[] {255,222,173}); + cssColors.put("navy", new Integer[] {0,0,128}); + cssColors.put("oldlace", new Integer[] {253,245,230}); + cssColors.put("olive", new Integer[] {128,128,0}); + cssColors.put("olivedrab", new Integer[] {107,142,35}); + cssColors.put("orange", new Integer[] {255,165,0}); + cssColors.put("orangered", new Integer[] {255,69,0}); + cssColors.put("orchid", new Integer[] {218,112,214}); + cssColors.put("palegoldenrod", new Integer[] {238,232,170}); + cssColors.put("palegreen", new Integer[] {152,251,152}); + cssColors.put("paleturquoise", new Integer[] {175,238,238}); + cssColors.put("palevioletred", new Integer[] {219,112,147}); + cssColors.put("papayawhip", new Integer[] {255,239,213}); + cssColors.put("peachpuff", new Integer[] {255,218,185}); + cssColors.put("peru", new Integer[] {205,133,63}); + cssColors.put("pink", new Integer[] {255,192,203}); + cssColors.put("plum", new Integer[] {221,160,221}); + cssColors.put("powderblue", new Integer[] {176,224,230}); + cssColors.put("purple", new Integer[] {128,0,128}); + cssColors.put("red", new Integer[] {255,0,0}); + cssColors.put("rosybrown", new Integer[] {188,143,143}); + cssColors.put("royalblue", new Integer[] {65,105,225}); + cssColors.put("saddlebrown", new Integer[] {139,69,19}); + cssColors.put("salmon", new Integer[] {250,128,114}); + cssColors.put("sandybrown", new Integer[] {244,164,96}); + cssColors.put("seagreen", new Integer[] {46,139,87}); + cssColors.put("seashell", new Integer[] {255,245,238}); + cssColors.put("sienna", new Integer[] {160,82,45}); + cssColors.put("silver", new Integer[] {192,192,192}); + cssColors.put("skyblue", new Integer[] {135,206,235}); + cssColors.put("slateblue", new Integer[] {106,90,205}); + cssColors.put("slategray", new Integer[] {112,128,144}); + cssColors.put("slategrey", new Integer[] {112,128,144}); + cssColors.put("snow", new Integer[] {255,250,250}); + cssColors.put("springgreen", new Integer[] {0,255,127}); + cssColors.put("steelblue", new Integer[] {70,130,180}); + cssColors.put("tan", new Integer[] {210,180,140}); + cssColors.put("teal", new Integer[] {0,128,128}); + cssColors.put("thistle", new Integer[] {216,191,216}); + cssColors.put("tomato", new Integer[] {255,99,71}); + cssColors.put("turquoise", new Integer[] {64,224,208}); + cssColors.put("violet", new Integer[] {238,130,238}); + cssColors.put("wheat", new Integer[] {245,222,179}); + cssColors.put("white", new Integer[] {255,255,255}); + cssColors.put("whitesmoke", new Integer[] {245,245,245}); + cssColors.put("yellow", new Integer[] {255,255,0}); + cssColors.put("yellowgreen", new Integer[] {154,205,50}); + } + private final static Logger log = LoggerFactory.getLogger(FixIcsTimestamps.class); @@ -72,6 +230,7 @@ public class FixIcsTimestamps { int dtval = 0; int utcEntry = 0; int tzEntry = 0; + int colored = 0; int lineCounter = 1; public FixIcsTimestamps() { @@ -101,14 +260,50 @@ public class FixIcsTimestamps { String convertedStartDate = "DTSTART;TZID=Europe/Berlin:" + dateFormat.format(date).substring(0,15); appointment.add(convertedStartDate); - log.info("input " + line + ", converted: " + convertedStartDate); - } else if (line.startsWith("DTEND:")) { // UTC, muss konvertiert werden + //log.info("input " + line + ", converted: " + convertedStartDate); + } + else if (line.startsWith("DTEND:")) { // UTC, muss konvertiert werden String endDate = line.substring(6, 22); Date date = dateFormat.parse(endDate.replaceAll("Z$", "+0000")); String convertedEndDate = "DTEND;TZID=Europe/Berlin:" + dateFormat.format(date).substring(0,15); appointment.add(convertedEndDate); - } else { // no conversion + } + else if (line.startsWith("DESCRIPTION: " + targetColor); + appointment.add("COLOR:" + targetColor); + + // remove color tag from description + appointment.add("DESCRIPTION:" + line.substring(line.indexOf("") + 7)); + } + else { // no conversion if (line.startsWith("DTSTART;VALUE=DATE:")) { // ganztägiger Termin dtval++; } else if (line.startsWith("DTSTART;TZID=")) { // Local Timezone @@ -142,6 +337,7 @@ public class FixIcsTimestamps { log.info("UTC: " + utcEntry); log.info("TZ: " + tzEntry); log.info("DTVAL + UTC + TZ = " + (dtval + utcEntry + tzEntry)); + log.info("Colored: " + colored); for (String line : outLines) {