001    /*
002     * Copyright (c) 2009 The openGion Project.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013     * either express or implied. See the License for the specific language
014     * governing permissions and limitations under the License.
015     */
016    package org.opengion.fukurou.util;
017    
018    import java.awt.Color;
019    import java.util.HashMap;
020    import java.util.Map;
021    import java.util.Locale ;
022    
023    import static org.opengion.fukurou.util.HybsConst.CR;                           // 6.1.0.0 (2014/12/26) refactoring
024    
025    /**
026     * ColorMap.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れã‚?Color関連メソãƒ?ƒ‰ã‚’集ç´?—ãŸã?クラスã§ã™ã?
027     * StringUtil ã‹ã‚‰ã€Color関係ã?部åˆ?‚’独立ã•ã›ã¾ã—ãŸã€?
028     *
029     * @og.group ユーãƒ?‚£ãƒªãƒ?‚£
030     * @og.rev 6.0.2.1 (2014/09/26) æ–°è¦ä½œæ?
031     *
032     * @version  6.0
033     * @author       Kazuhiko Hasegawa
034     * @since    JDK5.0,
035     */
036    public final class ColorMap {
037    
038            /** ãƒãƒƒãƒ•ã‚¡ã®åˆæœŸå®¹é‡ã‚’通常より多ã„ç›®ã«è¨­å®šã—ã¾ã™ã?(200)  */
039    //      private static final int BUFFER_MIDDLE = 200;
040    
041    //      /** シスãƒ?ƒ ä¾å­˜ã?改行記å·ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã?     */
042    //      private static final String CR = System.getProperty("line.separator");
043    
044            // 4.0.3.0 (2007/12/26) 色コードã«PURPLE を追åŠ?
045            // 5.7.8.0 (2014/07/04) 逿?追åŠ?
046            private static final Map<String,Color> CLR_MAP;
047            static {
048                    CLR_MAP = new HashMap<String,Color>();
049                    // java.awt.Color static 定義色
050                    CLR_MAP.put( "BLACK"            ,Color.BLACK            );
051                    CLR_MAP.put( "BLUE"                     ,Color.BLUE                     );
052                    CLR_MAP.put( "CYAN"                     ,Color.CYAN                     );
053                    CLR_MAP.put( "DARKGRAY"         ,Color.DARK_GRAY        );
054                    CLR_MAP.put( "GRAY"                     ,Color.GRAY                     );
055                    CLR_MAP.put( "GREEN"            ,Color.GREEN            );
056                    CLR_MAP.put( "LIGHTGRAY"        ,Color.LIGHT_GRAY       );
057                    CLR_MAP.put( "MAGENTA"          ,Color.MAGENTA          );
058                    CLR_MAP.put( "ORANGE"           ,Color.ORANGE           );
059                    CLR_MAP.put( "PINK"                     ,Color.PINK                     );
060                    CLR_MAP.put( "RED"                      ,Color.RED                      );
061                    CLR_MAP.put( "WHITE"            ,Color.WHITE            );
062                    CLR_MAP.put( "YELLOW"           ,Color.YELLOW           );
063    
064                    CLR_MAP.put( "TRANSPARENT"      ,new Color( 255,255,255,0 )     );              // 5.7.8.0 (2014/07/04) 逿?追åŠ?
065    
066                    // 6.0.2.1 (2014/09/26) CSS1 / HTML3â€? / VGA ã®è‰²åç§° 追åŠ?
067                    CLR_MAP.put( "LIME"                     ,Color.decode( "#00FF00" )      );
068                    CLR_MAP.put( "AQUA"                     ,Color.decode( "#00FFFF" )      );
069                    CLR_MAP.put( "SILVER"           ,Color.decode( "#C0C0C0" )      );
070                    CLR_MAP.put( "MAROON"           ,Color.decode( "#800000" )      );              // X11ã§ã¯ã€?B03060
071                    CLR_MAP.put( "OLIVE"            ,Color.decode( "#808000" )      );
072                    CLR_MAP.put( "TEAL"                     ,Color.decode( "#008080" )      );
073                    CLR_MAP.put( "NAVY"                     ,Color.decode( "#000080" )      );
074                    CLR_MAP.put( "FUCHSIA"          ,Color.decode( "#FF00FF" )      );
075                    CLR_MAP.put( "PURPLE"           ,Color.decode( "#800080" )      );              // X11ã§ã¯ã€?A020F0
076    
077                    // 6.0.2.1 (2014/09/26) X11ã®è‰²åç§° 追åŠ?
078                    CLR_MAP.put( "ALICEBLUE"                        ,Color.decode( "#F0F8FF" )      );
079                    CLR_MAP.put( "ANTIQUEWHITE"                     ,Color.decode( "#FAEBD7" )      );
080                    CLR_MAP.put( "AQUAMARINE"                       ,Color.decode( "#7FFFD4" )      );
081                    CLR_MAP.put( "AZURE"                            ,Color.decode( "#F0FFFF" )      );
082                    CLR_MAP.put( "BEIGE"                            ,Color.decode( "#F5F5DC" )      );
083                    CLR_MAP.put( "BISQUE"                           ,Color.decode( "#FFE4C4" )      );
084                    CLR_MAP.put( "BLANCHEDALMOND"           ,Color.decode( "#FFEBCD" )      );
085                    CLR_MAP.put( "BLUEVIOLET"                       ,Color.decode( "#8A2BE2" )      );
086                    CLR_MAP.put( "BROWN"                            ,Color.decode( "#A52A2A" )      );
087                    CLR_MAP.put( "BURLYWOOD"                        ,Color.decode( "#DEB887" )      );
088                    CLR_MAP.put( "CADETBLUE"                        ,Color.decode( "#5F9EA0" )      );
089                    CLR_MAP.put( "CHARTREUSE"                       ,Color.decode( "#7FFF00" )      );
090                    CLR_MAP.put( "CHOCOLATE"                        ,Color.decode( "#D2691E" )      );
091                    CLR_MAP.put( "CORAL"                            ,Color.decode( "#FF7F50" )      );
092                    CLR_MAP.put( "CORNFLOWERBLUE"           ,Color.decode( "#6495ED" )      );
093                    CLR_MAP.put( "CORNSILK"                         ,Color.decode( "#FFF8DC" )      );
094                    CLR_MAP.put( "CRIMSON"                          ,Color.decode( "#DC143C" )      );
095                    CLR_MAP.put( "DARKBLUE"                         ,Color.decode( "#00008B" )      );
096                    CLR_MAP.put( "DARKCYAN"                         ,Color.decode( "#008B8B" )      );
097                    CLR_MAP.put( "DARKGOLDENROD"            ,Color.decode( "#B8860B" )      );
098                    CLR_MAP.put( "DARKGREEN"                        ,Color.decode( "#006400" )      );
099                    CLR_MAP.put( "DARKKHAKI"                        ,Color.decode( "#BDB76B" )      );
100                    CLR_MAP.put( "DARKMAGENTA"                      ,Color.decode( "#8B008B" )      );
101                    CLR_MAP.put( "DARKOLIVEGREEN"           ,Color.decode( "#556B2F" )      );
102                    CLR_MAP.put( "DARKORANGE"                       ,Color.decode( "#FF8C00" )      );
103                    CLR_MAP.put( "DARKORCHID"                       ,Color.decode( "#9932CC" )      );
104                    CLR_MAP.put( "DARKRED"                          ,Color.decode( "#8B0000" )      );
105                    CLR_MAP.put( "DARKSALMON"                       ,Color.decode( "#E9967A" )      );
106                    CLR_MAP.put( "DARKSEAGREEN"                     ,Color.decode( "#8FBC8F" )      );
107                    CLR_MAP.put( "DARKSLATEBLUE"            ,Color.decode( "#483D8B" )      );
108                    CLR_MAP.put( "DARKSLATEGRAY"            ,Color.decode( "#2F4F4F" )      );
109                    CLR_MAP.put( "DARKTURQUOISE"            ,Color.decode( "#00CED1" )      );
110                    CLR_MAP.put( "DARKVIOLET"                       ,Color.decode( "#9400D3" )      );
111                    CLR_MAP.put( "DEEPPINK"                         ,Color.decode( "#FF1493" )      );
112                    CLR_MAP.put( "DEEPSKYBLUE"                      ,Color.decode( "#00BFFF" )      );
113                    CLR_MAP.put( "DIMGRAY"                          ,Color.decode( "#696969" )      );
114                    CLR_MAP.put( "DODGERBLUE"                       ,Color.decode( "#1E90FF" )      );
115                    CLR_MAP.put( "FIREBRICK"                        ,Color.decode( "#B22222" )      );
116                    CLR_MAP.put( "FLORALWHITE"                      ,Color.decode( "#FFFAF0" )      );
117                    CLR_MAP.put( "FORESTGREEN"                      ,Color.decode( "#228B22" )      );
118                    CLR_MAP.put( "GAINSBORO"                        ,Color.decode( "#DCDCDC" )      );
119                    CLR_MAP.put( "GHOSTWHITE"                       ,Color.decode( "#F8F8FF" )      );
120                    CLR_MAP.put( "GOLD"                                     ,Color.decode( "#FFD700" )      );
121                    CLR_MAP.put( "GOLDENROD"                        ,Color.decode( "#DAA520" )      );
122                    CLR_MAP.put( "GREENYELLOW"                      ,Color.decode( "#ADFF2F" )      );
123                    CLR_MAP.put( "HONEYDEW"                         ,Color.decode( "#F0FFF0" )      );
124                    CLR_MAP.put( "HOTPINK"                          ,Color.decode( "#FF69B4" )      );
125                    CLR_MAP.put( "INDIANRED"                        ,Color.decode( "#CD5C5C" )      );
126                    CLR_MAP.put( "INDIGO"                           ,Color.decode( "#4B0082" )      );
127                    CLR_MAP.put( "IVORY"                            ,Color.decode( "#FFFFF0" )      );
128                    CLR_MAP.put( "KHAKI"                            ,Color.decode( "#F0E68C" )      );
129                    CLR_MAP.put( "LAVENDER"                         ,Color.decode( "#E6E6FA" )      );
130                    CLR_MAP.put( "LAVENDERBLUSH"            ,Color.decode( "#FFF0F5" )      );
131                    CLR_MAP.put( "LAWNGREEN"                        ,Color.decode( "#7CFC00" )      );
132                    CLR_MAP.put( "LEMONCHIFFON"                     ,Color.decode( "#FFFACD" )      );
133                    CLR_MAP.put( "LIGHTBLUE"                        ,Color.decode( "#ADD8E6" )      );
134                    CLR_MAP.put( "LIGHTCORAL"                       ,Color.decode( "#F08080" )      );
135                    CLR_MAP.put( "LIGHTCYAN"                        ,Color.decode( "#E0FFFF" )      );
136                    CLR_MAP.put( "LIGHTGOLDENRODYELLOW"     ,Color.decode( "#FAFAD2" )      );
137                    CLR_MAP.put( "LIGHTGREEN"                       ,Color.decode( "#90EE90" )      );
138                    CLR_MAP.put( "LIGHTPINK"                        ,Color.decode( "#FFB6C1" )      );
139                    CLR_MAP.put( "LIGHTSALMON"                      ,Color.decode( "#FFA07A" )      );
140                    CLR_MAP.put( "LIGHTSEAGREEN"            ,Color.decode( "#20B2AA" )      );
141                    CLR_MAP.put( "LIGHTSKYBLUE"                     ,Color.decode( "#87CEFA" )      );
142                    CLR_MAP.put( "LIGHTSLATEGRAY"           ,Color.decode( "#778899" )      );
143                    CLR_MAP.put( "LIGHTSTEELBLUE"           ,Color.decode( "#B0C4DE" )      );
144                    CLR_MAP.put( "LIGHTYELLOW"                      ,Color.decode( "#FFFFE0" )      );
145                    CLR_MAP.put( "LIMEGREEN"                        ,Color.decode( "#32CD32" )      );
146                    CLR_MAP.put( "LINEN"                            ,Color.decode( "#FAF0E6" )      );
147                    CLR_MAP.put( "MEDIUMAQUAMARINE"         ,Color.decode( "#66CDAA" )      );
148                    CLR_MAP.put( "MEDIUMBLUE"                       ,Color.decode( "#0000CD" )      );
149                    CLR_MAP.put( "MEDIUMORCHID"                     ,Color.decode( "#BA55D3" )      );
150                    CLR_MAP.put( "MEDIUMPURPLE"                     ,Color.decode( "#9370DB" )      );
151                    CLR_MAP.put( "MEDIUMSEAGREEN"           ,Color.decode( "#3CB371" )      );
152                    CLR_MAP.put( "MEDIUMSLATEBLUE"          ,Color.decode( "#7B68EE" )      );
153                    CLR_MAP.put( "MEDIUMSPRINGGREEN"        ,Color.decode( "#00FA9A" )      );
154                    CLR_MAP.put( "MEDIUMTURQUOISE"          ,Color.decode( "#48D1CC" )      );
155                    CLR_MAP.put( "MEDIUMVIOLETRED"          ,Color.decode( "#C71585" )      );
156                    CLR_MAP.put( "MIDNIGHTBLUE"                     ,Color.decode( "#191970" )      );
157                    CLR_MAP.put( "MINTCREAM"                        ,Color.decode( "#F5FFFA" )      );
158                    CLR_MAP.put( "MISTYROSE"                        ,Color.decode( "#FFE4E1" )      );
159                    CLR_MAP.put( "MOCCASIN"                         ,Color.decode( "#FFE4B5" )      );
160                    CLR_MAP.put( "NAVAJOWHITE"                      ,Color.decode( "#FFDEAD" )      );
161                    CLR_MAP.put( "OLDLACE"                          ,Color.decode( "#FDF5E6" )      );
162                    CLR_MAP.put( "OLIVEDRAB"                        ,Color.decode( "#6B8E23" )      );
163                    CLR_MAP.put( "ORANGERED"                        ,Color.decode( "#FF4500" )      );
164                    CLR_MAP.put( "ORCHID"                           ,Color.decode( "#DA70D6" )      );
165                    CLR_MAP.put( "PALEGOLDENROD"            ,Color.decode( "#EEE8AA" )      );
166                    CLR_MAP.put( "PALEGREEN"                        ,Color.decode( "#98FB98" )      );
167                    CLR_MAP.put( "PALETURQUOISE"            ,Color.decode( "#AFEEEE" )      );
168                    CLR_MAP.put( "PALEVIOLETRED"            ,Color.decode( "#DB7093" )      );
169                    CLR_MAP.put( "PAPAYAWHIP"                       ,Color.decode( "#FFEFD5" )      );
170                    CLR_MAP.put( "PEACHPUFF"                        ,Color.decode( "#FFDAB9" )      );
171                    CLR_MAP.put( "PERU"                                     ,Color.decode( "#CD853F" )      );
172                    CLR_MAP.put( "PLUM"                                     ,Color.decode( "#DDA0DD" )      );
173                    CLR_MAP.put( "POWDERBLUE"                       ,Color.decode( "#B0E0E6" )      );
174                    CLR_MAP.put( "ROSYBROWN"                        ,Color.decode( "#BC8F8F" )      );
175                    CLR_MAP.put( "ROYALBLUE"                        ,Color.decode( "#4169E1" )      );
176                    CLR_MAP.put( "SADDLEBROWN"                      ,Color.decode( "#8B4513" )      );
177                    CLR_MAP.put( "SALMON"                           ,Color.decode( "#FA8072" )      );
178                    CLR_MAP.put( "SANDYBROWN"                       ,Color.decode( "#F4A460" )      );
179                    CLR_MAP.put( "SEAGREEN"                         ,Color.decode( "#2E8B57" )      );
180                    CLR_MAP.put( "SEASHELL"                         ,Color.decode( "#FFF5EE" )      );
181                    CLR_MAP.put( "SIENNA"                           ,Color.decode( "#A0522D" )      );
182                    CLR_MAP.put( "SKYBLUE"                          ,Color.decode( "#87CEEB" )      );
183                    CLR_MAP.put( "SLATEBLUE"                        ,Color.decode( "#6A5ACD" )      );
184                    CLR_MAP.put( "SLATEGRAY"                        ,Color.decode( "#708090" )      );
185                    CLR_MAP.put( "SNOW"                                     ,Color.decode( "#FFFAFA" )      );
186                    CLR_MAP.put( "SPRINGGREEN"                      ,Color.decode( "#00FF7F" )      );
187                    CLR_MAP.put( "STEELBLUE"                        ,Color.decode( "#4682B4" )      );
188                    CLR_MAP.put( "TAN"                                      ,Color.decode( "#D2B48C" )      );
189                    CLR_MAP.put( "THISTLE"                          ,Color.decode( "#D8BFD8" )      );
190                    CLR_MAP.put( "TOMATO"                           ,Color.decode( "#FF6347" )      );
191                    CLR_MAP.put( "TURQUOISE"                        ,Color.decode( "#40E0D0" )      );
192                    CLR_MAP.put( "VIOLET"                           ,Color.decode( "#EE82EE" )      );
193                    CLR_MAP.put( "WHEAT"                            ,Color.decode( "#F5DEB3" )      );
194                    CLR_MAP.put( "WHITESMOKE"                       ,Color.decode( "#F5F5F5" )      );
195                    CLR_MAP.put( "YELLOWGREEN"                      ,Color.decode( "#9ACD32" )      );
196            }
197    
198            /**
199             *      ãƒ?ƒ•ォルトコンストラクターをprivateã«ã—ã¦ã€?
200             *      オブジェクトã?生æ?ã‚’ã•ã›ãªã?‚ˆã?«ã™ã‚‹ã€?
201             *
202             */
203            private ColorMap() {}
204    
205            /**
206             * カラーキーワードよりã?Colorオブジェクトを作æ?ã—ã¾ã™ã?
207             *
208             * æŒ?®šæ–‡å­—å?ã¯ã€java.awt.Color クラスã®static フィールドåã§æŒ?®šã—ã¾ã™ã?
209             * BLACK , BLUE , CYAN , DARK_GRAY , GRAY , GREEN , LIGHT_GRAY ,
210             * MAGENTA , ORANGE , PINK , RED , WHITE , YELLOW , PURPLE , TRANSPARENT(逿?) ãŒæŒ‡å®šã§ãã¾ã™ã?
211             * 
212             * 6.0.2.1 (2014/09/26) 以é™ã§ã¯ã€CSS1/HTML3â€?/VGA ã®è‰²åç§°ã¨ã—ã¦ã€?
213             * LIME , AQUA , SILVER , MAROON , OLIVE , TEAL , NAVY , FUCHSIA を追�?
214             * ãれã¨ã€X11ã®è‰²åç§° を追åŠ?—ã¾ã—ãŸã€?
215             * 
216             * ã¾ãŸã?å…ˆé?ã«ã€? を付ã‘る事ã§ã€?XXXXXXå½¢å¼ã?16bitRGB表è¨?ã§ã‚‚指定å¯èƒ½ã§ã™ã?
217             * static フィールドåã®Mapを管ç?—ã¦ã?¾ã™ãŒã€å­˜åœ¨ã—ãªã??åˆã?ã€ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã?
218             *
219             * @og.rev 3.8.9.1 (2007/06/29) æ–°è¦ä½œæ?
220             * @og.rev 4.1.1.0 (2008/02/04) CLR_MAP ã«å­˜åœ¨ã—ãªã??åˆã?エラーã«ã—ã¾ã™ã?
221             * @og.rev 6.0.2.1 (2014/09/26) CSS1/HTML3â€?/VGA ã®è‰²åç§° , X11ã®è‰²åç§° 追åŠ?
222             *
223             * @param       value java.awt.Color ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’ç¤ºã™æ–‡å­—å?ã¾ãŸã?ã€?XXXXXXå½¢å¼ã?16bitRGB表è¨?
224             *
225             * @return      Colorオブジェク�
226             * @see         java.awt.Color#BLACK
227             */
228            public static Color getColorInstance( final String value ) {
229                    final Color clr ;
230    
231    //              if( value.startsWith("#") ) {
232                    if( value != null && value.length() > 0 && value.charAt(0) == '#' ) {        // 6.1.0.0 (2014/12/26) refactoring
233                            clr = Color.decode( value );
234                    }
235                    else {
236                            final String val = value.replaceAll( "_" , "" ).toUpperCase(Locale.JAPAN);
237                            clr = CLR_MAP.get( val );
238                            if( clr == null ) {
239                                    final String errMsg = "æŒ?®šã?色コードã?使用ã§ãã¾ã›ã‚“ Color=[" + value + "]" + CR
240                                                            + "ColorMap=" + CLR_MAP.keySet().toString();
241                                    throw new RuntimeException( errMsg );
242                            }
243                    }
244    
245                    return clr;
246            }
247    
248            /**
249             * å†?ƒ¨ã§ç®¡ç?—ã¦ã?‚‹ ColorMap ã®ã‚­ãƒ¼é…å?ã‚’è¿”ã—ã¾ã™ã?
250             *
251             * @og.rev 6.0.2.1 (2014/09/26) æ–°è¦è¿½åŠ?
252             *
253             * @return      キーé…å?
254             * @og.rtnNotNull
255             */
256            public static String[] getColorKeys() {
257                    return CLR_MAP.keySet().toArray( new String[CLR_MAP.size()] );
258            }
259    }