summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-02-16 22:45:21 +0000
committerKarl Berry <karl@freefriends.org>2022-02-16 22:45:21 +0000
commit9a2e259625722487a887ac1c24e4aaec11e718fe (patch)
treea16e76927917d86381655c60cc32b217267a151f
parent28da595db46ec1bef5fdb9a83d37bc5d9b98db76 (diff)
lua-widow-control (15feb22)
git-svn-id: svn://tug.org/texlive/trunk@62050 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/luatex/lua-widow-control/README.md2
-rw-r--r--Master/texmf-dist/doc/luatex/lua-widow-control/lua-widow-control.pdfbin318979 -> 323185 bytes
-rw-r--r--Master/texmf-dist/source/luatex/lua-widow-control/lwc-documentation.tex2
-rw-r--r--Master/texmf-dist/source/luatex/lua-widow-control/lwc-sample.tex2
-rw-r--r--Master/texmf-dist/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl4
-rw-r--r--Master/texmf-dist/tex/lualatex/lua-widow-control/lua-widow-control.sty21
-rw-r--r--Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.lua46
-rw-r--r--Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.tex9
8 files changed, 61 insertions, 25 deletions
diff --git a/Master/texmf-dist/doc/luatex/lua-widow-control/README.md b/Master/texmf-dist/doc/luatex/lua-widow-control/README.md
index 07c24e3c59b..1f328f56a4d 100644
--- a/Master/texmf-dist/doc/luatex/lua-widow-control/README.md
+++ b/Master/texmf-dist/doc/luatex/lua-widow-control/README.md
@@ -42,4 +42,4 @@ Lua-widow-control is licensed under the [_Mozilla Public License_, version 2.0](
Please note that a compiled document is absolutely **not** considered to be an "Executable Form" as defined by the MPL. The use of lua-widow-control in a document does not place **any** obligations on the document's author or distributors. The MPL and CC-BY-SA licenses **only** apply to you if you distribute the lua-widow-control source code or documentation.
---
-_v1.1.4 (2022-02-04)_ <!--%%version %%date-->
+_v1.1.5 (2022-02-15)_ <!--%%version %%date-->
diff --git a/Master/texmf-dist/doc/luatex/lua-widow-control/lua-widow-control.pdf b/Master/texmf-dist/doc/luatex/lua-widow-control/lua-widow-control.pdf
index 5ee7f9995ef..ecb0ae15e98 100644
--- a/Master/texmf-dist/doc/luatex/lua-widow-control/lua-widow-control.pdf
+++ b/Master/texmf-dist/doc/luatex/lua-widow-control/lua-widow-control.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/luatex/lua-widow-control/lwc-documentation.tex b/Master/texmf-dist/source/luatex/lua-widow-control/lwc-documentation.tex
index bf0bf8877bf..564f51618a5 100644
--- a/Master/texmf-dist/source/luatex/lua-widow-control/lwc-documentation.tex
+++ b/Master/texmf-dist/source/luatex/lua-widow-control/lwc-documentation.tex
@@ -37,7 +37,7 @@
\startdocument[
title=lua-widow-control,
author=Max Chernoff,
- version=1.1.4, %%version
+ version=1.1.5, %%version
github=https://github.com/gucci-on-fleek/lua-widow-control,
ctan=https://www.ctan.org/pkg/lua-widow-control,
]
diff --git a/Master/texmf-dist/source/luatex/lua-widow-control/lwc-sample.tex b/Master/texmf-dist/source/luatex/lua-widow-control/lwc-sample.tex
index fc773ea11e7..143f3cbc8c7 100644
--- a/Master/texmf-dist/source/luatex/lua-widow-control/lwc-sample.tex
+++ b/Master/texmf-dist/source/luatex/lua-widow-control/lwc-sample.tex
@@ -34,6 +34,8 @@
\setupalign[hz,hanging,tolerant]
+ \setuplanguage[en][spacing=packed]
+
\starttext
\Lwc/ can remove most widows and orphans from a document, \emph{without} stretching any glue or shortening any pages.
diff --git a/Master/texmf-dist/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl b/Master/texmf-dist/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
index 436eb880cb3..b38d6eda018 100644
--- a/Master/texmf-dist/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
+++ b/Master/texmf-dist/tex/context/third/lua-widow-control/t-lua-widow-control.mkxl
@@ -1,10 +1,10 @@
%D \module
%D [ file=t-lua-widow-control,
-%D version=1.1.4, %%version
+%D version=1.1.5, %%version
%D title=lua-widow-control,
%D subtitle=\ConTeXt module for lua-widow-control,
%D author=Max Chernoff,
-%D date=2022-02-04, %%date
+%D date=2022-02-15, %%date
%D copyright=Max Chernoff,
%D license=MPL-2.0+,
%D url=https://github.com/gucci-on-fleek/lua-widow-control]
diff --git a/Master/texmf-dist/tex/lualatex/lua-widow-control/lua-widow-control.sty b/Master/texmf-dist/tex/lualatex/lua-widow-control/lua-widow-control.sty
index 81dd969d8da..1be00709bc8 100644
--- a/Master/texmf-dist/tex/lualatex/lua-widow-control/lua-widow-control.sty
+++ b/Master/texmf-dist/tex/lualatex/lua-widow-control/lua-widow-control.sty
@@ -5,7 +5,14 @@
\NeedsTeXFormat{LaTeX2e}[2015/01/01] % Formats built after 2015 include \LuaTeX{}Base
\ProvidesPackage{lua-widow-control}%
- [2022/02/04 v1.1.4] %%version %%date
+ [2022/02/15 v1.1.5] %%version %%date
+
+\ifdefined\directlua\else
+ \PackageError{lua-widow-control}{%
+ LuaTeX is required for this package.\MessageBreak
+ Make sure to compile with `lualatex'%
+ }{}
+\fi
\clubpenalty=1
\widowpenalty=1
@@ -22,7 +29,15 @@
% 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.
-\RequirePackage[final]{microtype}
+\RequirePackage{etoolbox}
+\AtEndPreamble{
+ \@ifpackageloaded{microtype}{}{ % Only load if not already loaded
+ \RequirePackage[
+ final,
+ activate={true,nocompatibility}
+ ]{microtype}
+ }
+}
% Define \TeX{} wrappers for Lua functions
\newcommand{\lwcenable}{\directlua{lwc.enable_callbacks()}}
@@ -34,8 +49,6 @@
% Expansion of some parts of the document, such as section headings, is quite
% undesirable, so we'll disable \lwc/ for certain commands.
-\RequirePackage{etoolbox}
-
\newcommand{\lwc@patch@warning}[1]{\PackageWarning{lua-widow-control}{%
Patching the \protect#1 command failed%
}}
diff --git a/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.lua b/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.lua
index 9a8b2efa781..9304bf9a4d1 100644
--- a/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.lua
+++ b/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.lua
@@ -59,14 +59,16 @@ assert(lwc.context or luatexbase, [[
]]
if lwc.context then
lwc.warning = logs.reporter("module", lwc.name)
+ lwc.info = logs.reporter("module", lwc.name)
lwc.attribute = attributes.public(lwc.name)
lwc.contrib_head = 'contributehead' -- For \LuaMetaTeX{}
lwc.stretch_order = "stretchorder"
+ lwc.pagenum = function () return tex.count["realpageno"] end
elseif lwc.plain or lwc.latex then
luatexbase.provides_module {
name = lwc.name,
- date = "2022/02/04", --%%date
- version = "1.1.4", --%%version
+ date = "2022/02/15", --%%date
+ version = "1.1.5", --%%version
description = [[
This module provides a LuaTeX-based solution to prevent
@@ -76,9 +78,11 @@ elseif lwc.plain or lwc.latex then
]],
}
lwc.warning = function(str) luatexbase.module_warning(lwc.name, str) end
+ lwc.info = function(str) luatexbase.module_info(lwc.name, str) end
lwc.attribute = luatexbase.new_attribute(lwc.name)
lwc.contrib_head = 'contrib_head' -- For \LuaTeX{}
lwc.stretch_order = "stretch_order"
+ lwc.pagenum = function () return tex.count[0] end
else -- uh oh
error [[
Unsupported format.
@@ -222,20 +226,28 @@ end
---
--- Sometimes the node list can form a loop. Since there is no last element
--- of a looped linked-list, the `last()` function will never terminate. This
---- function provides a "safe" version of the `last()` function that returns
---- `nil` if the list is circular.
+--- function provides a "safe" version of the `last()` function that will break
+--- the loop at the end if the list is circular.
local function safe_last(head)
local ids = {}
+ local prev
while head.next do
local id = node.is_node(head) -- Returns the internal node id
if ids[id] then
- lwc.warning("Circular node list detected!")
- return nil
+ lwc.warning [[Circular node list detected!
+This should never happen. I'll try and recover, but your output may be
+corrupted. As a workaround, disable lua-widow-control for the
+affected paragraph or change the page breaks in your document.]]
+
+ prev.next = nil
+ return prev
end
ids[id] = true
+ head.prev = prev
+ prev = head
head = head.next
end
@@ -265,6 +277,8 @@ function lwc.remove_widows(head)
return head
end
+ lwc.info("Widow/orphan detected. Attempting to remove.")
+
local head_save = head -- Save the start of the `head` linked-list
--[[
@@ -296,22 +310,15 @@ function lwc.remove_widows(head)
while head do
-- Insert the start of the replacement paragraph
if has_attribute(head, lwc.attribute, paragraph_index) then
- local current = head
- head.prev.next = target_node
-
- -- Abort if we've created a loop
- if not safe_last(target_node) then
- head.prev.next = current
- lwc.warning("Widow/Orphan NOT removed!")
- break
- end
+ safe_last(target_node) -- Remove any loops
+ head.prev.next = target_node
clear_flag = true
end
-- Insert the end of the replacement paragraph
if has_attribute(head, lwc.attribute, -1 * paragraph_index) then
- last(target_node).next = head.next
+ safe_last(target_node).next = head.next
clear_flag = false
end
@@ -324,6 +331,13 @@ function lwc.remove_widows(head)
last(head).prev.prev.next = nil
-- Move the last line to the next page
tex.lists[lwc.contrib_head] = last_line
+ lwc.info(
+ "Widow/orphan successfully removed at paragraph "
+ .. paragraph_index
+ .. " on page "
+ .. lwc.pagenum()
+ .. "."
+ )
end
if clear_flag then
diff --git a/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.tex b/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.tex
index a9b236f966b..efab23b8b4b 100644
--- a/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.tex
+++ b/Master/texmf-dist/tex/luatex/lua-widow-control/lua-widow-control.tex
@@ -3,7 +3,14 @@
% SPDX-License-Identifier: MPL-2.0+
% SPDX-FileCopyrightText: 2021 Max Chernoff
-\wlog{lua-widow-control v1.1.4} %%version
+\wlog{lua-widow-control v1.1.5} %%version
+
+\ifx\directlua\undefined
+ \errmessage{%
+ LuaTeX is required for this package.
+ Make sure to compile with `luatex'%
+ }
+\fi
\input ltluatex % \LuaTeX{}Base