[metapost] ANN: colordef package preview
luecking at uark.edu
Fri Feb 6 08:48:52 CET 2009
At 04:40 PM 2/5/2009, you wrote:
>Unfortunately, I have no idea how to implement an operator ! that works
> red!80 = .2[red, white]
> red!80!blue = .2[red, blue]
>The former case is simple, roughly
> primarydef col ! tint=
> min(1,max(0,tint/100))[white, col]
You could have ! examine its second operand. If it is a
number, save that number somewhere. If it is a color,
assume it is the second ! of a colA!tint!colB and make
use of the previously saved numeric to recover colA.
This assumes that only the two cases are needed.
primarydef op_i ! op_ii =
if numeric op_ii:
colorfactor := min(1,max(0,op_ii/100));
elseif color op_ii:
% presume first operand was produced from
% (colorfactor)[white,somecolor], and find that color
if colorfactor = 1:
else: % error case or other color models, etc.
N.B. Not tested.
>In the second case, however, there is the problem that from a MetaPost
>point of view ! has two different meanings.
> primarydef colA ! tint ! colB=
>doesn't seem to work.
It couldn't possibly, as MP doesn't have trinary operators,
or any means to define them.
Personally, I don't like the notation red!80!blue and prefer
a simple vardef with three arguments:
vardef !(expr clrA, tint, clrB)=
More information about the metapost