\def\filename{palette.tex}
\def\fileversion{0.91}
\def\filedate{92/09/02}
%
% Send comments to the author: Fred Knight (knight@ll.mit.edu)
% 
% Purpose:
%   Macros to get colors from a palette.
%   For use with PSTricks version v0.91 and later.
%   These macros allow the user to select colors from a palette derived
%   from the Openwindows file rgbcolors.txt, which contains about 140 
%   distinct colors, not including different shades and gray levels.
%   The user can also display the palette and add to it.
% Usage:
%   \palette
%      the list of colors and values, only an internal list of colors
%   \addtopalette[type]{name}{values}
%      add a color to \palette
%      type---an integer denoting the type of values
%         1 = rgb, default, 3 numbers between 0 (low) and 1 (high)
%         2 = hsb, 3 numbers between 0 (low) and 1 (high)
%         3 = cmyk, 4 numbers between 0 (low) and 1 (high)
%         4 = gray, 1 number between 0 (low) and 1 (high)
%      name---the color's name as stored in \palette,
%         usually all lowercase
%      values---numbers according to the type of color
%      Examples:
%         \addtopalette{mud}{0.6 0.4 0.2}
%         \addtopalette[4]{mudgray}{0.4}
%   \addrgb{name}{values}
%      add an rgb color called name to the palette
%   \addhsb{name}{values}
%      add an hsb color called name to the palette
%   \addcmyk{name}{values}
%      add an cmyk color called name to the palette
%   \addgray{name}{values}
%      add an gray color called name to the palette
%   \getcolor[altname]{name}
%      analogous to \newrgbcolor but get values from
%      \palette and define a macro \name or \altname, if present.
%      Examples:
%         \getcolor{thistle} {\thistle The color is slightly off purple.}
%         \getcolor[goo]{brown} {\goo Its fragrance graced the table.}
%   \showpalette
%      macro to show all the colors in \palette
% Restrictions:
%   Works only with PostScript and requires PSTricks.
% Acknowledgement:
%   Thanks to Tim Van Zandt for many helpful comments.
% 
%
% =====>> Preliminaries: Is PSTricks loaded?  Change catcode of @.
%
\ifx\pstricksloaded\relax\else\input pstricks\fi
\typeout{`\filename' v\fileversion\space\space <\filedate> (Fred Knight)}
\edef\theatcode{\the\catcode`\@}
\ifnum\theatcode=13\let\theat @\fi
\catcode`\@=11\relax
%
% =====>> User macros for adding colors to \palette: 4 types
%
\def\addtopalette{\@ifnextchar [{\@addtopalette}{\@addtopalette[1]}}
\def\@addtopalette[#1]#2#3{\edef\palette{\palette(#2,#1,#3)}}
\def\addrgb{\addtopalette[1]}
\def\addhsb{\addtopalette[2]}
\def\addcmyk{\addtopalette[3]}
\def\addgray{\addtopalette[4]}
%
% =====>> User macro to define a new color name.
%
\def\getcolor{\@ifnextchar [{\@getcolor}{\@getcolor[\@nil]}}
\def\@getcolor[#1]#2{%
  \ifx#1\@nil\def\altname{#2}\else\def\altname{#1}\fi
  \def\pst@tempg##1(#2,##2,##3)##4\@nil{%
    \ifcase##2\@pstrickserr{Color `#2' not found}\@eha
    \or\newrgbcolor{\altname}{##3}%
    \or\newhsbcolor{\altname}{##3}%
    \or\newcmykcolor{\altname}{##3}%
    \or\newgray{\altname}{##3}%
    \fi}%
  \expandafter\pst@tempg\palette(#2,0,)\@nil}
%
% =====>> \showpalette and its parts.
%
% Define 4 dimensions for \showpalette
\newdimen\PalBoxwd\PalBoxwd=\hsize
\newdimen\PalBoxht\PalBoxht=\baselineskip
\newdimen\savedparindent
\newdimen\savedparskip
% Each color gets a rule with text of two colors (black & white) in it.
\def\paletteBox{\vrule height\PalBoxht width\PalBoxwd depth1ex}
% Each color has 2 entries: one with black text, the other with white.
\def\paletteEntry#1#2#3{%
  \hbox to 0.5\hsize{ #1\hss
  \ifcase#2\or rgb\or hsb\or cmyk\or gray\fi:#3 }}
\def\showpalette{\edef\pst@tempa{\palette(NoMoreColors,0, 0)}%
  \savedparskip=\parskip\parskip0pt
  \savedparindent=\parindent\parindent0pt\par
  \expandafter\thepalette\pst@tempa
  \parindent=\savedparindent
  \parskip=\savedparskip}
% \thepalette loops through the entries of \palette.
\def\thepalette(#1,#2,#3){%
  \ifnum#2=0
    \let\next\relax
  \else
    \leavevmode
    \hbox{%
      \pstVerb{#3 \ifcase#2\or setrgbcolor\or sethsbcolor\or
        setcmykcolor\or setgray\fi}%
      \paletteBox\hskip-\hsize
      \pstVerb{0 setgray}\paletteEntry{#1}{#2}{#3}% black text
      \pstVerb{1 setgray}\paletteEntry{#1}{#2}{#3}}% white text
    \let\next\thepalette
    \par\vskip1pt
  \fi\next}
%
% =====>> The palette of colors; derived from OPENWINDOWS/rgbcolors.txt.
%
\def\palette{%
% format: (name,type, values)
% where
%   name = name of the color
%   type = 1 for rgb, 2 for hsb, 3 for cmyk, 4 for gray
%   values = color values in the type specified
  (snow,1,1.00 0.98 0.98)% The color snow has r=1.00, b=0.98, and g=0.98.
  (ghostwhite,1,0.97 0.97 1.00)%
  (whitesmoke,1,0.96 0.96 0.96)%
  (gainsboro,1,0.86 0.86 0.86)%
  (floralwhite,1,1.00 0.98 0.94)%
  (oldlace,1,0.99 0.96 0.90)%
  (linen,1,0.98 0.94 0.90)%
  (antiquewhite,1,0.98 0.92 0.84)%
  (papayawhip,1,1.00 0.94 0.84)%
  (blanchedalmond,1,1.00 0.92 0.80)%
  (bisque,1,1.00 0.89 0.77)%
  (peachpuff,1,1.00 0.85 0.73)%
  (navajowhite,1,1.00 0.87 0.68)%
  (moccasin,1,1.00 0.89 0.71)%
  (cornsilk,1,1.00 0.97 0.86)%
  (ivory,1,1.00 1.00 0.94)%
  (lemonchiffon,1,1.00 0.98 0.80)%
  (seashell,1,1.00 0.96 0.93)%
  (honeydew,1,0.94 1.00 0.94)%
  (mintcream,1,0.96 1.00 0.98)%
  (azure,1,0.94 1.00 1.00)%
  (aliceblue,1,0.94 0.97 1.00)%
  (lavender,1,0.90 0.90 0.98)%
  (lavenderblush,1,1.00 0.94 0.96)%
  (mistyrose,1,1.00 0.89 0.88)%
  (white,1,1.00 1.00 1.00)%
  (black,1,0.00 0.00 0.00)%
  (midnightblue,1,0.10 0.10 0.44)%
  (navy,1,0.00 0.00 0.50)%
  (navyblue,1,0.00 0.00 0.50)%
  (cornflowerblue,1,0.39 0.58 0.93)%
  (darkslateblue,1,0.28 0.24 0.55)%
  (slateblue,1,0.42 0.35 0.80)%
  (mediumslateblue,1,0.48 0.41 0.93)%
  (lightslateblue,1,0.52 0.44 1.00)%
  (mediumblue,1,0.00 0.00 0.80)%
  (royalblue,1,0.25 0.41 0.88)%
  (blue,1,0.00 0.00 1.00)%
  (dodgerblue,1,0.12 0.56 1.00)%
  (deepskyblue,1,0.00 0.75 1.00)%
  (skyblue,1,0.53 0.81 0.92)%
  (lightskyblue,1,0.53 0.81 0.98)%
  (steelblue,1,0.27 0.51 0.71)%
  (lightsteelblue,1,0.69 0.77 0.87)%
  (lightblue,1,0.68 0.85 0.90)%
  (powderblue,1,0.69 0.88 0.90)%
  (paleturquoise,1,0.69 0.93 0.93)%
  (darkturquoise,1,0.00 0.81 0.82)%
  (mediumturquoise,1,0.28 0.82 0.80)%
  (turquoise,1,0.25 0.88 0.82)%
  (cyan,1,0.00 1.00 1.00)%
  (lightcyan,1,0.88 1.00 1.00)%
  (cadetblue,1,0.37 0.62 0.63)%
  (mediumaquamarine,1,0.40 0.80 0.67)%
  (aquamarine,1,0.50 1.00 0.83)%
  (darkgreen,1,0.00 0.39 0.00)%
  (darkolivegreen,1,0.33 0.42 0.18)%
  (darkseagreen,1,0.56 0.74 0.56)%
  (seagreen,1,0.18 0.55 0.34)%
  (mediumseagreen,1,0.24 0.70 0.44)%
  (lightseagreen,1,0.13 0.70 0.67)%
  (palegreen,1,0.60 0.98 0.60)%
  (springgreen,1,0.00 1.00 0.50)%
  (lawngreen,1,0.49 0.99 0.00)%
  (green,1,0.00 1.00 0.00)%
  (chartreuse,1,0.50 1.00 0.00)%
  (mediumspringgreen,1,0.00 0.98 0.60)%
  (greenyellow,1,0.68 1.00 0.18)%
  (limegreen,1,0.20 0.80 0.20)%
  (yellowgreen,1,0.60 0.80 0.20)%
  (forestgreen,1,0.13 0.55 0.13)%
  (olivedrab,1,0.42 0.56 0.14)%
  (darkkhaki,1,0.74 0.72 0.42)%
  (khaki,1,0.94 0.90 0.55)%
  (palegoldenrod,1,0.93 0.91 0.67)%
  (lightgoldenrodyellow,1,0.98 0.98 0.82)%
  (lightyellow,1,1.00 1.00 0.88)%
  (yellow,1,1.00 1.00 0.00)%
  (gold,1,1.00 0.84 0.00)%
  (lightgoldenrod,1,0.93 0.87 0.51)%
  (goldenrod,1,0.85 0.65 0.13)%
  (darkgoldenrod,1,0.72 0.53 0.04)%
  (rosybrown,1,0.74 0.56 0.56)%
  (indianred,1,0.80 0.36 0.36)%
  (saddlebrown,1,0.55 0.27 0.07)%
  (sienna,1,0.63 0.32 0.18)%
  (peru,1,0.80 0.52 0.25)%
  (burlywood,1,0.87 0.72 0.53)%
  (beige,1,0.96 0.96 0.86)%
  (wheat,1,0.96 0.87 0.70)%
  (sandybrown,1,0.96 0.64 0.38)%
  (tan,1,0.82 0.71 0.55)%
  (chocolate,1,0.82 0.41 0.12)%
  (firebrick,1,0.70 0.13 0.13)%
  (brown,1,0.65 0.16 0.16)%
  (darksalmon,1,0.91 0.59 0.48)%
  (salmon,1,0.98 0.50 0.45)%
  (lightsalmon,1,1.00 0.63 0.48)%
  (orange,1,1.00 0.65 0.00)%
  (darkorange,1,1.00 0.55 0.00)%
  (coral,1,1.00 0.50 0.31)%
  (lightcoral,1,0.94 0.50 0.50)%
  (tomato,1,1.00 0.39 0.28)%
  (orangered,1,1.00 0.27 0.00)%
  (red,1,1.00 0.00 0.00)%
  (hotpink,1,1.00 0.41 0.71)%
  (deeppink,1,1.00 0.08 0.58)%
  (pink,1,1.00 0.75 0.80)%
  (lightpink,1,1.00 0.71 0.76)%
  (palevioletred,1,0.86 0.44 0.58)%
  (maroon,1,0.69 0.19 0.38)%
  (mediumvioletred,1,0.78 0.08 0.52)%
  (violetred,1,0.82 0.13 0.56)%
  (magenta,1,1.00 0.00 1.00)%
  (violet,1,0.93 0.51 0.93)%
  (plum,1,0.87 0.63 0.87)%
  (orchid,1,0.85 0.44 0.84)%
  (mediumorchid,1,0.73 0.33 0.83)%
  (darkorchid,1,0.60 0.20 0.80)%
  (darkviolet,1,0.58 0.00 0.83)%
  (blueviolet,1,0.54 0.17 0.89)%
  (purple,1,0.63 0.13 0.94)%
  (mediumpurple,1,0.58 0.44 0.86)%
  (thistle,1,0.85 0.75 0.85)%
}
\expandafter\catcode`\@=\theatcode\relax
\ifnum\theatcode=13\let @\theat\fi
\endinput
