From 7f4ddce7c9a68c530786b0addad1d0a659321212 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 15 Mar 2020 21:32:40 +0000 Subject: lua-ul (15mar20) git-svn-id: svn://tug.org/texlive/trunk@54332 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.lua | 41 +++++++++++++-- Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.sty | 65 ++++++++++++++++++++---- 2 files changed, 92 insertions(+), 14 deletions(-) (limited to 'Master/texmf-dist/tex/lualatex/lua-ul') 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) diff --git a/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.sty b/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.sty index 08069171817..72754a6ab49 100644 --- a/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.sty +++ b/Master/texmf-dist/tex/lualatex/lua-ul/lua-ul.sty @@ -20,7 +20,7 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage {lua-ul} - [2020/03/12 v0.0.1 Underlining and related functionality for LuaTeX] + [2020/03/15 v0.0.2 Underlining and related functionality for LuaTeX] \ifx\directlua\undefined \PackageError{lua-ul}{LuaLaTeX required}% @@ -41,7 +41,12 @@ \fi \csname#1\endcsname } - + \newcommand\luaul@defaultcontext{% + \number\dimexpr1ex + @\unless\ifx\undefined\LuaCol@Attribute + \the\LuaCol@Attribute + \fi + } \NewDocumentCommand\newunderlinetype{mO{\luaul@defaultcontext}m}{% \newcommand#1{}% "Reserve" the name \protected\def#1{% @@ -52,27 +57,69 @@ }}% } \ifluaul@predefined - \newcommand\luaul@defaultcontext{% - \number\dimexpr1ex - @\unless\ifx\undefined\LuaCol@Attribute - \the\LuaCol@Attribute + \newcommand\luaul@highlight@color{yellow} + \def\luaul@@setcolor\xcolor@#1#2{} + \newcommand\luaul@setcolor[1]{% + \ifx\XC@getcolor\undefined + \def\luaul@highlight@currentcolor{#1} + \else + \begingroup + \XC@getcolor{#1}\luaul@tmpcolor + \expanded{\endgroup + \def\noexpand\luaul@highlight@currentcolor{% + \expandafter\luaul@@setcolor\luaul@tmpcolor}}% \fi } +\NewDocumentCommand\LuaULSetHighLightColor{om}{% + \edef\luaul@highlight@color{\IfValueTF{#1}{[#1]{#2}}{#2}}% +} \newunderlinetype\@underLine% {\leaders\vrule height -.65ex depth .75ex} \newcommand\underLine[1]{{\@underLine#1}} \newunderlinetype\@strikeThrough% {\leaders\vrule height .55ex depth -.45ex} \newcommand\strikeThrough[1]{{\@strikeThrough#1}} - \newunderlinetype\@highLight[\number\dimexpr1ex]% - {\color{yellow}\leaders\vrule height 1.75ex depth .75ex} - \newcommand\highLight[1]{{\@highLight#1}} + + \newunderlinetype\@highLight[\number\dimexpr1ex@% + \luaul@highlight@currentcolor]% + {% + \ifx\XC@getcolor\undefined + \color{\luaul@highlight@currentcolor}% + \else + \expandafter\XC@undeclaredcolor\luaul@highlight@currentcolor + \fi + \leaders\vrule height 1.75ex depth .75ex + } + \newcommand\highLight[2][\luaul@highlight@color]{{% + \luaul@setcolor{#1}% + \@highLight#2% + }} \ifluaul@soulnames \let\textul\underLine \let\ul\textul \let\textst\strikeThrough \let\st\textst \let\texthl\highLight \let\hl\texthl \fi \fi +\ifx \reset@font \normalfont + \let \reset@font \relax + \DeclareRobustCommand \reset@font {% + \normalfont + \LuaULResetUnderline*% + } +\else + \MakeRobust \reset@font + \begingroup + \expandafter \let + \expandafter \helper + \csname reset@font \endcsname + \expandafter \endgroup + \expandafter \gdef + \csname reset@font \expandafter \endcsname + \expandafter {% + \helper% + \LuaULResetUnderline*% + } +\fi %% %% %% End of file `lua-ul.sty'. -- cgit v1.2.3