[latex3-commits] [git/LaTeX3-latex3-latex3] master: Rework drawing cm support (28709bf)

Joseph Wright joseph.wright at morningstar2.co.uk
Fri Mar 2 23:50:17 CET 2018


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/28709bfc4b6a9bd4aec0005c313fa9055f63f492

>---------------------------------------------------------------

commit 28709bfc4b6a9bd4aec0005c313fa9055f63f492
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Fri Mar 2 22:50:17 2018 +0000

    Rework drawing cm support
    
    At present this leaves the box stuff likely broken,
    but more work is needed there anyway.
    
    Note that the dvisvgm stuff is probably in need of
    heavy revision for both this and boxes.
    (Or perhaps not: SVG output is *very* different from
    everything else, so needs separate testing!)


>---------------------------------------------------------------

28709bfc4b6a9bd4aec0005c313fa9055f63f492
 l3kernel/l3drivers.dtx                  |  214 +++++++++++++++++++++++++------
 l3kernel/testfiles/m3expl001.luatex.tlg |    5 +-
 l3kernel/testfiles/m3expl001.ptex.tlg   |    6 +-
 l3kernel/testfiles/m3expl001.tlg        |    5 +-
 l3kernel/testfiles/m3expl001.uptex.tlg  |    6 +-
 l3kernel/testfiles/m3expl001.xetex.tlg  |    6 +-
 l3kernel/testfiles/m3expl003.luatex.tlg |    5 +-
 l3kernel/testfiles/m3expl003.ptex.tlg   |    6 +-
 l3kernel/testfiles/m3expl003.tlg        |    5 +-
 l3kernel/testfiles/m3expl003.uptex.tlg  |    6 +-
 l3kernel/testfiles/m3expl003.xetex.tlg  |    6 +-
 11 files changed, 224 insertions(+), 46 deletions(-)

diff --git a/l3kernel/l3drivers.dtx b/l3kernel/l3drivers.dtx
index c98cf1d..603f975 100644
--- a/l3kernel/l3drivers.dtx
+++ b/l3kernel/l3drivers.dtx
@@ -444,14 +444,13 @@
 %
 % \subsection{Coordinate system transformations}
 %
-% \begin{function}{\driver_draw_transformcm:nnnnnn}
+% \begin{function}{\driver_draw_cm:nnnn}
 %   \begin{syntax}
-%     \cs{driver_draw_transformcm:nnnnnn} \Arg{a} \Arg{b} \Arg{c} \Arg{d}
-%       \Arg{x} \Arg{y}
+%     \cs{driver_draw_cm:nnnn} \Arg{a} \Arg{b} \Arg{c} \Arg{d}
 %   \end{syntax}
-%   Applies the transformation matrix $[a b c d]$ and offset vector
-%   ($x$, $y$) to the current graphic state. This affects any subsequent
-%   items in the same scope but not those already given.
+%   Applies the transformation matrix $[a b c d]$ to the current graphic state.
+%   This affects any subsequent items in the same scope but not those already
+%   given.
 % \end{function}
 %
 % \end{documentation}
@@ -1162,24 +1161,44 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\driver_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{macro}{\driver_draw_cm:nnnn}
+% \begin{macro}{\@@_draw_cm:nnnn}
+%   In \texttt{dvips}, keeping the transformations in line with the engine
+%   requires that we use rotations and scalings. This is done by decomposing
+%   the matrix: see the comments for \cs{@@_draw_cm_decompose:nnnnN} (which
+%   is also needed by \texttt{(x)dvipdfmx}).
 %    \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_transformcm:nnnnnn #1#2#3#4#5#6
