typo-bld.mkxl /size: 2806 b    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=typo-bld, % was node-par,
3%D        version=2008.09.30,
4%D          title=\CONTEXT\ Typesetting Macros,
5%D       subtitle=Paragraph Building,
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\writestatus{loading}{ConTeXt Typesetting Macros / Paragraph Building}
15
16%D This is very experimental, undocumented, subjected to changes, etc. just as
17%D the underlying interfaces. But at least it's cleaned as part of the status-mkiv
18%D cleanup.
19
20% \enabletrackers[builders.hpack.overflow]
21% \enabletrackers[builders.hpack.quality]
22% \enabletrackers[builders.vpack.quality]
23
24% \startparbuilder[default]
25%     \input tufte \par
26%     \startparbuilder[oneline]
27%         \input tufte \par
28%     \stopparbuilder
29%     \input tufte \par
30% \stopparbuilder
31%
32% \startparbuilder[oneline]
33%     \dorecurse{100}{\input ward \par}
34% \stopparbuilder
35
36% \startluacode
37%     function builders.paragraphs.constructors.methods.preroll_a(head)
38%         local result, info = tex.linebreak(head)
39%         tex.prevdepth = info.prevdepth
40%         tex.prevgraf = info.prevgraf
41%         return result
42%     end
43%     function builders.paragraphs.constructors.methods.preroll_b(head)
44%         local result, info = tex.linebreak(nodes.nuts.copylist(head))
45%         return true
46%     end
47% \stopluacode
48%
49% \defineparbuilder[preroll_a]
50% \defineparbuilder[preroll_b]
51%
52% \starttext
53%     \setmainparbuilder[default]   \input tufte \par \input tufte \page
54%     \setmainparbuilder[preroll_a] \input tufte \par \input tufte \page
55%     \setmainparbuilder[preroll_b] \input tufte \par \input tufte \page
56% \stoptext
57
58\unprotect
59
60\registerctxluafile{typo-bld}{autosuffix}
61
62\definesystemattribute[parbuilder][public]
63
64\installcorenamespace {parbuilder}
65
66\permanent\protected\def\defineparbuilder [#1]{\clf_defineparbuilder{#1}}
67\permanent\protected\def\setmainparbuilder[#1]{\clf_setparbuilder{#1}}
68
69\permanent\protected\def\startparbuilder  [#1]{\ifhmode\par\fi\clf_startparbuilder{#1}}
70\permanent\protected\def\stopparbuilder       {\ifhmode\par\fi\clf_stopparbuilder}
71
72%D There is no high level interface because after all implementing a linebreaker
73%D is not something that the average user will do.
74
75\defineparbuilder[default] % just for testing
76\defineparbuilder[oneline] % just for testing
77\defineparbuilder[basic]   % just for testing
78
79%D This hooks in otr so we need to pickup.
80
81\permanent\protected\def\enableparbuilders {\clf_enableparbuilder } % can be public implementor
82\permanent\protected\def\disableparbuilders{\clf_disableparbuilder} % can be public implementor
83
84\protect \endinput
85