1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
%D \module
%D [ file=colo-hex,
%D version=2004.06.23,
%D title=\CONTEXT\ Color Macros,
%D subtitle=Hex Colors,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
\ifdefined \hexcolorprefix
\expandafter \endinput
\fi
\writestatus{loading}{ConTeXt Color Macros / Hexadecimal}
% \edef\testcolor{\string#FFC0C0}
% \edef\testcolor{\string#55}
%
% \setupcolors[state=start]
%
% \expanded{\definecolor[thehexcolor][\hexcolorspec\testcolor]}
%
% \checkhexcolor[\testcolor]
%
% \definecolor[thehexcolor][\testcolor]
%
% \starttext
%
% test \color[thehexcolor]{rood}
% test \color[red]{rood}
% test \color[\testcolor]{rood}
%
% \stoptext
\unprotect
% \definecolor[rgbtestcolor] [r=0.87843,g=0.87451,b=0.89020] % RGB(224,223,227)
% \definecolor[hextestcolor] [h=E0DFE3]
%
% \startMPpage
% path p ; % example by Peter Rolf
% p := unitsquare xyscaled(5cm,5cm) ;
% fill (point 0 of p -- point 1 of p -- point 2 of p --cycle) withcolor \MPcolor{rgbtestcolor} ; % bottom right part of the square
% fill (point 0 of p -- point 3 of p -- point 2 of p --cycle) withcolor \MPcolor{hextestcolor} ; % top left part
% \stopMPpage
\newdimen\hexcolorfraction \hexcolorfraction=\dimexpr1pt/255\relax
\chardef\hexcolorprefix=`#
\def\hexcolorspec #1{\expandafter\dohexcolorspec #1\empty\empty\empty\empty\relax}
\def\hexcolorpattern#1{\expandafter\dohexcolorpattern#1\empty\empty\empty\empty\relax}
\ifx\dohexstringtonumber\undefined \def\dohexstringtonumber{"} \fi
\def\hexcolorcomponent#1#2%
{\ifnum\dohexstringtonumber#1#2=\zerocount0\else\ifnum\dohexstringtonumber#1#2=\plusone1\else
\expandafter\withoutpt\the\dimexpr\dohexstringtonumber#1#2\hexcolorfraction\relax
\fi\fi}
\def\dohexcolorspec#1#2#3#4#5#6#7#8\relax
{\ifx#4\empty
s=\hexcolorcomponent#2#3%
\else
r=\hexcolorcomponent#2#3,g=\hexcolorcomponent#4#5,b=\hexcolorcomponent#6#7%
\fi}
\def\dohexcolorpattern#1#2#3#4#5#6#7#8\relax
{0\ifx#4\empty
S:\hexcolorcomponent#2#3%
\else
R:\hexcolorcomponent#2#3:\hexcolorcomponent#4#5:\hexcolorcomponent#6#7%
\fi:0:0}
\def\doifhexcolorelse#1%
{\expandafter\dodoifhexcolorelse#10\od} % 0 is a dirty trick to catch an empty #1
\def\dodoifhexcolorelse#1#2\od
{\ifnum`#1=\hexcolorprefix
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
\def\docheckhexcolor#1%
{\doifhexcolorelse{#1}{\doifundefined{#1}{\setxvalue{\??cr#1}{\hexcolorpattern{#1}}}}\donothing}
\def\checkhexcolor[#1]%
{\expanded{\docheckhexcolor{#1}}}
\def\colorHpattern{\@EA\hexcolorpattern\@EA{\@EA*\@@cl@@h}} % * == dummy placeholder
\let\dodododefinecolor\dododefinecolor % we will overload this one
\def\dododefinecolor#1#2#3#4[#5][#6]%
{\doifhexcolorelse{#6}
{\setxvalue{\??cr#5}{\hexcolorpattern{#6}}}
{\dodododefinecolor#1#2#3#4[#5][#6]}}
%D For Adam Lindsay and his XeTeX special driver:
% because we intercept the zero condition, the .23pt in 1.23pt will disappear in the
% ifcase zero part branch
\def\colorhexcomponent#1%
{\ifdim#1\points<.005\points
00\else\lchexnumbers{\the\dimexpr255\dimexpr#1\points\relax+.5\points\relax}%
\fi}
% the faster one
\newdimen\hex@color@a \hex@color@a=.005pt
\newdimen\hex@color@b \hex@color@b=.5pt
\chardef \hex@color@c =255
\def\colorhexcomponent#1%
{\ifdim#1\points<\hex@color@a
00\else\lchexnumbers{\the\dimexpr#1\points*\hex@color@c+\hex@color@b\relax}%
\fi}
\protect \endinput
|