[latex3-commits] [l3svn] r6877 - Allow box dimensions in floating point expressions (fixes #83)

noreply at latex-project.org noreply at latex-project.org
Fri Feb 10 04:59:09 CET 2017


Author: bruno
Date: 2017-02-10 04:59:09 +0100 (Fri, 10 Feb 2017)
New Revision: 6877

Modified:
   trunk/l3kernel/l3fp-parse.dtx
   trunk/l3kernel/testfiles/m3expl001.luatex.tlg
   trunk/l3kernel/testfiles/m3expl001.ptex.tlg
   trunk/l3kernel/testfiles/m3expl001.tlg
   trunk/l3kernel/testfiles/m3expl001.uptex.tlg
   trunk/l3kernel/testfiles/m3expl001.xetex.tlg
   trunk/l3kernel/testfiles/m3expl003.luatex.tlg
   trunk/l3kernel/testfiles/m3expl003.ptex.tlg
   trunk/l3kernel/testfiles/m3expl003.tlg
   trunk/l3kernel/testfiles/m3expl003.uptex.tlg
   trunk/l3kernel/testfiles/m3expl003.xetex.tlg
   trunk/l3kernel/testfiles/m3fp-parse002.lvt
   trunk/l3kernel/testfiles/m3fp-parse002.tlg
Log:
Allow box dimensions in floating point expressions (fixes #83)


Modified: trunk/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/l3kernel/l3fp-parse.dtx	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/l3fp-parse.dtx	2017-02-10 03:59:09 UTC (rev 6877)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-%% File: l3fp-parse.dtx Copyright (C) 2011-2016 The LaTeX3 Project
+%% File: l3fp-parse.dtx Copyright (C) 2011-2017 The LaTeX3 Project
 %
 % It may be distributed and/or modified under the conditions of the
 % LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -836,11 +836,14 @@
 %     \@@_parse_one_register_auxii:wwwNw,
 %     \@@_parse_one_register_int:www,
 %     \@@_parse_one_register_mu:www,
-%     \@@_parse_one_register_dim:ww
+%     \@@_parse_one_register_dim:ww,
+%     \@@_parse_one_register_wd:w,
+%     \@@_parse_one_register_wd:Nw,
 %   }
 %   This is called whenever~|#2| is a control sequence other than
-%   \cs{scan_stop:} in meaning.  We assume that it is a register, but
-%   carefully unpacking it with \cs{tex_the:D} within braces.  First, we
+%   \cs{scan_stop:} in meaning.  We special-case \tn{wd}, \tn{ht}, \tn{dp}
+%   (see later) and otherwise assume that it is a register, but
+%   carefully unpack it with \cs{tex_the:D} within braces.  First, we
 %   find the exponent following~|#2|.  Then we unpack~|#2| with
 %   \cs{tex_the:D}, and the \texttt{auxii} auxiliary distinguishes
 %   integer registers from dimensions/skips from muskips, according to
@@ -859,6 +862,9 @@
     \exp_after:wN \@@_parse_infix_after_operand:NwN
     \exp_after:wN #1
     \exp:w \exp_end_continue_f:w
+      \if_meaning:w \box_wd:N #2 \@@_parse_one_register_wd:w \fi:
+      \if_meaning:w \box_ht:N #2 \@@_parse_one_register_wd:w \fi:
+      \if_meaning:w \box_dp:N #2 \@@_parse_one_register_wd:w \fi:
       \exp_after:wN \@@_parse_one_register_aux:Nw
       \exp_after:wN #2
       \__int_value:w
@@ -896,6 +902,27 @@
     \__int_value:w \__dim_eval:w #1 pt ;
   }
 %    \end{macrocode}
