diff options
author | Karl Berry <karl@freefriends.org> | 2020-03-15 21:32:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-03-15 21:32:40 +0000 |
commit | 7f4ddce7c9a68c530786b0addad1d0a659321212 (patch) | |
tree | 5986704864d95f46a33428aefe82fbb843e63761 /Master/texmf-dist/source | |
parent | 0eec602222f9b03c3593c74060c8560e00a7b29f (diff) |
lua-ul (15mar20)
git-svn-id: svn://tug.org/texlive/trunk@54332 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx | 164 |
1 files changed, 150 insertions, 14 deletions
diff --git a/Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx b/Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx index be033be0b5e..9573212ba2f 100644 --- a/Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx +++ b/Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx @@ -43,6 +43,7 @@ \documentclass{article} \usepackage{lua-ul} \usepackage{csquotes,doc,framed,metalogo,hyperref,luacolor,tikzducks,pict2e} +\RecordChanges \begin{document} \DocInput{lua-ul.dtx} \PrintIndex @@ -116,6 +117,32 @@ % \end{document} % \end{verbatim} % +% The \verb+\highLight+ command highlights the argument in yellow by default. This color can be changed +% either by providing a color as optional argument or by changing the default through \verb+\LuaULSetHighLightColor+: +% +% \begin{verbatim} +% \documentclass{article} +% \usepackage{xcolor,luacolor,lua-ul} +% \LuaULSetHighLightColor{green} +% \begin{document} +% Lots of stuff is \highLight{important enough to be highlighted}, +% but only few things are dangerous enough to deserve +% \highLight[red]{red highlighting.} +% +% \LuaULSetHighLightColor{yellow} +% Let's go back to traditional \highLight{highlighting}. +% \end{document} +% \end{verbatim} +% +% \begin{framed} +% \LuaULSetHighLightColor{green} +% Lots of stuff is \highLight{important enough to be highlighted}, but only few things +% are dangerous enough to deserve \highLight[red]{red highlighting.} +% +% \LuaULSetHighLightColor{yellow} +% Let's go back to traditional \highLight{highlighting}. +% \end{framed} +% % \section{Expert interface} % \DescribeMacro{\newunderlinetype}ยง % Sometimes, you might try to solve more interesting problems than boring underlining, @@ -178,6 +205,7 @@ % % \StopEventually{} % \section{The implementation} +% \changes{0.0.1}{2020-03-12}{Initial release} % \subsection{Helper modules} % First we need a separate Lua module \verb+pre_append_to_vlist_filter+ which % provides a variant of the \verb+append_to_vlist_filter+ callback which can be @@ -313,15 +341,48 @@ local function set_underline() end tex.attribute[j] = token.scan_int() end +% \end{macrocode} +% \changes{0.0.2}{2020-03-15}{Add command to disable active underlining} +% \begin{macrocode} +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) @@ -379,9 +440,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) @@ -407,7 +469,7 @@ luatexbase.add_to_callback('pre_append_to_vlist_filter', \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] % \fi % Only \LuaLaTeX{} is supported. @@ -438,7 +500,19 @@ luatexbase.add_to_callback('pre_append_to_vlist_filter', \fi \csname#1\endcsname } - +% \end{macrocode} +% The default for the context argument. Give that most stuff should +% scale vertically with the font size, we expect most arguments +% to be given in \texttt{ex}. Additionally especially traditional +% underlines will use the currently active text color, so especially +% when luacolor is loaded we have to include the color attribute too. +% \begin{macrocode} + \newcommand\luaul@defaultcontext{% + \number\dimexpr1ex + @\unless\ifx\undefined\LuaCol@Attribute + \the\LuaCol@Attribute + \fi + } % \end{macrocode} % The main macro. % \begin{macrocode} @@ -452,21 +526,58 @@ luatexbase.add_to_callback('pre_append_to_vlist_filter', }}% } \ifluaul@predefined - \newcommand\luaul@defaultcontext{% - \number\dimexpr1ex - @\unless\ifx\undefined\LuaCol@Attribute - \the\LuaCol@Attribute +% \end{macrocode} +% \changes{0.0.2}{2020-03-15}{Allow \texttt{\protect\string\protect\highLight} color customization} +% For \verb+\highLight+, the color should be customizable. +% There are two cases: If \verb+xcolor+ is not loaded, we just accept +% a simple color name. Otherwise, we accept color as documented in +% xcolor for PSTricks: Either a color name, a color expression or a +% combination of colormodel and associated values. +% \begin{macrocode} + \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 } +% \end{macrocode} +% Now a user-level command to set the default color. +% \begin{macrocode} +\NewDocumentCommand\LuaULSetHighLightColor{om}{% + \edef\luaul@highlight@color{\IfValueTF{#1}{[#1]{#2}}{#2}}% +} +% \end{macrocode} +% The sizes for the predefined commands are stolen from the \enquote{soul} +% default values. +% \begin{macrocode} \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 @@ -474,6 +585,31 @@ luatexbase.add_to_callback('pre_append_to_vlist_filter', \fi \fi % \end{macrocode} +% \changes{0.0.2}{2020-03-15}{Patch \texttt{\protect\string\protect\reset@font}} +% Finally patch \verb+\reset@font+ to ensure that underlines do not propagate +% into unexpected places. +% \begin{macrocode} +\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{macrocode} % \iffalse %</package> % \fi |