summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-03-05 22:35:14 +0000
committerKarl Berry <karl@freefriends.org>2019-03-05 22:35:14 +0000
commit68872ff6a2a91fa0e84763fc9316493d82075c95 (patch)
tree0546ec4c414553802e31a423aec44f74d252f645 /Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
parent541c4ddf7c5b402b9cfe8af5ef4e49ffa15d3e83 (diff)
l3 (5mar19)
git-svn-id: svn://tug.org/texlive/trunk@50246 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty')
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty259
1 files changed, 183 insertions, 76 deletions
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
index 484f1ac6dc6..624f7c7be13 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
@@ -6,6 +6,7 @@
%%
%% l3draw.dtx (with options: `package')
%% l3draw-boxes.dtx (with options: `package')
+%% l3draw-layers.dtx (with options: `package')
%% l3draw-paths.dtx (with options: `package')
%% l3draw-points.dtx (with options: `package')
%% l3draw-scopes.dtx (with options: `package')
@@ -27,7 +28,7 @@
%%
%% File: l3draw.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3draw}{2019-01-28}{}
+\ProvidesExplPackage{l3draw}{2019-03-05}{}
{L3 Experimental core drawing support}
\RequirePackage { l3color }
%% File: l3draw-boxes.dtx
@@ -90,6 +91,101 @@
{ \box_ht:N \l__draw_tmp_box }
\group_end:
}
+%% File: l3draw-layers.dtx
+\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__draw_layer_ #1 _box }
+ \box_new:c { l__draw_layer_ #1 _box }
+ }
+ }
+\tl_new:N \l__draw_layer_tl
+\tl_set:Nn \l__draw_layer_tl { main }
+\bool_new:N \l__draw_layer_close_bool
+\clist_new:N \l_draw_layers_clist
+\clist_set:Nn \l_draw_layers_clist { main }
+\clist_new:N \g__draw_layers_clist
+\cs_new_protected:Npn \draw_layer_begin:n #1
+ {
+ \group_begin:
+ \box_if_exist:cTF { g__draw_layer_ #1 _box }
+ {
+ \str_if_eq:VnTF \l__draw_layer_tl {#1}
+ { \bool_set_false:N \l__draw_layer_close_bool }
+ {
+ \bool_set_true:N \l__draw_layer_close_bool
+ \tl_set:Nn \l__draw_layer_tl {#1}
+ \box_gset_wd:cn { g__draw_layer_ #1 _box } { 0pt }
+ \hbox_gset:cw { g__draw_layer_ #1 _box }
+ \box_use_drop:c { g__draw_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__draw_layer_close_bool
+ {
+ \group_end:
+ \hbox_gset_end:
+ }
+ \group_end:
+ }
+\cs_new_protected:Npn \__draw_layers_insert:
+ {
+ \clist_map_inline:Nn \l_draw_layers_clist
+ {
+ \str_if_eq:nnTF {##1} { main }
+ {
+ \box_set_wd:Nn \l__draw_layer_main_box { 0pt }
+ \box_use_drop:N \l__draw_layer_main_box
+ }
+ {
+ \driver_draw_scope_begin:
+ \box_gset_wd:cn { g__draw_layer_ ##1 _box } { 0pt }
+ \box_use_drop:c { g__draw_layer_ ##1 _box }
+ \driver_draw_scope_end:
+ }
+ }
+ }
+\cs_new_protected:Npn \__draw_layers_save:
+ {
+ \clist_map_inline:Nn \l_draw_layers_clist
+ {
+ \str_if_eq:nnF {##1} { main }
+ {
+ \box_set_eq:cc { l__draw_layer_ ##1 _box }
+ { g__draw_layer_ ##1 _box }
+ }
+ }
+ }
+\cs_new_protected:Npn \__draw_layers_restore:
+ {
+ \clist_map_inline:Nn \l_draw_layers_clist
+ {
+ \str_if_eq:nnF {##1} { main }
+ {
+ \box_gset_eq:cc { g__draw_layer_ ##1 _box }
+ { l__draw_layer_ ##1 _box }
+ }
+ }
+ }
+\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. }
%% File: l3draw-paths.dtx
\tl_new:N \l__draw_path_tmp_tl
\fp_new:N \l__draw_path_tmpa_fp
@@ -183,15 +279,12 @@
}
\cs_new_protected:Npn \draw_path_curveto:nnn #1#2#3
{
- \__draw_point_process:nnn
+ \__draw_point_process:nnnn
{
- \__draw_point_process:nn
- {
- \__draw_path_mark_corner:
- \__draw_path_curveto:nnnnnn
- }
- { \draw_point_transform:n {#1} }
+ \__draw_path_mark_corner:
+ \__draw_path_curveto:nnnnnn
}
+ { \draw_point_transform:n {#1} }
{ \draw_point_transform:n {#2} }
{ \draw_point_transform:n {#3} }
}
@@ -214,16 +307,12 @@
{ \__draw_point_process:nn { \__draw_path_lineto:nn } {#1} }
\cs_new_protected:Npn \draw_path_canvas_curveto:nnn #1#2#3
{
- \__draw_point_process:nnn
+ \__draw_point_process:nnnn
{
- \__draw_point_process:nn
- {
- \__draw_path_mark_corner:
- \__draw_path_curveto:nnnnnn
- }
- {#1}
+ \__draw_path_mark_corner:
+ \__draw_path_curveto:nnnnnn
}
- {#2} {#3}
+ {#1} {#2} {#3}
}
\cs_new_protected:Npn \draw_path_curveto:nn #1#2
{
@@ -353,14 +442,11 @@
\__draw_point_transform_noshift:n
{ \draw_point_polar:nnn { #1 #4 90 } {#7} {#8} }
}
- \__draw_point_process:nn
+ \__draw_point_process:nnn
+ { \__draw_path_arc_auxiv:nnnn }
{
- \__draw_point_process:nn
- { \__draw_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
@@ -417,12 +503,9 @@
}
\cs_new_protected:Npn \draw_path_ellipse:nnn #1#2#3
{
- \__draw_point_process:nnn
- {
- \__draw_point_process:nn
- { \__draw_path_ellipse:nnnnnn }
- { \draw_point_transform:n {#1} }
- }
+ \__draw_point_process:nnnn
+ { \__draw_path_ellipse:nnnnnn }
+ { \draw_point_transform:n {#1} }
{ \__draw_point_transform_noshift:n {#2} }
{ \__draw_point_transform_noshift:n {#3} }
}
@@ -706,27 +789,55 @@
%% File: l3draw-points.dtx
\cs_new:Npn \__draw_point_process:nn #1#2
{
- \__draw_point_process_auxi:fn
+ \exp_args:Nf \__draw_point_process_auxi:nn
{ \__draw_point_to_dim:n {#2} }
{#1}
}
\cs_new:Npn \__draw_point_process_auxi:nn #1#2
{ \__draw_point_process_auxii:nw {#2} #1 \q_stop }
-\cs_generate_variant:Nn \__draw_point_process_auxi:nn { f }
\cs_new:Npn \__draw_point_process_auxii:nw #1 #2 , #3 \q_stop
{ #1 {#2} {#3} }
\cs_new:Npn \__draw_point_process:nnn #1#2#3
{
- \__draw_point_process_auxiii:ffn
+ \exp_args:Nff \__draw_point_process_auxiii:nnn
{ \__draw_point_to_dim:n {#2} }
{ \__draw_point_to_dim:n {#3} }
{#1}
}
\cs_new:Npn \__draw_point_process_auxiii:nnn #1#2#3
{ \__draw_point_process_auxiv:nw {#3} #1 \q_mark #2 \q_stop }
-\cs_generate_variant:Nn \__draw_point_process_auxiii:nnn { ff }
\cs_new:Npn \__draw_point_process_auxiv:nw #1 #2 , #3 \q_mark #4 , #5 \q_stop
{ #1 {#2} {#3} {#4} {#5} }
+\cs_new:Npn \__draw_point_process:nnnn #1#2#3#4
+ {
+ \exp_args:Nfff \__draw_point_process_auxv:nnnn
+ { \__draw_point_to_dim:n {#2} }
+ { \__draw_point_to_dim:n {#3} }
+ { \__draw_point_to_dim:n {#4} }
+ {#1}
+ }
+\cs_new:Npn \__draw_point_process_auxv:nnnn #1#2#3#4
+ { \__draw_point_process_auxvi:nw {#4} #1 \q_mark #2 \q_mark #3 \q_stop }
+\cs_new:Npn \__draw_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 \__draw_point_process:nnnnn #1#2#3#4#5
+ {
+ \exp_args:Nffff \__draw_point_process_auxvii:nnnnn
+ { \__draw_point_to_dim:n {#2} }
+ { \__draw_point_to_dim:n {#3} }
+ { \__draw_point_to_dim:n {#4} }
+ { \__draw_point_to_dim:n {#5} }
+ {#1}
+ }
+\cs_new:Npn \__draw_point_process_auxvii:nnnnn #1#2#3#4#5
+ {
+ \__draw_point_process_auxviii:nw
+ {#5} #1 \q_mark #2 \q_mark #3 \q_mark #4 \q_stop
+ }
+\cs_new:Npn \__draw_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} }
\cs_new:Npn \__draw_point_to_dim:n #1
{ \__draw_point_to_dim_aux:f { \fp_eval:n {#1} } }
\cs_new:Npn \__draw_point_to_dim_aux:n #1
@@ -749,12 +860,9 @@
}
\cs_new:Npn \draw_point_intersect_lines:nnnn #1#2#3#4
{
- \__draw_point_process:nnn
- {
- \__draw_point_process:nnn
- { \__draw_point_intersect_lines:nnnnnnnn } {#3} {#4}
- }
- {#1} {#2}
+ \__draw_point_process:nnnnn
+ { \__draw_point_intersect_lines:nnnnnnnn }
+ {#1} {#2} {#3} {#4}
}
\cs_new:Npn \__draw_point_intersect_lines:nnnnnnnn #1#2#3#4#5#6#7#8
{
@@ -866,18 +974,14 @@
\cs_generate_variant:Nn \__draw_point_interpolate_distance:nnnnn { f }
\cs_new:Npn \draw_point_interpolate_arcaxes:nnnnnn #1#2#3#4#5#6
{
- \__draw_point_process:nnn
- {
- \__draw_point_process:nn
- { \__draw_point_interpolate_arcaxes_auxi:nnnnnnnnn {#1} {#5} {#6} }
- {#4}
- }
- {#2} {#3}
+ \__draw_point_process:nnnn
+ { \__draw_point_interpolate_arcaxes_auxi:nnnnnnnnn {#1} {#5} {#6} }
+ {#2} {#3} {#4}
}
\cs_new:Npn \__draw_point_interpolate_arcaxes_auxi:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
\__draw_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}
}
\cs_new:Npn \__draw_point_interpolate_arcaxes_auxii:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
@@ -902,19 +1006,15 @@
\cs_generate_variant:Nn \__draw_point_interpolate_arcaxes_auxiv:nnnnnnnn { ff }
\cs_new:Npn \draw_point_interpolate_curve:nnnnnn #1#2#3#4#5
{
- \__draw_point_process:nnn
- {
- \__draw_point_process:nnn
- { \__draw_point_interpolate_curve_auxi:nnnnnnnnn {#1} }
- {#4} {#5}
- }
- {#2} {#3}
+ \__draw_point_process:nnnnn
+ { \__draw_point_interpolate_curve_auxi:nnnnnnnnn {#1} }
+ {#2} {#3} {#4} {#5}
}
\cs_new:Npn \__draw_point_interpolate_curve_auxi:nnnnnnnnn #1#2#3#4#5#6#7#8#9
{
\__draw_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}
}
\cs_new:Npn \__draw_point_interpolate_curve_auxii:nnnnnnnnn
#1#2#3#4#5#6#7#8#9
@@ -1095,6 +1195,7 @@
\dim_new:N \g__draw_ymin_dim
\bool_new:N \l_draw_bb_update_bool
\box_new:N \l__draw_main_box
+\box_new:N \l__draw_layer_main_box
\int_new:N \g__draw_id_int
\cs_new_protected:Npn \__draw_reset_bb:
{
@@ -1122,9 +1223,13 @@
\draw_join_miter:
\draw_miterlimit:n { 10 }
\draw_dash_pattern:nn { } { 0cm }
+ \hbox_set:Nw \l__draw_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
+ \__draw_layers_insert:
\driver_draw_end:
\hbox_set_end:
\dim_compare:nNnT \g__draw_xmin_dim = \c_max_dim
@@ -1193,9 +1298,11 @@
\draw_path_scope_begin:
\draw_transform_matrix_reset:
\draw_transform_shift_reset:
+ \__draw_layers_save:
}
\cs_new_protected:Npn \draw_suspend_end:
{
+ \__draw_layers_restore:
\draw_path_scope_end:
\__draw_scope_bb_end:
}
@@ -1603,7 +1710,7 @@
}
\draw_transform_matrix_reset:
\draw_transform_shift_reset:
-\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__draw_matrix_a_fp {#1}
\fp_set:Nn \l__draw_matrix_b_fp {#2}
@@ -1619,44 +1726,44 @@
{ \bool_set_false:N \l__draw_matrix_active_bool }
{ \bool_set_true:N \l__draw_matrix_active_bool }
}
-\cs_new_protected:Npn \draw_transform_shift:n #1
+\cs_new_protected:Npn \draw_transform_shift_absolute:n #1
{
\__draw_point_process:nn
- { \__draw_transform_shift:nn } {#1}
+ { \__draw_transform_shift_absolute:nn } {#1}
}
-\cs_new_protected:Npn \__draw_transform_shift:nn #1#2
+\cs_new_protected:Npn \__draw_transform_shift_absolute:nn #1#2
{
\dim_set:Nn \l__draw_xshift_dim {#1}
\dim_set:Nn \l__draw_yshift_dim {#2}
}
-\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
{
- \__draw_transform_concat:nnnn
+ \__draw_transform:nnnn
{ \fp_eval:n {#1} }
{ \fp_eval:n {#2} }
{ \fp_eval:n {#3} }
{ \fp_eval:n {#4} }
}
}
-\cs_new_protected:Npn \__draw_transform_concat:nnnn #1#2#3#4
+\cs_new_protected:Npn \__draw_transform:nnnn #1#2#3#4
{
\use:x
{
- \draw_transform_matrix:nnnn
+ \draw_transform_matrix_absolute:nnnn
{ #1 * \l__draw_matrix_a_fp + #2 * \l__draw_matrix_c_fp }
{ #1 * \l__draw_matrix_b_fp + #2 * \l__draw_matrix_d_fp }
{ #3 * \l__draw_matrix_a_fp + #4 * \l__draw_matrix_c_fp }
{ #3 * \l__draw_matrix_b_fp + #4 * \l__draw_matrix_d_fp }
}
}
-\cs_new_protected:Npn \draw_transform_shift_concat:n #1
+\cs_new_protected:Npn \draw_transform_shift:n #1
{
\__draw_point_process:nn
- { \__draw_transform_shift_concat:nn } {#1}
+ { \__draw_transform_shift:nn } {#1}
}
-\cs_new_protected:Npn \__draw_transform_shift_concat:nn #1#2
+\cs_new_protected:Npn \__draw_transform_shift:nn #1#2
{
\dim_set:Nn \l__draw_xshift_dim { \l__draw_xshift_dim + #1 }
\dim_set:Nn \l__draw_yshift_dim { \l__draw_yshift_dim + #2 }
@@ -1709,28 +1816,28 @@
{
\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 }
}
}
\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 } }
\cs_new_protected:Npn \draw_transform_rotate:n #1
{ \__draw_transform_rotate:f { \fp_eval:n {#1} } }
\cs_new_protected:Npn \__draw_transform_rotate:n #1
@@ -1741,7 +1848,7 @@
}
\cs_generate_variant:Nn \__draw_transform_rotate:n { f }
\cs_new_protected:Npn \__draw_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 \__draw_transform_rotate:nn { ff }
%%
%%