1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Packaging Macros Positioning}
15
16\unprotect
17
18
19
20
21
22
23
24
25
26
27
28
29\installcorenamespace {positioning}
30
31\installcommandhandler \??positioning {positioning} \??positioning
32
33\setuppositioning
34 [\c!state=\v!start,
35 \c!unit=\s!cm,
36 \c!factor=\plusone,
37 \c!scale =\plusone,
38 \c!xfactor=\positioningparameter\c!factor,
39 \c!yfactor=\positioningparameter\c!factor,
40 \c!xscale=\positioningparameter\c!scale,
41 \c!yscale=\positioningparameter\c!scale,
42 \c!xstep=\v!absolute,
43 \c!ystep=\v!absolute,
44 \c!xoffset=\zeropoint,
45 \c!yoffset=\zeropoint]
46
47\newdimension\d_pack_positioning_x_position
48\newdimension\d_pack_positioning_y_position
49\newdimension\d_pack_positioning_x_dimension
50\newdimension\d_pack_positioning_y_dimension
51\newdimension\d_pack_positioning_x_offset
52\newdimension\d_pack_positioning_y_offset
53
54\newbox \b_pack_positioning
55
56\permanent\tolerant\protected\def\startpositioning[#S#1]#*[#S#2]
57 {\bgroup
58 \ifparameters
59 \lettonothing\currentpositioning
60 \or
61 \ifhastok={#1}
62 \lettonothing\currentpositioning
63 \setupcurrentpositioning[#1]
64 \else
65 \cdef\currentpositioning{#1}
66 \fi
67 \or
68 \cdef\currentpositioning{#1}
69 \setupcurrentpositioning[#2]
70 \fi
71 \d_pack_positioning_x_position \zeropoint
72 \d_pack_positioning_y_position \zeropoint
73 \d_pack_positioning_x_dimension\zeropoint
74 \d_pack_positioning_y_dimension\zeropoint
75 \d_pack_positioning_x_offset \zeropoint
76 \d_pack_positioning_y_offset \zeropoint
77 \hfuzz\paperwidth
78 \vfuzz\paperheight
79 \setbox\b_pack_positioning\hbox\bgroup
80 \ignorespaces}
81
82\permanent\protected\def\stoppositioning
83 {\removeunwantedspaces
84 \ifcstok{\positioningparameter\c!offset}\v!yes\else
85 \global\d_pack_positioning_x_offset\zeropoint
86 \global\d_pack_positioning_y_offset\zeropoint
87 \fi
88 \global\advanceby\d_pack_positioning_x_dimension\d_pack_positioning_x_offset
89 \global\advanceby\d_pack_positioning_y_dimension\d_pack_positioning_y_offset
90 \egroup
91 \vbox to \d_pack_positioning_y_dimension
92 {\vskip\d_pack_positioning_y_offset
93 \hbox to \d_pack_positioning_x_dimension
94 {\kern\d_pack_positioning_x_offset
95 \box\b_pack_positioning
96 \hfill}
97 \vfill}
98 \egroup}
99
100\protected\def\pack_positioning_calculate#1#2#3#4#5#6#7#8#9
101 {\setdimensionwithunit\scratchdimen{#1}{\positioningparameter\c!unit}
102 \scratchdimen\positioningparameter#8\scratchdimen
103 \scratchdimen\positioningparameter#9\scratchdimen
104 \advanceby\scratchdimen\positioningparameter#4\relax
105
106 \ifcstok{\positioningparameter#2}\v!relative
107 \advanceby\scratchdimen#3
108 \letpositioningparameter#4\zeropoint
109 \fi
110 #3\scratchdimen
111 \ifcstok{\positioningparameter\c!state}\v!overlay\else
112 \scratchdimen\dimexpr#5\nextbox#3\relax
113 \ifdim #3<#7\relax \global#7#3\relax \fi
114 \ifdim\scratchdimen> #6\relax \global#6\scratchdimen\fi
115 \fi}
116
117\permanent\tolerant\protected\def\position[#S#1]#:(#2,#3)
118 {\bgroup
119 \ifparameter#1\or
120 \setupcurrentpositioning[#1]
121 \fi
122 \removeunwantedspaces
123 \dowithnextbox{\pack_positioning_position_indeed{#2}{#3}}\hbox}
124
125\def\pack_positioning_position_indeed#1#2
126 {\dontcomplain
127 \pack_positioning_calculate
128 {#1}
129 \c!xstep
130 \d_pack_positioning_x_position
131 \c!xoffset
132 \wd
133 \d_pack_positioning_x_dimension
134 \d_pack_positioning_x_offset
135 \c!xscale
136 \c!xfactor
137 \pack_positioning_calculate
138 {#2}
139 \c!ystep
140 \d_pack_positioning_y_position
141 \c!yoffset
142 \htdp
143 \d_pack_positioning_y_dimension
144 \d_pack_positioning_y_offset
145 \c!yscale
146 \c!yfactor
147 \vbox to \zeropoint
148 {\offinterlineskip
149 \vskip\d_pack_positioning_y_position
150 \hbox to \zeropoint
151 {\kern\d_pack_positioning_x_position
152 \box\nextbox
153 \hss}
154 \vss}
155 \normalexpanded
156 {\egroup
157 \d_pack_positioning_x_position\the\d_pack_positioning_x_position
158 \d_pack_positioning_y_position\the\d_pack_positioning_y_position
159 \setexpandedpositioningparameter\c!xoffset{\the\dimexpr\positioningparameter\c!xoffset}
160 \setexpandedpositioningparameter\c!yoffset{\the\dimexpr\positioningparameter\c!yoffset}}
161 \ignorespaces}
162
163\protect \endinput
164 |