+\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
   {
-    \@@_draw_literal:x
+    \@@_draw_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
+      \@@_draw_cm:nnnn
+  }
+\cs_new_protected:Npn \@@_draw_cm:nnnn #1#2#3#4
+  {
+    \@@_draw_literal:n
       {
-        [
-          #1 ~ #2 ~ #3 ~ #4 ~
-          \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
-        ] ~
-        concat
+        \fp_compare:nNnTF {#1} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( -#1 , 5 ) } } ~
+          rotate
+      }
+    \@@_draw_literal:n
+      {
+        \fp_eval:n { round ( #2 , 5 ) } ~
+        \fp_eval:n { round ( #3 , 5 ) } ~
+        scale
+      }
+    \@@_draw_literal:n
+      {
+        \fp_compare:nNnTF {#4} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( -#1 , 5 ) } } ~
+          rotate
       }
   }
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\driver_draw_hbox:Nnnnnnn}
 %   Inside a picture |@beginspecial|/|@endspecial| are active, which is
@@ -1195,7 +1214,7 @@
   {
     \@@_scope_begin:
     \@@_draw_literal:n { [end] }
-    \driver_draw_transformcm:nnnnnn {#2} {#3} {#4} {#5} {#6} {#7}
+    \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
     \@@_draw_literal:n { 72~Resolution~div~72~VResolution~div~neg~scale }
     \@@_draw_literal:n { magscale~{1~DVImag~div~dup~scale}~if }
     \@@_draw_literal:n { l3x~neg~l3y~neg~translate }
@@ -2051,22 +2070,52 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\driver_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{macro}{\driver_draw_cc:nnnn}
+% \begin{macro}{\@@_draw_cm:nnnn}
+%   Another split here between \texttt{pdfmode} and \texttt{(x)dvipdfmx}.
+%   In the former, we have a direct method to maintain alignment: the driver
+%   can use a matrix itself. For \texttt{(x)dvipdfmx}, as for \texttt{dvips},
+%   we need to decompose the matrix into rotations and a scaling, then use
+%   that.
 %    \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_transformcm:nnnnnn #1#2#3#4#5#6
+\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
   {
-    \@@_draw_literal:x
+%<*pdfmode>
+    \@@_matrix:n { #1 ~ #2 ~ #3 ~ #4 }
+%</pdfmode>
+%<*dvipdfmx|xdvipdfmx>
+    \@@_draw_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
+      \@@_draw_cm:nnnn
+%</dvipdfmx|xdvipdfmx>
+  }
+%<*dvipdfmx|xdvipdfmx>
+\cs_new_protected:Npn \@@_draw_cm:nnnn #1#2#3#4
+  {
+    \@@_draw_literal:n
       {
-        #1 ~ #2 ~ #3 ~ #4 ~
-        \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
-        cm
+        x:rotate~
+        \fp_compare:nNnTF {#1} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( #1 , 5 ) } }
+      }
+    \@@_draw_literal:n
+      {
+        x:scale~
+        \fp_eval:n { round ( #2 , 5 ) } ~
+        \fp_eval:n { round ( #3 , 5 ) }
+      }
+    \@@_draw_literal:n
+      {
+        x:rotate~
+        \fp_compare:nNnTF {#4} = \c_zero_fp
+          { 0 }
+          { \fp_eval:n { round ( -#1 , 5 ) } }
       }
   }
+%</dvipdfmx|xdvipdfmx>
 %    \end{macrocode}
 % \end{macro}
+% \end{macro}
 %
 % \begin{macro}{\driver_draw_hbox:Nnnnnnn}
 % \begin{variable}{\l_@@_tmp_box}
@@ -2083,7 +2132,7 @@
       {
         \tex_kern:D \dim_eval:n {#6}
         \driver_draw_scope_begin:
-        \driver_draw_transformcm:nnnnnn {#2} {#3} {#4} {#5} { 0pt } { 0pt }
+        \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
         \box_move_up:nn {#7} { \box_use:N #1 }
         \driver_draw_scope_end:
       }
@@ -2669,14 +2718,13 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}{\driver_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{macro}{\driver_draw_cm:nnnn}
+%   The four arguments here are floats (the affine matrix), the last
+%   two are a displacement vector. 
 %    \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_transformcm:nnnnnn #1#2#3#4#5#6
+\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
   {
-    \@@_draw_scope:x
+    \@@_draw_scope:n
       {
        transform =
          "
@@ -2684,7 +2732,7 @@
              (
                \fp_eval:n {#1} , \fp_eval:n {#2} ,
                \fp_eval:n {#3} , \fp_eval:n {#4} ,
-               \dim_to_decimal:n {#5} , \dim_to_decimal:n {#6}
+               0pt , 0pt
              )
          "
       }
@@ -2700,7 +2748,7 @@
 \cs_new_protected:Npn \driver_draw_hbox:Nnnnnnn #1#2#3#4#5#6#7
   {
     \@@_scope_begin:
-    \driver_draw_transformcm:nnnnnn {#2} {#3} {#4} {#5} {#6} {#7}
+    \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
     \@@_literal:n
       {
         < g~
@@ -2722,6 +2770,100 @@
 %</dvisvgm>
 %    \end{macrocode}
 %
+% \subsection{Support code for drawing}
+%
+% A small number of functions are needed by different parts of the drawing code
+% in a way that doesn't follow the general split. This material is collected up
+% here.
+%
+% \begin{macro}{\@@_draw_cm_decompose:nnnnN}
+% \begin{macro}
+%   {\@@_draw_cm_decompose_auxi:nnnnN, \@@_draw_cm_decompose_auxii:nnnnN}
+%   Internally, transformations for drawing are tracked as a matrix. Not all
+%   engines provide a way of dealing with this: if we use a raw matrix, the
+%   engine looses track of positions (for example for hyperlinks), and this is
+%   not desirable. They do, however, allow us to track rotations and scalings.
+%   Luckily, we can decompose any (two-dimensional) matrix into two rotations
+%   and a single scaling:
+%   \[
+%     \begin{bmatrix}
+%         A & B \\ C & D
+%     \end{bmatrix}
+%     =
+%     \begin{bmatrix}
+%       \cos\beta & \sin\beta \\ -\sin\beta & \cos\beta
+%     \end{bmatrix}
+%     \begin{bmatrix}
+%       w_{1} & 0 \\ 0 & w_{2}
+%     \end{bmatrix}
+%     \begin{bmatrix}
+%       \cos\gamma & \sin\gamma \\ -\sin\gamma & \cos\gamma
+%     \end{bmatrix} 
+%   \]
+%   The parent matrix can be converted to
+%   \[
+%     \begin{bmatrix}
+%       A & B \\ C & D
+%     \end{bmatrix}
+%      =
+%     \begin{bmatrix}
+%       E & H \\-H & E
+%     \end{bmatrix}
+%     +
+%     \begin{bmatrix}
+%       F & G \\ G & -F
+%     \end{bmatrix}
+%   \]
+%   From these, we can find that
+%   \begin{align*}
+%     \frac{w_{1} + w_{2}}{1} &= \sqrt{E^{2} + H^{2}} \\
+%     \frac{w_{1} - w_{2}}{1} &= \sqrt{F^{2} + G^{2}} \\
+%     \gamma - \beta &= \tan^{-1}(G/F) \\
+%     \gamma + \beta &= \tan^{-1}(H/E)
+%   \end{align*}
+%   at which point we just have to do various pieces of re-arrangement to
+%   get all of the values. (See J.~Blinn, \emph{IEEE Comput.\ Graph.\ Appl.},
+%   1996, \textbf{16}, 82--88.)
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_cm_decompose:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \@@_draw_cm_decompose_auxi:nnnnN
+          { \fp_eval:n { (#1 + #4) / 2 } }
+          { \fp_eval:n { #1 - (#1 + #4) / 2 } }
+          { \fp_eval:n { (#2 + #3) / 2 } }
+          { \fp_eval:n { #2 - (#2 + #3) / 2 } }
+      }
+        #5
+  }
+\cs_new_protected:Npn \@@_draw_cm_decompose_auxi:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \@@_draw_cm_auxii:nnnnN
+          { \fp_eval:n { sqrt ( #1 * #1 + #4 * #4 ) } }
+          { \fp_eval:n { sqrt ( #2 * #2 + #3 * #3 ) } }
+          { \fp_eval:n { arctand ( #3 / #2 ) } }
+          { \fp_eval:n { arctand ( #4 / #1 ) } }
+      }
+         #5
+  }
+\cs_new_protected:Npn \@@_draw_cm_decompose_auxii:nnnnN #1#2#3#4#5
+  {
+    \use:x
+      {
+        \exp_not:N #5
+          { \fp_eval:n { ( #4 - #3 ) / 2 } }
+          { \fp_eval:n { #1 + #2 } }
+          { \fp_eval:n { #1 - #2 } }
+          { \fp_eval:n { ( #4 + #3 ) / 2 } }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</initex|package>
 %    \end{macrocode}
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index bab02ec..c8688dd 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -5975,10 +5975,13 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index b380f78..c920716 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -5966,10 +5966,14 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
+Defining \__driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index ee626e3..5f79653 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -6167,10 +6167,13 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index bf2ea52..f962ca9 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -6165,10 +6165,14 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
+Defining \__driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 8ed818c..bc79b18 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -5957,10 +5957,14 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
+Defining \__driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index bab02ec..c8688dd 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -5975,10 +5975,13 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index b380f78..c920716 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -5966,10 +5966,14 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
+Defining \__driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index ee626e3..5f79653 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -6167,10 +6167,13 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index bf2ea52..f962ca9 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -6165,10 +6165,14 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
+Defining \__driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index 8ed818c..bc79b18 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -5957,10 +5957,14 @@ Defining \driver_draw_color_stroke_gray:n on line ..
 Defining \driver_draw_color_fill_rgb:nnn on line ...
 Defining \driver_draw_color_stroke_rgb:nnn on line ...
 Defining \__driver_color_fill_select:n on line ...
-Defining \driver_draw_transformcm:nnnnnn on line ...
+Defining \driver_draw_cm:nnnn on line ...
+Defining \__driver_draw_cm:nnnn on line ...
 Defining \driver_draw_hbox:Nnnnnnn on line ...
 Defining \l__driver_tmp_box on line ...
 \l__driver_tmp_box=\box...
+Defining \__driver_draw_cm_decompose:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxi:nnnnN on line ...
+Defining \__driver_draw_cm_decompose_auxii:nnnnN on line ...
 )
 Defining \__expl_status_pop:w on line ...
 Defining \l__expl_status_stack_tl on line ...





More information about the latex3-commits mailing list