summaryrefslogtreecommitdiff
path: root/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl')
-rw-r--r--macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl171
1 files changed, 171 insertions, 0 deletions
diff --git a/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl b/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
new file mode 100644
index 0000000000..b4d35eb15f
--- /dev/null
+++ b/macros/context/contrib/context-lua-widow-control/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
@@ -0,0 +1,171 @@
+%D \module
+%D [ file=t-lua-widow-control,
+%D version=3.0.0, %%version
+%D title=lua-widow-control,
+%D subtitle=\ConTeXt module for lua-widow-control,
+%D author=Max Chernoff,
+%D date=2022-11-22, %%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
+
+% Preliminaries
+\installnamespace{lwc}
+
+\installswitchcommandhandler \????lwc {lwc} \????lwc
+
+% Set up the options
+\newdimen\lwc_emergency_stretch
+\newdimen\lwc_draft_offset
+\newcount\lwc_max_cost
+
+\starttexdefinition lwc_set_parameters
+ \lwc_emergency_stretch=\lwcparameter{emergencystretch}
+ \lwc_draft_offset=\lwcparameter{draftoffset}
+
+ \doifelse{\lwcparameter{\c!state}}\v!start{
+ \lwc_enable
+ }{
+ \lwc_disable
+ }
+
+ \lwc_debug{\lwcparameter{debug}}
+
+ \doif{\lwcparameter{draft}}\v!start{
+ \setlwcparameter{showcosts}{\v!start}
+ \setlwcparameter{showcolours}{\v!start}
+ }
+
+ \doif{\lwcparameter{draft}}\v!stop{
+ \setlwcparameter{showcosts}{\v!stop}
+ \setlwcparameter{showcolours}{\v!stop}
+ }
+
+ \lwc_show_costs{\lwcparameter{showcosts}}
+ \lwc_show_colours{\lwcparameter{showcolours}}
+
+ \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]
+\stoptexdefinition
+
+% Load the main Lua file
+\ctxloadluafile{lua-widow-control}
+
+% Define the presets
+\definelwc[default][
+ emergencystretch=3em,
+ maxcost=2147483647,
+ nobreak=keep,
+ orphanpenalty=1,
+ widowpenalty=1,
+ brokenpenalty=1,
+]
+
+\definelwc[strict][
+ emergencystretch=0pt,
+ maxcost=5000,
+ nobreak=warn,
+ widowpenalty=1,
+ orphanpenalty=1,
+ brokenpenalty=1,
+]
+
+\definelwc[balanced][
+ emergencystretch=1em,
+ maxcost=10000
+ nobreak=keep,
+ widowpenalty=500,
+ orphanpenalty=500,
+ brokenpenalty=500,
+]
+
+% Set up the default options
+\setuplwc[
+ \c!state=\v!start,
+ debug=\v!stop,
+ draft=,
+ showcosts=\v!stop,
+ showcolours=\v!stop,
+ draftoffset=1in,
+]
+
+\setuplwc[default]
+
+\appendtoks
+ \ifcase\lwcsetupmode
+ % can't happen
+ \or % \setuplwc[name][key=value]
+ \ifx\previouslwc\currentlwc
+ \let\currentlwc\currentlwc
+ \lwc_set_parameters
+ \fi
+ \or % \setuplwc[key=value]
+ \let\currentlwc\previouslwc
+ \lwc_set_parameters
+ \or % \setuplwc[name]
+ \glet\currentlwc\currentlwc % global
+ \lwc_set_parameters
+ \fi
+\to \everysetuplwc
+
+\lwc_set_parameters
+
+% 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%
+}
+
+% Add the default patches
+\prependtoks\lwc_patch_pre\to\everybeforesectionheadhandle % Sectioning
+\prependtoks\lwc_patch_post\to\everyaftersectionheadhandle
+
+% Make the commands public
+\let\iflwc=\lwc_if_enabled
+
+\protect
+\stopmodule