1var COLORS = {
2  aliceblue: '#f0f8ff',
3  antiquewhite: '#faebd7',
4  aqua: '#0ff',
5  aquamarine: '#7fffd4',
6  azure: '#f0ffff',
7  beige: '#f5f5dc',
8  bisque: '#ffe4c4',
9  black: '#000',
10  blanchedalmond: '#ffebcd',
11  blue: '#00f',
12  blueviolet: '#8a2be2',
13  brown: '#a52a2a',
14  burlywood: '#deb887',
15  cadetblue: '#5f9ea0',
16  chartreuse: '#7fff00',
17  chocolate: '#d2691e',
18  coral: '#ff7f50',
19  cornflowerblue: '#6495ed',
20  cornsilk: '#fff8dc',
21  crimson: '#dc143c',
22  cyan: '#0ff',
23  darkblue: '#00008b',
24  darkcyan: '#008b8b',
25  darkgoldenrod: '#b8860b',
26  darkgray: '#a9a9a9',
27  darkgreen: '#006400',
28  darkgrey: '#a9a9a9',
29  darkkhaki: '#bdb76b',
30  darkmagenta: '#8b008b',
31  darkolivegreen: '#556b2f',
32  darkorange: '#ff8c00',
33  darkorchid: '#9932cc',
34  darkred: '#8b0000',
35  darksalmon: '#e9967a',
36  darkseagreen: '#8fbc8f',
37  darkslateblue: '#483d8b',
38  darkslategray: '#2f4f4f',
39  darkslategrey: '#2f4f4f',
40  darkturquoise: '#00ced1',
41  darkviolet: '#9400d3',
42  deeppink: '#ff1493',
43  deepskyblue: '#00bfff',
44  dimgray: '#696969',
45  dimgrey: '#696969',
46  dodgerblue: '#1e90ff',
47  firebrick: '#b22222',
48  floralwhite: '#fffaf0',
49  forestgreen: '#228b22',
50  fuchsia: '#f0f',
51  gainsboro: '#dcdcdc',
52  ghostwhite: '#f8f8ff',
53  gold: '#ffd700',
54  goldenrod: '#daa520',
55  gray: '#808080',
56  green: '#008000',
57  greenyellow: '#adff2f',
58  grey: '#808080',
59  honeydew: '#f0fff0',
60  hotpink: '#ff69b4',
61  indianred: '#cd5c5c',
62  indigo: '#4b0082',
63  ivory: '#fffff0',
64  khaki: '#f0e68c',
65  lavender: '#e6e6fa',
66  lavenderblush: '#fff0f5',
67  lawngreen: '#7cfc00',
68  lemonchiffon: '#fffacd',
69  lightblue: '#add8e6',
70  lightcoral: '#f08080',
71  lightcyan: '#e0ffff',
72  lightgoldenrodyellow: '#fafad2',
73  lightgray: '#d3d3d3',
74  lightgreen: '#90ee90',
75  lightgrey: '#d3d3d3',
76  lightpink: '#ffb6c1',
77  lightsalmon: '#ffa07a',
78  lightseagreen: '#20b2aa',
79  lightskyblue: '#87cefa',
80  lightslategray: '#778899',
81  lightslategrey: '#778899',
82  lightsteelblue: '#b0c4de',
83  lightyellow: '#ffffe0',
84  lime: '#0f0',
85  limegreen: '#32cd32',
86  linen: '#faf0e6',
87  magenta: '#ff00ff',
88  maroon: '#800000',
89  mediumaquamarine: '#66cdaa',
90  mediumblue: '#0000cd',
91  mediumorchid: '#ba55d3',
92  mediumpurple: '#9370db',
93  mediumseagreen: '#3cb371',
94  mediumslateblue: '#7b68ee',
95  mediumspringgreen: '#00fa9a',
96  mediumturquoise: '#48d1cc',
97  mediumvioletred: '#c71585',
98  midnightblue: '#191970',
99  mintcream: '#f5fffa',
100  mistyrose: '#ffe4e1',
101  moccasin: '#ffe4b5',
102  navajowhite: '#ffdead',
103  navy: '#000080',
104  oldlace: '#fdf5e6',
105  olive: '#808000',
106  olivedrab: '#6b8e23',
107  orange: '#ffa500',
108  orangered: '#ff4500',
109  orchid: '#da70d6',
110  palegoldenrod: '#eee8aa',
111  palegreen: '#98fb98',
112  paleturquoise: '#afeeee',
113  palevioletred: '#db7093',
114  papayawhip: '#ffefd5',
115  peachpuff: '#ffdab9',
116  peru: '#cd853f',
117  pink: '#ffc0cb',
118  plum: '#dda0dd',
119  powderblue: '#b0e0e6',
120  purple: '#800080',
121  rebeccapurple: '#663399',
122  red: '#f00',
123  rosybrown: '#bc8f8f',
124  royalblue: '#4169e1',
125  saddlebrown: '#8b4513',
126  salmon: '#fa8072',
127  sandybrown: '#f4a460',
128  seagreen: '#2e8b57',
129  seashell: '#fff5ee',
130  sienna: '#a0522d',
131  silver: '#c0c0c0',
132  skyblue: '#87ceeb',
133  slateblue: '#6a5acd',
134  slategray: '#708090',
135  slategrey: '#708090',
136  snow: '#fffafa',
137  springgreen: '#00ff7f',
138  steelblue: '#4682b4',
139  tan: '#d2b48c',
140  teal: '#008080',
141  thistle: '#d8bfd8',
142  tomato: '#ff6347',
143  turquoise: '#40e0d0',
144  violet: '#ee82ee',
145  wheat: '#f5deb3',
146  white: '#fff',
147  whitesmoke: '#f5f5f5',
148  yellow: '#ff0',
149  yellowgreen: '#9acd32'
150};
151
152var toHex = {};
153var toName = {};
154
155for (var name in COLORS) {
156  var hex = COLORS[name];
157
158  if (name.length < hex.length) {
159    toName[hex] = name;
160  } else {
161    toHex[name] = hex;
162  }
163}
164
165var toHexPattern = new RegExp('(^| |,|\\))(' + Object.keys(toHex).join('|') + ')( |,|\\)|$)', 'ig');
166var toNamePattern = new RegExp('(' + Object.keys(toName).join('|') + ')([^a-f0-9]|$)', 'ig');
167
168function hexConverter(match, prefix, colorValue, suffix) {
169  return prefix + toHex[colorValue.toLowerCase()] + suffix;
170}
171
172function nameConverter(match, colorValue, suffix) {
173  return toName[colorValue.toLowerCase()] + suffix;
174}
175
176function shortenHex(value) {
177  var hasHex = value.indexOf('#') > -1;
178  var shortened = value.replace(toHexPattern, hexConverter);
179
180  if (shortened != value) {
181    shortened = shortened.replace(toHexPattern, hexConverter);
182  }
183
184  return hasHex ?
185    shortened.replace(toNamePattern, nameConverter) :
186    shortened;
187}
188
189module.exports = shortenHex;
190