#!/usr/local/bin/perl # # # Time-stamp: <2000-12-15, 20:22:35, mrz@isun34> # # # [2000-12-15] rgb2hex+tex.pl # (C) René Scholz <http://www.thur.de/~Voland/> # # Use: - convert decimal RGB values to hexadecimal # - print the decimal and hexadecimal RGB values of given # color name # - print \definecolor's for latex for including given # color names in .tex files (for \usepackage{color}) ############################################################### ($NAME=$0)=~s|.*/||; # get basename from $0 use strict; use Getopt::Std; use vars qw ($RGBFILE $USAGE $NAME $color $colname $r $g $b %DC $opt_h $opt_H $opt_r $opt_l $opt_c); $USAGE=<<EOUSAGE; Usage: $NAME [options] Options: -h Show this help. -r file Use rgb.txt from this file -c color Use color, ex.: -c red | -c 100x100x100 (use -c . to get all entries) -l Create \\definecolor's for latex for color -c EOUSAGE #' die $USAGE unless(@ARGV); getopts('hHlc:r:'); die $USAGE if($opt_h || $opt_H || $opt_c eq ""); $RGBFILE = $opt_r ne "" ? $opt_r : "/usr/openwin/lib/X11/rgb.txt"; ############################## MAIN ########################## $color=$opt_c; if($color=~/^\D\w*/) { open(R, $RGBFILE) or die "Can't open rgb.txt file $RGBFILE: $!\n"; while(<R>) { next unless(/$color/i); chomp; s/^\s+|\s+$//; ($r,$g,$b, @_) = split(/\s+/); $colname = join(" ",@_); if($opt_l) { $colname = join("", map($_=ucfirst($_), split(/\s+/, $colname))); $r/=255; $b/=255; $g/=255; $DC{$colname}="\\definecolor{$colname}{rgb}{$r, $g, $b}\n"; } else { $_ = 20-length($colname); $colname.=":" . " " x $_; printf "$colname %3.3d %3.3d %3.3d ---> #%2.2lx%2.2lx%2.2lx\n", $r,$g,$b, $r,$g,$b; } } close(R); if($opt_l) { foreach (sort keys %DC) { print $DC{$_}; } } } else { ($r,$g,$b, @_) = split(/x/, $color); printf "%3.3d %3.3d %3.3d ---> #%2.2lx%2.2lx%2.2lx\n", $r,$g,$b, $r,$g,$b; }