summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-06-01 20:08:41 +0000
committerKarl Berry <karl@freefriends.org>2022-06-01 20:08:41 +0000
commitaa1bfca634b519a014b6a74f78dafa9609a545a8 (patch)
tree45abd300f4b737d785e23e13dfa418b58d1d797e /Master/texmf-dist/source
parent406f893ecc900db02d81719fea8fe374668d8994 (diff)
lua-ul (1jun22)
git-svn-id: svn://tug.org/texlive/trunk@63469 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx344
1 files changed, 254 insertions, 90 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 edaf0f3ca42..addff775bc5 100644
--- a/Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx
+++ b/Master/texmf-dist/source/lualatex/lua-ul/lua-ul.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% Copyright (C) 2020-2021 by Marcel Krueger
+%% 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
@@ -42,8 +42,8 @@
%</gobble>
%<*driver>
\documentclass{article}
-\usepackage{lua-ul}
-\usepackage{csquotes,doc,framed,metalogo,hyperref,luacolor,tikzducks,pict2e}
+\usepackage{luacolor,lua-ul}
+\usepackage{csquotes,doc,framed,metalogo,tikzducks,pict2e,hyperref}
\RecordChanges
\begin{document}
\DocInput{lua-ul.dtx}
@@ -144,6 +144,17 @@
% Let's go back to traditional \highLight{highlighting}.
% \end{framed}
%
+% The \verb+\underLine+ allows an optional argument accepting keyval options to customize the underline.
+% Currently four keys are implemented:
+%
+% \begin{description}
+% \item[textcolor] Active by default. The underline is colored in the current text color.
+% \item[color] Allows setting the color of the underline according to the syntax the xcolor manual
+% documents for PSTricks.
+% \item[top/bottom/height] At most two of these three options should be set. Specifies the height of the upper/lower
+% edge of the underline or the linewidth.
+% \end{description}
+%
% \section{Expert interface}
% \DescribeMacro{\newunderlinetype}ยง
% Sometimes, you might try to solve more interesting problems than boring underlining,
@@ -759,7 +770,7 @@ function add_underline_hlist(head, attr, outervalue)
end
if last_value then
% \end{macrocode}
-% \changes{0.1.1}{2022-02-02}{Set attributes for negative glue node}
+% \changes{0.1.1}{2021-02-02}{Set attributes for negative glue node}
% If the value changed and the old one wasn't \texttt{nil}, then we reached
% the end of the previous underlined segment and therefore know it's length.
% Therefore we can finally insert the underline.
@@ -923,43 +934,56 @@ require'lua-ul-patches-preserve-attr'
%</gobble>
% \fi
% \subsection{\TeX\ support package}
+% \changes{0.2.0}{2022-05-31}{Move to expl3}
% Now only some \LaTeX\ glue code is still needed
% \iffalse
%<*package>
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage
+\ProvidesExplPackage
{lua-ul}
- [2021/05/12 v0.1.4 Underlining and related functionality for LuaTeX]
-
+ {2022-05-31}{0.2.0}{Underlining and related functionality for LuaTeX}
% \fi
+% First define some messages.
+% \begin{macrocode}
+\msg_new:nnnn {lua-ul} {luatex-required} {LuaLaTeX~required} {
+ Lua-UL~requires~LuaLaTeX.~
+ Maybe~you~forgot~to~switch~the~engine~in~your~editor?
+}
+\msg_new:nnnn {lua-ul} {luacolor-required} {
+ Color~support~in~lua-ul~requires~luacolor.
+}{
+ This~error~can~be~fixed~by~adding~\token_to_str:N \usepackage{luacolor}~in~your~preamble.
+}
+% \end{macrocode}
+%
% Only \LuaLaTeX{} is supported.
% For other engines we show an error.
% \begin{macrocode}
-\ifx\directlua\undefined
- \PackageError{lua-ul}{LuaLaTeX required}%
- {Lua-UL requires LuaLaTeX.
- Maybe you forgot to switch the engine in your editor?}
-\fi
-\directlua{require'lua-ul'}
-\RequirePackage{xparse}
+\sys_if_engine_luatex:F {
+ \msg_error:nn {lua-ul} {luatex-required}
+}
+\lua_load_module:n {lua-ul}
+%
% \end{macrocode}
% We support some options. Especially \verb+minimal+ will disable the predefined commands \verb+\underLine+ and \verb+\strikeThrough+ and allow you to define similar commands with your custom settings instead, \verb+soul+ tries to replicate names of the \verb+soul+ package.
% \begin{macrocode}
-\newif\ifluaul@predefined
-\newif\ifluaul@soulnames
-\luaul@predefinedtrue
-\DeclareOption{minimal}{\luaul@predefinedfalse}
-\DeclareOption{soul}{\luaul@soulnamestrue}
+\bool_new:N \l__luaul_predefined_bool
+\bool_new:N \l__luaul_soulnames_bool
+\bool_set_true:N \l__luaul_predefined_bool
+\DeclareOption {minimal} { \bool_set_false:N \l__luaul_predefined_bool }
+\DeclareOption {soul} { \bool_set_true:N \l__luaul_soulnames_bool }
\ProcessOptions\relax
% \end{macrocode}
+%
% Just one more tiny helper.
% \begin{macrocode}
-\protected\def\luaul@maybedefineuse#1#2{%
- \unless\ifcsname#1\endcsname
- \expandafter\xdef\csname#1\endcsname{#2}%
- \fi
- \csname#1\endcsname
+\cs_new_protected:Npn \__luaul_maybe_define_use:Nx #1#2 {
+ \cs_if_free:NT #1 {
+ \cs_gset:Npx #1 {#2}
+ }
+ #1
}
+\cs_generate_variant:Nn \__luaul_maybe_define_use:Nx {c}
% \end{macrocode}
% The default for the context argument. Give that most stuff should
% scale vertically with the font size, we expect most arguments
@@ -967,104 +991,244 @@ require'lua-ul-patches-preserve-attr'
% 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
+\cs_new:Npn \__luaul_default_context: {
+ \dim_to_decimal_in_sp:n {1ex}
+ @
+ \cs_if_exist:NT \LuaCol@Attribute {
+ \int_use:N \LuaCol@Attribute
}
+}
% \end{macrocode}
% The main macro.
% \begin{macrocode}
-\NewDocumentCommand\newunderlinetype
- { E{*}{{}} m O{\luaul@defaultcontext} m }{%
- \newcommand#2{}% "Reserve" the name
- \protected\def#2{%
- \expandafter\luaul@maybedefineuse
- \expanded{{\csstring#2@@#3}}%
- {\LuaULSetUnderline
- \LuaULNewUnderlineType#1{#4\hskip0pt}%
- }}%
+\NewDocumentCommand \newunderlinetype
+ { E{*}{{}} m O{\__luaul_default_context:} m } {
+ \cs_new_protected:Npn #2 {
+ \__luaul_maybe_define_use:cx {
+ __luaul_set_underline_ \cs_to_str:N #2 _ #3 :
+ } {
+ \LuaULSetUnderline
+ \LuaULNewUnderlineType #1 { #4 \hskip 0pt }
+ }
+ }
}
-\ifluaul@predefined
+
+\bool_if:NT \l__luaul_predefined_bool {
+ \msg_new:nnnn {lua-ul} {height-inconsistent} {Specified~height~is~inconsistent~with~specified~top~and~bottom}{}
+ \msg_new:nnnn {lua-ul} {deprecated} {Used~deprecated~command~`\token_to_str:N #1'.~Please~replace~this~with~`\token_to_str:N #2`.}{}
+ \cs_new:Npn \__luaul_deprecated:NN #1#2 {
+ \cs_new_protected:Npn #1 {
+ \msg_warning:nnnn {lua-ul} {deprecated} {#1} {#2}
+ \cs_gset_eq:NN #1 #2
+ #1
+ }
+ }
% \end{macrocode}
+%
% \changes{0.0.2}{2020-03-15}{Allow \texttt{\protect\string\protect\highLight} color customization}
-% \changes{0.1.1}{2022-02-02}{Make color mechanism more generic}
+% \changes{0.1.1}{2021-02-02}{Make color mechanism more generic}
+% \changes{0.1.5}{2021-12-01}{Better error handling if luacolor is not loaded}
% 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@currentcolor{#1}%
- \else
- \begingroup
- \XC@getcolor{#1}\luaul@tmpcolor
- \expanded{\endgroup
- \def\noexpand\luaul@currentcolor{%
- \expandafter\luaul@@setcolor\luaul@tmpcolor}}%
- \fi
+ \tl_new:N \l__luaul_current_color_tl
+ \cs_new:Npn \__luaul_set_color_strip:w \xcolor@ #1#2 {}
+ \cs_new_protected:Npn \luaul_set_color:n #1 {
+ \cs_if_free:NTF \XC@getcolor {
+ \tl_set:Nn \l__luaul_current_color_tl {#1}
+ } {
+ \group_begin:
+ \XC@getcolor {#1} \l_tmpa_tl
+ \use:e { \group_end:
+ \tl_set:Nn \exp_not:N \l__luaul_current_color_tl {
+ \exp_after:wN \__luaul_set_color_strip:w \l_tmpa_tl
+ }
+ }
+ }
+ }
+ \__luaul_deprecated:NN \luaul@setcolor \luaul_set_color:n
+ \cs_new_protected:Npn \luaul_apply_color: {
+ \IfPackageLoadedTF {luacolor} {
+ \cs_if_free:NTF \XC@getcolor {
+ \color {\l__luaul_current_color_tl}
+ }{
+ \exp_after:wN \XC@undeclaredcolor \l__luaul_current_color_tl
+ }
+ }{
+ \msg_error:nn {lua-ul} {luacolor-required}
+ }
}
- \newcommand\luaul@applycolor{%
- \ifx\XC@getcolor\undefined
- \color{\luaul@currentcolor}%
- \else
- \expandafter\XC@undeclaredcolor\luaul@currentcolor
- \fi
+ \__luaul_deprecated:NN \luaul@applycolor \luaul_apply_color:
+ \cs_new:Npn \luaul_context_color: {
+ \l__luaul_current_color_tl
+ }
+ \cs_new:Npn \__luaul_default_colored_context: {
+ \dim_to_decimal_in_sp:n {1ex}
+ @
+ \luaul_context_color:
}
% \end{macrocode}
-% Now a user-level command to set the default color.
+% Now a user-level command to set the default color for highlights.
% \begin{macrocode}
-\NewDocumentCommand\LuaULSetHighLightColor{om}{%
- \edef\luaul@highlight@color{\IfValueTF{#1}{[#1]{#2}}{#2}}%
-}
+ \tl_new:N \l__luaul_highlight_color_tl
+ \tl_set:Nn \l__luaul_highlight_color_tl {yellow}
+ \NewDocumentCommand \LuaULSetHighLightColor {om} {
+ \tl_set:Nx \l__luaul_highlight_color_tl {
+ \IfValueTF {#1} {
+ [#1]{#2}
+ }{
+ #2
+ }
+ }
+ }
% \end{macrocode}
% \changes{0.1.1}{2021-02-02}{Use \texttt{xparse} for all user commands}
% \changes{0.1.1}{2021-02-02}{Optionally color \texttt{\protect\string\protect\strikeThrough}}
% \changes{0.1.2}{2021-02-15}{Allow \texttt{long} arguments (again)}
+% \changes{0.2.0}{2022-05-31}{Add keyval for \underLine}
% The sizes for the predefined commands are stolen from the \enquote{soul}
% default values.
% \begin{macrocode}
- \newunderlinetype\@underLine{%
- \leaders\vrule height -.65ex depth .75ex
+
+ \dim_new:N \l__luaul_top_dim
+ \dim_new:N \l__luaul_bottom_dim
+ \dim_new:N \l__luaul_height_dim
+ \bool_new:N \l__luaul_top_set_bool
+ \bool_new:N \l__luaul_bottom_set_bool
+ \bool_new:N \l__luaul_height_set_bool
+ \bool_new:N \l__luaul_color_set_bool
+
+ \keys_define:nn {luaul / generic} {
+ top .code:n = {
+ \bool_set_true:N \l__luaul_top_set_bool
+ \dim_set:Nn \l__luaul_top_dim {#1}
+ },
+ bottom .code:n = {
+ \bool_set_true:N \l__luaul_bottom_set_bool
+ \dim_set:Nn \l__luaul_bottom_dim {(#1)*-1}
+ },
+ height .code:n = {
+ \bool_set_true:N \l__luaul_height_set_bool
+ \dim_set:Nn \l__luaul_height_dim {#1}
+ },
+ color .code:n = {
+ \bool_set_true:N \l__luaul_color_set_bool
+ \luaul_set_color:n {#1}
+ },
+ textcolor .code:n = {
+ \bool_set_false:N \l__luaul_color_set_bool
+ },
+ textcolor .value_forbidden:n = true,
}
- \NewDocumentCommand\underLine{+m}{{\@underLine#1}}
- \newunderlinetype\@strikeThrough{%
- \leaders\vrule height .55ex depth -.45ex
+ \cs_new:Npn \__luaul_parse_generic_keys:n #1 {
+ \bool_set_false:N \l__luaul_top_set_bool
+ \bool_set_false:N \l__luaul_bottom_set_bool
+ \bool_set_false:N \l__luaul_height_set_bool
+
+ \keys_set:nn {luaul / generic} {#1}
+
+ \bool_if:NTF \l__luaul_bottom_set_bool {
+ \bool_if:NTF \l__luaul_top_set_bool {
+ \bool_if:NTF \l__luaul_height_set_bool {
+ \dim_compare:nNnF { \l__luaul_top_dim + \l__luaul_bottom_dim } = {\l__luaul_height_dim} {
+ \msg_error:nn {lua-ul} {height-inconsistent}
+ }
+ } {
+ \dim_set:Nn \l__luaul_height_dim { \l__luaul_top_dim + \l__luaul_bottom_dim }
+ }
+ } {
+ \dim_set:Nn \l__luaul_top_dim { \l__luaul_height_dim - \l__luaul_bottom_dim }
+ }
+ } {
+ \dim_set:Nn \l__luaul_bottom_dim { \l__luaul_height_dim - \l__luaul_top_dim }
+ }
+ }
+
+ \newunderlinetype \@@underLine [
+ \dim_to_decimal_in_sp:n { \l__luaul_top_dim }
+ @
+ \dim_to_decimal_in_sp:n { \l__luaul_bottom_dim }
+ @
+ \bool_if:NTF \l__luaul_color_set_bool {
+ colored @ \luaul_context_color:
+ } {
+ \cs_if_exist:NT \LuaCol@Attribute {
+ \int_use:N \LuaCol@Attribute
+ }
+ }
+ ] {
+ \bool_if:NT \l__luaul_color_set_bool {
+ \luaul_apply_color:
+ }
+ \leaders\vrule height \l__luaul_top_dim depth \l__luaul_bottom_dim
+ }
+ \newunderlinetype \@basicUnderLine {
+ \leaders \vrule height -.65ex depth .75ex
+ }
+
+ \NewDocumentCommand \@underLine {o} {
+ \IfValueTF {#1} {
+ \__luaul_parse_generic_keys:n {
+ top = -.65ex,
+ bottom = -.75ex,
+ }
+ \__luaul_parse_generic_keys:n {
+ #1
+ }
+ \@@underLine
+ } {
+ \@basicUnderLine
+ }
}
- \newunderlinetype\colored@strikeThrough[\number\dimexpr1ex@%
- \luaul@currentcolor]{%
- \luaul@applycolor
+ \NewDocumentCommand \underLine {o +m} {
+ \group_begin:
+ \@underLine [#1] #2
+ \group_end:
+ }
+
+ \newunderlinetype \@@strikeThrough {
+ \leaders \vrule height .55ex depth -.45ex
+ }
+ \newunderlinetype \@colored@strikeThrough [\__luaul_default_colored_context:] {
+ \luaul_apply_color:
\leaders\vrule height .55ex depth -.45ex
}
- \NewDocumentCommand\strikeThrough{o+m}{{%
- \IfValueTF{#1}{%
- \luaul@setcolor{#1}%
- \colored@strikeThrough
- }\@strikeThrough%
- #2%
- }}
+ \NewDocumentCommand \@strikeThrough {o} {
+ \IfValueTF {#1} {
+ \luaul_set_color:n {#1}
+ \@colored@strikeThrough
+ }
+ \@@strikeThrough
+ }
+ \NewDocumentCommand \strikeThrough {o +m} {
+ \group_begin:
+ \@strikeThrough #2
+ \group_end:
+ }
- \newunderlinetype\@highLight[\number\dimexpr1ex@%
- \luaul@currentcolor]{%
- \luaul@applycolor
+ \newunderlinetype \@@highLight [\__luaul_default_colored_context:] {
+ \luaul_apply_color:
\leaders\vrule height 1.75ex depth .75ex
}
- \NewDocumentCommand\highLight{O{\luaul@highlight@color}+m}{{%
- \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
+ \NewDocumentCommand \@highLight {O{\l__luaul_highlight_color_tl}} {
+ \luaul_set_color:n {#1}
+ \@@highLight
+ }
+ \NewDocumentCommand \highLight {O{\l__luaul_highlight_color_tl} +m} {
+ \group_begin:
+ \@highLight [#1] #2
+ \group_end:
+ }
+ \bool_if:NT \l__luaul_soulnames_bool {
+ \cs_new_eq:NN \textul \underLine \cs_new_eq:NN \ul \textul
+ \cs_new_eq:NN \textst \strikeThrough \cs_new_eq:NN \st \textst
+ \cs_new_eq:NN \texthl \highLight \cs_new_eq:NN \hl \texthl
+ }
+}
% \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