trac-vis.mkxl /size: 9 Kb    last modification: 2023-12-21 09:44
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% special case:
34%
35% \disabledirectives[backend.cleanup.flatten]
36% \bitwiseflip \normalizelinemode -\flattendiscretionariesnormalizecode
37% \showmakeup[discretionary]
38
39\writestatus{loading}{ConTeXt Tracing Macros / Visualization}
40
41\unprotect
42
43\newconstant\c_syst_visualizers_state
44\newtoks    \t_syst_visualizers_optimize
45
46\registerctxluafile{trac-vis}{autosuffix}
47
48% \definesystemattribute[visual][public,global] % already defined
49
50% no, but can become an option:
51%
52% \appendtoks
53%     \c_attr_visual\attributeunsetvalue
54% \to \everybeforepagebody
55
56%D We only provide box visualizers as they can come in handy for testing
57%D macros. In due time we will move some of the m-visual code here too.
58
59\aliased\let\syst_visualizers_hbox   \hbox
60\aliased\let\syst_visualizers_vbox   \vbox
61\aliased\let\syst_visualizers_vtop   \vtop
62\aliased\let\syst_visualizers_dbox   \dbox
63\aliased\let\syst_visualizers_vcenter\vcenter
64\aliased\let\syst_visualizers_hpack  \hpack
65\aliased\let\syst_visualizers_vpack  \vpack
66\aliased\let\syst_visualizers_tpack  \tpack
67\aliased\let\syst_visualizers_dpack  \dpack
68\aliased\let\syst_visualizers_vsplit \vsplit
69\aliased\let\syst_visualizers_tsplit \tsplit
70\aliased\let\syst_visualizers_dsplit \dsplit
71
72\permanent\protected\def\ruledhbox   {\syst_visualizers_hbox    \s!attr \visualattribute \clf_getvisual{simplehbox} }
73\permanent\protected\def\ruledhpack  {\syst_visualizers_hpack   \s!attr \visualattribute \clf_getvisual{simplehbox} }
74\permanent\protected\def\ruledvbox   {\syst_visualizers_vbox    \s!attr \visualattribute \clf_getvisual{simplevbox} }
75\permanent\protected\def\ruledvpack  {\syst_visualizers_vpack   \s!attr \visualattribute \clf_getvisual{simplevbox} }
76\permanent\protected\def\ruledvtop   {\syst_visualizers_vtop    \s!attr \visualattribute \clf_getvisual{simplevtop} }
77\permanent\protected\def\ruledtpack  {\syst_visualizers_tpack   \s!attr \visualattribute \clf_getvisual{simplevtop} }
78\permanent\protected\def\ruleddbox   {\syst_visualizers_dbox    \s!attr \visualattribute \clf_getvisual{simplevtop} }
79\permanent\protected\def\ruleddpack  {\syst_visualizers_dpack   \s!attr \visualattribute \clf_getvisual{simplevtop} }
80\permanent\protected\def\ruledvcenter{\syst_visualizers_vcenter \s!attr \visualattribute \clf_getvisual{simplevbox} }
81\permanent\protected\def\ruledmbox #1{\ruledhbox{\startimath#1\stopimath}}
82
83\mutable\integerdef\c_syst_visualizer\zerocount
84
85\permanent\protected\def\ruledvsplit{\afterassignment\syst_visualizers_v_split\integerdef\c_syst_visualizer}
86\permanent\protected\def\ruledtsplit{\afterassignment\syst_visualizers_t_split\integerdef\c_syst_visualizer}
87\permanent\protected\def\ruleddsplit{\afterassignment\syst_visualizers_d_split\integerdef\c_syst_visualizer}
88
89\permanent\protected\def\syst_visualizers_v_split{\syst_visualizers_vsplit\c_syst_visualizer \s!attr \visualattribute \clf_getvisual {simplevbox}}
90\permanent\protected\def\syst_visualizers_t_split{\syst_visualizers_tsplit\c_syst_visualizer \s!attr \visualattribute \clf_getvisual {simplevtop}}
91\permanent\protected\def\syst_visualizers_d_split{\syst_visualizers_dsplit\c_syst_visualizer \s!attr \visualattribute \clf_getvisual {simplevtop}}
92
93\appendtoks
94    \ifcase\c_syst_visualizers_state\else
95        \syst_visualizers_speedup
96    \fi
97\to \everyshipout
98
99\appendtoks
100    \glet\syst_visualizers_speedup\relax
101    \global\t_syst_visualizers_optimize\emptytoks
102\to \t_syst_visualizers_optimize
103
104\def\syst_visualizers_speedup{\expand\t_syst_visualizers_optimize}
105
106% \appendtoks
107%     \enforced\global\protected\edef\ruledhbox   {\syst_visualizers_hbox    attr \visualattribute \number\clf_getvisual{simplehbox} }
108%     \enforced\global\protected\edef\ruledhpack  {\syst_visualizers_hpack   attr \visualattribute \number\clf_getvisual{simplehbox} }
109%     \enforced\global\protected\edef\ruledvbox   {\syst_visualizers_vbox    attr \visualattribute \number\clf_getvisual{simplevbox} }
110%     \enforced\global\protected\edef\ruledvpack  {\syst_visualizers_vpack   attr \visualattribute \number\clf_getvisual{simplevbox} }
111%     \enforced\global\protected\edef\ruledvtop   {\syst_visualizers_vtop    attr \visualattribute \number\clf_getvisual{simplevtop} }
112%     \enforced\global\protected\edef\ruledtpack  {\syst_visualizers_tpack   attr \visualattribute \number\clf_getvisual{simplevtop} }
113%     \enforced\global\protected\edef\ruledvcenter{\syst_visualizers_vcenter attr \visualattribute \number\clf_getvisual{simplevbox} }
114% \to \t_syst_visualizers_optimize
115
116\permanent\tolerant\protected\def\showmakeup[#1]%
117  {\ifarguments
118     \clf_setvisual{makeup}%
119   \else
120     \clf_setvisual{#1}%
121   \fi}
122
123\permanent\protected\def\showallmakeup    {\clf_setvisual{all}\showstruts}
124\permanent\protected\def\showboxes        {\clf_setvisual{boxes}}
125\permanent\protected\def\showglyphs       {\clf_setvisual{glyph}}
126\permanent\protected\def\showfontkerns    {\clf_setvisual{fontkern}}
127\permanent\protected\def\showfontitalics  {\clf_setvisual{italic}}
128\permanent\protected\def\showglyphdata    {\showglyphs\showfontkerns\showfontitalics}
129\permanent\protected\def\showfontexpansion{\clf_setvisual{expansion}}
130
131% lmmonoltcond10regular 4pt
132
133\permanent\tolerant\protected\def\setvisualizerfont[#1]% somename at 4pt
134  {\begingroup
135   \ifempty{#1}%
136     \definedfont[Mono at 4pt]%
137   \else
138     \definedfont[#1]%
139   \fi
140   \clf_setvisualfont\fontid\font
141   \endgroup}
142
143\def\syst_v_p_indeed#1%
144  {\setbox\scratchbox\hpack{\visualizerfont#1}}
145
146\def\syst_v_p
147  {\definefrozenfont[visualizerfont][lmmonoltcond10regular @ 4pt]%
148   \let\syst_v_p\syst_v_p_indeed
149   \syst_v_p_indeed}
150
151\permanent\protected\def\resetvisualizers
152  {\c_attr_visual\attributeunsetvalue}
153
154%D New (these might also be a visualizers):
155
156% \definecolor[f:r:t][a=1,t=.25,r=1]
157% \definecolor[f:g:t][a=1,t=.25,g=1]
158% \definecolor[f:b:t][a=1,t=.25,b=1]
159% \definecolor[f:c:t][a=1,t=.25,c=1]
160% \definecolor[f:m:t][a=1,t=.25,m=1]
161% \definecolor[f:y:t][a=1,t=.25,y=1]
162% \definecolor[f:k:t][a=1,t=.25,s=0]
163
164\permanent\protected\def\filledhboxr{\node_backgrounds_boxes_add\hbox[f:r:t]}
165\permanent\protected\def\filledhboxg{\node_backgrounds_boxes_add\hbox[f:g:t]}
166\permanent\protected\def\filledhboxb{\node_backgrounds_boxes_add\hbox[f:b:t]}
167\permanent\protected\def\filledhboxc{\node_backgrounds_boxes_add\hbox[f:c:t]}
168\permanent\protected\def\filledhboxm{\node_backgrounds_boxes_add\hbox[f:m:t]}
169\permanent\protected\def\filledhboxy{\node_backgrounds_boxes_add\hbox[f:y:t]}
170\permanent\protected\def\filledhboxk{\node_backgrounds_boxes_add\hbox[f:k:t]}
171
172%D Overload:
173
174\protected\def\spac_struts_vide_hbox
175  {\hbox attr \visualattribute \clf_getvisual{strut} }
176
177\appendtoks
178    \normalexpanded{\protected\xdef\spac_struts_vide_hbox\expandafter{\spac_struts_vide_hbox}}%
179\to \t_syst_visualizers_optimize
180
181%D For manuals:
182
183\permanent\protected\def\markfonts#1%
184  {\dontleavehmode
185   \begingroup
186   \setbox\scratchbox\hbox{\getbuffer}%
187   \clf_markvisualfonts\scratchbox
188   \unhbox\scratchbox
189   \endgroup}
190
191% As demo:
192%
193% \startbuffer
194%     \hbox {\raise1cm\hbox{raised} normal \lower1cm\hbox{lowered}}
195%     \blank
196%     \moveleft1cm\hbox{left}
197%     \blank
198%     \hbox{normal}
199%     \blank
200%     \moveright1cm\hbox{right}
201%     \blank
202% \stopbuffer
203%
204% \start \showboxes \getbuffer \stop \blank[4*big] \getbuffer
205%
206% \startbuffer
207%     \moveleft1cm\vbox{left}
208%     \blank
209%     \vbox{normal}
210%     \blank
211%     \moveright1cm\vbox{right}
212%     \blank
213% \stopbuffer
214%
215% \start \showboxes \getbuffer \stop \blank[4*big] \getbuffer
216
217%D We keep this one:
218
219\permanent\protected\def\dontinterfere
220  {\reseteverypar
221   \parindent\zeropoint
222   \parskip  \zeroskip
223   \leftskip \zeroskip
224   \rightskip\zeroskip
225   \relax}
226
227%D We kept these for a while:
228
229% \aliased\let\ruledhss       \hss
230% \aliased\let\ruledhfil      \hfil
231% \aliased\let\ruledhfill     \hfill
232% \aliased\let\ruledhfilll    \hfilll
233% \aliased\let\ruledhfilneg   \hfilneg
234% \aliased\let\ruledhfillneg  \hfillneg
235% \aliased\let\ruledhfilllneg \hfilllneg
236% \aliased\let\ruledvss       \vss
237% \aliased\let\ruledvfil      \vfil
238% \aliased\let\ruledvfill     \vfill
239% \aliased\let\ruledvfilll    \vfilll
240% \aliased\let\ruledvfilneg   \vfilneg
241% \aliased\let\ruledvfillneg  \vfillneg
242% \aliased\let\ruledvfilllneg \vfilllneg
243% \aliased\let\ruledhskip     \hskip
244% \aliased\let\ruledvskip     \vskip
245% \aliased\let\ruledkern      \kern
246% \aliased\let\ruledhglue     \hglue
247% \aliased\let\ruledvglue     \vglue
248% \aliased\let\ruledmkern     \mkern
249% \aliased\let\ruledmskip     \mskip
250% \aliased\let\ruledpenalty   \penalty
251
252\protect \endinput
253