1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\unprotect
17
18\writestatus{loading}{ConTeXt Table Macros Framed Tables}
19
20\installcorenamespace{framedtable}
21\installcorenamespace{framedtablerow}
22\installcorenamespace{framedtablecolumn}
23
24\newinteger \c_tabl_framed_c
25\newinteger \c_tabl_framed_r
26\newdimension\d_tabl_framed_h \def\d_tabl_framed_h_reference{\d_tabl_framed_h}
27\newdimension\d_tabl_framed_d
28\newdimension\b_tabl_framed
29
30\initializeboxstack\??framedtable
31
32\defineframed[\??framedtable]
33\defineframed[\??framedtablerow][\??framedtable]
34\defineframed[\??framedtablecolumn][\??framedtable]
35
36\setupframed
37 [\??framedtable]
38 [\c!distance=\zeropoint,
39 \c!before=,
40 \c!after=,
41 \c!inbetween=]
42
43\setupframed
44 [\??framedtablerow]
45 [\c!strut=\v!no,
46 \c!offset=\v!overlay]
47
48
49
50
51\permanent\tolerant\protected\def\defineframedtable[#1]#*[#2]
52 {\ifarguments\or
53 \defineframed[\??framedtable#1][\??framedtable]
54 \or
55 \defineframed[\??framedtable#1][\??framedtable#2]
56 \fi}
57
58
59
60\permanent\tolerant\protected\def\setupframedtable[#S#1]#*[#S#2]
61 {\ifarguments\or
62 \setupframed[\??framedtable][#1]
63 \or
64 \ifcsname\??framed:\??framedtable#1\endcsname \else
65 \defineframed[\??framedtable#1][\??framedtable]
66 \fi
67 \setupframed[\??framedtable#1][#2]
68 \fi}
69
70
71
72
73\permanent\tolerant\protected\def\setupframedtablerow[#1]#*[#S#2]#*[#S#3]
74 {\ifarguments\or\or
75 \ifcsname\??framed:\??framedtablerow:#1\endcsname \else
76 \defineframed[\??framedtablerow:#1][\??framedtable]
77 \fi
78 \setupframed[\??framedtablerow:#1][#2]
79 \or
80 \ifcsname\??framed:\??framedtable#1\endcsname \else
81 \defineframed[\??framedtable#1][\??framedtable]
82 \fi
83 \ifcsname\??framed:\??framedtablerow#1:#2\endcsname \else
84 \defineframed[\??framedtablerow#1:#2][\??framedtable#1]
85 \fi
86 \setupframed[\??framedtablerow#1:#2][#3]
87 \fi}
88
89\permanent\tolerant\protected\def\setupframedtablecolumn[#1]#*[#S#2]#*[#S#3]
90 {\ifarguments\or\or
91 \ifcsname\??framed:\??framedtablecolumn:#1\endcsname \else
92 \defineframed[\??framedtablecolumn:#1][\??framedtable]
93 \fi
94 \setupframed[\??framedtablecolumn:#1][#2]
95 \or
96 \ifcsname\??framed:\??framedtable#1\endcsname \else
97 \defineframed[\??framedtable#1][\??framedtable]
98 \fi
99 \ifcsname\??framed:\??framedtablecolumn#1:#2\endcsname \else
100 \defineframed[\??framedtablecolumn#1:#2][\??framedtable#1]
101 \fi
102 \setupframed[\??framedtablecolumn#1:#2][#3]
103 \fi}
104
105\mutable\lettonothing\currentframedtable
106
107\permanent\tolerant\protected\def\startframedtable[#S#1]#*[#S#2]
108 {\begingroup
109 \forgetall
110 \ifhastok={#1}
111 \lettonothing\currentframedtable
112 \setupframed[\??framedtable][#1]
113 \else
114 \cdef\currentframedtable{#1}
115 \setupframed[\??framedtable][#2]
116 \fi
117 \cdef\currentframed{\??framedtable\currentframedtable}
118 \pack_framed_initialize
119 \c_tabl_framed_r\zerocount
120 \d_tabl_framed_d{\framedparameter\c!distance}
121 \framedparameter\c!before}
122
123\permanent\protected\def\stopframedtable
124 {\framedparameter\c!after
125 \endgroup}
126
127
128
129\tolerant\protected\def\pack_framed_start_framed_whatever[#S#1]
130 {\pack_framed_initialize
131 \bgroup
132 \setupcurrentframed[#1]
133 \pack_framed_process_indeed
134 \bgroup
135 \ignorespaces}
136
137\newinteger\c_tabl_framed_pass
138
139\permanent\let\stopframedrow\relax
140
141\permanent\protected\def\startframedrow#1\stopframedrow
142 {\advanceby\c_tabl_framed_r\plusone
143 \startframedrow_one#1\stopframedrow_one
144 \startframedrow_two#1\stopframedrow_two}
145
146\tolerant\def\startframedrow_one[#]
147 {\bgroup
148 \c_tabl_framed_pass\plusone
149 \c_tabl_framed_c\zerocount
150 \d_tabl_framed_h\zeropoint
151 \settrialtypesetting}
152
153\protected\def\stopframedrow_one
154 {\normalexpanded{\egroup\d_tabl_framed_h\the\d_tabl_framed_h\relax}}
155
156\def\startframedrow_two
157 {\bgroup
158 \c_tabl_framed_c\zerocount
159 \c_tabl_framed_pass\plustwo
160 \cdef\currentframed{\the\c_tabl_framed_r}
161 \cdef\currentframed
162 {\??framedtablerow\currentframedtable
163 \ifcsname\??framedtablerow\currentframedtable:\currentframed\endcsname
164 :\currentframed
165 \orelse\ifcsname\??framedtablerow\currentframedtable:\v!each\endcsname
166 :\v!each
167 \fi}
168 \pack_framed_start_framed_whatever}
169
170\protected\def\stopframedrow_two
171 {\localcontrolledloop\plusone\c_tabl_framed_c\plusone{\tabl_framed_flush_row_two}
172 \stopframed
173 \nointerlineskip
174 \vskip\zeroskip\relax
175 \framedparameter\c!inbetween}
176
177\protected\def\tabl_framed_flush_row_two
178 {\vpack to \d_tabl_framed_h{\flushbox\??framedtable{\the\currentloopiterator}\vfill}
179 \ifzeropt\d_tabl_framed_d\else\kern\d_tabl_framed_d\fi}
180
181\permanent\protected\def\startframedcell
182 {\advanceby\c_tabl_framed_c\plusone
183 \setbox\b_tabl_framed\hpack\bgroup
184
185 \cdef\currentframed{\the\c_tabl_framed_c}
186 \cdef\currentframed
187 {\??framedtablecolumn\currentframedtable
188 \ifcsname\??framedtablecolumn\currentframedtable:\currentframed\endcsname
189 :\currentframed
190 \orelse\ifcsname\??framedtablecolumn\currentframedtable:\v!each\endcsname
191 :\v!each
192 \fi}
193 \ifcase\c_tabl_framed_pass
194 \or
195 \resetframedparameter\c!background
196 \letframedparameter\c!frame\v!off
197 \or
198 \letframedparameter\c!height\d_tabl_framed_h_reference
199 \fi
200 \pack_framed_start_framed_whatever}
201
202\permanent\protected\def\stopframedcell
203 {\stopframed
204
205 \ifcase\c_tabl_framed_pass
206 \or
207 \ifdim\ht\b_tabl_framed>\d_tabl_framed_h
208 \d_tabl_framed_h\ht\b_tabl_framed
209 \fi
210 \else
211 \savebox\??framedtable{\the\c_tabl_framed_c}{\box\b_tabl_framed}
212 \fi}
213
214\protect \endinput
215
216\starttext
217
218\setupframedtablecolumn [1] [width=3cm,background=color,backgroundcolor=red]
219\setupframedtablecolumn [2] [width=4cm,background=color,backgroundcolor=green,align=normal]
220
221
222
223\startframedtable[inbetween=\kern0.4pt,distance=0.4pt]
224
225\testfeatureonce{10000}{
226
227 \startframedrow
228 \startframedcell
229 test
230 \stopframedcell
231 \startframedcell
232 test \par test
233 \stopframedcell
234 \stopframedrow
235}
236\stopframedtable
237
238\stoptext
239 |