1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Node Macros Item Lists}
15
16\unprotect
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\installcorenamespace{items}
45\installcorenamespace{itemsalternatives}
46\installcorenamespace{itemshorizontal}
47\installcorenamespace{itemsvertical}
48
49\installcommandhandler \??items {items} \??items
50
51\setupitems
52 [\c!alternative=\v!left,
53 \c!symbol=5,
54 \c!textwidth=\availablehsize,
55 \c!align=\v!middle,
56 \c!textalign=\v!flushleft,
57 \c!distance=\zeropoint,
58
59 \c!before=\blank,
60 \c!inbetween={\blank[\v!medium]},
61 \c!after=\blank]
62
63\newinteger \c_typo_items_n
64\newinteger \c_typo_items_m
65\newdimension\d_typo_items_text_width
66\newdimension\d_typo_items_symbol_width
67\newdimension\d_typo_items_distance
68\newbox \b_typo_items_symbols
69\newbox \b_typo_items_texts
70
71\permanent\tolerant\protected\def\items[#S#1]#:#2
72 {\bgroup
73 \setupitems[#1]
74 \edef\p_typo_items_alternative{\itemsparameter\c!alternative}
75 \ifcsname\??itemsalternatives\p_typo_items_alternative\endcsname \else
76 \let\p_typo_items_alternative\v!left
77 \fi
78 \let\currentitems\p_typo_items_alternative
79 \setupcurrentitems[#1]
80
81 \edef\p_typo_items_textwidth{\itemsparameter\c!textwidth}
82 \ifempty\p_typo_items_textwidth
83 \d_typo_items_text_width\availablehsize
84 \else
85 \d_typo_items_text_width\p_typo_items_textwidth\relax
86 \fi
87
88 \edef\p_typo_items_width{\itemsparameter\c!width}
89 \ifempty\p_typo_items_width
90 \d_typo_items_symbol_width1.5\emwidth
91 \else
92 \d_typo_items_symbol_width\p_typo_items_width\relax
93 \fi
94
95 \edef\p_typo_items_distance{\itemsparameter\c!distance}
96 \ifempty\p_typo_items_distance
97 \d_typo_items_distance\zeropoint
98 \else
99 \d_typo_items_distance\p_typo_items_distance\relax
100 \fi
101
102 \edef\p_typo_items_symbol{\itemsparameter\c!symbol}
103 \ifempty\p_typo_items_symbol
104 \let\m_typo_items_symbol\firstofoneargument
105 \orelse\ifx\p_typo_items_symbol\v!none
106 \lettonothing\p_typo_items_symbol
107 \let\m_typo_items_symbol\firstofoneargument
108 \else
109 \doifelseconversiondefined\p_typo_items_symbol
110 {\def\m_typo_items_symbol{\convertnumber\p_typo_items_symbol}}
111 {\doifelsesymboldefined\p_typo_items_symbol
112 {\def\m_typo_items_symbol{\symbol[\p_typo_items_symbol]\gobbleoneargument}}
113 {\let\m_typo_items_symbol\firstofoneargument}}
114 \fi
115
116 \edef\p_typo_items_align{\itemsparameter\c!align}
117 \edef\p_typo_items_textalign{\itemsparameter\c!textalign}
118
119 \edef\p_typo_items_n{\itemsparameter\c!n}
120 \ifempty\p_typo_items_n
121 \getcommalistsize[#2]
122 \c_typo_items_n\commalistsize\relax
123 \else
124 \c_typo_items_n\p_typo_items_n\relax
125 \fi
126
127 \parindent\zeropoint
128 \dontcomplain
129
130 \itemsparameter\c!before
131 \csname\??itemsalternatives\p_typo_items_alternative\endcsname{#2}
132 \itemsparameter\c!after
133 \egroup}
134
135
136
137\let\typo_items_item\relax
138\let\typo_items_make\relax
139
140\def\typo_items_item_horizontal
141 {\advanceby\c_typo_items_m\plusone
142 \csname\??itemshorizontal
143 \ifcsname\??itemshorizontal\p_typo_items_align\endcsname
144 \p_typo_items_align
145 \else
146 \s!unknown
147 \fi
148 \endcsname}
149
150\def\typo_items_item_vertical
151 {\advanceby\c_typo_items_m\plusone
152 \csname\??itemsvertical
153 \ifcsname\??itemsvertical\p_typo_items_align\endcsname
154 \p_typo_items_align
155 \else
156 \s!unknown
157 \fi
158 \endcsname}
159
160\defcsname\??itemshorizontal\v!margin\endcsname#1
161 {\ifnum\c_typo_items_m=\plusone\hss\else\hfill\fi
162 \strut#1
163 \ifnum\c_typo_items_m=\c_typo_items_n\hss\else\hfill\fi}
164
165\defcsname\??itemshorizontal\s!unknown\endcsname
166 {\simplealignedbox\scratchwidth\m_typo_items_align}
167
168\defcsname\??itemsvertical\s!unknown\endcsname
169 {\simplealignedbox\scratchwidth\m_typo_items_align}
170
171\def\typo_items_make_horizontal#1
172 {\divideby\scratchwidth\c_typo_items_n
173 \hbox{#1}}
174
175\def\typo_items_make_vertical#1
176 {\vbox{#1}}
177
178\def\typo_items_construct_items_boxes#1
179 {\setbox\b_typo_items_texts\hbox
180 {\c_typo_items_m\zerocount
181 \let\m_typo_items_align\p_typo_items_textalign
182 \scratchwidth\d_typo_items_text_width
183 \useitemsstyleandcolor\c!textstyle\c!textcolor
184 \typo_items_make{\processcommalist[#1]\typo_items_item}}
185 \setbox\b_typo_items_symbols
186 \ifempty\p_typo_items_symbol
187 \emptyhbox
188 \else
189 \hbox
190 {\c_typo_items_m\zerocount
191 \let\m_typo_items_align\p_typo_items_align
192 \scratchwidth\d_typo_items_symbol_width
193 \useitemsstyleandcolor\c!style\c!color
194 \typo_items_make{\dorecurse\c_typo_items_n{\typo_items_item{\strut\m_typo_items_symbol{##1}}}}}
195 \fi}
196
197
198
199\defineitems[\v!top][\c!width=\d_typo_items_text_width,\c!textalign=\itemsparameter\c!align]
200
201\defcsname\??itemsalternatives\v!top\endcsname#1
202 {\let\typo_items_make\typo_items_make_horizontal
203 \let\typo_items_item\typo_items_item_horizontal
204 \typo_items_construct_items_boxes{#1}
205 \noindent\vbox\bgroup
206 \forgetall
207 \ifvoid\b_typo_items_symbols \else
208 \box\b_typo_items_symbols
209 \itemsparameter\c!inbetween
210 \nointerlineskip
211 \fi
212 \box\b_typo_items_texts\
213 \egroup}
214
215\defineitems[\v!bottom][\c!width=\d_typo_items_text_width,\c!textalign=\itemsparameter\c!align]
216
217\defcsname\??itemsalternatives\v!bottom\endcsname#1
218 {\let\typo_items_make\typo_items_make_horizontal
219 \let\typo_items_item\typo_items_item_horizontal
220 \typo_items_construct_items_boxes{#1}
221 \noindent\vbox\bgroup
222 \forgetall
223 \box\b_typo_items_texts
224 \ifvoid\b_typo_items_symbols \else
225 \itemsparameter\c!inbetween
226 \nointerlineskip
227 \box\b_typo_items_symbols
228 \fi
229 \egroup}
230
231\defineitems[\v!inmargin][\c!width=1.5\emwidth,\c!align=\v!flushright,\c!distance=\leftmargindistance]
232
233\defcsname\??itemsalternatives\v!inmargin\endcsname#1
234 {\let\typo_items_make\typo_items_make_vertical
235 \let\typo_items_item\typo_items_item_vertical
236 \typo_items_construct_items_boxes{#1}
237 \noindent\hbox\bgroup
238 \ifvoid\b_typo_items_symbols \else
239 \llap{\box\b_typo_items_symbols\kern\d_typo_items_distance}
240 \fi
241 \box\b_typo_items_texts
242 \egroup}
243
244\defineitems[\v!left][\c!width=1.5\emwidth,\c!align=\v!flushleft]
245
246\defcsname\??itemsalternatives\v!left\endcsname#1
247 {\let\typo_items_make\typo_items_make_vertical
248 \let\typo_items_item\typo_items_item_vertical
249 \advanceby\d_typo_items_text_width\dimexpr\d_typo_items_symbol_width\d_typo_items_distance\relax
250 \typo_items_construct_items_boxes{#1}
251 \noindent\hbox\bgroup
252 \ifvoid\b_typo_items_symbols \else
253 \box\b_typo_items_symbols
254 \kern\d_typo_items_distance
255 \fi
256 \box\b_typo_items_texts
257 \egroup}
258
259\defineitems[\v!right][\c!width=1.5\emwidth,\c!align=\v!flushright]
260
261\defcsname\??itemsalternatives\v!right\endcsname#1
262 {\let\typo_items_make\typo_items_make_vertical
263 \let\typo_items_item\typo_items_item_vertical
264 \advanceby\d_typo_items_text_width\dimexpr\d_typo_items_symbol_width\d_typo_items_distance\relax
265 \typo_items_construct_items_boxes{#1}
266 \noindent\hbox\bgroup
267 \box\b_typo_items_texts
268 \ifvoid\b_typo_items_symbols \else
269 \kern\d_typo_items_distance
270 \box\b_typo_items_symbols
271 \fi
272 \egroup}
273
274\protect \endinput
275 |