1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
--
-- This is file `lua-ul-patches-preserve-attr.lua',
-- generated with the docstrip utility.
--
-- The original source files were:
--
-- lua-ul.dtx (with options: `preserve-attr')
--
-- Copyright (C) 2020-2022 by Marcel Krueger
--
-- This file may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either
-- version 1.3c of this license or (at your option) any later
-- version. The latest version of this license is in:
--
-- http://www.latex-project.org/lppl.txt
--
-- and version 1.3 or later is part of all distributions of
-- LaTeX version 2005/12/01 or later.
local getfont = font.getfont
local direct = node.direct
local getattr = direct.getattributelist
local getid = direct.getid
local getpenalty = direct.getpenalty
local getprev = direct.getprev
local getwidth = direct.getwidth
local setattr = direct.setattributelist
local setkern = direct.setkern
local insert_after = direct.insert_after
local is_glyph = direct.is_glyph
local newnode = direct.new
local todirect = direct.todirect
local tonode = direct.tonode
local glue_id = node.id'glue'
local kern_t = node.id'kern'
local penalty_id = node.id'penalty'
local italcorr_sub
for i, n in next, node.subtypes'kern' do
if n == 'italiccorrection' then italcorr_sub = i break end
end
assert(italcorr_sub)
local nests = tex.nest
local funcid = luatexbase.new_luafunction'sw@slant'
token.set_lua('sw@slant', funcid, 'protected')
lua.get_functions_table()[funcid] = function()
local nest = nests.top
local tail, after = todirect(nest.tail), nil
local id = getid(tail)
if id == glue_id then
if getwidth(tail) == 0 then return end
tail, after = getprev(tail), tail
id = getid(tail)
end
if id == penalty_id then
if getpenalty(tail) == 0 then return end
tail, after = getprev(tail), tail
end
local cid, fontid = is_glyph(tail)
if not cid then return end
local fontdir = getfont(fontid)
local characters = fontdir and fontdir.characters
local char = characters and characters[cid]
local kern = newnode(kern_t, italcorr_sub)
setkern(kern, char and char.italic or 0)
setattr(kern, getattr(tail))
insert_after(tail, tail, kern)
if not after then nest.tail = tonode(kern) end
end
--
--
-- End of file `lua-ul-patches-preserve-attr.lua'.
|