summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-03-15 21:32:40 +0000
committerKarl Berry <karl@freefriends.org>2020-03-15 21:32:40 +0000
commit7f4ddce7c9a68c530786b0addad1d0a659321212 (patch)
tree5986704864d95f46a33428aefe82fbb843e63761 /Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua
parent0eec602222f9b03c3593c74060c8560e00a7b29f (diff)
lua-ul (15mar20)
git-svn-id: svn://tug.org/texlive/trunk@54332 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua')
-rw-r--r--Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua41
1 files changed, 36 insertions, 5 deletions
diff --git a/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua b/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua
index 1fe53eefe1c..e5d8ed91be0 100644
--- a/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua
+++ b/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua
@@ -71,15 +71,45 @@ local function set_underline()
end
tex.attribute[j] = token.scan_int()
end
+local function reset_underline()
+ local reset_all = token.scan_keyword'*'
+ local j
+ for i=1,#underlineattrs do
+ local attr = underlineattrs[i]
+ if tex.attribute[attr] ~= -0x7FFFFFFF then
+ if reset_all then
+ tex.attribute[attr] = -0x7FFFFFFF
+ else
+ j = attr
+ end
+ end
+ end
+ if not j then
+ if not reset_all then
+ tex.error("No underline active", {"You tried to disable \z
+ underlining but underlining was not active",
+ "in the first place. Maybe you wanted to ensure that \z
+ no underling can be active anymore?", "Then you should \z
+ append a *."})
+ end
+ return
+ end
+ tex.attribute[j] = -0x7FFFFFFF
+end
local functions = lua.get_functions_table()
+local set_lua = token.set_lua
local new_underline_type_func =
luatexbase.new_luafunction"luaul.new_underline_type"
local set_underline_func =
luatexbase.new_luafunction"luaul.set_underline_func"
-token.set_lua("LuaULNewUnderlineType", new_underline_type_func)
-token.set_lua("LuaULSetUnderline", set_underline_func, "protected")
+local reset_underline_func =
+ luatexbase.new_luafunction"luaul.reset_underline_func"
+set_lua("LuaULNewUnderlineType", new_underline_type_func)
+set_lua("LuaULSetUnderline", set_underline_func, "protected")
+set_lua("LuaULResetUnderline", reset_underline_func, "protected")
functions[new_underline_type_func] = new_underline_type
functions[set_underline_func] = set_underline
+functions[reset_underline_func] = reset_underline
local add_underline_h
local function add_underline_v(head, attr)
@@ -137,9 +167,10 @@ function add_underline_h(head, attr)
local width = node.rangedimensions(head, first)
local kern = node.new(kern_t)
kern.kern = -width
- kern.next = node.copy(underline_types[last_value])
- kern.next.width = width
- node.tail(head.head).next = kern
+ local lead = node.copy(underline_types[last_value])
+ lead.width = width
+ head.head = node.insert_before(head.head, first, lead)
+ node.insert_after(head, lead, kern)
end
end
local function filter(b, loc, prev, mirror)