+%   The \tn{wd}, \tn{dp}, \tn{ht} primitives expect an integer argument.
+%   We abuse the exponent parser to find the integer argument: simply
+%   include the exponent marker~|e|.  Once that \enquote{exponent} is
+%   found, use \cs{tex_the:D} to find the box dimension and then copy
+%   what we did for dimensions.
+%    \begin{macrocode}
+\cs_new:Npn \@@_parse_one_register_wd:w
+    #1#2 \exp_after:wN #3#4 \@@_parse_expand:w
+  {
+    #1
+    \exp_after:wN \@@_parse_one_register_wd:Nw
+    #4 \@@_parse_expand:w e
+  }
+\cs_new:Npn \@@_parse_one_register_wd:Nw #1#2 ;
+  {
+    \exp_after:wN \@@_from_dim_test:ww
+    \exp_after:wN 0 \exp_after:wN ,
+    \__int_value:w \__dim_eval:w
+      \exp_after:wN \use:n \exp_after:wN { \tex_the:D #1 #2 } ;
+  }
+%    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[aux, EXP]{\@@_parse_one_digit:NN}
@@ -1584,7 +1611,7 @@
 % \begin{macro}[aux, rEXP]
 %   {\@@_parse_exponent:N, \@@_parse_exponent_aux:N}
 %   This function should be called within an \cs{__int_value:w}
-%   expansion (or within an integer expression.  It leaves digits of the
+%   expansion (or within an integer expression).  It leaves digits of the
 %   exponent behind it in the input stream, and terminates the expansion
 %   with a semicolon.  If there is no~|e|, leave an exponent of~$0$.  If
 %   there is an~|e|, expand the next token to run some tests on it.  The

Modified: trunk/l3kernel/testfiles/m3expl001.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.luatex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl001.luatex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3577,6 +3577,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.ptex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl001.ptex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3565,6 +3565,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl001.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3565,6 +3565,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.uptex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl001.uptex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3565,6 +3565,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.xetex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl001.xetex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3575,6 +3575,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.luatex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl003.luatex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3578,6 +3578,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.ptex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl003.ptex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3566,6 +3566,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl003.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3566,6 +3566,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.uptex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl003.uptex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3566,6 +3566,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.xetex.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3expl003.xetex.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -3576,6 +3576,8 @@
 Defining \__fp_parse_one_register_mu:www on line ...
 Defining \__fp_parse_one_register_int:www on line ...
 Defining \__fp_parse_one_register_dim:ww on line ...
+Defining \__fp_parse_one_register_wd:w on line ...
+Defining \__fp_parse_one_register_wd:Nw on line ...
 Defining \__fp_parse_one_digit:NN on line ...
 Defining \__fp_parse_one_other:NN on line ...
 Defining \__fp_parse_word:Nw on line ...

Modified: trunk/l3kernel/testfiles/m3fp-parse002.lvt
===================================================================
--- trunk/l3kernel/testfiles/m3fp-parse002.lvt	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3fp-parse002.lvt	2017-02-10 03:59:09 UTC (rev 6877)
@@ -1,5 +1,5 @@
 %
-% Copyright (C) 2012-2013,2015 LaTeX3 Project
+% Copyright (C) 2012-2013,2015,2017 LaTeX3 Project
 %
 
 \documentclass{minimal}
@@ -115,6 +115,19 @@
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+\hbox_set:Nn \l_tmpa_box { }
+\box_set_wd:Nn \l_tmpa_box { 5pt }
+\box_set_ht:Nn \l_tmpa_box { 10pt }
+\box_set_dp:Nn \l_tmpa_box { 0.1pt }
+\TEST { Box~dimensions }
+  {
+    \fp_log:n { \tex_dp:D \l_tmpa_box }
+    \fp_log:n { 3 ^ \exp_after:wN \tex_wd:D \tex_the:D \l_tmpa_box * 2 }
+    \fp_log:n { 3 \exp_after:wN \tex_ht:D \tex_the:D \l_tmpa_box + 2 }
+  }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 % \TESTEXP { Indexing }
 %   {
 %     \fp_eval:n { (\1,\2\3,\4)[\0,\2][\1,\0] + \.\2 } \NEWLINE

Modified: trunk/l3kernel/testfiles/m3fp-parse002.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3fp-parse002.tlg	2017-02-10 03:39:50 UTC (rev 6876)
+++ trunk/l3kernel/testfiles/m3fp-parse002.tlg	2017-02-10 03:59:09 UTC (rev 6877)
@@ -238,3 +238,10 @@
 and I'll forget about whatever was undefined.
 > -0+()=nan.
 ============================================================
+============================================================
+TEST 8: Box dimensions
+============================================================
+> \tex_dp:D \l_tmpa_box =0.100006103515625.
+> 3^\exp_after:wN \tex_wd:D \tex_the:D \l_tmpa_box *2=486.
+> 3\exp_after:wN \tex_ht:D \tex_the:D \l_tmpa_box +2=32.
+============================================================



More information about the latex3-commits mailing list