#!/usr/bin/perl use strict; use Convert::Color; use Getopt::Long; print <<EOF; <html> <body> <table border=1> <tr><th colspan=2>Name</th><th>RGB</th><th>HSL</th><th>CMYK</th></tr> EOF my @COL; sub span { my ( $text, $col ) = @_; my $hex = $col->as_rgb8->hex; if( $col->as_hsl->lightness < 0.5 ) { return qq{<span style="background-color: #$hex; color: white">$text</span>}; } else { return qq{<span style="background-color: #$hex">$text</span>}; } } my $SORT = 0; GetOptions( 's|sort+' => \$SORT, ) or exit(1); while( my $colname = shift @ARGV ) { if( $colname eq "x11:*" ) { require Convert::Color::X11; unshift @ARGV, map { "x11:$_" } sort Convert::Color::X11->colors; next; } my $col = Convert::Color->new( $colname ); my $c_rgb8 = $col->as_rgb8; my $rgb8_hex = $c_rgb8->hex; my ( $r, $g, $b ) = $c_rgb8->rgb8; my $rgb = join ",", span( sprintf('%03d',$r), Convert::Color::RGB8->new( $r, 0, 0 ) ), span( sprintf('%03d',$g), Convert::Color::RGB8->new( 0, $g, 0 ) ), span( sprintf('%03d',$b), Convert::Color::RGB8->new( 0, 0, $b ) ); my $c_hsl = $col->as_hsl; my ( $hue, $sat, $lig ) = $c_hsl->hsl; my $hsl = join ",", ( $sat <= 0.0001 ? span( "---", Convert::Color::HSL->new( 0, 0, 0.5 ) ) : span( sprintf('%.1f',$hue), Convert::Color::HSL->new( $hue, 1, 0.5 ) ) ), span( sprintf('%0.3f',$sat), Convert::Color::HSL->new( $hue, $sat, 0.5 ) ), span( sprintf('%0.3f',$lig), Convert::Color::HSL->new( 0, 0, $lig ) ); my $c_cmyk = $col->as_cmyk; my ( $c, $m, $y, $k ) = $c_cmyk->cmyk; my $cmyk = join ",", span( sprintf('%0.3f',$c), Convert::Color::CMY->new( $c, 0, 0 ) ), span( sprintf('%0.3f',$m), Convert::Color::CMY->new( 0, $m, 0 ) ), span( sprintf('%0.3f',$y), Convert::Color::CMY->new( 0, 0, $y ) ), span( sprintf('%0.3f',$k), Convert::Color::CMYK->new( 0, 0, 0, $k ) ); push @COL, [ ( $sat <= 0.0001 ? $lig - 2 : $hue ), <<"EOF" ]; <tr><td>$colname</td><td bgcolor="#$rgb8_hex"> </td><td>$rgb</td><td>$hsl</td><td>$cmyk</td></tr> EOF } if( $SORT ) { @COL = sort { $a->[0] <=> $b->[0] } @COL; } print map { $_->[1] } @COL; print <<EOF; </table> </body> </html> EOF