[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.