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