1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21\writestatus { loading } { ConTeXt Graphic Macros Patterns }
22
23\unprotect
24
25\registerctxluafile { grph pat } { }
26
27\unexpanded \def \registerpattern
28 { \begingroup
29 \letdummyparameter \c!name \s!dummy
30 \letdummyparameter \c!width \v!auto
31 \letdummyparameter \c!height \v!auto
32 \letdummyparameter \c!hoffset \zeropoint
33 \letdummyparameter \c!voffset \zeropoint
34 \dodoubleempty \syst_boxes_registerpattern }
35
36\def \syst_boxes_registerpattern [ # 1 ] [ # 2 ]
37 { \ifsecondargument
38 \setdummyparameter \c!name { # 1 }
39 \getdummyparameters [ # 2 ]
40 \else \iffirstargument
41 \doifassignmentelse { # 1 }
42 { \getdummyparameters [ # 1 ] }
43 { \setdummyparameter \c!name { # 1 } }
44 \fi \fi
45 \dowithnextboxcs \syst_boxes_registerpattern_indeed \hbox }
46
47\edef \v!auto_m { \v!auto }
48
49\def \syst_boxes_registerpattern_indeed
50 {
51 \edef \p_width { \dummyparameter \c!width }
52 \edef \p_height { \dummyparameter \c!height }
53 \edef \p_hoffset { \dummyparameter \c!hoffset }
54 \edef \p_voffset { \dummyparameter \c!voffset }
55 \scratchwidth \dimexpr \ifx \p_width \v!auto \wd \nextbox \else \p_width \fi \relax
56 \scratchheight \dimexpr \ifx \p_height \v!auto \htdp \nextbox \else \p_height \fi \relax
57 \scratchhoffset \dimexpr \ifx \p_hoffset \v!auto \scratchwidth 2 \else \ifx \p_hoffset \v!auto_m \scratchwidth 2 \else \p_hoffset \fi \fi \relax
58 \scratchvoffset \dimexpr \ifx \p_voffset \v!auto \scratchheight 2 \else \ifx \p_voffset \v!auto_m \scratchheight 2 \else \p_voffset \fi \fi \relax
59 \clf_registerpattern
60 name { \dummyparameter \c!name }
61 number \nextbox
62 width \scratchwidth
63 height \scratchheight
64 hoffset \scratchhoffset
65 voffset \scratchvoffset
66 \relax
67 \endgroup }
68
69\unexpanded \def \applypattern
70 { \hbox \bgroup
71 \letdummyparameter \c!name \s!dummy
72 \letdummyparameter \c!width \zeropoint
73 \letdummyparameter \c!height \zeropoint
74 \dodoubleempty \syst_boxes_applypattern }
75
76\def \syst_boxes_applypattern [ # 1 ] [ # 2 ]
77 { \ifsecondargument
78 \setdummyparameter \c!name { # 1 }
79 \getdummyparameters [ # 2 ]
80 \else \iffirstargument
81 \doifassignmentelse { # 1 }
82 { \getdummyparameters [ # 1 ] }
83 { \setdummyparameter \c!name { # 1 } }
84 \fi \fi
85 \clf_applypattern
86 name { \dummyparameter \c!name }
87 number \nextbox
88 width \dimexpr \dummyparameter \c!width \relax
89 height \dimexpr \dummyparameter \c!height \relax
90 \relax
91 \box \nextbox
92 \egroup }
93
94\protect
95
96\continueifinputfile { grph pat . mkiv }
97
98\nopdfcompression
99
100\starttext
101
102 \registerpattern [ demo ] { It \darkred Works ! }
103
104 \framed [ offset = overlay ] { \applypattern [ demo ] [ width = 7 cm , height = 4 cm ] }
105
106 \blank
107
108 \registerpattern [ name = more , hoffset = 0 bp , voffset = 0 pt ] { \externalfigure [ cow . pdf ] [ width = 1 cm ] }
109
110 \framed [ offset = overlay ] { \applypattern [ name = more , width = 7 cm , height = 4 cm ] }
111
112 \blank
113
114 \registerpattern [ name = more , hoffset = auto , voffset = auto ] { \externalfigure [ cow . pdf ] [ width = 1 cm ] }
115
116 \framed [ offset = overlay ] { \applypattern [ name = more , width = 7 cm , height = 4 cm ] }
117
118 \blank
119
120 \registerpattern [ name = more , hoffset = auto , voffset = auto ] { \externalfigure [ cow . pdf ] [ width = 1 cm ] }
121
122 \framed [ offset = overlay ] { \applypattern [ name = more , width = 7 cm , height = 4 cm ] }
123
124\stoptext
125
126 |