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