[latex3-commits] [git/LaTeX3-latex3-latex3] master: Generalise color stack (d94ebd7f7)
Joseph Wright
joseph.wright at morningstar2.co.uk
Tue Dec 8 08:34:10 CET 2020
Repository : https://github.com/latex3/latex3
On branch : master
Link : https://github.com/latex3/latex3/commit/d94ebd7f7480c819412dc345ebc39987da6b22af
>---------------------------------------------------------------
commit d94ebd7f7480c819412dc345ebc39987da6b22af
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Tue Dec 8 07:34:10 2020 +0000
Generalise color stack
>---------------------------------------------------------------
d94ebd7f7480c819412dc345ebc39987da6b22af
l3backend/l3backend-color.dtx | 121 +++++++++++++++++++++++++++-----
l3kernel/testfiles/m3expl001.luatex.tlg | 2 +
l3kernel/testfiles/m3expl001.tlg | 2 +
l3kernel/testfiles/m3expl001.xetex.tlg | 2 +-
l3kernel/testfiles/m3expl003.luatex.tlg | 2 +
l3kernel/testfiles/m3expl003.tlg | 2 +
l3kernel/testfiles/m3expl003.xetex.tlg | 2 +-
7 files changed, 113 insertions(+), 20 deletions(-)
diff --git a/l3backend/l3backend-color.dtx b/l3backend/l3backend-color.dtx
index 2ac93595c..39bd9ec69 100644
--- a/l3backend/l3backend-color.dtx
+++ b/l3backend/l3backend-color.dtx
@@ -60,14 +60,113 @@
%<@@=color>
% \end{macrocode}
%
-% Color support is split into parts: general color, separations, and color for
+% Color support is split into parts: the color stack, general color, separations, and color for
% drawings. We have different approaches in each backend, and have some choices
% to make about \texttt{dvipdfmx}/\XeTeX{} in particular. Whilst it is in some ways
% convenient to use the same approach in multiple backends, the fact that
% \texttt{dvipdfmx}/\XeTeX{} is PDF-based means it (largely) sticks closer to
% direct PDF output.
%
-% \subsection{\texttt{dvips}-style}
+% \subsection{The color stack}
+%
+% For PDF-based engines, we have a color stack available inside the specials.
+% This is used for concepts beyond color itself: it is needed to manage th graphics
+% state generally. The exact form depends on the engine, and for
+% \texttt{dvipdfmx}/\XeTeX{} the backend version.
+%
+% \subsubsection{\texttt{dvipdfmx}/\XeTeX{}}
+%
+% \begin{macrocode}
+%<*dvipdfmx|xetex>
+% \end{macrocode}
+%
+% \begin{macro}{\__kernel_color_stack_push:nn}
+% \begin{macro}{\__kernel_color_stack_pop:n}
+% Simple enough but needs a version check.
+% \begin{macrocode}
+\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
+ {
+ \cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2
+ {
+ \__kernel_backend_literal:x
+ {
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ push ~ (#2)
+ }
+ }
+ \cs_new_protected:Npn \__kernel_color_stack_pop:n #1
+ {
+ \__kernel_backend_literal:x
+ {
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ pop
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</dvipdfmx|xetex>
+% \end{macrocode}
+%
+% \subsubsection{\LuaTeX}
+%
+% \begin{macrocode}
+%<*luatex>
+% \end{macrocode}
+%
+% \begin{macro}{\__kernel_color_stack_push:nn}
+% \begin{macro}{\__kernel_color_stack_pop:n}
+% \begin{macrocode}
+\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2
+ {
+ \tex_pdfextension:D colorstack ~
+ \int_eval:n {#1} ~ push ~ {#2}
+ }
+\cs_new_protected:Npn \__kernel_color_stack_pop:n #1
+ {
+ \tex_pdfextension:D colorstack ~
+ \int_eval:n {#1} ~ pop \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</luatex>
+% \end{macrocode}
+%
+% \subsubsection{\pdfTeX}
+%
+% \begin{macrocode}
+%<*pdftex>
+% \end{macrocode}
+%
+% \begin{macro}{\__kernel_color_stack_push:nn}
+% \begin{macro}{\__kernel_color_stack_pop:n}
+% \begin{macrocode}
+\cs_new_protected:Npn \__kernel_color_stack_push:nn #1#2
+ {
+ \tex_pdfcolorstack:D
+ \int_eval:n {#1} ~ push ~ {#2}
+ }
+\cs_new_protected:Npn \__kernel_color_stack_pop:n #1
+ {
+ \tex_pdfcolorstack:D
+ \int_eval:n {#1} ~ pop \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</pdftex>
+% \end{macrocode}
+%
% \subsection{General color}
%
% \subsubsection{\texttt{dvips}-style}
@@ -230,25 +329,11 @@
{ \@@_backend_select:n { #1 ~ rg ~ #1 ~ RG } }
\cs_new_protected:Npn \@@_backend_select:n #1
{
-%<*luatex>
- \tex_pdfextension:D colorstack
-%</luatex>
-%<*pdftex>
- \tex_pdfcolorstack:D
-%</pdftex>
- \l__kernel_color_stack_int push {#1}
+ \__kernel_color_stack_push:nn \l__kernel_color_stack_int {#1}
\group_insert_after:N \@@_backend_reset:
}
\cs_new_protected:Npn \@@_backend_reset:
- {
-%<*luatex>
- \tex_pdfextension:D colorstack
-%</luatex>
-%<*pdftex>
- \tex_pdfcolorstack:D
-%</pdftex>
- \l__kernel_color_stack_int pop \scan_stop:
- }
+ { \__kernel_color_stack_pop:n \l__kernel_color_stack_int }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index 8b9a9ad24..2bd13fb11 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -27,6 +27,8 @@ Defining \__kernel_backend_scope_begin: on line ...
Defining \__kernel_backend_scope_end: on line ...
Defining \__kernel_backend_matrix:n on line ...
Defining \__kernel_backend_matrix:x on line ...
+Defining \__kernel_color_stack_push:nn on line ...
+Defining \__kernel_color_stack_pop:n on line ...
Defining \__color_backend_pickup:N on line ...
Defining \l__kernel_color_stack_int on line ...
\l__kernel_color_stack_int=\count...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index 1dc04ecb1..77d914451 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -27,6 +27,8 @@ Defining \__kernel_backend_scope_begin: on line ...
Defining \__kernel_backend_scope_end: on line ...
Defining \__kernel_backend_matrix:n on line ...
Defining \__kernel_backend_matrix:x on line ...
+Defining \__kernel_color_stack_push:nn on line ...
+Defining \__kernel_color_stack_pop:n on line ...
Defining \__color_backend_pickup:N on line ...
Defining \l__kernel_color_stack_int on line ...
\l__kernel_color_stack_int=\count...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index c2380be9d..9caa418e5 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -28,11 +28,11 @@ Defining \__kernel_backend_scope_end: on line ...
(|extractbb --version)
Defining \c__kernel_sys_dvipdfmx_version_int on line ...
\c__kernel_sys_dvipdfmx_version_int=\count...
+Defining \__color_backend_pickup:N on line ...
Defining \__color_backend_select_cmyk:n on line ...
Defining \__color_backend_select_gray:n on line ...
Defining \__color_backend_select_rgb:n on line ...
Defining \__color_backend_reset: on line ...
-Defining \__color_backend_pickup:N on line ...
Defining \__color_backend_select_separation:nn on line ...
Defining \__color_backend_select:n on line ...
Defining \__color_backend_select_devicen:nn on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index 8b9a9ad24..2bd13fb11 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -27,6 +27,8 @@ Defining \__kernel_backend_scope_begin: on line ...
Defining \__kernel_backend_scope_end: on line ...
Defining \__kernel_backend_matrix:n on line ...
Defining \__kernel_backend_matrix:x on line ...
+Defining \__kernel_color_stack_push:nn on line ...
+Defining \__kernel_color_stack_pop:n on line ...
Defining \__color_backend_pickup:N on line ...
Defining \l__kernel_color_stack_int on line ...
\l__kernel_color_stack_int=\count...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index 1dc04ecb1..77d914451 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -27,6 +27,8 @@ Defining \__kernel_backend_scope_begin: on line ...
Defining \__kernel_backend_scope_end: on line ...
Defining \__kernel_backend_matrix:n on line ...
Defining \__kernel_backend_matrix:x on line ...
+Defining \__kernel_color_stack_push:nn on line ...
+Defining \__kernel_color_stack_pop:n on line ...
Defining \__color_backend_pickup:N on line ...
Defining \l__kernel_color_stack_int on line ...
\l__kernel_color_stack_int=\count...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index c2380be9d..9caa418e5 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -28,11 +28,11 @@ Defining \__kernel_backend_scope_end: on line ...
(|extractbb --version)
Defining \c__kernel_sys_dvipdfmx_version_int on line ...
\c__kernel_sys_dvipdfmx_version_int=\count...
+Defining \__color_backend_pickup:N on line ...
Defining \__color_backend_select_cmyk:n on line ...
Defining \__color_backend_select_gray:n on line ...
Defining \__color_backend_select_rgb:n on line ...
Defining \__color_backend_reset: on line ...
-Defining \__color_backend_pickup:N on line ...
Defining \__color_backend_select_separation:nn on line ...
Defining \__color_backend_select:n on line ...
Defining \__color_backend_select_devicen:nn on line ...
More information about the latex3-commits
mailing list.