[latex3-commits] [l3svn] branch master updated: Extend 'drawing' driver for dvips

noreply at latex-project.org noreply at latex-project.org
Wed May 18 14:32:37 CEST 2016


This is an automated email from the git hooks/post-receive script.

joseph pushed a commit to branch master
in repository l3svn.

The following commit(s) were added to refs/heads/master by this push:
       new  8ecb6fa   Extend 'drawing' driver for dvips
8ecb6fa is described below

commit 8ecb6fab0d942d1fd4b3bd11306286b9b030e8bf
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Wed May 18 13:32:33 2016 +0100

    Extend 'drawing' driver for dvips
---
 l3kernel/l3drivers.dtx                   |  476 +++++++++++++++++++++++++++++-
 l3kernel/testfiles/d3dvips.luatex.tlg    |    2 +-
 l3kernel/testfiles/d3dvips.tlg           |    2 +-
 l3kernel/testfiles/d3pdfmode.ptex.tlg    |    2 +-
 l3kernel/testfiles/d3pdfmode.uptex.tlg   |    2 +-
 l3kernel/testfiles/d3xdvipdfmx.ptex.tlg  |    2 +-
 l3kernel/testfiles/d3xdvipdfmx.uptex.tlg |    2 +-
 l3kernel/testfiles/m3expl001.luatex.tlg  |    6 +
 l3kernel/testfiles/m3expl001.ptex.tlg    |    6 +
 l3kernel/testfiles/m3expl001.tlg         |    6 +
 l3kernel/testfiles/m3expl001.uptex.tlg   |    6 +
 l3kernel/testfiles/m3expl001.xetex.tlg   |    6 +
 l3kernel/testfiles/m3expl003.luatex.tlg  |    6 +
 l3kernel/testfiles/m3expl003.ptex.tlg    |    6 +
 l3kernel/testfiles/m3expl003.tlg         |    6 +
 l3kernel/testfiles/m3expl003.uptex.tlg   |    6 +
 l3kernel/testfiles/m3expl003.xetex.tlg   |    6 +
 17 files changed, 538 insertions(+), 10 deletions(-)

diff --git a/l3kernel/l3drivers.dtx b/l3kernel/l3drivers.dtx
index fe2d848..3e318a4 100755
--- a/l3kernel/l3drivers.dtx
+++ b/l3kernel/l3drivers.dtx
@@ -899,14 +899,45 @@
 % \end{macro}
 %
 % \begin{macro}[int]
-%   {\@@_draw_color_cmyk_fill:nnnn, \@@_draw_color_cmyk_stroke:nnnn}
+%   {
+%     \@@_draw_color_cmyk:nnnn        ,
+%     \@@_draw_color_cmyk_fill:nnnn   ,
+%     \@@_draw_color_cmyk_stroke:nnnn
+%   }
+% \begin{macro}[aux]{\@@_draw_color_cmyk_aux:nnnn}
 % \begin{macro}[int]
-%   {\@@_draw_color_gray_fill:n, \@@_draw_color_gray_stroke:n}
+%   {
+%     \@@_draw_color_gray:n        ,
+%     \@@_draw_color_gray_fill:n   ,
+%     \@@_draw_color_gray_stroke:n
+%   }
+% \begin{macro}[aux]{\@@_draw_color_gray_aux:n}
 % \begin{macro}[int]
-%   {\@@_draw_color_rgb_fill:nnn, \@@_draw_color_rgb_stroke:nnn}
+%   {
+%     \@@_draw_color_rgb:nnn        ,
+%     \@@_draw_color_rgb_fill:nnn   ,
+%     \@@_draw_color_rgb_stroke:nnn
+%   }
+% \begin{macro}[aux]{\@@_draw_color_rgb_aux:nnn}
 %   Yet more fast conversion, all using the FPU to allow for expressions
 %   in numerical input.
 %     \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_color_cmyk:nnnn #1#2#3#4
