From 68872ff6a2a91fa0e84763fc9316493d82075c95 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 5 Mar 2019 22:35:14 +0000 Subject: l3 (5mar19) git-svn-id: svn://tug.org/texlive/trunk@50246 c570f23f-e606-0410-a88d-b1316a301751 --- .../l3experimental/l3benchmark/l3benchmark.dtx | 4 +- .../latex/l3experimental/l3cctab/l3cctab.dtx | 4 +- .../latex/l3experimental/l3color/l3color.dtx | 4 +- .../latex/l3experimental/l3draw/l3draw-boxes.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-layers.dtx | 216 +++++++++++++++++++++ .../latex/l3experimental/l3draw/l3draw-paths.dtx | 45 ++--- .../latex/l3experimental/l3draw/l3draw-points.dtx | 97 +++++---- .../latex/l3experimental/l3draw/l3draw-scopes.dtx | 16 +- .../l3experimental/l3draw/l3draw-softpath.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-state.dtx | 2 +- .../l3experimental/l3draw/l3draw-transforms.dtx | 58 +++--- .../source/latex/l3experimental/l3draw/l3draw.dtx | 54 +++++- .../source/latex/l3experimental/l3draw/l3draw.ins | 1 + .../latex/l3experimental/l3str/l3str-convert.dtx | 4 +- .../latex/l3experimental/l3str/l3str-format.dtx | 4 +- .../l3experimental/l3sys-shell/l3sys-shell.dtx | 4 +- .../latex/l3experimental/xcoffins/xcoffins.dtx | 4 +- .../latex/l3experimental/xgalley/l3galley.dtx | 4 +- .../latex/l3experimental/xgalley/xgalley.dtx | 4 +- 19 files changed, 403 insertions(+), 126 deletions(-) create mode 100644 Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx (limited to 'Master/texmf-dist/source/latex/l3experimental') diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index f2b906f5c4b..5fa12ee7915 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -128,7 +128,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3benchmark}{2019-01-28}{} +\ProvidesExplPackage{l3benchmark}{2019-03-05}{} {L3 Experimental benchmarking} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx index 8770a2b7be6..adff2c4ead3 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -150,7 +150,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3cctab}{2019-01-28}{} +\ProvidesExplPackage{l3cctab}{2019-03-05}{} {L3 Experimental category code tables} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx index c2c783ad1b6..3f4e1c3f1a7 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -265,7 +265,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3color}{2019-01-28}{} +\ProvidesExplPackage{l3color}{2019-03-05}{} {L3 Experimental color support} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx index 59bf5ac2ba5..7f23d1f4ab4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx new file mode 100644 index 00000000000..c59359fd02e --- /dev/null +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx @@ -0,0 +1,216 @@ +% \iffalse meta-comment +% +%% File: l3draw-layers.dtx +% +% Copyright (C) 2019 The LaTeX3 Project +% +% It may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in the file +% +% http://www.latex-project.org/lppl.txt +% +% This file is part of the "l3experimental bundle" (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% ----------------------------------------------------------------------- +% +% The development version of the bundle can be found at +% +% https://github.com/latex3/latex3 +% +% for those people who are interested. +% +%<*driver> +\RequirePackage{expl3} +\documentclass[full]{l3doc} +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +% +% \fi +% +% \title{^^A +% The \pkg{l3draw-layers} package\\ Layers^^A +% } +% +% \author{^^A +% The \LaTeX3 Project\thanks +% {^^A +% E-mail: +% \href{mailto:latex-team@latex-project.org} +% {latex-team@latex-project.org}^^A +% }^^A +% } +% +% \date{Released 2019-03-05} +% +% \maketitle +% +% \begin{implementation} +% +% \section{\pkg{l3draw-layers} implementation} +% +% \begin{macrocode} +%<*initex|package> +% \end{macrocode} +% +% \begin{macrocode} +%<@@=draw> +% \end{macrocode} +% +% \subsection{User interface} +% +% \begin{macro}{\draw_layer_new:n} +% \begin{macrocode} +\cs_new_protected:Npn \draw_layer_new:n #1 + { + \str_if_eq:nnTF {#1} { main } + { \msg_error:nnn { draw } { main-reserved } } + { + \box_new:c { g_@@_layer_ #1 _box } + \box_new:c { l_@@_layer_ #1 _box } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\l_@@_layer_tl} +% The name of the current layer: we start off with |main|. +% \begin{macrocode} +\tl_new:N \l_@@_layer_tl +\tl_set:Nn \l_@@_layer_tl { main } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_@@_layer_close_bool} +% Used to track if a layer needs to be closed. +% \begin{macrocode} +\bool_new:N \l_@@_layer_close_bool +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\l_draw_layers_clist, \g_@@_layers_clist} +% The list of layers to use starts off with just the |main| one. +% \begin{macrocode} +\clist_new:N \l_draw_layers_clist +\clist_set:Nn \l_draw_layers_clist { main } +\clist_new:N \g_@@_layers_clist +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\draw_layer_begin:n} +% \begin{macro}{\draw_layer_end:} +% Layers may be called multiple times and have to work when nested. That +% drives a bit of grouping to get everything in order. Layers have to be zero +% width, so they get set as we go along. +% \begin{macrocode} +\cs_new_protected:Npn \draw_layer_begin:n #1 + { + \group_begin: + \box_if_exist:cTF { g_@@_layer_ #1 _box } + { + \str_if_eq:VnTF \l_@@_layer_tl {#1} + { \bool_set_false:N \l_@@_layer_close_bool } + { + \bool_set_true:N \l_@@_layer_close_bool + \tl_set:Nn \l_@@_layer_tl {#1} + \box_gset_wd:cn { g_@@_layer_ #1 _box } { 0pt } + \hbox_gset:cw { g_@@_layer_ #1 _box } + \box_use_drop:c { g_@@_layer_ #1 _box } + \group_begin: + } + \draw_linewidth:n { \l_draw_default_linewidth_dim } + } + { + \str_if_eq:nnTF {#1} { main } + { \msg_error:nnn { draw } { unknown-layer } {#1} } + { \msg_error:nnn { draw } { main-layer } } + } + } +\cs_new_protected:Npn \draw_layer_end: + { + \bool_if:NT \l_@@_layer_close_bool + { + \group_end: + \hbox_gset_end: + } + \group_end: + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Internal cross-links} +% +% \begin{macro}{\@@_layers_insert:} +% The |main| layer is special, otherwise just dump the layer box inside +% a scope. +% \begin{macrocode} +\cs_new_protected:Npn \@@_layers_insert: + { + \clist_map_inline:Nn \l_draw_layers_clist + { + \str_if_eq:nnTF {##1} { main } + { + \box_set_wd:Nn \l_@@_layer_main_box { 0pt } + \box_use_drop:N \l_@@_layer_main_box + } + { + \driver_draw_scope_begin: + \box_gset_wd:cn { g_@@_layer_ ##1 _box } { 0pt } + \box_use_drop:c { g_@@_layer_ ##1 _box } + \driver_draw_scope_end: + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_layers_save:, \@@_layers_restore:} +% Simple save/restore functions. +% \begin{macrocode} +\cs_new_protected:Npn \@@_layers_save: + { + \clist_map_inline:Nn \l_draw_layers_clist + { + \str_if_eq:nnF {##1} { main } + { + \box_set_eq:cc { l_@@_layer_ ##1 _box } + { g_@@_layer_ ##1 _box } + } + } + } +\cs_new_protected:Npn \@@_layers_restore: + { + \clist_map_inline:Nn \l_draw_layers_clist + { + \str_if_eq:nnF {##1} { main } + { + \box_gset_eq:cc { g_@@_layer_ ##1 _box } + { l_@@_layer_ ##1 _box } + } + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\msg_new:nnnn { draw } { main-layer } + { Material~cannot~be~added~to~'main'~layer. } + { The~main~layer~may~only~be~accessed~at~the~top~level. } +\msg_new:nnn { draw } { main-reserved } + { The~'main'~layer~is~reserved. } +\msg_new:nnnn { draw } { unknown-layer } + { Layer~'#1'~has~not~been~created. } + { You~have~tried~to~use~layer~'#1',~but~it~was~never~set~up. } +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% \end{implementation} +% +% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx index cf40e9564d7..3cded354fe2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -254,15 +254,12 @@ } \cs_new_protected:Npn \draw_path_curveto:nnn #1#2#3 { - \@@_point_process:nnn + \@@_point_process:nnnn { - \@@_point_process:nn - { - \@@_path_mark_corner: - \@@_path_curveto:nnnnnn - } - { \draw_point_transform:n {#1} } + \@@_path_mark_corner: + \@@_path_curveto:nnnnnn } + { \draw_point_transform:n {#1} } { \draw_point_transform:n {#2} } { \draw_point_transform:n {#3} } } @@ -303,16 +300,12 @@ { \@@_point_process:nn { \@@_path_lineto:nn } {#1} } \cs_new_protected:Npn \draw_path_canvas_curveto:nnn #1#2#3 { - \@@_point_process:nnn + \@@_point_process:nnnn { - \@@_point_process:nn - { - \@@_path_mark_corner: - \@@_path_curveto:nnnnnn - } - {#1} + \@@_path_mark_corner: + \@@_path_curveto:nnnnnn } - {#2} {#3} + {#1} {#2} {#3} } % \end{macrocode} % \end{macro} @@ -514,14 +507,11 @@ \@@_point_transform_noshift:n { \draw_point_polar:nnn { #1 #4 90 } {#7} {#8} } } - \@@_point_process:nn + \@@_point_process:nnn + { \@@_path_arc_auxiv:nnnn } { - \@@_point_process:nn - { \@@_path_arc_auxiv:nnnn } - { - \draw_point_transform:n - { \draw_point_polar:nnn {#1} {#5} {#6} } - } + \draw_point_transform:n + { \draw_point_polar:nnn {#1} {#5} {#6} } } { \draw_point_transform:n @@ -624,12 +614,9 @@ % \begin{macrocode} \cs_new_protected:Npn \draw_path_ellipse:nnn #1#2#3 { - \@@_point_process:nnn - { - \@@_point_process:nn - { \@@_path_ellipse:nnnnnn } - { \draw_point_transform:n {#1} } - } + \@@_point_process:nnnn + { \@@_path_ellipse:nnnnnn } + { \draw_point_transform:n {#1} } { \@@_point_transform_noshift:n {#2} } { \@@_point_transform_noshift:n {#3} } } diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx index 5c81074a407..f8d729ca030 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -67,7 +67,7 @@ % Equivalents of following \pkg{pgf} functions are deliberately omitted: % \begin{itemize} % \item \cs{pgfpointorigin}: Can be given explicitly as |0pt,0pt|. -% \item \cs{pgfpoint}, \cs{pgfpointadd}, \cs{pgfpointdiff}, +% \item \cs{pgfpointadd}, \cs{pgfpointdiff}, % \cs{pgfpointscale}: Can be given explicitly. % \item \cs{pgfextractx}, \cs{pgfextracty}: Available by applying % \cs{use_i:nn}/\cs{use_ii:nn} or similar to the \texttt{x}-type @@ -93,11 +93,17 @@ % \subsection{Support functions} % % \begin{macro}[EXP]{\@@_point_process:nn} -% \begin{macro}[EXP]{\@@_point_process_auxi:nn, \@@_point_process_auxi:fn} +% \begin{macro}[EXP]{\@@_point_process_auxi:nn} % \begin{macro}[EXP]{\@@_point_process_auxii:nw} % \begin{macro}[EXP]{\@@_point_process:nnn} -% \begin{macro}[EXP]{\@@_point_process_auxiii:nnn, \@@_point_process_auxiii:ffn} +% \begin{macro}[EXP]{\@@_point_process_auxiii:nnn} % \begin{macro}[EXP]{\@@_point_process_auxiv:nw} +% \begin{macro}[EXP]{\@@_point_process:nnnn} +% \begin{macro}[EXP]{\@@_point_process_auxv:nnnn} +% \begin{macro}[EXP]{\@@_point_process_auxvi:nw} +% \begin{macro}[EXP]{\@@_point_process:nnnnn} +% \begin{macro}[EXP]{\@@_point_process_auxvii:nnnnn} +% \begin{macro}[EXP]{\@@_point_process_auxviii:nw} % Execute whatever code is passed to extract the $x$ and $y$ co-ordinates. % The first argument here should itself absorb two arguments. There is % also a version to deal with two co-ordinates: common enough to justify a @@ -105,27 +111,55 @@ % \begin{macrocode} \cs_new:Npn \@@_point_process:nn #1#2 { - \@@_point_process_auxi:fn + \exp_args:Nf \@@_point_process_auxi:nn { \@@_point_to_dim:n {#2} } {#1} } \cs_new:Npn \@@_point_process_auxi:nn #1#2 { \@@_point_process_auxii:nw {#2} #1 \q_stop } -\cs_generate_variant:Nn \@@_point_process_auxi:nn { f } \cs_new:Npn \@@_point_process_auxii:nw #1 #2 , #3 \q_stop { #1 {#2} {#3} } \cs_new:Npn \@@_point_process:nnn #1#2#3 { - \@@_point_process_auxiii:ffn + \exp_args:Nff \@@_point_process_auxiii:nnn { \@@_point_to_dim:n {#2} } { \@@_point_to_dim:n {#3} } {#1} } \cs_new:Npn \@@_point_process_auxiii:nnn #1#2#3 { \@@_point_process_auxiv:nw {#3} #1 \q_mark #2 \q_stop } -\cs_generate_variant:Nn \@@_point_process_auxiii:nnn { ff } \cs_new:Npn \@@_point_process_auxiv:nw #1 #2 , #3 \q_mark #4 , #5 \q_stop { #1 {#2} {#3} {#4} {#5} } +\cs_new:Npn \@@_point_process:nnnn #1#2#3#4 + { + \exp_args:Nfff \@@_point_process_auxv:nnnn + { \@@_point_to_dim:n {#2} } + { \@@_point_to_dim:n {#3} } + { \@@_point_to_dim:n {#4} } + {#1} + } +\cs_new:Npn \@@_point_process_auxv:nnnn #1#2#3#4 + { \@@_point_process_auxvi:nw {#4} #1 \q_mark #2 \q_mark #3 \q_stop } +\cs_new:Npn \@@_point_process_auxvi:nw + #1 #2 , #3 \q_mark #4 , #5 \q_mark #6 , #7 \q_stop + { #1 {#2} {#3} {#4} {#5} {#6} {#7} } +\cs_new:Npn \@@_point_process:nnnnn #1#2#3#4#5 + { + \exp_args:Nffff \@@_point_process_auxvii:nnnnn + { \@@_point_to_dim:n {#2} } + { \@@_point_to_dim:n {#3} } + { \@@_point_to_dim:n {#4} } + { \@@_point_to_dim:n {#5} } + {#1} + } +\cs_new:Npn \@@_point_process_auxvii:nnnnn #1#2#3#4#5 + { + \@@_point_process_auxviii:nw + {#5} #1 \q_mark #2 \q_mark #3 \q_mark #4 \q_stop + } +\cs_new:Npn \@@_point_process_auxviii:nw + #1 #2 , #3 \q_mark #4 , #5 \q_mark #6 , #7 \q_mark #8 , #9 \q_stop + { #1 {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} } % \end{macrocode} % \end{macro} % \end{macro} @@ -133,6 +167,12 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}[EXP]{\@@_point_to_dim:n} % \begin{macro}[EXP]{\@@_point_to_dim_aux:n, \@@_point_to_dim_aux:f} @@ -225,24 +265,21 @@ % \begin{macrocode} \cs_new:Npn \draw_point_intersect_lines:nnnn #1#2#3#4 { - \@@_point_process:nnn - { - \@@_point_process:nnn - { \@@_point_intersect_lines:nnnnnnnn } {#3} {#4} - } - {#1} {#2} + \@@_point_process:nnnnn + { \@@_point_intersect_lines:nnnnnnnn } + {#1} {#2} {#3} {#4} } % \end{macrocode} % At this stage we have all of the information we need, fully expanded: % \begin{enumerate}[label = \#\arabic*, font = \ttfamily] -% \item $x_{3}$ -% \item $y_{3}$ -% \item $x_{4}$ -% \item $y_{4}$ % \item $x_{1}$ % \item $y_{1}$ % \item $x_{2}$ % \item $y_{2}$ +% \item $x_{3}$ +% \item $y_{3}$ +% \item $x_{4}$ +% \item $y_{4}$ % \end{enumerate} % so now just have to do all of the calculation. % \begin{macrocode} @@ -519,18 +556,14 @@ % \begin{macrocode} \cs_new:Npn \draw_point_interpolate_arcaxes:nnnnnn #1#2#3#4#5#6 { - \@@_point_process:nnn - { - \@@_point_process:nn - { \@@_point_interpolate_arcaxes_auxi:nnnnnnnnn {#1} {#5} {#6} } - {#4} - } - {#2} {#3} + \@@_point_process:nnnn + { \@@_point_interpolate_arcaxes_auxi:nnnnnnnnn {#1} {#5} {#6} } + {#2} {#3} {#4} } \cs_new:Npn \@@_point_interpolate_arcaxes_auxi:nnnnnnnnn #1#2#3#4#5#6#7#8#9 { \@@_point_interpolate_arcaxes_auxii:fnnnnnnnn - { \fp_eval:n {#1} } {#2} {#3} {#6} {#7} {#8} {#9} {#4} {#5} + { \fp_eval:n {#1} } {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} } % \end{macrocode} % At this stage, the three co-ordinate pairs are fully expanded but somewhat @@ -613,19 +646,15 @@ % \begin{macrocode} \cs_new:Npn \draw_point_interpolate_curve:nnnnnn #1#2#3#4#5 { - \@@_point_process:nnn - { - \@@_point_process:nnn - { \@@_point_interpolate_curve_auxi:nnnnnnnnn {#1} } - {#4} {#5} - } - {#2} {#3} + \@@_point_process:nnnnn + { \@@_point_interpolate_curve_auxi:nnnnnnnnn {#1} } + {#2} {#3} {#4} {#5} } \cs_new:Npn \@@_point_interpolate_curve_auxi:nnnnnnnnn #1#2#3#4#5#6#7#8#9 { \@@_point_interpolate_curve_auxii:fnnnnnnnn { \fp_eval:n {#1} } - {#6} {#7} {#8} {#9} {#2} {#3} {#4} {#5} + {#2} {#3} {#4} {#5} {#6} {#7} {#8} {#9} } % \end{macrocode} % At this stage, everything is fully expanded and back in the input order. diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx index c3d98b5d52b..5f28fc920d9 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -82,10 +82,11 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_main_box} -% Box for setting the drawing. +% \begin{variable}{\l_@@_layer_main_box, \l_@@_layer_main_box} +% Box for setting the drawing itself and the top-level layer. % \begin{macrocode} \box_new:N \l_@@_main_box +\box_new:N \l_@@_layer_main_box % \end{macrocode} % \end{variable} % @@ -115,7 +116,8 @@ % mechanism largely as it then sets up the internal data structures. It may be % that a coffin construct is better here in the longer term: that may become % clearer as the code is completed. As we need to avoid any insertion of -% baseline skips, the outer box here has to be an |hbox|. +% baseline skips, the outer box here has to be an |hbox|. To allow for +% layers, there is some box nesting: notice that we % \begin{macrocode} \cs_new_protected:Npn \draw_begin: { @@ -136,9 +138,13 @@ \draw_join_miter: \draw_miterlimit:n { 10 } \draw_dash_pattern:nn { } { 0cm } + \hbox_set:Nw \l_@@_layer_main_box } \cs_new_protected:Npn \draw_end: { + \exp_args:NNNV \hbox_set_end: + \clist_set:Nn \l_draw_layers_clist \l_draw_layers_clist + \@@_layers_insert: \driver_draw_end: \hbox_set_end: \dim_compare:nNnT \g_@@_xmin_dim = \c_max_dim @@ -244,9 +250,11 @@ \draw_path_scope_begin: \draw_transform_matrix_reset: \draw_transform_shift_reset: + \@@_layers_save: } \cs_new_protected:Npn \draw_suspend_end: { + \@@_layers_restore: \draw_path_scope_end: \@@_scope_bb_end: } diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx index 7fe7a37bbd6..ef5f38d68c8 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx index fed90c69032..0e51979e19c 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx index e7b74452852..226d626030e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -121,14 +121,14 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\draw_transform_matrix:nnnn} -% \begin{macro}{\draw_transform_shift:n} -% \begin{macro}{\@@_transform_shift:nn} +% \begin{macro}{\draw_transform_matrix_absolute:nnnn} +% \begin{macro}{\draw_transform_shift_absolute:n} +% \begin{macro}{\@@_transform_shift_absolute:nn} % Setting the transform matrix is straight-forward, with just a bit % of expansion to sort out. With the mechanism active, the identity % matrix is set. % \begin{macrocode} -\cs_new_protected:Npn \draw_transform_matrix:nnnn #1#2#3#4 +\cs_new_protected:Npn \draw_transform_matrix_absolute:nnnn #1#2#3#4 { \fp_set:Nn \l_@@_matrix_a_fp {#1} \fp_set:Nn \l_@@_matrix_b_fp {#2} @@ -144,12 +144,12 @@ { \bool_set_false:N \l_@@_matrix_active_bool } { \bool_set_true:N \l_@@_matrix_active_bool } } -\cs_new_protected:Npn \draw_transform_shift:n #1 +\cs_new_protected:Npn \draw_transform_shift_absolute:n #1 { \@@_point_process:nn - { \@@_transform_shift:nn } {#1} + { \@@_transform_shift_absolute:nn } {#1} } -\cs_new_protected:Npn \@@_transform_shift:nn #1#2 +\cs_new_protected:Npn \@@_transform_shift_absolute:nn #1#2 { \dim_set:Nn \l_@@_xshift_dim {#1} \dim_set:Nn \l_@@_yshift_dim {#2} @@ -159,41 +159,41 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\draw_transform_matrix_concat:nnnn} -% \begin{macro}{\@@_transform_concat:nnnn} -% \begin{macro}{\draw_transform_shift_concat:n} -% \begin{macro}{\@@_transform_shift_concat:nn} +% \begin{macro}{\draw_transform_matrix:nnnn} +% \begin{macro}{\@@_transform:nnnn} +% \begin{macro}{\draw_transform_shift:n} +% \begin{macro}{\@@_transform_shift:nn} % Much the same story for adding to an existing matrix, with a bit of % pre-expansion so that the calculation uses \enquote{frozen} values. % \begin{macrocode} -\cs_new_protected:Npn \draw_transform_matrix_concat:nnnn #1#2#3#4 +\cs_new_protected:Npn \draw_transform_matrix:nnnn #1#2#3#4 { \use:x { - \@@_transform_concat:nnnn + \@@_transform:nnnn { \fp_eval:n {#1} } { \fp_eval:n {#2} } { \fp_eval:n {#3} } { \fp_eval:n {#4} } } } -\cs_new_protected:Npn \@@_transform_concat:nnnn #1#2#3#4 +\cs_new_protected:Npn \@@_transform:nnnn #1#2#3#4 { \use:x { - \draw_transform_matrix:nnnn + \draw_transform_matrix_absolute:nnnn { #1 * \l_@@_matrix_a_fp + #2 * \l_@@_matrix_c_fp } { #1 * \l_@@_matrix_b_fp + #2 * \l_@@_matrix_d_fp } { #3 * \l_@@_matrix_a_fp + #4 * \l_@@_matrix_c_fp } { #3 * \l_@@_matrix_b_fp + #4 * \l_@@_matrix_d_fp } } } -\cs_new_protected:Npn \draw_transform_shift_concat:n #1 +\cs_new_protected:Npn \draw_transform_shift:n #1 { \@@_point_process:nn - { \@@_transform_shift_concat:nn } {#1} + { \@@_transform_shift:nn } {#1} } -\cs_new_protected:Npn \@@_transform_shift_concat:nn #1#2 +\cs_new_protected:Npn \@@_transform_shift:nn #1#2 { \dim_set:Nn \l_@@_xshift_dim { \l_@@_xshift_dim + #1 } \dim_set:Nn \l_@@_yshift_dim { \l_@@_yshift_dim + #2 } @@ -267,12 +267,12 @@ { \use:x { - \draw_transform_matrix:nnnn + \draw_transform_matrix_absolute:nnnn { #3 - #1 } { #4 - #2 } { #5 - #1 } { #6 - #2 } - \draw_transform_shift:n { #1 , #2 } + \draw_transform_shift_absolute:n { #1 , #2 } } } % \end{macrocode} @@ -287,19 +287,19 @@ % Lots of shortcuts. % \begin{macrocode} \cs_new_protected:Npn \draw_transform_scale:n #1 - { \draw_transform_matrix_concat:nnnn { #1 } { 0 } { 0 } { #1 } } + { \draw_transform_matrix:nnnn { #1 } { 0 } { 0 } { #1 } } \cs_new_protected:Npn \draw_transform_xscale:n #1 - { \draw_transform_matrix_concat:nnnn { #1 } { 0 } { 0 } { 1 } } + { \draw_transform_matrix:nnnn { #1 } { 0 } { 0 } { 1 } } \cs_new_protected:Npn \draw_transform_yscale:n #1 - { \draw_transform_matrix_concat:nnnn { 1 } { 0 } { 0 } { #1 } } + { \draw_transform_matrix:nnnn { 1 } { 0 } { 0 } { #1 } } \cs_new_protected:Npn \draw_transform_xshift:n #1 - { \draw_transform_shift_concat:n { #1 , 0 } } + { \draw_transform_shift:n { #1 , 0pt } } \cs_new_protected:Npn \draw_transform_yshift:n #1 - { \draw_transform_shift_concat:n { 0 , #1 } } + { \draw_transform_shift:n { 0pt , #1 } } \cs_new_protected:Npn \draw_transform_xslant:n #1 - { \draw_transform_matrix_concat:nnnn { 1 } { 0 } { #1 } { 1 } } + { \draw_transform_matrix:nnnn { 1 } { 0 } { #1 } { 1 } } \cs_new_protected:Npn \draw_transform_yslant:n #1 - { \draw_transform_matrix_concat:nnnn { 1 } { #1 } { 0 } { 1 } } + { \draw_transform_matrix:nnnn { 1 } { #1 } { 0 } { 1 } } % \end{macrocode} % \end{macro} % \end{macro} @@ -324,7 +324,7 @@ } \cs_generate_variant:Nn \@@_transform_rotate:n { f } \cs_new_protected:Npn \@@_transform_rotate:nn #1#2 - { \draw_transform_matrix_concat:nnnn {#1} {#2} { -#2 } { #1 } } + { \draw_transform_matrix:nnnn {#1} {#2} { -#2 } { #1 } } \cs_generate_variant:Nn \@@_transform_rotate:nn { ff } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index 90e9b27e28b..73ed6390dcd 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -111,7 +111,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -941,7 +941,7 @@ % \end{demo} % \begin{demo} % \draw_begin: -% \draw_transform_matrix:nnnn { 2 } { 0 } { 1 } { 2 } +% \draw_transform_matrix_absolute:nnnn { 2 } { 0 } { 1 } { 2 } % \draw_path_moveto:n { 0cm , 0cm } % \draw_path_lineto:n { 0cm , 1cm } % \draw_path_use_clear:n { stroke } @@ -991,23 +991,24 @@ % is transparent to the drawing code so is not tracked. % % \begin{function} -% {\draw_transform_matrix:nnnn, \draw_transform_matrix_concat:nnnn} +% {\draw_transform_matrix:nnnn, \draw_transform_matrix_absolute:nnnn} % \begin{syntax} % \cs{draw_transform_matrix:nnnn} % \Arg{a} \Arg{b} \Arg{c} \Arg{d} % \end{syntax} % Applies the transformation matrix $[ \meta{a} \meta{b} \meta{c} \meta{d}]$. -% The basic version over-writes the current matrix, the |concat| version -% concatenates. +% The basic applies the transformation in addition to those active; the +% |absolute| version overwrites any active transformation. % This assignment is local. % \end{function} % -% \begin{function}{\draw_transform_shift:n, \draw_transform_shift_concat:n} +% \begin{function}{\draw_transform_shift:n, \draw_transform_shift_absolute:n} % \begin{syntax} % \cs{draw_transform_shift:n} \Arg{vector} % \end{syntax} -% Applies the transformation \meta{vector} to points. The basic version -% over-writes the current vector, the |concat| version concatenates. +% Applies the transformation \meta{vector} to points. +% The basic applies the vector in addition to those active; the +% |absolute| version overwrites any active vector. % This assignment is local. % \end{function} % @@ -1091,6 +1092,41 @@ % This assignment is local. % \end{function} % +% \subsection{Layers} +% +% Drawing layers may be used to alter the way in which elements are stacked +% on top of one another. In particular, they are useful when the nature of +% an element depends on another, but where it needs to be behind it's +% \enquote{parent}. A classic example is a filled background: this needs to +% know the size of the material it is behind. +% +% All drawings feature a layer called |main|. This layer should always be +% present, and is the one which \enquote{non-layered} content is added to. +% +% \begin{function}{\draw_layer_new:n} +% \begin{syntax} +% \cs{draw_layer_new:n} \Arg{layer} +% \end{syntax} +% Creates a new \meta{layer} which can then be used in drawing. The layer +% |main| is pre-defined. +% \end{function} +% +% \begin{function}{\draw_layer_begin:n, \draw_layer_end:} +% \begin{syntax} +% \cs{draw_layer_begin:n} \Arg{layer} +% ... +% \cs{draw_layer_end:} +% \end{syntax} +% Begin and end collection of material for the \meta{layer}, which should +% previously have been created (and which cannot be |main|). Material +% collected for the layer is available globally within the current drawing. +% \end{function} +% +% \begin{variable}{\l_draw_layers_clist} +% The list of active layers: may be given anywhere before \cs{draw_end:}. +% The |main| layer should always be included. +% \end{variable} +% % \end{documentation} % % \begin{implementation} @@ -1107,7 +1143,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3draw}{2019-01-28}{} +\ProvidesExplPackage{l3draw}{2019-03-05}{} {L3 Experimental core drawing support} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins index 855f033a8de..836d9a32d67 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins @@ -57,6 +57,7 @@ and all files in that bundle must be distributed together. { \from{l3draw.dtx} {package} \from{l3draw-boxes.dtx} {package} + \from{l3draw-layers.dtx} {package} \from{l3draw-paths.dtx} {package} \from{l3draw-points.dtx} {package} \from{l3draw-scopes.dtx} {package} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx index f3e757dba7a..240db74607d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -234,7 +234,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-convert}{2019-01-28}{} +\ProvidesExplPackage{l3str-convert}{2019-03-05}{} {L3 Experimental string encoding conversions} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index 8f8ad52bee4..a6a7646cd4e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -164,7 +164,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3str-format}{2019-01-28}{} +\ProvidesExplPackage{l3str-format}{2019-03-05}{} {L3 Experimental string formatting} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx index 053a119358a..9cedffc79a9 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -136,7 +136,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3sys-shell}{2019-01-28}{} +\ProvidesExplPackage{l3sys-shell}{2019-03-05}{} {L3 Experimental system shell functions} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index 8ba2b02d0ce..f38466a5d51 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -56,7 +56,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -675,7 +675,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2019-01-28}{} +\ProvidesExplPackage{xcoffins}{2019-03-05}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index e4093ad833d..7e5f9c806b6 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -687,7 +687,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3galley}{2019-01-28}{} +\ProvidesExplPackage{l3galley}{2019-03-05}{} {L3 Experimental galley code} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx index 5c1831a6800..21c9700de59 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2019-01-28} +% \date{Released 2019-03-05} % % \maketitle % @@ -734,7 +734,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2019-01-28}{} +\ProvidesExplPackage{xgalley}{2019-03-05}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} % \end{macrocode} -- cgit v1.2.3