diff options
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.mkxl | 171 |
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 |