+  {
+    \use:x
+      {
+        \@@_draw_color_cmyk_aux:nnnn
+          { \fp_eval:n {#1} }
+          { \fp_eval:n {#2} }
+          { \fp_eval:n {#3} }
+          { \fp_eval:n {#4} }
+      }
+  }
+\cs_new_protected:Npn \@@_draw_color_cmyk_aux:nnnn #1#2#3#4
+  {
+    \@@_draw_literal:n
+      { #1 ~ #2 ~ #3 ~ #4 ~ k ~ #1 ~ #2 ~ #3 ~ #4 ~ K }
+  }
 \cs_new_protected:Npn \@@_draw_color_cmyk_fill:nnnn #1#2#3#4
   {
     \@@_draw_literal:x
@@ -925,10 +956,34 @@
         K
       }
   }
+\cs_new_protected:Npn \@@_draw_color_gray:n #1
+  {
+    \use:x
+      { \@@_draw_color_gray_aux:n { \fp_eval:n {#1} } }
+  }
+\cs_new_protected:Npn \@@_draw_color_gray_aux:n #1
+  {
+    \@@_draw_literal:n { #1 ~g ~ #1 ~ G }
+  }
 \cs_new_protected:Npn \@@_draw_color_gray_fill:n #1
   { \@@_draw_literal:x { \fp_eval:n {#1} ~ g } }
 \cs_new_protected:Npn \@@_draw_color_gray_stroke:n #1
   { \@@_draw_literal:x { \fp_eval:n {#1} ~ G } }
+\cs_new_protected:Npn \@@_draw_color_rgb:nnn #1#2#3
+  {
+    \use:x
+      {
+        \@@_draw_color_rgb_aux:nnn
+          { \fp_eval:n {#1} }
+          { \fp_eval:n {#2} }
+          { \fp_eval:n {#3} }
+      }
+  }
+\cs_new_protected:Npn \@@_draw_color_rgb_aux:nnn #1#2#3
+  {
+    \@@_draw_literal:n
+      { #1 ~ #2 ~ #3 ~ rg ~ #1 ~ #2 ~ #3 ~ RG }
+  }
 \cs_new_protected:Npn \@@_draw_color_rgb_fill:nnn #1#2#3
   {
     \@@_draw_literal:x
@@ -943,6 +998,9 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \begin{macro}[int]{\@@_draw_transformcm:nnnnnn}
 %   The first four arguments here are floats (the affine matrix), the last
@@ -1027,7 +1085,8 @@
 %
 % \begin{macro}{\@@_scope_begin:, \@@_scope_end:}
 %   Scope saving/restoring is done directly with no need to worry about the
-%   transformation matrix.
+%   transformation matrix. General scoping is only for the graphics stack so
+%   the lower-cost |gsave|/|grestore| pair are used.
 %    \begin{macrocode}
 \cs_new_protected_nopar:Npn \@@_scope_begin:
   { \tex_special:D { ps:gsave } }
@@ -1156,6 +1215,415 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Drawing}
+%
+% \begin{macro}[aux]{\@@_draw_literal:n, \@@_draw_literal:x}
+%   Literals with no positioning (using |ps:| each one is positioned but
+%   cut of from everything else, so no good for the stepwise approach needed
+%   here).
+%     \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_literal:n #1
+  { \tex_special:D { ps:: ~ #1 } }
+\cs_generate_variant:Nn \@@_draw_literal:n { x }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_draw_begin:, \@@_draw_end:}
+%   The |ps::[begin]| special here deals with positioning but allows us to
+%   continue on to a matching |ps::[end]|: contrast with |ps:| which positions
+%   but where we can't split material between separate calls. The
+%   |@beginspecial|/|@endspecial| pair are from |special.pro| and correct the
+%   scale and $y$-axis direction. The reference point at the start of the box
+%   is saved (as |l3x|/|l3y|) as it is needed when inserting various items.
+%     \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_draw_begin:
+  {
+    \tex_special:D { ps::[begin] }
+    \tex_special:D { ps::~save }
+    \tex_special:D { ps::~/l3x~currentpoint~/l3y~exch~def~def }
+    \tex_special:D { ps::~@beginspecial }
+  }
+\cs_new_protected_nopar:Npn \@@_draw_end:
+  {
+    \tex_special:D { ps::~@endspecial }
+    \tex_special:D { ps::~restore }
+    \tex_special:D { ps::[end] }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_draw_scope_begin:, \@@_draw_scope_end:}
+%   Scope here may need to contain saved definitions, so the entire memory
+%   rather than just the graphic state has to be sent to the stack.
+%     \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_draw_scope_begin:
+  { \@@_draw_literal:n { save } }
+\cs_new_protected_nopar:Npn \@@_draw_scope_end:
+  { \@@_draw_literal:n { restore } }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_draw_moveto:nn, \@@_draw_lineto:nn}
+% \begin{macro}[int]{\@@_draw_curveto:nnnnnn}
+%   Path creation operations all resolve directly to PostScript primitive
+%   steps, with only the need to convert to \texttt{bp}. Notice that
+%   \texttt{x}-type expansion is included here to ensure that any variable
+%   values are forced to literals before any possible caching.
+%     \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_moveto:nn #1#2
+  {
+    \@@_draw_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ moveto }
+  }
+\cs_new_protected:Npn \@@_draw_lineto:nn #1#2
+  {
+    \@@_draw_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ lineto }
+  }
+\cs_new_protected:Npn \@@_draw_curveto:nnnnnn #1#2#3#4#5#6
+  {
+    \@@_draw_literal:x
+      {
+        \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
+        \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
+        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
+        curveto
+      }
+ }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{variable}[int]{\@@_draw_eor_bool}
+%    The even-odd rule here can be implemented as a simply switch.
+%     \begin{macrocode}
+\bool_new:N \@@_draw_eor_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[int]
+%   {
+%     \@@_draw_closepath:   ,
+%     \@@_draw_stroke:      ,
+%     \@@_draw_closestroke: ,
+%     \@@_draw_fill:        ,
+%     \@@_draw_fillstroke:  ,
+%     \@@_draw_clip:        ,
+%     \@@_draw_discardpath:
+%   }
+% \begin{variable}[aux]{\l_@@_draw_clip_bool}
+%   Unlike PDF, PostScript doesn't track separate colors for strokes and other
+%   elements. It is also desirable to have the |clip| keyword after a stroke or
+%   fill. To achieve those outcomes, there is some work to do. For color, if a
+%   stroke or fill color is defined it is used for the relevant operation, with
+%   a graphic scope inserted as required. That does mean that once such a color
+%   is set all further uses inside the same scope have to use scoping: see also
+%   the color set up functions. For clipping, the required ordering is achieved
+%   using a \TeX{} switch. All of the operations end with a new path instruction
+%   as they do not terminate (again in contrast to PDF).
+%     \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_draw_closepath:
+  { \@@_draw_literal:n { closepath } }
+\cs_new_protected_nopar:Npn \@@_draw_stroke:
+  {
+    \@@_draw_literal:n { currentdict~/l3sc~known~{gsave~l3sc}~if }
+    \@@_draw_literal:n { stroke }
+    \@@_draw_literal:n { currentdict~/l3sc~known~{grestore}~if }
+    \bool_if:NT \l_@@_draw_clip_bool
+      {
+        \@@_draw_literal:x
+          {
+            \bool_if:NT \@@_draw_eor_bool { eo }
+            clip
+          }
+      }
+    \@@_draw_literal:n { newpath }
+    \bool_set_false:N \l_@@_draw_clip_bool
+  }
+\cs_new_protected_nopar:Npn \@@_draw_closestroke:
+  {
+    \@@_draw_closepath:
+    \@@_draw_stroke: 
+  }
+\cs_new_protected_nopar:Npn \@@_draw_fill:
+  {
+    \@@_draw_literal:n { currentdict~/l3fc~known~{gsave~l3fc}~if }
+    \@@_draw_literal:x
+      {
+        \bool_if:NT \@@_draw_eor_bool { eo }
+        fill
+      }
+    \@@_draw_literal:n { currentdict~/l3fc~known~{grestore}~if }
+    \@@_draw_literal:n { currentdict~/l3sc~known~{gsave~l3sc}~if }
+    \@@_draw_literal:n { stroke }
+    \@@_draw_literal:n { currentdict~/l3sc~known~{grestore}~if }
+    \bool_if:NT \l_@@_draw_clip_bool
+      {
+        \@@_draw_literal:x
+          {
+            \bool_if:NT \@@_draw_eor_bool { eo }
+            clip
+          }
+      }
+    \@@_draw_literal:n { newpath }
+    \bool_set_false:N \l_@@_draw_clip_bool
+  }
+\cs_new_protected_nopar:Npn \@@_draw_fillstroke:
+  {
+    \@@_draw_literal:n { currentdict~/l3fc~known~{gsave~l3fc}~if }
+    \@@_draw_literal:x
+      {
+        \bool_if:NT \@@_draw_eor_bool { eo }
+        fill
+      }
+    \@@_draw_literal:n { currentdict~/l3fc~known~{grestore}~if }
+    \bool_if:NT \l_@@_draw_clip_bool
+      {
+        \@@_draw_literal:x
+          {
+            \bool_if:NT \@@_draw_eor_bool { eo }
+            clip
+          }
+      }
+    \@@_draw_literal:n { newpath }
+    \bool_set_false:N \l_@@_draw_clip_bool
+  }
+\cs_new_protected_nopar:Npn \@@_draw_clip:
+  { \bool_set_true:N \l_@@_draw_clip_bool }
+\bool_new:N \l_@@_draw_clip_bool 
+\cs_new_protected_nopar:Npn \@@_draw_discardpath:
+  {
+    \bool_if:NT \l_@@_draw_clip_bool
+      {
+        \@@_draw_literal:x
+          {
+            \bool_if:NT \@@_draw_eor_bool { eo }
+            clip
+          }
+      }
+    \@@_draw_literal:n { newpath }
+    \bool_set_false:N \l_@@_draw_clip_bool
+  }
+%    \end{macrocode}
+% \end{variable}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_draw_dash:nn}
+% \begin{macro}[aux]{\@@_draw_dash:n}
+% \begin{macro}[int]{\@@_draw_linewidth:n}
+% \begin{macro}[int]{\@@_draw_miterlimit:n}
+% \begin{macro}[int]^^A
+%   {
+%     \@@_draw_cap_butt:, \@@_draw_cap_round:, \@@_draw_cap_rectangle:,
+%     \@@_draw_join_miter:, \@@_draw_join_round:, \@@_draw_join_bevel:
+%   }
+%   Converting paths to output is again a case of mapping directly to
+%   PostScript operations.
+%     \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_dash:nn #1#2
+  {
+    \@@_draw_literal:x
+      {
+        [ ~
+          \clist_map_function:nN {#1} \@@_draw_dash:n
+        ] ~
+        \dim_to_decimal_in_bp:n {#2} ~ setdash
+      }
+  }
+\cs_new:Npn \@@_draw_dash:n #1
+  { \dim_to_decimal_in_bp:n {#1} ~ }
+\cs_new_protected:Npn \@@_draw_linewidth:n #1
+  {
+    \@@_draw_literal:x
+      { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth }
+  }
+\cs_new_protected:Npn \@@_draw_miterlimit:n #1
+  { \@@_draw_literal:x { \fp_eval:n {#1} ~ setmiterlimit } }
+\cs_new_protected_nopar:Npn \@@_draw_cap_butt:
+  { \@@_draw_literal:n { 0 ~ setlinecap } }
+\cs_new_protected_nopar:Npn \@@_draw_cap_round:
+  { \@@_draw_literal:n { 1 ~ setlinecap } }
+\cs_new_protected_nopar:Npn \@@_draw_cap_rectangle:
+  { \@@_draw_literal:n { 2 ~ setlinecap } }
+\cs_new_protected_nopar:Npn \@@_draw_join_miter:
+  { \@@_draw_literal:n { 0 ~ setlinejoin } }
+\cs_new_protected_nopar:Npn \@@_draw_join_round:
+  { \@@_draw_literal:n { 1 ~ setlinejoin } }
+\cs_new_protected_nopar:Npn \@@_draw_join_bevel:
+  { \@@_draw_literal:n { 2 ~ setlinejoin } }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[aux]{\_@@_draw_color_reset:}
+% \begin{macro}[int]
+%   {
+%     \@@_draw_color_cmyk:nnnn        ,
+%     \@@_draw_color_cmyk_fill:nnnn   ,
+%     \@@_draw_color_cmyk_stroke:nnnn
+%   }
+% \begin{macro}[int]
+%   {
+%     \@@_draw_color_gray:n        ,
+%     \@@_draw_color_gray_fill:n   ,
+%     \@@_draw_color_gray_stroke:n
+%   }
+% \begin{macro}[int]
+%   {
+%     \@@_draw_color_rgb:nnn        ,
+%     \@@_draw_color_rgb_fill:nnn   ,
+%     \@@_draw_color_rgb_stroke:nnn
+%   }
+%   To allow color to be defined for strokes and fills separately and to
+%   respect scoping, the data needs to be stored at the PostScript level.
+%   We cannot undefine (local) fill/stroke colors once set up but we can
+%   set them blank to improve performance slightly.
+%     \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_draw_color_reset:
+  {
+    \@@_draw_literal:n { currentdic~/l3fc~known~{ /l3fc~ { } ~def }~if }
+    \@@_draw_literal:n { currentdic~/l3sc~known~{ /l3sc~ { } ~def }~if }
+  }
+\cs_new_protected:Npn \@@_draw_color_cmyk:nnnn #1#2#3#4
+  {
+    \@@_draw_literal:x
+      {
+        \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
+        \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
+        setcmykcolor ~
+      }
+    \@@_draw_color_reset:
+  }
+\cs_new_protected:Npn \@@_draw_color_cmyk_fill:nnnn #1#2#3#4
+  {
+    \@@_draw_literal:x
+      {
+        /l3fc ~
+          {
+            \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
+            \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
+            setcmykcolor
+          } ~
+        def
+      }
+  }
+\cs_new_protected:Npn \@@_draw_color_cmyk_stroke:nnnn #1#2#3#4
+  {
+    \__driver_draw_literal:x
+      {
+        /l3sc ~
+          {
+            \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
+            \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
+            setcmykcolor
+          } ~
+        def
+      }
+  }
+\cs_new_protected:Npn \@@_draw_color_gray:n #1
+  { 
+    \@@_draw_literal:x { fp_eval:n {#1} ~ setgray  }
+    \@@_draw_color_reset:
+  }
+\cs_new_protected:Npn \@@_draw_color_gray_fill:n #1
+  { \@@_draw_literal:x { /l3fc ~ { \fp_eval:n {#1} ~ setgray } ~ def } }
+\cs_new_protected:Npn \@@_draw_color_gray_stroke:n #1
+  { \@@_draw_literal:x { /l3sc ~ { \fp_eval:n {#1} ~ setgray } ~ def } }
+\cs_new_protected:Npn \@@_draw_color_rgb:nnn #1#2#3
+  {
+    \@@_draw_literal:x
+      {
+        \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~
+         setrgbcolor
+      }
+    \@@_draw_color_reset:
+  }
+\cs_new_protected:Npn \@@_draw_color_rgb_fill:nnn #1#2#3
+  {
+    \@@_draw_literal:x
+      {
+        /l3fc ~
+          {
+            \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~
+            setrgbcolor
+          } ~
+        def
+      }
+  }
+\cs_new_protected:Npn \@@_draw_color_rgb_stroke:nnn #1#2#3
+  {
+    \@@_draw_literal:x
+      {
+        /l3sc ~
+          {
+            \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~
+            setrgbcolor
+          } ~
+        def
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_draw_transformcm:nnnnnn}
+%   The first four arguments here are floats (the affine matrix), the last
+%   two are a displacement vector. Once again, force evaluation to allow for
+%   caching.
+%     \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_transformcm:nnnnnn #1#2#3#4#5#6
+  {
+    \@@_draw_literal:x
+      {
+        [
+          \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
+          \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
+          \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
+        ] ~
+        concat
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_draw_hbox:Nnnnnnn}
+% \begin{variable}[aux]{\l_@@_tmp_box}
+%   Inside a picture |@beginspecial|/|@endspecial| are active, which is
+%   normally a good thing but means that the position and scaling will be off
+%   if the box is inserted directly. Instead, we need to reverse the effect of
+%   the (normally desirable) shift/scaling within the box. That requires
+%   knowing where the reference point for the drawing is: saved as |l3x|/|l3y|
+%   at the start of the picture. Transformation here is relative to the
+%   drawing origin so has to be done purely in driver code not using \TeX{}
+%   offsets. To keep the number of box levels equal between drivers there is
+%   a no-op reboxing here (in the PDF mode version it is more useful).
+%     \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_hbox:Nnnnnnn #1#2#3#4#5#6#7
+  {
+    \@@_scope_begin:
+    \tex_special:D { ps::[end] }
+    \@@_draw_transformcm:nnnnnn {#2} {#3} {#4} {#5} {#6} {#7}
+    \tex_special:D { ps::~72~Resolution~div~72~VResolution~div~neg~scale }
+    \tex_special:D { ps::~magscale~{1~DVImag~div~dup~scale}~if }
+    \tex_special:D { ps::~l3x~neg~l3y~neg~translate }
+    \hbox_set:Nn \l_@@_tmp_box { \box_use:N #1 }
+    \box_set_wd:Nn \l_@@_tmp_box { 0pt }
+    \box_set_ht:Nn \l_@@_tmp_box { 0pt }
+    \box_set_dp:Nn \l_@@_tmp_box { 0pt }
+    \box_use:N \l__driver_tmp_box
+    \tex_special:D { ps::[begin] }
+    \@@_scope_end:
+  }
+\box_new:N \l_@@_tmp_box
+%    \end{macrocode}
+% \end{variable}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</dvips>
 %    \end{macrocode}
diff --git a/l3kernel/testfiles/d3dvips.luatex.tlg b/l3kernel/testfiles/d3dvips.luatex.tlg
index 4094934..5eea204 100644
--- a/l3kernel/testfiles/d3dvips.luatex.tlg
+++ b/l3kernel/testfiles/d3dvips.luatex.tlg
@@ -580,7 +580,7 @@ l. ...  }
 ============================================================
 TEST 4: Color
 ============================================================
-> \box71=
+> \box72=
 \hbox(6.94444+0.0)x50.02786, direction TLT
 .\special{color push gray 0}
 .\OT1/cmr/m/n/10 H
diff --git a/l3kernel/testfiles/d3dvips.tlg b/l3kernel/testfiles/d3dvips.tlg
index 77afc14..ed3c9b6 100644
--- a/l3kernel/testfiles/d3dvips.tlg
+++ b/l3kernel/testfiles/d3dvips.tlg
@@ -548,7 +548,7 @@ l. ...  }
 ============================================================
 TEST 4: Color
 ============================================================
-> \box71=
+> \box72=
 \hbox(6.94444+0.0)x50.02786
 .\special{color push gray 0}
 .\OT1/cmr/m/n/10 H
diff --git a/l3kernel/testfiles/d3pdfmode.ptex.tlg b/l3kernel/testfiles/d3pdfmode.ptex.tlg
index ebe511b..56e4e93 100644
--- a/l3kernel/testfiles/d3pdfmode.ptex.tlg
+++ b/l3kernel/testfiles/d3pdfmode.ptex.tlg
@@ -548,7 +548,7 @@ l. ...  }
 ============================================================
 TEST 4: Color
 ============================================================
-> \box71=
+> \box72=
 \hbox(6.94444+0.0)x50.02786
 .\special{color push gray 0}
 .\OT1/cmr/m/n/10 H
diff --git a/l3kernel/testfiles/d3pdfmode.uptex.tlg b/l3kernel/testfiles/d3pdfmode.uptex.tlg
index ebe511b..56e4e93 100644
--- a/l3kernel/testfiles/d3pdfmode.uptex.tlg
+++ b/l3kernel/testfiles/d3pdfmode.uptex.tlg
@@ -548,7 +548,7 @@ l. ...  }
 ============================================================
 TEST 4: Color
 ============================================================
-> \box71=
+> \box72=
 \hbox(6.94444+0.0)x50.02786
 .\special{color push gray 0}
 .\OT1/cmr/m/n/10 H
diff --git a/l3kernel/testfiles/d3xdvipdfmx.ptex.tlg b/l3kernel/testfiles/d3xdvipdfmx.ptex.tlg
index ebe511b..56e4e93 100644
--- a/l3kernel/testfiles/d3xdvipdfmx.ptex.tlg
+++ b/l3kernel/testfiles/d3xdvipdfmx.ptex.tlg
@@ -548,7 +548,7 @@ l. ...  }
 ============================================================
 TEST 4: Color
 ============================================================
-> \box71=
+> \box72=
 \hbox(6.94444+0.0)x50.02786
 .\special{color push gray 0}
 .\OT1/cmr/m/n/10 H
diff --git a/l3kernel/testfiles/d3xdvipdfmx.uptex.tlg b/l3kernel/testfiles/d3xdvipdfmx.uptex.tlg
index ebe511b..56e4e93 100644
--- a/l3kernel/testfiles/d3xdvipdfmx.uptex.tlg
+++ b/l3kernel/testfiles/d3xdvipdfmx.uptex.tlg
@@ -548,7 +548,7 @@ l. ...  }
 ============================================================
 TEST 4: Color
 ============================================================
-> \box71=
+> \box72=
 \hbox(6.94444+0.0)x50.02786
 .\special{color push gray 0}
 .\OT1/cmr/m/n/10 H
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index aa20860..144c1ad 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -4817,10 +4817,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index 889940c..495d0be 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -4806,10 +4806,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index 1185e5e..aeaa83f 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -5009,10 +5009,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index 193b30e..2254331 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -5007,10 +5007,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 5774eba..2d89a52 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -4813,10 +4813,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index c52948f..275b149 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -4818,10 +4818,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index d0faa94..5f0064b 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -4807,10 +4807,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index c31152e..1c0abdf 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -5010,10 +5010,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index c93a8b9..dd4cc80 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -5008,10 +5008,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index 102b083..524c94c 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -4814,10 +4814,16 @@ Defining \__driver_draw_cap_rectangle: on line ...
 Defining \__driver_draw_join_miter: on line ...
 Defining \__driver_draw_join_round: on line ...
 Defining \__driver_draw_join_bevel: on line ...
+Defining \__driver_draw_color_cmyk:nnnn on line ...
+Defining \__driver_draw_color_cmyk_aux:nnnn on line ...
 Defining \__driver_draw_color_cmyk_fill:nnnn on line ...
 Defining \__driver_draw_color_cmyk_stroke:nnnn on line ...
+Defining \__driver_draw_color_gray:n on line ...
+Defining \__driver_draw_color_gray_aux:n on line ...
 Defining \__driver_draw_color_gray_fill:n on line ...
 Defining \__driver_draw_color_gray_stroke:n on line ...
+Defining \__driver_draw_color_rgb:nnn on line ...
+Defining \__driver_draw_color_rgb_aux:nnn on line ...
 Defining \__driver_draw_color_rgb_fill:nnn on line ...
 Defining \__driver_draw_color_rgb_stroke:nnn on line ...
 Defining \__driver_draw_transformcm:nnnnnn on line ...

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the latex3-commits mailing list