diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx | 79 |
1 files changed, 57 insertions, 22 deletions
diff --git a/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx b/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx index 00367dea5f3..209b2a648fb 100644 --- a/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx +++ b/Master/texmf-dist/source/latex/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} |