summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3backend/l3backend-basics.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-08-08 03:01:09 +0000
committerNorbert Preining <norbert@preining.info>2020-08-08 03:01:09 +0000
commit1c9455caf30309c8b8ba69afdc5a16a83d9f9a58 (patch)
tree0bc3971e599005a7420c53782539e789de57b40d /macros/latex/contrib/l3backend/l3backend-basics.dtx
parent3710c23789342d9d88783cbe9ad23eb5263a7c33 (diff)
CTAN sync 202008080301
Diffstat (limited to 'macros/latex/contrib/l3backend/l3backend-basics.dtx')
-rw-r--r--macros/latex/contrib/l3backend/l3backend-basics.dtx79
1 files changed, 57 insertions, 22 deletions
diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx
index 00367dea5f..209b2a648f 100644
--- a/macros/latex/contrib/l3backend/l3backend-basics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-06-29}
+% \date{Released 2020-08-07}
%
% \maketitle
%
@@ -56,7 +56,7 @@
% \section{\pkg{l3backend-basics} Implementation}
%
% \begin{macrocode}
-%<*initex|package>
+%<*package>
% \end{macrocode}
%
% Whilst there is a reasonable amount of code overlap between backends,
@@ -71,23 +71,23 @@
%<*package>
\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2020-06-29}{}
+ {l3backend-dvipdfmx.def}{2020-08-07}{}
{L3 backend support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-dvips.def}{2020-06-29}{}
+ {l3backend-dvips.def}{2020-08-07}{}
{L3 backend support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-dvisvgm.def}{2020-06-29}{}
+ {l3backend-dvisvgm.def}{2020-08-07}{}
{L3 backend support: dvisvgm}
%</dvisvgm>
%<*pdfmode>
- {l3backend-pdfmode.def}{2020-06-29}{}
+ {l3backend-pdfmode.def}{2020-08-07}{}
{L3 backend support: PDF mode}
%</pdfmode>
%<*xdvipdfmx>
- {l3backend-xdvipdfmx.def}{2020-06-29}{}
+ {l3backend-xdvipdfmx.def}{2020-08-07}{}
{L3 backend support: xdvipdfmx}
%</xdvipdfmx>
%</package>
@@ -358,36 +358,71 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
-% A scope in SVG terms is slightly different to the other backends as
-% operations have to be \enquote{tied} to these not simply inside them.
+% \begin{variable}{\g__kernel_backend_scope_int, \l__kernel_backend_scope_int}
+% In SVG, we need to track scope nesting as properties attach to scopes; that
+% requires a pair of \texttt{int} registers.
% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_backend_scope_begin:
- { \__kernel_backend_literal_svg:n { <g> } }
-\cs_new_protected:Npn \__kernel_backend_scope_end:
- { \__kernel_backend_literal_svg:n { </g> } }
+\int_new:N \g__kernel_backend_scope_int
+\int_new:N \l__kernel_backend_scope_int
% \end{macrocode}
-% \end{macro}
+% \end{variable}
%
+% \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
% \begin{macro}{\__kernel_backend_scope_begin:n, \__kernel_backend_scope_begin:x}
-% In SVG transformations, clips and so on are attached directly to scopes so
-% we need a way or allowing for that. This is rather more useful than
-% \cs{__kernel_backend_scope_begin:} as a result.
-% No assumptions are made about the nature
-% of the scoped operation(s).
+% \begin{macro}{\__kernel_backend_scope:n, \__kernel_backend_scope:x}
+% In SVG, the need to attach concepts to a scope means we need to be sure we
+% will close all of the open scopes. That is easiest done if we only need
+% an outer \enquote{wrapper} \texttt{begin}/\texttt{end} pair, and within
+% that we apply operations as a simple scoped statements. To keep down the
+% non-productive groups, we also have a \texttt{begin} version that does take
+% an argument.
% \begin{macrocode}
+\cs_new_protected:Npn \__kernel_backend_scope_begin:
+ {
+ \__kernel_backend_literal_svg:n { <g> }
+ \int_set_eq:NN
+ \l__kernel_backend_scope_int
+ \g__kernel_backend_scope_int
+ \group_begin:
+ \int_gset:Nn \g__kernel_backend_scope_int { 1 }
+ }
+\cs_new_protected:Npn \__kernel_backend_scope_end:
+ {
+ \prg_replicate:nn
+ { \g__kernel_backend_scope_int }
+ { \__kernel_backend_literal_svg:n { </g> } }
+ \group_end:
+ \int_gset_eq:NN
+ \g__kernel_backend_scope_int
+ \l__kernel_backend_scope_int
+ }
\cs_new_protected:Npn \__kernel_backend_scope_begin:n #1
- { \__kernel_backend_literal_svg:n { <g~ #1 > } }
+ {
+ \__kernel_backend_literal_svg:n { <g ~ #1 > }
+ \int_set_eq:NN
+ \l__kernel_backend_scope_int
+ \g__kernel_backend_scope_int
+ \group_begin:
+ \int_gset:Nn \g__kernel_backend_scope_int { 1 }
+ }
\cs_generate_variant:Nn \__kernel_backend_scope_begin:n { x }
+\cs_new_protected:Npn \__kernel_backend_scope:n #1
+ {
+ \__kernel_backend_literal_svg:n { <g ~ #1 > }
+ \int_gincr:N \g__kernel_backend_scope_int
+ }
+\cs_generate_variant:Nn \__kernel_backend_scope:n { x }
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</dvisvgm>
% \end{macrocode}
%
% \begin{macrocode}
-%</initex|package>
+%</package>
% \end{macrocode}
%
% \end{implementation}