trac-vis.mkiv /size: 8112 b    last modification: 2021-10-28 13:50
1%D \module
2%D   [       file=trac-vis, % replaces supp-vis plus some s-* modules
3%D        version=2012.06.23, % 1996.10.21,
4%D          title=\CONTEXT\ Tracing Macros,
5%D       subtitle=Visualization,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14%D The old visual debugger dates from 1996 and started out as joke. In practice
15%D it's not used that often although the \type {\ruledhbox} cum suis macros come
16%D in handy when writing code. In the process of luafication some additional
17%D tracing options were tested, for instance showing font kerns. As part of the
18%D \MKIV\ cleanup the decision was made to reimplement, reintegrate and reconsider
19%D all these features. The old code is gone and the new code will get extended
20%D when needed. We still provide placeholders for some old visualization commands
21%D but they might go away.
22%D
23%D Control over what gets visualized happens with the tracker command:
24%D
25%D \enabletrackers[visualizers.*]
26%D
27%D Possible values are: \type {fontkern}, \type {kern}, \type {glue}, \type
28%D {penalty}, \type {hbox}, \type {vbox}, \type {all}, \type {reset}, \type
29%D {makeup}, \type {whatsit}, \type{glyph}.
30%D
31%D In due time some special visualzation of math will move here as well.
32
33\writestatus{loading}{ConTeXt Tracing Macros / Visualization}
34
35\registerctxluafile{trac-vis}{optimize}
36
37\unprotect
38
39\newconstant\c_syst_visualizers_state
40\newtoks    \t_syst_visualizers_optimize
41
42% \definesystemattribute[visual][public,global] % already defined
43
44% no, but can become an option:
45%
46% \appendtoks
47%     \c_attr_visual\attributeunsetvalue
48% \to \everybeforepagebody
49
50%D We only provide box visualizers as they can come in handy for testing
51%D macros. In due time we will move some of the m-visual code here too.
52
53\let\syst_visualizers_hbox   \hbox
54\let\syst_visualizers_vbox   \vbox
55\let\syst_visualizers_vtop   \vtop
56\let\syst_visualizers_vcenter\vcenter
57
58\let\syst_visualizers_hpack\hpack
59\let\syst_visualizers_vpack\vpack
60\let\syst_visualizers_tpack\tpack
61
62\unexpanded\def\ruledhbox{\syst_visualizers_hbox attr \visualattribute \clf_getvisual{simplehbox} }
63\unexpanded\def\ruledvbox{\syst_visualizers_vbox attr \visualattribute \clf_getvisual{simplevbox} }
64\unexpanded\def\ruledvtop{\syst_visualizers_vtop attr \visualattribute \clf_getvisual{simplevtop} } % special case
65\unexpanded\def\ruledtopv{\syst_visualizers_vtop attr \visualattribute \clf_getvisual{vtop}       }
66
67\unexpanded\def\ruledhpack{\syst_visualizers_hpack attr \visualattribute \clf_getvisual{simplehbox} }
68\unexpanded\def\ruledvpack{\syst_visualizers_vpack attr \visualattribute \clf_getvisual{simplevbox} }
69\unexpanded\def\ruledtpack{\syst_visualizers_tpack attr \visualattribute \clf_getvisual{simplevtop} } % special case
70
71\unexpanded\def\ruledmbox#1{\ruledhbox{\startimath#1\stopimath}}
72
73\unexpanded\def\sys_ruled_vcenter{\syst_visualizers_vcenter attr \visualattribute \clf_getvisual {simplevbox}}
74
75\unexpanded\def\ruledvcenter
76  {\ruledvbox\bgroup
77   \dowithnextboxcs\syst_boxes_ruled_vcenter_finish\ruledvbox}
78
79\def\syst_boxes_ruled_vcenter_finish
80  {\ruledhpack{\normalstartimath\ruledvcenter{\box\nextbox}\normalstopimath}%
81   \egroup}
82
83\prependtoks \let\ruledvcenter\sys_ruled_vcenter \to \everymath
84\prependtoks \let\ruledvcenter\sys_ruled_vcenter \to \everydisplay
85
86\appendtoks
87    \ifcase\c_syst_visualizers_state\else
88        \syst_visualizers_speedup
89    \fi
90\to \everyshipout
91
92\appendtoks
93    \glet\syst_visualizers_speedup\relax
94\to \t_syst_visualizers_optimize
95
96\def\syst_visualizers_speedup{\the\t_syst_visualizers_optimize}
97
98\appendtoks
99    \normalexpanded {%
100        \unexpanded\xdef\ruledhbox\expandafter{\ruledhbox}%
101        \unexpanded\xdef\ruledvbox\expandafter{\ruledvbox}%
102        \unexpanded\xdef\ruledvtop\expandafter{\ruledvtop}%
103        \unexpanded\xdef\ruledtopv\expandafter{\ruledtopv}%
104    }%
105\to \t_syst_visualizers_optimize
106
107\unexpanded\def\showmakeup
108  {\dosingleempty\syst_visualizers_makeup}
109
110\unexpanded\def\syst_visualizers_makeup[#1]%
111  {\iffirstargument
112     \clf_setvisual{#1}%
113   \else
114     \clf_setvisual{makeup}%
115     \let\normalvtop\ruledtopv
116     \let\vtop      \ruledtopv
117   \fi}
118
119\unexpanded\def\showallmakeup
120  {\clf_setvisual{all}%
121   \let\normalvtop\ruledtopv
122   \let\vtop      \ruledtopv
123   \showstruts}
124
125\unexpanded\def\showboxes
126  {\clf_setvisual{boxes}%
127   \let\normalvtop\ruledtopv
128   \let\vtop      \ruledtopv}
129
130\unexpanded\def\showglyphs
131  {\clf_setvisual{glyph}}
132
133\unexpanded\def\showfontkerns
134  {\clf_setvisual{fontkern}}
135
136\unexpanded\def\showfontitalics
137  {\clf_setvisual{italic}}
138
139\unexpanded\def\showglyphdata
140  {\showglyphs
141   \showfontkerns
142   \showfontitalics}
143
144\unexpanded\def\showfontexpansion
145  {\clf_setvisual{expansion}}
146
147\unexpanded\def\setvisualizerfont
148  {\dosingleempty\syst_visualizers_setfont}
149
150\def\syst_visualizers_setfont[#1]% somename at 4pt
151  {\begingroup
152   \doifelsenothing{#1}{\definedfont[Mono at 4pt]}{\definedfont[#1]}%
153   \clf_setvisualfont\fontid\font
154   \endgroup}
155
156\unexpanded\def\resetvisualizers
157  {\c_attr_visual\attributeunsetvalue}
158
159%D New (these might also be a visualizers):
160
161% \definecolor[f:r:t][a=1,t=.25,r=1]
162% \definecolor[f:g:t][a=1,t=.25,g=1]
163% \definecolor[f:b:t][a=1,t=.25,b=1]
164% \definecolor[f:c:t][a=1,t=.25,c=1]
165% \definecolor[f:m:t][a=1,t=.25,m=1]
166% \definecolor[f:y:t][a=1,t=.25,y=1]
167% \definecolor[f:k:t][a=1,t=.25,s=0]
168
169\unexpanded\def\filledhboxr{\node_backgrounds_boxes_add\hbox[f:r:t]}
170\unexpanded\def\filledhboxg{\node_backgrounds_boxes_add\hbox[f:g:t]}
171\unexpanded\def\filledhboxb{\node_backgrounds_boxes_add\hbox[f:b:t]}
172\unexpanded\def\filledhboxc{\node_backgrounds_boxes_add\hbox[f:c:t]}
173\unexpanded\def\filledhboxm{\node_backgrounds_boxes_add\hbox[f:m:t]}
174\unexpanded\def\filledhboxy{\node_backgrounds_boxes_add\hbox[f:y:t]}
175\unexpanded\def\filledhboxk{\node_backgrounds_boxes_add\hbox[f:k:t]}
176
177%D Overload:
178
179% \def\spac_struts_vide_hbox
180%   {\hbox attr \visualattribute \clf_getvisual{strut} }
181%
182% \def\spac_struts_vide_hbox
183%   {\xdef\spac_struts_vide_hbox{\hbox attr \visualattribute \clf_getvisual{strut} }%
184%    \spac_struts_vide_hbox}
185
186\unexpanded\def\spac_struts_vide_hbox
187  {\hbox attr \visualattribute \clf_getvisual{strut} }
188
189\appendtoks
190    \normalexpanded{\unexpanded\xdef\spac_struts_vide_hbox\expandafter{\spac_struts_vide_hbox}}%
191\to \t_syst_visualizers_optimize
192
193%D For manuals:
194
195\unexpanded\def\markfonts#1%
196  {\dontleavehmode
197   \begingroup
198   \setbox\scratchbox\hbox{\getbuffer}%
199   \clf_markvisualfonts\scratchbox
200   \unhbox\scratchbox
201   \endgroup}
202
203% As demo:
204%
205% \startbuffer
206%     \hbox {\raise1cm\hbox{raised} normal \lower1cm\hbox{lowered}}
207%     \blank
208%     \moveleft1cm\hbox{left}
209%     \blank
210%     \hbox{normal}
211%     \blank
212%     \moveright1cm\hbox{right}
213%     \blank
214% \stopbuffer
215%
216% \start \showboxes \getbuffer \stop \blank[4*big] \getbuffer
217%
218% \startbuffer
219%     \moveleft1cm\vbox{left}
220%     \blank
221%     \vbox{normal}
222%     \blank
223%     \moveright1cm\vbox{right}
224%     \blank
225% \stopbuffer
226%
227% \start \showboxes \getbuffer \stop \blank[4*big] \getbuffer
228
229%D We keep this one:
230
231\unexpanded\def\dontinterfere
232  {\reseteverypar
233   \parindent\zeropoint
234   \parskip  \zeropoint
235   \leftskip \zeropoint
236   \rightskip\zeropoint
237   \relax}
238
239%D We keep these for a while:
240
241\let\ruledvcenter   \vcenter
242\let\ruledhss       \hss
243\let\ruledhfil      \hfil
244\let\ruledhfill     \hfill
245\let\ruledhfilll    \hfilll
246\let\ruledhfilneg   \hfilneg
247\let\ruledhfillneg  \hfillneg
248\let\ruledhfilllneg \hfilllneg
249\let\ruledvss       \vss
250\let\ruledvfil      \vfil
251\let\ruledvfill     \vfill
252\let\ruledvfilll    \vfilll
253\let\ruledvfilneg   \vfilneg
254\let\ruledvfillneg  \vfillneg
255\let\ruledvfilllneg \vfilllneg
256\let\ruledhskip     \hskip
257\let\ruledvskip     \vskip
258\let\ruledkern      \kern
259\let\ruledhglue     \hglue
260\let\ruledvglue     \vglue
261\let\ruledmkern     \mkern
262\let\ruledmskip     \mskip
263\let\ruledpenalty   \penalty
264
265\protect \endinput
266