From 378b2ba55f417b42b93d9edb06dd4d007872f8b9 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 8 Nov 2019 03:00:45 +0000 Subject: CTAN sync 201911080300 --- macros/luatex/generic/luavlna/README.md | 2 +- macros/luatex/generic/luavlna/luavlna-doc.pdf | Bin 88997 -> 91288 bytes macros/luatex/generic/luavlna/luavlna-doc.tex | 17 +++++++++++- macros/luatex/generic/luavlna/luavlna.lua | 38 +++++++++++++++++++++++--- macros/luatex/generic/luavlna/luavlna.sty | 14 +++++++++- macros/luatex/generic/luavlna/luavlna.tex | 1 + 6 files changed, 65 insertions(+), 7 deletions(-) (limited to 'macros/luatex/generic/luavlna') diff --git a/macros/luatex/generic/luavlna/README.md b/macros/luatex/generic/luavlna/README.md index ae6eb4cfb8..dab00a6ca0 100644 --- a/macros/luatex/generic/luavlna/README.md +++ b/macros/luatex/generic/luavlna/README.md @@ -1,4 +1,4 @@ -# Luavlna, version v0.1e, 2019-10-29 +# Luavlna, version v0.1f, 2019-11-06 # Introduction diff --git a/macros/luatex/generic/luavlna/luavlna-doc.pdf b/macros/luatex/generic/luavlna/luavlna-doc.pdf index 177832d3f4..e62a9bd1d4 100644 Binary files a/macros/luatex/generic/luavlna/luavlna-doc.pdf and b/macros/luatex/generic/luavlna/luavlna-doc.pdf differ diff --git a/macros/luatex/generic/luavlna/luavlna-doc.tex b/macros/luatex/generic/luavlna/luavlna-doc.tex index f8c95a291c..eb39ca3ac9 100644 --- a/macros/luatex/generic/luavlna/luavlna-doc.tex +++ b/macros/luatex/generic/luavlna/luavlna-doc.tex @@ -130,6 +130,19 @@ It is also possible to use the package with Lua\LaTeX, just use in the preamble. +\section{Package options} +The \verb|luavlna| package recognizes the following options + +\begin{description} + \item[\texttt{noprocess}] -- disable the automatic document processing. + \item[\texttt{noinitials}] -- disable processing of the initials. + \item[\texttt{nounits}] -- disable processing of the SI units. + \item[\texttt{nopredegrees}] -- disable processing of the the academic degrees before names. + \item[\texttt{nosufdegrees}] -- disable processing of the the academic degrees after names. + \item[\texttt{debug}] -- enable the debugging mode. + \item[\texttt{defaults}] -- load default settings. Enabled by default. +\end{description} + \section{Commands} \begin{mycode} @@ -222,14 +235,16 @@ To resume processing, use \cmd{\preventsingleon} \end{mycode} -You can also disable units and degrees processing: +You can also disable initials, units and degrees processing: \begin{mycode} + \cmd{\noinitials}\\ \cmd{\nounits}\\ \cmd{\nopredegrees}\\ \cmd{\nosufdegrees} \end{mycode} + \subsection{Debugging commands} \begin{mycode} \cmd{\preventsingledebugon}\par diff --git a/macros/luatex/generic/luavlna/luavlna.lua b/macros/luatex/generic/luavlna/luavlna.lua index dea4c052eb..d1eaa6f004 100644 --- a/macros/luatex/generic/luavlna/luavlna.lua +++ b/macros/luatex/generic/luavlna/luavlna.lua @@ -14,6 +14,7 @@ local glue_id = node.id "glue" local glyph_id = node.id "glyph" local hlist_id = node.id "hlist" local vlist_id = node.id "vlist" +local penalty_id = node.id "penalty" local math_id = node.id "math" local period_char = string.byte(".") @@ -224,6 +225,7 @@ local function prevent_single_letter (head) local word = "" local no_predegrees = M.no_predegrees local no_sufdegrees = M.no_sufdegrees + local no_initials = M.no_initials local in_math = false while head do local id = head.id @@ -284,7 +286,7 @@ local function prevent_single_letter (head) space = false -- handle initials -- uppercase letter followed by period (code 46) - elseif init and head.id == glyph_id and head.char == period_char and nextn.id == glue_id and utf_len(word) == 1 then + elseif no_initials~=true and init and head.id == glyph_id and head.char == period_char and nextn.id == glue_id and utf_len(word) == 1 then head = insert_penalty(head) elseif head.id == glyph_id then local char = utf_char(head.char) @@ -305,20 +307,48 @@ local function prevent_single_letter (head) return true end +local hyphenate_langs = {} +local hyphenchar = string.byte("-") +-- don't break if the next or previous char is hyphen, in order to support ligaturing of dashes +local is_hyphen_ligature = function(n) + local next_node = n.next + -- split_hyphens code + if next_node and next_node.id == glyph_id and next_node.char == hyphenchar then + return true + end + local prev_node = n.prev + if prev_node and prev_node.id == glyph_id and prev_node.char == hyphenchar then + return true + end + return false +end + +-- detect if the current character is a hyphen +local function is_breakable_hyphen(n) + return n.id == glyph_id and hyphenate_langs[n.lang] and n.char == hyphenchar +end + +-- don't process hyphens if the next node is penalty +-- necessary to support \nobreakdash +local function is_next_penalty(n) + local next_node = n.next + if next_node and next_node.id == penalty_id then + return true + end +end + -- Enable hyphenation of words that contain hyphens -- and repeating of the explicit hyphen on a new line when -- the hyphen is hyphenated -- It should be used in the `hyphenate` callback -- based on ShreewatsaR's code from: -- https://tex.stackexchange.com/a/417883/2891 -local hyphenate_langs = {} local break_hyphens = function(head, tail) - local hyphenchar = string.byte("-") local glyph_id = node.id("glyph") local n = head while n do local skip = node.has_attribute(n, M.preventsingleid) - if skip ~= 1 and n.id == glyph_id and hyphenate_langs[n.lang] and n.char == hyphenchar then + if skip ~= 1 and is_breakable_hyphen(n) and not is_next_penalty(n) and not is_hyphen_ligature(n) then -- Insert an infinite penalty before, and a zero-width glue node after, the hyphen. -- Like writing "\nobreak-\hspace{0pt}" or equivalently "\penalty10000-\hskip0pt" local p = node.new(node.id('penalty')) diff --git a/macros/luatex/generic/luavlna/luavlna.sty b/macros/luatex/generic/luavlna/luavlna.sty index 48db36b5f4..c620b670d1 100644 --- a/macros/luatex/generic/luavlna/luavlna.sty +++ b/macros/luatex/generic/luavlna/luavlna.sty @@ -1,4 +1,6 @@ -\ProvidesPackage{luavlna}[2017/09/30 luavlna] +\ProvidesPackage{luavlna}[2019/10/30 luavlna] + +\RequirePackage{kvoptions} \def\nosingledefaults{\relax} \input luavlna @@ -32,7 +34,16 @@ \fi% } +\DeclareVoidOption{noinitials}{\noinitials} +\DeclareVoidOption{nounits}{\nounits} +\DeclareVoidOption{nopredegrees}{\nopredegrees} +\DeclareVoidOption{nosufdegrees}{\nosufdegrees} +\DeclareVoidOption{noprocess}{\preventsingleoff} +\DeclareVoidOption{debug}{\preventsingledebugon} +\DeclareBoolOption[true]{defaults} +\ProcessKeyvalOptions* +\ifluavlna@defaults \AtBeginDocument{% \singlechars{czech}{AIiVvOoUuSsZzKk} \singlechars{slovak}{AIiVvOoUuSsZzKk} @@ -40,4 +51,5 @@ \enablesplithyphens{czech} \enablesplithyphens{slovak} } +\fi \endinput diff --git a/macros/luatex/generic/luavlna/luavlna.tex b/macros/luatex/generic/luavlna/luavlna.tex index 5159fbe5b5..ab47b8d6fc 100644 --- a/macros/luatex/generic/luavlna/luavlna.tex +++ b/macros/luatex/generic/luavlna/luavlna.tex @@ -112,6 +112,7 @@ end \def\nopredegrees{\directlua{luavlna.no_predegrees = true}} \def\nosufdegrees{\directlua{luavlna.no_sufdegrees = true}} \def\nounits{\directlua{luavlna.no_unit = true}} +\def\noinitials{\directlua{luavlna.no_initials = true}} \ifdefined\nosingledefaults\else \singlechars{czech}{AIiVvOoUuSsZzKk} -- cgit v1.2.3