summaryrefslogtreecommitdiff
path: root/macros/luatex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-03-30 03:01:43 +0000
committerNorbert Preining <norbert@preining.info>2023-03-30 03:01:43 +0000
commit0a426619b66178dd2257f1ece60ff80f86f40e88 (patch)
treefb35be40eb794817645905b4813c091d5f75dda9 /macros/luatex
parent395caca342df230d7d98a658477b7f54c3ee5845 (diff)
CTAN sync 202303300301
Diffstat (limited to 'macros/luatex')
-rw-r--r--macros/luatex/generic/luavlna/README.md2
-rw-r--r--macros/luatex/generic/luavlna/luavlna-doc.pdfbin92320 -> 92324 bytes
-rw-r--r--macros/luatex/generic/luavlna/luavlna.lua40
-rw-r--r--macros/luatex/generic/luavlna/luavlna.sty7
-rw-r--r--macros/luatex/generic/luavlna/luavlna.tex5
5 files changed, 43 insertions, 11 deletions
diff --git a/macros/luatex/generic/luavlna/README.md b/macros/luatex/generic/luavlna/README.md
index df27afa648..870552cd0f 100644
--- a/macros/luatex/generic/luavlna/README.md
+++ b/macros/luatex/generic/luavlna/README.md
@@ -1,4 +1,4 @@
-# Luavlna, version 0.1j, 2022-08-15
+# Luavlna, version 0.1k, 2023-03-28
# Introduction
diff --git a/macros/luatex/generic/luavlna/luavlna-doc.pdf b/macros/luatex/generic/luavlna/luavlna-doc.pdf
index 175e8032d0..900d6c3714 100644
--- a/macros/luatex/generic/luavlna/luavlna-doc.pdf
+++ b/macros/luatex/generic/luavlna/luavlna-doc.pdf
Binary files differ
diff --git a/macros/luatex/generic/luavlna/luavlna.lua b/macros/luatex/generic/luavlna/luavlna.lua
index f13fe6bd59..5bbe2c060b 100644
--- a/macros/luatex/generic/luavlna/luavlna.lua
+++ b/macros/luatex/generic/luavlna/luavlna.lua
@@ -5,10 +5,12 @@
-- 1. It is possible to turn this functionality only for some letters
-- 2. Code now works even for single letters after brackets etc.
--
+--
+
local M = {}
-local utf_match = unicode.utf8.match
-local utf_char = unicode.utf8.char
-local utf_len = unicode.utf8.len
+-- local utf_match = unicode.utf8.match
+local utf_char = utf8.char -- unicode.utf8.char
+local utf_len = utf8.len -- unicode.utf8.len
local glue_id = node.id "glue"
local glyph_id = node.id "glyph"
@@ -18,10 +20,36 @@ local penalty_id = node.id "penalty"
local math_id = node.id "math"
local period_char = string.byte(".")
+-- we must process only glues with the spaceskip or xspaceskip subtypes
+local allowed_space_names = {spaceskip = true, xspaceskip = true}
+local allowed_space_types = {}
+local glue_subtypes = node.subtypes("glue")
+-- convert allowed subtypes names to numbers used in nodes
+for k,v in pairs(glue_subtypes) do
+ if allowed_space_names[v] then
+ allowed_space_types[k] = true
+ end
+end
+
+local unicode_alphas = "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05270531-055605590561-058705D0-05EA05F0-05F20620-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280840-085808A008A2-08AC0904-0939093D09500958-09610971-09770979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10CF10CF20D05-0D0C0D0E-0D100D12-0D3A0D3D0D4E0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC-0EDF0F000F40-0F470F49-0F6C0F88-0F8C1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510C710CD10D0-10FA10FC-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1BBA-1BE51C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11CF51CF61D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209C21022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2CF22CF32D00-2D252D272D2D2D30-2D672D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31BA31F0-31FF3400-4DB54E00-9FCCA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78B-A78EA790-A793A7A0-A7AAA7F8-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDAAE0-AAEAAAF2-AAF4AB01-AB06AB09-AB0EAB11-AB16AB20-AB26AB28-AB2EABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC0030-0039"
+
+
+-- construct table with unicode alphas for later testing
+local alpha_tbl = {}
+for start, finish in unicode_alphas:gmatch("(....)-(....)") do
+ for i = tonumber(start, 16), tonumber(finish, 16) do
+ alpha_tbl[utf_char(i)] = true
+ end
+end
+
+
+
+
local alpha = string.char(37).."a" -- alpha class, entering
-- percent char directly caused error
local alphas = {}
-local match_char = function(x) return utf_match(x,alpha) end
+-- the following function is not used anymore
+-- local match_char = function(x) return utf_match(x,alpha) end
local match_table = function(x, chars)
local chars=chars or {}
return chars[x]
@@ -141,7 +169,7 @@ end
local is_alpha = function(c)
local status = alphas[c]
if not status then
- status = utf_match(c, alpha)
+ status = alpha_tbl[c]
alphas[c] = status
end
return status
@@ -267,7 +295,7 @@ local function prevent_single_letter (head)
end
end
if skip ~= 1 and not in_math then
- if id == glue_id then
+ if id == glue_id and allowed_space_types[head.subtype] then
if wasnumber then
if word ~= "" then
wasnumber = false
diff --git a/macros/luatex/generic/luavlna/luavlna.sty b/macros/luatex/generic/luavlna/luavlna.sty
index 31c5e6f284..f8af19876c 100644
--- a/macros/luatex/generic/luavlna/luavlna.sty
+++ b/macros/luatex/generic/luavlna/luavlna.sty
@@ -1,4 +1,9 @@
-\ProvidesPackage{luavlna}[2022-08-15 luavlna]
+\ProvidesPackage{luavlna}[2023-03-28 luavlna]
+
+\ifdefined\directlua\else
+\PackageWarning{luavlna}{Luavlna needs LuaLaTeX, aborting}
+\endinput
+\fi
\RequirePackage{kvoptions}
diff --git a/macros/luatex/generic/luavlna/luavlna.tex b/macros/luatex/generic/luavlna/luavlna.tex
index dd7415534d..e86df0f325 100644
--- a/macros/luatex/generic/luavlna/luavlna.tex
+++ b/macros/luatex/generic/luavlna/luavlna.tex
@@ -22,7 +22,6 @@ end
% By default, spaces for all single letters are inserted
% This can be modified with \singlechars macro
set_singlechars = function(lang,chars)
- local utf_gmatch = unicode.utf8.gmatch
% local langnumbers = languages.names
local langid = get_lang_id(lang)
if not langid then return nil, "Cannot find language number for: "..lang end
@@ -30,8 +29,8 @@ set_singlechars = function(lang,chars)
local singlechars = {}
local percent = string.char(37)
local alpha = percent .. "a"
- for char in utf_gmatch(chars,"("..alpha..")") do
- singlechars[char] = true
+ for pos, char in utf8.codes(chars) do
+ singlechars[utf8.char(char)] = true
end
luavlna.singlechars(langid,singlechars)
end