File Coverage

blib/lib/Math/Zap/Color.pm
Criterion Covered Total %
statement 36 45 80.0
branch 11 20 55.0
condition n/a
subroutine 9 11 81.8
pod 7 7 100.0
total 63 83 75.9


line stmt bran cond sub pod time code
1            
2             =head1 Color
3            
4             Translate, lighten, darken, invert named colors.
5            
6             PhilipRBrenan@yahoo.com, 2004, Perl License
7            
8            
9             =head2 Synopsis
10            
11             Example t/color.t
12            
13             #_ Color _______________________________________________________________
14             # Test colors
15             # philiprbrenan@yahoo.com, 2004, Perl License
16             #_______________________________________________________________________
17            
18             use Math::Zap::Color;
19             use Test::Simple tests=>20;
20            
21             ok(color('dark red')->normal eq '#8b0000');
22             ok(color('dark red')->light eq '#c58080');
23             ok(color('red')->normal eq '#ff0000');
24             ok(color('red')->light eq '#ff8080');
25             ok(color('red')->dark eq '#7f0000');
26             ok(color('red')->invert eq '#00ffff');
27            
28             use Math::Zap::Color color=>'c', invert=>-i;
29            
30             my $c = c -red;
31             ok("$c" eq '#ff0000');
32             ok(i(-red) eq '#00ffff');
33             ok(c('dark red')->normal eq '#8b0000');
34             ok(c('dark red')->light eq '#c58080');
35             ok($c->normal eq '#ff0000');
36             ok($c->light eq '#ff8080');
37             ok($c->dark eq '#7f0000');
38             ok($c->invert eq '#00ffff');
39             ok(c(-green) eq '#00ff00');
40             ok(c('ReD') eq '#ff0000');
41             ok(c(-red) eq '#ff0000');
42             ok(c('#ff0000') eq '#ff0000');
43             ok(c('ff0000') eq '#ff0000');
44             ok(c('255,0,0') eq '#ff0000');
45            
46            
47            
48             =head2 Description
49            
50             Simplifies the management of colors by allowing X11 color names to be
51             used; provides methods for manipulating the colors.
52            
53             =cut
54            
55            
56             package Math::Zap::Color;
57             $VERSION=1.07;
58 2     2   626 use Carp;
  2         4  
  2         158  
59 2     2   12 use constant debug=>0; # Debugging level
  2         3  
  2         2223  
