[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