1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
%D \module
%D [ file=t-lua-widow-control,
%D version=2.1.1, %%version
%D title=lua-widow-control,
%D subtitle=\ConTeXt module for lua-widow-control,
%D author=Max Chernoff,
%D date=2022-05-20, %%dashdate
%D copyright=Max Chernoff,
%D license=MPL-2.0+,
%D url=https://github.com/gucci-on-fleek/lua-widow-control]
\startmodule[lua-widow-control]
\unprotect
\installnamespace{lwc}
\installcommandhandler \????lwc {lwc} \????lwc
\newdimen\lwc_emergency_stretch
\newcount\lwc_max_cost
\appendtoks
\lwc_emergency_stretch=\lwcparameter{emergencystretch}
\doifelse{\lwcparameter{\c!state}}\v!start{
\lwc_enable
}{
\lwc_disable
}
\lwc_debug{\lwcparameter{debug}}
\lwc_nobreak{\lwcparameter{nobreak}}
\lwc_max_cost=\lwcparameter{maxcost}
% We can't just set the penalties because they will be reset automatically
% at \\starttext.
\startsetups[*default]
\directsetup{*reset}
\clubpenalty=\lwcparameter{orphanpenalty}
\widowpenalty=\lwcparameter{widowpenalty}
\displaywidowpenalty=\lwcparameter{widowpenalty}
\brokenpenalty=\lwcparameter{brokenpenalty}
\stopsetups
\startsetups[grid][*default]
\directsetup{*reset}
\clubpenalty=\lwcparameter{orphanpenalty}
\widowpenalty=\lwcparameter{widowpenalty}
\displaywidowpenalty=\lwcparameter{widowpenalty}
\brokenpenalty=\lwcparameter{brokenpenalty}
\stopsetups
\setups[*default]
\to\everysetuplwc
\ctxloadluafile{lua-widow-control}
\setuplwc[
emergencystretch=3em,
\c!state=\v!start,
debug=\v!stop,
orphanpenalty=1,
widowpenalty=1,
brokenpenalty=1,
nobreak=keep,
maxcost=2147483647,
]
% Here, we enable font expansion/contraction. It isn't strictly necessary for
% \lwc/'s functionality; however, it is required for the
% lengthened paragraphs to not have terrible spacing.
\definefontfeature[default][default][expansion=quality]
\setupalign[hz]
% Expansion of some parts of the document, such as section headings, is quite
% undesirable, so we'll disable \lwc/ for certain commands.
% We should only reenable \lwc/ at the end if it was already enabled.
\newcount\lwc_disable_count
\define\lwc_patch_pre{%
\lwc_if_enabled%
\advance\lwc_disable_count by 1%
\setuplwc[\c!state=\v!stop]%
\fi%
}
\define\lwc_patch_post{
\ifnum\lwc_disable_count>0\relax%
\setuplwc[\c!state=\v!start]%
\advance\lwc_disable_count by -1%
\fi%
}
\prependtoks\lwc_patch_pre\to\everybeforesectionheadhandle % Sectioning
\prependtoks\lwc_patch_post\to\everyaftersectionheadhandle
% Make the commands public
\let\iflwc=\lwc_if_enabled
\protect
\stopmodule
|