60            
61            
62             =head2 Constructors
63            
64            
65             =head3 color
66            
67             A color may be constructed from a reference to an existing color, or
68             from a string containing: a color name (quoted or preceeded by -, case
69             insensitive), or 3 hexadecimal numbers optionally preceeded by #, or 3
70             decimal numbers separated by commas: these number representing the rgb
71             color values in the range 0..255. Thus:
72            
73             'ReD'
74             -red
75             'ff0000'
76             '255,0,0'
77            
78             =cut
79            
80            
81 16     16 1 25 sub color($)
82             {my $C = shift;
83 16         19 my @rgb;
84            
85 16 50       30 if (ref($C))
  0         0  
86 0 0       0 {if (ref($C) eq 'ARRAY')
  16         28  
87 0         0 {@rgb = @$C;
88             }
89             else
90             {die "Unknown color format $C";
91             }
92             }
93             else
94             {my $c = lc($C); # lowercase
95 16         32 $c =~ s/\s+//g; # remove spaces
96 16         32 $c =~ s/^-//g; # remove leading '-' as alternative to quotes
97 16         19 $c =~ s/^#//g; # remove leading '#'
98            
99 16 100       53 if ($color->{$c})
  13 100       57  
    50          
100 2         10 {@rgb = ($color->{$c}[0], $color->{$c}[1], $color->{$c}[2]);
101             }
102             elsif ($c =~ /^([[:xdigit:]][[:xdigit:]])([[:xdigit:]][[:xdigit:]])([[:xdigit:]][[:xdigit:]])/)
103 1         4 {@rgb = (hex($1), hex($2), hex($3));
104             }
105             elsif ($c =~ /^(\d+),(\d+),(\d+)$/)
106 0         0 {@rgb = ($1, $2, $3);
107             }
108             else
109             {croak "Unknown color format $C";
110             }
111             }
112 16         84 bless \@rgb;
113             }
114            
115            
116             =head2 Methods
117            
118            
119             =head3 check
120            
121             Check that an anonymous reference is a reference to a color and confess
122             if it is not.
123            
124             =cut
125            
126            
127             sub check(@)
128 0     0 1 0 {if (debug)
129             {for my $t(@_)
130             {confess "$t is not a color" unless ref($t) eq __PACKAGE__;
131             }
132             }
133 0         0 return (@_)
134             }
135            
136            
137             =head3 is
138            
139             Same as L but return the result to the caller.
140            
141             =cut
142            
143            
144 0 0       0 sub is(@)
145 0     0 1 0 {for my $t(@_)
146             {return 0 unless ref($t) eq __PACKAGE__;
147             }
148 0         0 'color';
149             }
150            
151            
152             =head3 normal
153            
154             Normal value of the color
155            
156             =cut
157            
158            
159 11     11 1 19 sub normal($)
160             {my $c = shift;
161 11 50       30 $c = color($c) unless ref($c) eq __PACKAGE__;
162 11         129 sprintf("#%02x%02x%02x", $c->[0], $c->[1], $c->[2]);
163             }
164            
165            
166             =head3 light
167            
168             Lighter shade of the color
169            
170             =cut
171            
172            
173 4     4 1 6 sub light($)
174             {my $c = shift;
175 4 50       15 $c = color($c) unless ref($c) eq __PACKAGE__;
176 4         50 sprintf("#%02x%02x%02x", 128+int($c->[0]/2), 128+int($c->[1]/2), 128+int($c->[2]/2));
177             }
178            
179            
180             =head3 dark
181            
182             Darker shade of the color
183            
184             =cut
185            
186            
187 2     2 1 3 sub dark($)
188             {my $c = shift;
189 2 50       7 $c = color($c) unless ref($c) eq __PACKAGE__;
190 2         15 sprintf("#%02x%02x%02x", int($c->[0]/2), int($c->[1]/2), int($c->[2]/2));
191             }
192            
193            
194             =head3 invert
195            
196             Inversion of the color
197            
198             =cut
199            
200            
201 3     3 1 5 sub invert($)
202             {my $c = shift;
203 3 100       11 $c = color($c) unless ref($c) eq __PACKAGE__;
204 3         21 sprintf("#%02x%02x%02x", 255-$c->[0], 255-$c->[1], 255-$c->[2]);
205             }
206            
207            
208             =head2 Color table
209            
210             The names of the colors and their matching RGB values.
211            
212             =cut
213            
214            
215             $colors = <<'END';
216             255 250 250 snow
217             248 248 255 ghost white
218             248 248 255 GhostWhite
219             245 245 245 white smoke
220             245 245 245 WhiteSmoke
221             220 220 220 gainsboro
222             255 250 240 floral white
223             255 250 240 FloralWhite
224             253 245 230 old lace
225             253 245 230 OldLace
226             250 240 230 linen
227             250 235 215 antique white
228             250 235 215 AntiqueWhite
229             255 239 213 papaya whip
230             255 239 213 PapayaWhip
231             255 235 205 blanched almond
232             255 235 205 BlanchedAlmond
233             255 228 196 bisque
234             255 218 185 peach puff
235             255 218 185 PeachPuff
236             255 222 173 navajo white
237             255 222 173 NavajoWhite
238             255 228 181 moccasin
239             255 248 220 cornsilk
240             255 255 240 ivory
241             255 250 205 lemon chiffon
242             255 250 205 LemonChiffon
243             255 245 238 seashell
244             240 255 240 honeydew
245             245 255 250 mint cream
246             245 255 250 MintCream
247             240 255 255 azure
248             240 248 255 alice blue
249             240 248 255 AliceBlue
250             230 230 250 lavender
251             255 240 245 lavender blush
252             255 240 245 LavenderBlush
253             255 228 225 misty rose
254             255 228 225 MistyRose
255             255 255 255 white
256             0 0 0 black
257             47 79 79 dark slate gray
258             47 79 79 DarkSlateGray
259             47 79 79 dark slate grey
260             47 79 79 DarkSlateGrey
261             105 105 105 dim gray
262             105 105 105 DimGray
263             105 105 105 dim grey
264             105 105 105 DimGrey
265             112 128 144 slate gray
266             112 128 144 SlateGray
267             112 128 144 slate grey
268             112 128 144 SlateGrey
269             119 136 153 light slate gray
270             119 136 153 LightSlateGray
271             119 136 153 light slate grey
272             119 136 153 LightSlateGrey
273             190 190 190 gray
274             190 190 190 grey
275             211 211 211 light grey
276             211 211 211 LightGrey
277             211 211 211 light gray
278             211 211 211 LightGray
279             25 25 112 midnight blue
280             25 25 112 MidnightBlue
281             0 0 128 navy
282             0 0 128 navy blue
283             0 0 128 NavyBlue
284             100 149 237 cornflower blue
285             100 149 237 CornflowerBlue
286             72 61 139 dark slate blue
287             72 61 139 DarkSlateBlue
288             106 90 205 slate blue
289             106 90 205 SlateBlue
290             123 104 238 medium slate blue
291             123 104 238 MediumSlateBlue
292             132 112 255 light slate blue
293             132 112 255 LightSlateBlue
294             0 0 205 medium blue
295             0 0 205 MediumBlue
296             65 105 225 royal blue
297             65 105 225 RoyalBlue
298             0 0 255 blue
299             30 144 255 dodger blue
300             30 144 255 DodgerBlue
301             0 191 255 deep sky blue
302             0 191 255 DeepSkyBlue
303             135 206 235 sky blue
304             135 206 235 SkyBlue
305             135 206 250 light sky blue
306             135 206 250 LightSkyBlue
307             70 130 180 steel blue
308             70 130 180 SteelBlue
309             176 196 222 light steel blue
310             176 196 222 LightSteelBlue
311             173 216 230 light blue
312             173 216 230 LightBlue
313             176 224 230 powder blue
314             176 224 230 PowderBlue
315             175 238 238 pale turquoise
316             175 238 238 PaleTurquoise
317             0 206 209 dark turquoise
318             0 206 209 DarkTurquoise
319             72 209 204 medium turquoise
320             72 209 204 MediumTurquoise
321             64 224 208 turquoise
322             0 255 255 cyan
323             224 255 255 light cyan
324             224 255 255 LightCyan
325             95 158 160 cadet blue
326             95 158 160 CadetBlue
327             102 205 170 medium aquamarine
328             102 205 170 MediumAquamarine
329             127 255 212 aquamarine
330             0 100 0 dark green
331             0 100 0 DarkGreen
332             85 107 47 dark olive green
333             85 107 47 DarkOliveGreen
334             143 188 143 dark sea green
335             143 188 143 DarkSeaGreen
336             46 139 87 sea green
337             46 139 87 SeaGreen
338             60 179 113 medium sea green
339             60 179 113 MediumSeaGreen
340             32 178 170 light sea green
341             32 178 170 LightSeaGreen
342             152 251 152 pale green
343             152 251 152 PaleGreen
344             0 255 127 spring green
345             0 255 127 SpringGreen
346             124 252 0 lawn green
347             124 252 0 LawnGreen
348             0 255 0 green
349             127 255 0 chartreuse
350             0 250 154 medium spring green
351             0 250 154 MediumSpringGreen
352             173 255 47 green yellow
353             173 255 47 GreenYellow
354             50 205 50 lime green
355             50 205 50 LimeGreen
356             154 205 50 yellow green
357             154 205 50 YellowGreen
358             34 139 34 forest green
359             34 139 34 ForestGreen
360             107 142 35 olive drab
361             107 142 35 OliveDrab
362             189 183 107 dark khaki
363             189 183 107 DarkKhaki
364             240 230 140 khaki
365             238 232 170 pale goldenrod
366             238 232 170 PaleGoldenrod
367             250 250 210 light goldenrod yellow
368             250 250 210 LightGoldenrodYellow
369             255 255 224 light yellow
370             255 255 224 LightYellow
371             255 255 0 yellow
372             255 215 0 gold
373             238 221 130 light goldenrod
374             238 221 130 LightGoldenrod
375             218 165 32 goldenrod
376             184 134 11 dark goldenrod
377             184 134 11 DarkGoldenrod
378             188 143 143 rosy brown
379             188 143 143 RosyBrown
380             205 92 92 indian red
381             205 92 92 IndianRed
382             139 69 19 saddle brown
383             139 69 19 SaddleBrown
384             160 82 45 sienna
385             205 133 63 peru
386             222 184 135 burlywood
387             245 245 220 beige
388             245 222 179 wheat
389             244 164 96 sandy brown
390             244 164 96 SandyBrown
391             210 180 140 tan
392             210 105 30 chocolate
393             178 34 34 firebrick
394             165 42 42 brown
395             233 150 122 dark salmon
396             233 150 122 DarkSalmon
397             250 128 114 salmon
398             255 160 122 light salmon
399             255 160 122 LightSalmon
400             255 165 0 orange
401             255 140 0 dark orange
402             255 140 0 DarkOrange
403             255 127 80 coral
404             240 128 128 light coral
405             240 128 128 LightCoral
406             255 99 71 tomato
407             255 69 0 orange red
408             255 69 0 OrangeRed
409             255 0 0 red
410             255 105 180 hot pink
411             255 105 180 HotPink
412             255 20 147 deep pink
413             255 20 147 DeepPink
414             255 192 203 pink
415             255 182 193 light pink
416             255 182 193 LightPink
417             219 112 147 pale violet red
418             219 112 147 PaleVioletRed
419             176 48 96 maroon
420             199 21 133 medium violet red
421             199 21 133 MediumVioletRed
422             208 32 144 violet red
423             208 32 144 VioletRed
424             255 0 255 magenta
425             238 130 238 violet
426             221 160 221 plum
427             218 112 214 orchid
428             186 85 211 medium orchid
429             186 85 211 MediumOrchid
430             153 50 204 dark orchid
431             153 50 204 DarkOrchid
432             148 0 211 dark violet
433             148 0 211 DarkViolet
434             138 43 226 blue violet
435             138 43 226 BlueViolet
436             160 32 240 purple
437             147 112 219 medium purple
438             147 112 219 MediumPurple
439             216 191 216 thistle
440             255 250 250 snow1
441             238 233 233 snow2
442             205 201 201 snow3
443             139 137 137 snow4
444             255 245 238 seashell1
445             238 229 222 seashell2
446             205 197 191 seashell3
447             139 134 130 seashell4
448             255 239 219 AntiqueWhite1
449             238 223 204 AntiqueWhite2
450             205 192 176 AntiqueWhite3
451             139 131 120 AntiqueWhite4
452             255 228 196 bisque1
453             238 213 183 bisque2
454             205 183 158 bisque3
455             139 125 107 bisque4
456             255 218 185 PeachPuff1
457             238 203 173 PeachPuff2
458             205 175 149 PeachPuff3
459             139 119 101 PeachPuff4
460             255 222 173 NavajoWhite1
461             238 207 161 NavajoWhite2
462             205 179 139 NavajoWhite3
463             139 121 94 NavajoWhite4
464             255 250 205 LemonChiffon1
465             238 233 191 LemonChiffon2
466             205 201 165 LemonChiffon3
467             139 137 112 LemonChiffon4
468             255 248 220 cornsilk1
469             238 232 205 cornsilk2
470             205 200 177 cornsilk3
471             139 136 120 cornsilk4
472             255 255 240 ivory1
473             238 238 224 ivory2
474             205 205 193 ivory3
475             139 139 131 ivory4
476             240 255 240 honeydew1
477             224 238 224 honeydew2
478             193 205 193 honeydew3
479             131 139 131 honeydew4
480             255 240 245 LavenderBlush1
481             238 224 229 LavenderBlush2
482             205 193 197 LavenderBlush3
483             139 131 134 LavenderBlush4
484             255 228 225 MistyRose1
485             238 213 210 MistyRose2
486             205 183 181 MistyRose3
487             139 125 123 MistyRose4
488             240 255 255 azure1
489             224 238 238 azure2
490             193 205 205 azure3
491             131 139 139 azure4
492             131 111 255 SlateBlue1
493             122 103 238 SlateBlue2
494             105 89 205 SlateBlue3
495             71 60 139 SlateBlue4
496             72 118 255 RoyalBlue1
497             67 110 238 RoyalBlue2
498             58 95 205 RoyalBlue3
499             39 64 139 RoyalBlue4
500             0 0 255 blue1
501             0 0 238 blue2
502             0 0 205 blue3
503             0 0 139 blue4
504             30 144 255 DodgerBlue1
505             28 134 238 DodgerBlue2
506             24 116 205 DodgerBlue3
507             16 78 139 DodgerBlue4
508             99 184 255 SteelBlue1
509             92 172 238 SteelBlue2
510             79 148 205 SteelBlue3
511             54 100 139 SteelBlue4
512             0 191 255 DeepSkyBlue1
513             0 178 238 DeepSkyBlue2
514             0 154 205 DeepSkyBlue3
515             0 104 139 DeepSkyBlue4
516             135 206 255 SkyBlue1
517             126 192 238 SkyBlue2
518             108 166 205 SkyBlue3
519             74 112 139 SkyBlue4
520             176 226 255 LightSkyBlue1
521             164 211 238 LightSkyBlue2
522             141 182 205 LightSkyBlue3
523             96 123 139 LightSkyBlue4
524             198 226 255 SlateGray1
525             185 211 238 SlateGray2
526             159 182 205 SlateGray3
527             108 123 139 SlateGray4
528             202 225 255 LightSteelBlue1
529             188 210 238 LightSteelBlue2
530             162 181 205 LightSteelBlue3
531             110 123 139 LightSteelBlue4
532             191 239 255 LightBlue1
533             178 223 238 LightBlue2
534             154 192 205 LightBlue3
535             104 131 139 LightBlue4
536             224 255 255 LightCyan1
537             209 238 238 LightCyan2
538             180 205 205 LightCyan3
539             122 139 139 LightCyan4
540             187 255 255 PaleTurquoise1
541             174 238 238 PaleTurquoise2
542             150 205 205 PaleTurquoise3
543             102 139 139 PaleTurquoise4
544             152 245 255 CadetBlue1
545             142 229 238 CadetBlue2
546             122 197 205 CadetBlue3
547             83 134 139 CadetBlue4
548             0 245 255 turquoise1
549             0 229 238 turquoise2
550             0 197 205 turquoise3
551             0 134 139 turquoise4
552             0 255 255 cyan1
553             0 238 238 cyan2
554             0 205 205 cyan3
555             0 139 139 cyan4
556             151 255 255 DarkSlateGray1
557             141 238 238 DarkSlateGray2
558             121 205 205 DarkSlateGray3
559             82 139 139 DarkSlateGray4
560             127 255 212 aquamarine1
561             118 238 198 aquamarine2
562             102 205 170 aquamarine3
563             69 139 116 aquamarine4
564             193 255 193 DarkSeaGreen1
565             180 238 180 DarkSeaGreen2
566             155 205 155 DarkSeaGreen3
567             105 139 105 DarkSeaGreen4
568             84 255 159 SeaGreen1
569             78 238 148 SeaGreen2
570             67 205 128 SeaGreen3
571             46 139 87 SeaGreen4
572             154 255 154 PaleGreen1
573             144 238 144 PaleGreen2
574             124 205 124 PaleGreen3
575             84 139 84 PaleGreen4
576             0 255 127 SpringGreen1
577             0 238 118 SpringGreen2
578             0 205 102 SpringGreen3
579             0 139 69 SpringGreen4
580             0 255 0 green1
581             0 238 0 green2
582             0 205 0 green3
583             0 139 0 green4
584             127 255 0 chartreuse1
585             118 238 0 chartreuse2
586             102 205 0 chartreuse3
587             69 139 0 chartreuse4
588             192 255 62 OliveDrab1
589             179 238 58 OliveDrab2
590             154 205 50 OliveDrab3
591             105 139 34 OliveDrab4
592             202 255 112 DarkOliveGreen1
593             188 238 104 DarkOliveGreen2
594             162 205 90 DarkOliveGreen3
595             110 139 61 DarkOliveGreen4
596             255 246 143 khaki1
597             238 230 133 khaki2
598             205 198 115 khaki3
599             139 134 78 khaki4
600             255 236 139 LightGoldenrod1
601             238 220 130 LightGoldenrod2
602             205 190 112 LightGoldenrod3
603             139 129 76 LightGoldenrod4
604             255 255 224 LightYellow1
605             238 238 209 LightYellow2
606             205 205 180 LightYellow3
607             139 139 122 LightYellow4
608             255 255 0 yellow1
609             238 238 0 yellow2
610             205 205 0 yellow3
611             139 139 0 yellow4
612             255 215 0 gold1
613             238 201 0 gold2
614             205 173 0 gold3
615             139 117 0 gold4
616             255 193 37 goldenrod1
617             238 180 34 goldenrod2
618             205 155 29 goldenrod3
619             139 105 20 goldenrod4
620             255 185 15 DarkGoldenrod1
621             238 173 14 DarkGoldenrod2
622             205 149 12 DarkGoldenrod3
623             139 101 8 DarkGoldenrod4
624             255 193 193 RosyBrown1
625             238 180 180 RosyBrown2
626             205 155 155 RosyBrown3
627             139 105 105 RosyBrown4
628             255 106 106 IndianRed1
629             238 99 99 IndianRed2
630             205 85 85 IndianRed3
631             139 58 58 IndianRed4
632             255 130 71 sienna1
633             238 121 66 sienna2
634             205 104 57 sienna3
635             139 71 38 sienna4
636             255 211 155 burlywood1
637             238 197 145 burlywood2
638             205 170 125 burlywood3
639             139 115 85 burlywood4
640             255 231 186 wheat1
641             238 216 174 wheat2
642             205 186 150 wheat3
643             139 126 102 wheat4
644             255 165 79 tan1
645             238 154 73 tan2
646             205 133 63 tan3
647             139 90 43 tan4
648             255 127 36 chocolate1
649             238 118 33 chocolate2
650             205 102 29 chocolate3
651             139 69 19 chocolate4
652             255 48 48 firebrick1
653             238 44 44 firebrick2
654             205 38 38 firebrick3
655             139 26 26 firebrick4
656             255 64 64 brown1
657             238 59 59 brown2
658             205 51 51 brown3
659             139 35 35 brown4
660             255 140 105 salmon1
661             238 130 98 salmon2
662             205 112 84 salmon3
663             139 76 57 salmon4
664             255 160 122 LightSalmon1
665             238 149 114 LightSalmon2
666             205 129 98 LightSalmon3
667             139 87 66 LightSalmon4
668             255 165 0 orange1
669             238 154 0 orange2
670             205 133 0 orange3
671             139 90 0 orange4
672             255 127 0 DarkOrange1
673             238 118 0 DarkOrange2
674             205 102 0 DarkOrange3
675             139 69 0 DarkOrange4
676             255 114 86 coral1
677             238 106 80 coral2
678             205 91 69 coral3
679             139 62 47 coral4
680             255 99 71 tomato1
681             238 92 66 tomato2
682             205 79 57 tomato3
683             139 54 38 tomato4
684             255 69 0 OrangeRed1
685             238 64 0 OrangeRed2
686             205 55 0 OrangeRed3
687             139 37 0 OrangeRed4
688             255 0 0 red1
689             238 0 0 red2
690             205 0 0 red3
691             139 0 0 red4
692             255 20 147 DeepPink1
693             238 18 137 DeepPink2
694             205 16 118 DeepPink3
695             139 10 80 DeepPink4
696             255 110 180 HotPink1
697             238 106 167 HotPink2
698             205 96 144 HotPink3
699             139 58 98 HotPink4
700             255 181 197 pink1
701             238 169 184 pink2
702             205 145 158 pink3
703             139 99 108 pink4
704             255 174 185 LightPink1
705             238 162 173 LightPink2
706             205 140 149 LightPink3
707             139 95 101 LightPink4
708             255 130 171 PaleVioletRed1
709             238 121 159 PaleVioletRed2
710             205 104 137 PaleVioletRed3
711             139 71 93 PaleVioletRed4
712             255 52 179 maroon1
713             238 48 167 maroon2
714             205 41 144 maroon3
715             139 28 98 maroon4
716             255 62 150 VioletRed1
717             238 58 140 VioletRed2
718             205 50 120 VioletRed3
719             139 34 82 VioletRed4
720             255 0 255 magenta1
721             238 0 238 magenta2
722             205 0 205 magenta3
723             139 0 139 magenta4
724             255 131 250 orchid1
725             238 122 233 orchid2
726             205 105 201 orchid3
727             139 71 137 orchid4
728             255 187 255 plum1
729             238 174 238 plum2
730             205 150 205 plum3
731             139 102 139 plum4
732             224 102 255 MediumOrchid1
733             209 95 238 MediumOrchid2
734             180 82 205 MediumOrchid3
735             122 55 139 MediumOrchid4
736             191 62 255 DarkOrchid1
737             178 58 238 DarkOrchid2
738             154 50 205 DarkOrchid3
739             104 34 139 DarkOrchid4
740             155 48 255 purple1
741             145 44 238 purple2
742             125 38 205 purple3
743             85 26 139 purple4
744             171 130 255 MediumPurple1
745             159 121 238 MediumPurple2
746             137 104 205 MediumPurple3
747             93 71 139 MediumPurple4
748             255 225 255 thistle1
749             238 210 238 thistle2
750             205 181 205 thistle3
751             139 123 139 thistle4
752             0 0 0 gray0
753             0 0 0 grey0
754             3 3 3 gray1
755             3 3 3 grey1
756             5 5 5 gray2
757             5 5 5 grey2
758             8 8 8 gray3
759             8 8 8 grey3
760             10 10 10 gray4
761             10 10 10 grey4
762             13 13 13 gray5
763             13 13 13 grey5
764             15 15 15 gray6
765             15 15 15 grey6
766             18 18 18 gray7
767             18 18 18 grey7
768             20 20 20 gray8
769             20 20 20 grey8
770             23 23 23 gray9
771             23 23 23 grey9
772             26 26 26 gray10
773             26 26 26 grey10
774             28 28 28 gray11
775             28 28 28 grey11
776             31 31 31 gray12
777             31 31 31 grey12
778             33 33 33 gray13
779             33 33 33 grey13
780             36 36 36 gray14
781             36 36 36 grey14
782             38 38 38 gray15
783             38 38 38 grey15
784             41 41 41 gray16
785             41 41 41 grey16
786             43 43 43 gray17
787             43 43 43 grey17
788             46 46 46 gray18
789             46 46 46 grey18
790             48 48 48 gray19
791             48 48 48 grey19
792             51 51 51 gray20
793             51 51 51 grey20
794             54 54 54 gray21
795             54 54 54 grey21
796             56 56 56 gray22
797             56 56 56 grey22
798             59 59 59 gray23
799             59 59 59 grey23
800             61 61 61 gray24
801             61 61 61 grey24
802             64 64 64 gray25
803             64 64 64 grey25
804             66 66 66 gray26
805             66 66 66 grey26
806             69 69 69 gray27
807             69 69 69 grey27
808             71 71 71 gray28
809             71 71 71 grey28
810             74 74 74 gray29
811             74 74 74 grey29
812             77 77 77 gray30
813             77 77 77 grey30
814             79 79 79 gray31
815             79 79 79 grey31
816             82 82 82 gray32
817             82 82 82 grey32
818             84 84 84 gray33
819             84 84 84 grey33
820             87 87 87 gray34
821             87 87 87 grey34
822             89 89 89 gray35
823             89 89 89 grey35
824             92 92 92 gray36
825             92 92 92 grey36
826             94 94 94 gray37
827             94 94 94 grey37
828             97 97 97 gray38
829             97 97 97 grey38
830             99 99 99 gray39
831             99 99 99 grey39
832             102 102 102 gray40
833             102 102 102 grey40
834             105 105 105 gray41
835             105 105 105 grey41
836             107 107 107 gray42
837             107 107 107 grey42
838             110 110 110 gray43
839             110 110 110 grey43
840             112 112 112 gray44
841             112 112 112 grey44
842             115 115 115 gray45
843             115 115 115 grey45
844             117 117 117 gray46
845             117 117 117 grey46
846             120 120 120 gray47
847             120 120 120 grey47
848             122 122 122 gray48
849             122 122 122 grey48
850             125 125 125 gray49
851             125 125 125 grey49
852             127 127 127 gray50
853             127 127 127 grey50
854             130 130 130 gray51
855             130 130 130 grey51
856             133 133 133 gray52
857             133 133 133 grey52
858             135 135 135 gray53
859             135 135 135 grey53
860             138 138 138 gray54
861             138 138 138 grey54
862             140 140 140 gray55
863             140 140 140 grey55
864             143 143 143 gray56
865             143 143 143 grey56
866             145 145 145 gray57
867             145 145 145 grey57
868             148 148 148 gray58
869             148 148 148 grey58
870             150 150 150 gray59
871             150 150 150 grey59
872             153 153 153 gray60
873             153 153 153 grey60
874             156 156 156 gray61
875             156 156 156 grey61
876             158 158 158 gray62
877             158 158 158 grey62
878             161 161 161 gray63
879             161 161 161 grey63
880             163 163 163 gray64
881             163 163 163 grey64
882             166 166 166 gray65
883             166 166 166 grey65
884             168 168 168 gray66
885             168 168 168 grey66
886             171 171 171 gray67
887             171 171 171 grey67
888             173 173 173 gray68
889             173 173 173 grey68
890             176 176 176 gray69
891             176 176 176 grey69
892             179 179 179 gray70
893             179 179 179 grey70
894             181 181 181 gray71
895             181 181 181 grey71
896             184 184 184 gray72
897             184 184 184 grey72
898             186 186 186 gray73
899             186 186 186 grey73
900             189 189 189 gray74
901             189 189 189 grey74
902             191 191 191 gray75
903             191 191 191 grey75
904             194 194 194 gray76
905             194 194 194 grey76
906             196 196 196 gray77
907             196 196 196 grey77
908             199 199 199 gray78
909             199 199 199 grey78
910             201 201 201 gray79
911             201 201 201 grey79
912             204 204 204 gray80
913             204 204 204 grey80
914             207 207 207 gray81
915             207 207 207 grey81
916             209 209 209 gray82
917             209 209 209 grey82
918             212 212 212 gray83
919             212 212 212 grey83
920             214 214 214 gray84
921             214 214 214 grey84
922             217 217 217 gray85
923             217 217 217 grey85
924             219 219 219 gray86
925             219 219 219 grey86
926             222 222 222 gray87
927             222 222 222 grey87
928             224 224 224 gray88
929             224 224 224 grey88
930             227 227 227 gray89
931             227 227 227 grey89
932             229 229 229 gray90
933             229 229 229 grey90
934             232 232 232 gray91
935             232 232 232 grey91
936             235 235 235 gray92
937             235 235 235 grey92
938             237 237 237 gray93
939             237 237 237 grey93
940             240 240 240 gray94
941             240 240 240 grey94
942             242 242 242 gray95
943             242 242 242 grey95
944             245 245 245 gray96
945             245 245 245 grey96
946             247 247 247 gray97
947             247 247 247 grey97
948             250 250 250 gray98
949             250 250 250 grey98
950             252 252 252 gray99
951             252 252 252 grey99
952             255 255 255 gray100
953             255 255 255 grey100
954             169 169 169 dark grey
955             169 169 169 DarkGrey
956             169 169 169 dark gray
957             169 169 169 DarkGray
958             0 0 139 dark blue
959             0 0 139 DarkBlue
960             0 139 139 dark cyan
961             0 139 139 DarkCyan
962             139 0 139 dark magenta
963             139 0 139 DarkMagenta
964             139 0 0 dark red
965             139 0 0 DarkRed
966             144 238 144 light green
967             144 238 144 LightGreen
968             END
969            
970             #________________________________________________________________________
971             # Parse the color table once at compile time.
972             #________________________________________________________________________
973            
974             for (split(/\n/, $colors))
975             {/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(.+)$/;
976            
977             my ($r, $g, $b, $c) = ($1, $2, $3, $4);
978            
979             $c = lc($c);
980             $c =~ s/\s+//g;
981            
982             $color->{$c} = [$r, $g, $b];
983             }
984            
985            
986             =head2 Operator Overloads
987            
988             Stringification returns the normal value of the color
989            
990             =cut
991            
992            
993             use overload
994 2         15 '""' => \&normal,
995 2     2   1524 'fallback' => FALSE;
  2         1082  
996            
997            
998             =head2 Exports
999            
1000             Export L, L, L, L
1001            
1002             =cut
1003            
1004            
1005 2         15 use Math::Zap::Exports qw(
1006             color ($)
1007             light ($)
1008             dark ($)
1009             invert ($)
1010 2     2   2335 );
  2         4  
1011            
1012             #________________________________________________________________________
1013             # Package installed successfully
1014             #________________________________________________________________________
1015            
1016             1;
1017            
1018            
1019            
1020             =head2 Credits
1021            
1022             =head3 Author
1023            
1024             philiprbrenan@yahoo.com
1025            
1026             =head3 Copyright
1027            
1028             philiprbrenan@yahoo.com, 2004
1029            
1030             =head3 License
1031            
1032             Perl License.
1033            
1034            
1035             =cut