summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-02-01 22:09:55 +0000
committerKarl Berry <karl@freefriends.org>2020-02-01 22:09:55 +0000
commit3cac8298f5b8b21ddd1aecbea42a135a9c5e4cb8 (patch)
tree9920a659b7ad3860aeb7f391e499b7ccf7f886f8 /Master/texmf-dist/tex/generic/xint
parent22cb4622b403ec9e42484b7af858243a417e2d12 (diff)
xint (1feb20)
git-svn-id: svn://tug.org/texlive/trunk@53622 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xint.sty203
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintbinhex.sty6
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintcfrac.sty6
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintcore.sty6
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintexpr.sty5278
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintfrac.sty224
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintgcd.sty98
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintkernel.sty80
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintlog.sty169
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintseries.sty6
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttools.sty165
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttrig.sty353
12 files changed, 3816 insertions, 2778 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty
index 33a477c63d2..9280d4fedc2 100644
--- a/Master/texmf-dist/tex/generic/xint/xint.sty
+++ b/Master/texmf-dist/tex/generic/xint/xint.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xint: Expandable operations on big integers
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty (loaded by xintcore.sty)
\XINT_providespackage
\ProvidesPackage{xint}%
- [2019/09/10 v1.3f Expandable operations on big integers (JFB)]%
+ [2020/01/31 v1.4 Expandable operations on big integers (JFB)]%
\long\def\xint_firstofthree #1#2#3{#1}%
\long\def\xint_secondofthree #1#2#3{#2}%
\long\def\xint_thirdofthree #1#2#3{#3}%
@@ -550,36 +550,37 @@
\def\xintXOR {\romannumeral0\xintxor }%
\def\xintxor #1#2{\if\xintiiIsZero{#1}\xintiiIsZero{#2}%
\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi }%
-\def\xintANDof {\romannumeral0\xintandof }%
-\def\xintandof #1{\expandafter\XINT_andof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_andof_a #1{\expandafter\XINT_andof_b\romannumeral`&&@#1!}%
-\def\XINT_andof_b #1%
- {\xint_gob_til_xint: #1\XINT_andof_e\xint:\XINT_andof_c #1}%
-\def\XINT_andof_c #1!%
- {\xintifTrueAelseB {#1}{\XINT_andof_a}{\XINT_andof_no}}%
-\def\XINT_andof_no #1\xint:{ 0}%
-\def\XINT_andof_e #1!{ 1}%
-\def\xintORof {\romannumeral0\xintorof }%
-\def\xintorof #1{\expandafter\XINT_orof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_orof_a #1{\expandafter\XINT_orof_b\romannumeral`&&@#1!}%
-\def\XINT_orof_b #1%
- {\xint_gob_til_xint: #1\XINT_orof_e\xint:\XINT_orof_c #1}%
-\def\XINT_orof_c #1!%
- {\xintifTrueAelseB {#1}{\XINT_orof_yes}{\XINT_orof_a}}%
-\def\XINT_orof_yes #1\xint:{ 1}%
-\def\XINT_orof_e #1!{ 0}%
-\def\xintXORof {\romannumeral0\xintxorof }%
-\def\xintxorof #1{\expandafter\XINT_xorof_a\expandafter
- 0\romannumeral`&&@#1\xint:}%
-\def\XINT_xorof_a #1#2{\expandafter\XINT_xorof_b\romannumeral`&&@#2!#1}%
-\def\XINT_xorof_b #1%
- {\xint_gob_til_xint: #1\XINT_xorof_e\xint:\XINT_xorof_c #1}%
-\def\XINT_xorof_c #1!#2%
- {\xintifTrueAelseB {#1}{\if #20\xint_afterfi{\XINT_xorof_a 1}%
- \else\xint_afterfi{\XINT_xorof_a 0}\fi}%
- {\XINT_xorof_a #2}%
- }%
-\def\XINT_xorof_e #1!#2{ #2}%
+\def\xintANDof {\romannumeral0\xintandof }%
+\def\xintandof #1{\expandafter\XINT_andof\romannumeral`&&@#1^}%
+\def\XINT_ANDof {\romannumeral0\XINT_andof}%
+\def\XINT_andof #1%
+{%
+ \xint_gob_til_^ #1\XINT_andof_yes ^%
+ \xintiiifNotZero{#1}\XINT_andof\XINT_andof_no
+}%
+\def\XINT_andof_no #1^{ 0}%
+\def\XINT_andof_yes ^#1\XINT_andof_no{ 1}%
+\def\xintORof {\romannumeral0\xintorof }%
+\def\xintorof #1{\expandafter\XINT_orof\romannumeral`&&@#1^}%
+\def\XINT_ORof {\romannumeral0\XINT_orof}%
+\def\XINT_orof #1%
+{%
+ \xint_gob_til_^ #1\XINT_orof_no ^%
+ \xintiiifNotZero{#1}\XINT_orof_yes\XINT_orof
+}%
+\def\XINT_orof_yes#1^{ 1}%
+\def\XINT_orof_no ^#1\XINT_orof{ 0}%
+\def\xintXORof {\romannumeral0\xintxorof }%
+\def\xintxorof #1{\expandafter\XINT_xorof\romannumeral`&&@#1^}%
+\def\XINT_XORof {\romannumeral0\XINT_xorof}%
+\def\XINT_xorof {\if1\the\numexpr\XINT_xorof_a}%
+\def\XINT_xorof_a #1%
+{%
+ \xint_gob_til_^ #1\XINT_xorof_e ^%
+ \xintiiifNotZero{#1}{-}{}\XINT_xorof_a
+}%
+\def\XINT_xorof_e ^#1\XINT_xorof_a
+ {1\relax\xint_afterfi{ 0}\else\xint_afterfi{ 1}\fi}%
\def\xintiiMax {\romannumeral0\xintiimax }%
\def\xintiimax #1%
{%
@@ -664,46 +665,87 @@
{%
\unless\if1\romannumeral0\XINT_geq_plusplus{}{}%
}%
-\def\xintiiMaxof {\romannumeral0\xintiimaxof }%
-\def\xintiimaxof #1{\expandafter\XINT_iimaxof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_iimaxof_a #1{\expandafter\XINT_iimaxof_b\romannumeral`&&@#1!}%
-\def\XINT_iimaxof_b #1!#2%
- {\expandafter\XINT_iimaxof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_iimaxof_c #1%
- {\xint_gob_til_xint: #1\XINT_iimaxof_e\xint:\XINT_iimaxof_d #1}%
-\def\XINT_iimaxof_d #1!%
- {\expandafter\XINT_iimaxof_b\romannumeral0\xintiimax {#1}}%
-\def\XINT_iimaxof_e #1!#2!{ #2}%
-\def\xintiiMinof {\romannumeral0\xintiiminof }%
-\def\xintiiminof #1{\expandafter\XINT_iiminof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_iiminof_a #1{\expandafter\XINT_iiminof_b\romannumeral`&&@#1!}%
-\def\XINT_iiminof_b #1!#2%
- {\expandafter\XINT_iiminof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_iiminof_c #1%
- {\xint_gob_til_xint: #1\XINT_iiminof_e\xint:\XINT_iiminof_d #1}%
-\def\XINT_iiminof_d #1!%
- {\expandafter\XINT_iiminof_b\romannumeral0\xintiimin {#1}}%
-\def\XINT_iiminof_e #1!#2!{ #2}%
+\def\xintiiMaxof {\romannumeral0\xintiimaxof }%
+\def\xintiimaxof #1{\expandafter\XINT_iimaxof\romannumeral`&&@#1^}%
+\def\XINT_iiMaxof{\romannumeral0\XINT_iimaxof}%
+\def\XINT_iimaxof#1%
+{%
+ \xint_gob_til_^ #1\XINT_iimaxof_empty ^%
+ \expandafter\XINT_iimaxof_loop\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iimaxof_empty ^#1\xint:{ 0}%
+\def\XINT_iimaxof_loop #1\xint:#2%
+{%
+ \xint_gob_til_^ #2\XINT_iimaxof_e ^%
+ \expandafter\XINT_iimaxof_loop\romannumeral0\xintiimax{#1}{#2}\xint:
+}%
+\def\XINT_iimaxof_e ^#1\xintiimax #2#3\xint:{ #2}%
+\def\xintiiMinof {\romannumeral0\xintiiminof }%
+\def\xintiiminof #1{\expandafter\XINT_iiminof\romannumeral`&&@#1^}%
+\def\XINT_iiMinof{\romannumeral0\XINT_iiminof}%
+\def\XINT_iiminof#1%
+{%
+ \xint_gob_til_^ #1\XINT_iiminof_empty ^%
+ \expandafter\XINT_iiminof_loop\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iiminof_empty ^#1\xint:{ 0}%
+\def\XINT_iiminof_loop #1\xint:#2%
+{%
+ \xint_gob_til_^ #2\XINT_iiminof_e ^%
+ \expandafter\XINT_iiminof_loop\romannumeral0\xintiimin{#1}{#2}\xint:
+}%
+\def\XINT_iiminof_e ^#1\xintiimin #2#3\xint:{ #2}%
\def\xintiiSum {\romannumeral0\xintiisum }%
-\def\xintiisum #1{\expandafter\XINT_sumexpr\romannumeral`&&@#1\xint:}%
-\def\XINT_sumexpr {\XINT_sum_loop_a 0\Z }%
-\def\XINT_sum_loop_a #1\Z #2%
- {\expandafter\XINT_sum_loop_b \romannumeral`&&@#2\xint:#1\xint:\Z}%
-\def\XINT_sum_loop_b #1%
- {\xint_gob_til_xint: #1\XINT_sum_finished\xint:\XINT_sum_loop_c #1}%
-\def\XINT_sum_loop_c
- {\expandafter\XINT_sum_loop_a\romannumeral0\XINT_add_fork }%
-\def\XINT_sum_finished\xint:\XINT_sum_loop_c\xint:\xint:#1\xint:\Z{ #1}%
+\def\xintiisum #1{\expandafter\XINT_iisum\romannumeral`&&@#1^}%
+\def\XINT_iiSum{\romannumeral0\XINT_iisum}%
+\def\XINT_iisum #1%
+{%
+ \expandafter\XINT_iisum_a\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iisum_a #1%
+{%
+ \xint_gob_til_^ #1\XINT_iisum_empty ^%
+ \XINT_iisum_loop #1%
+}%
+\def\XINT_iisum_empty ^#1\xint:{ 0}%
+\def\XINT_iisum_loop #1#2\xint:#3%
+{%
+ \expandafter\XINT_iisum_loop_a
+ \expandafter#1\romannumeral`&&@#3\xint:#2\xint:\xint:
+}%
+\def\XINT_iisum_loop_a #1#2%
+{%
+ \xint_gob_til_^ #2\XINT_iisum_loop_end ^%
+ \expandafter\XINT_iisum_loop\romannumeral0\XINT_add_nfork #1#2%
+}%
+\def\XINT_iisum_loop_end ^#1\XINT_add_nfork #2#3\xint:#4\xint:\xint:{ #2#4}%
\def\xintiiPrd {\romannumeral0\xintiiprd }%
-\def\xintiiprd #1{\expandafter\XINT_prdexpr\romannumeral`&&@#1\xint:}%
-\def\XINT_prdexpr {\XINT_prod_loop_a 1\Z }%
-\def\XINT_prod_loop_a #1\Z #2%
- {\expandafter\XINT_prod_loop_b\romannumeral`&&@#2\xint:#1\xint:\Z}%
-\def\XINT_prod_loop_b #1%
- {\xint_gob_til_xint: #1\XINT_prod_finished\xint:\XINT_prod_loop_c #1}%
-\def\XINT_prod_loop_c
- {\expandafter\XINT_prod_loop_a\romannumeral0\XINT_mul_fork }%
-\def\XINT_prod_finished\xint:\XINT_prod_loop_c\xint:\xint:#1\xint:\Z { #1}%
+\def\xintiiprd #1{\expandafter\XINT_iiprd\romannumeral`&&@#1^}%
+\def\XINT_iiPrd{\romannumeral0\XINT_iiprd}%
+\def\XINT_iiprd #1%
+{%
+ \expandafter\XINT_iiprd_a\romannumeral`&&@#1\xint:
+}%
+\def\XINT_iiprd_a #1%
+{%
+ \xint_gob_til_^ #1\XINT_iiprd_empty ^%
+ \xint_gob_til_zero #1\XINT_iiprd_zero 0%
+ \XINT_iiprd_loop #1%
+}%
+\def\XINT_iiprd_empty ^#1\xint:{ 1}%
+\def\XINT_iiprd_zero 0#1^{ 0}%
+\def\XINT_iiprd_loop #1#2\xint:#3%
+{%
+ \expandafter\XINT_iiprd_loop_a
+ \expandafter#1\romannumeral`&&@#3\xint:#2\xint:\xint:
+}%
+\def\XINT_iiprd_loop_a #1#2%
+{%
+ \xint_gob_til_^ #2\XINT_iiprd_loop_end ^%
+ \xint_gob_til_zero #2\XINT_iiprd_zero 0%
+ \expandafter\XINT_iiprd_loop\romannumeral0\XINT_mul_nfork #1#2%
+}%
+\def\XINT_iiprd_loop_end ^#1\XINT_mul_nfork #2#3\xint:#4\xint:\xint:{ #2#4}%
\def\xintiiSquareRoot {\romannumeral0\xintiisquareroot }%
\def\xintiisquareroot #1{\expandafter\XINT_sqrt_checkin\romannumeral`&&@#1\xint:}%
\def\XINT_sqrt_checkin #1%
@@ -1444,6 +1486,22 @@
\xint:#1\xint:#2\xint:
}%
\def\XINT_lcm_end #1\xint:#2\xint:#3\xint:{\xintiimul {#2}{\xintiiQuo{#3}{#1}}}%
+\def\xintiiGCDof {\romannumeral0\xintiigcdof }%
+\def\xintiigcdof #1{\expandafter\XINT_iigcdof_a\romannumeral`&&@#1^}%
+\def\XINT_iiGCDof {\romannumeral0\XINT_iigcdof_a}%
+\def\XINT_iigcdof_a #1{\expandafter\XINT_iigcdof_b\romannumeral`&&@#1!}%
+\def\XINT_iigcdof_b #1!#2{\expandafter\XINT_iigcdof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_iigcdof_c #1{\xint_gob_til_^ #1\XINT_iigcdof_e ^\XINT_iigcdof_d #1}%
+\def\XINT_iigcdof_d #1!{\expandafter\XINT_iigcdof_b\romannumeral0\xintiigcd {#1}}%
+\def\XINT_iigcdof_e #1!#2!{ #2}%
+\def\xintiiLCMof {\romannumeral0\xintiilcmof }%
+\def\xintiilcmof #1{\expandafter\XINT_iilcmof_a\romannumeral`&&@#1^}%
+\def\XINT_iiLCMof {\romannumeral0\XINT_iilcmof_a}%
+\def\XINT_iilcmof_a #1{\expandafter\XINT_iilcmof_b\romannumeral`&&@#1!}%
+\def\XINT_iilcmof_b #1!#2{\expandafter\XINT_iilcmof_c\romannumeral`&&@#2!{#1}!}%
+\def\XINT_iilcmof_c #1{\xint_gob_til_^ #1\XINT_iilcmof_e ^\XINT_iilcmof_d #1}%
+\def\XINT_iilcmof_d #1!{\expandafter\XINT_iilcmof_b\romannumeral0\xintiilcm {#1}}%
+\def\XINT_iilcmof_e #1!#2!{ #2}%
\def\xintRandomDigits{\romannumeral0\xintrandomdigits}%
\def\xintrandomdigits#1%
{%
@@ -1484,6 +1542,9 @@
+\xint_texuniformdeviate\xint_c_x^viii%
\relax%
}%
+\let\xintEightRandomDigits\XINT_eightrandomdigits
+\def\xintRandBit{\xint_texuniformdeviate\xint_c_ii}%
+\def\xintRandBit{\xint_texuniformdeviate\xint_c_ii}%
\def\xintXRandomDigits#1%
{%
\csname xint_gobble_\expandafter\XINT_xrandomdigits\the\numexpr#1\xint:
diff --git a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
index 43044815376..7924efaf433 100644
--- a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintbinhex: Expandable binary and hexadecimal conversions
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintbinhex}%
- [2019/09/10 v1.3f Expandable binary and hexadecimal conversions (JFB)]%
+ [2020/01/31 v1.4 Expandable binary and hexadecimal conversions (JFB)]%
\newcount\xint_c_ii^xv \xint_c_ii^xv 32768
\newcount\xint_c_ii^xvi \xint_c_ii^xvi 65536
\def\XINT_tmpa #1{\ifx\relax#1\else
diff --git a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
index e8c7fb8512c..074ab69d53c 100644
--- a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintcfrac: Expandable continued fractions with xint package
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintcfrac}%
- [2019/09/10 v1.3f Expandable continued fractions with xint package (JFB)]%
+ [2020/01/31 v1.4 Expandable continued fractions with xint package (JFB)]%
\def\xintCFrac {\romannumeral0\xintcfrac }%
\def\xintcfrac #1%
{%
diff --git a/Master/texmf-dist/tex/generic/xint/xintcore.sty b/Master/texmf-dist/tex/generic/xint/xintcore.sty
index 23755a7cf1d..c81bd20f6b7 100644
--- a/Master/texmf-dist/tex/generic/xint/xintcore.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintcore.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintcore: Expandable arithmetic on big integers
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintcore}%
- [2019/09/10 v1.3f Expandable arithmetic on big integers (JFB)]%
+ [2020/01/31 v1.4 Expandable arithmetic on big integers (JFB)]%
\csname XINT_Clamped_istrapped\endcsname
\csname XINT_ConversionSyntax_istrapped\endcsname
\csname XINT_DivisionByZero_istrapped\endcsname
diff --git a/Master/texmf-dist/tex/generic/xint/xintexpr.sty b/Master/texmf-dist/tex/generic/xint/xintexpr.sty
index 382a121466a..fe24c68ad9c 100644
--- a/Master/texmf-dist/tex/generic/xint/xintexpr.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintexpr.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintexpr: Expandable expression parser
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -47,8 +47,9 @@
\def\y#1#2{\PackageInfo{#1}{#2}}%
\fi
\expandafter
- \ifx\csname numexpr\endcsname\relax
- \y{xintexpr}{\numexpr not available, aborting input}%
+ % I don't think engine exists providing \expanded but not \numexpr
+ \ifx\csname expanded\endcsname\relax
+ \y{xintexpr}{\expanded not available, aborting input}%
\aftergroup\endinput
\else
\ifx\x\relax % plain-TeX, first loading of xintexpr.sty
@@ -81,9 +82,10 @@
\XINTsetupcatcodes%
\XINT_providespackage
\ProvidesPackage{xintexpr}%
- [2019/09/10 v1.3f Expandable expression parser (JFB)]%
+ [2020/01/31 v1.4 Expandable expression parser (JFB)]%
\catcode`! 11
\let\XINT_Cmp \xintiiCmp
+\def\XINTfstop{\noexpand\XINTfstop}%
\def\xintDigits {\futurelet\XINT_token\xintDigitss}%
\def\xintDigitss #1={\afterassignment\xintDigitsss\mathchardef\XINTdigits=}%
\def\xintDigitsss#1{\ifx*\XINT_token\expandafter\xintreloadxinttrig\fi}%
@@ -91,6 +93,108 @@
\def\xintSetDigits#1#{\if\relax\detokenize{#1}\relax
\else\afterassignment\xintreloadxinttrig\fi
\xintfracSetDigits}%
+\def\XINT:expr:toblistwith#1#2%
+{%
+ {\expandafter\XINT:expr:toblist_checkempty
+ \expanded{\noexpand#1!\expandafter}\detokenize{#2}^}%
+}%
+\def\XINT:expr:toblist_checkempty #1!#2%
+{%
+ \if ^#2\expandafter\xint_gob_til_^\else\expandafter\XINT:expr:toblist_a\fi
+ #1!#2%
+}%
+\catcode`< 1 \catcode`> 2 \catcode`{ 12 \catcode`} 12
+\def\XINT:expr:toblist_a #1{#2%
+<%
+ \if{#2\xint_dothis<[\XINT:expr:toblist_a>\fi
+ \xint_orthat\XINT:expr:toblist_b #1#2%
+>%
+\def\XINT:expr:toblist_b #1!#2}%
+<%
+ \if\relax#2\relax\xintexprEmptyItem\else#1<#2>\fi\XINT:expr:toblist_c #1!}%
+>%
+\def\XINT:expr:toblist_c #1}#2%
+<%
+ \if ^#2\xint_dothis<\xint_gob_til_^>\fi
+ \if{#2\xint_dothis<, \XINT:expr:toblist_a>\fi
+ \xint_orthat<]\XINT:expr:toblist_c>#1#2%
+>%
+\catcode`{ 1 \catcode`} 2 \catcode`< 12 \catcode`> 12
+\catcode`& 4
+\protected\def\xintexpralignbegin {\halign\bgroup\tabskip2ex\hfil##&&##\hfil\cr}%
+\protected\def\xintexpralignend {\crcr\egroup}%
+\protected\def\xintexpraligncr {\cr}%
+\protected\def\xintexpralignleftbracket {[}%
+\protected\def\xintexpralignrightbracket{]}%
+\protected\def\xintexpraligninnercomma {,}%
+\protected\def\xintexpralignoutercomma {,}%
+\protected\def\xintexpraligntab {&}%
+\catcode`& 7
+\def\XINT:expr:toalignwith#1#2%
+{%
+ {\expandafter\XINT:expr:toalign_checkempty
+ \expanded{\noexpand#1!\expandafter}\detokenize{#2}^}%
+ \xintexpralignend
+}%
+\def\XINT:expr:toalign_checkempty #1!#2%
+{%
+ \if ^#2\expandafter\xint_gob_til_^\else\expandafter\XINT:expr:toalign_a\fi
+ #1!#2%
+}%
+\catcode`< 1 \catcode`> 2 \catcode`{ 12 \catcode`} 12
+\def\XINT:expr:toalign_a #1{#2%
+<%
+ \if{#2\xint_dothis<\xintexpralignleftbracket\XINT:expr:toalign_a>\fi
+ \xint_orthat\XINT:expr:toalign_b #1#2%
+>%
+\def\XINT:expr:toalign_b #1!#2}%
+<%
+ \xintexpraligntab
+ \if\relax#2\relax\xintexprEmptyItem\else#1<#2>\fi\XINT:expr:toalign_c #1!}%
+>%
+\def\XINT:expr:toalign_c #1}#2%
+<%
+ \if ^#2\xint_dothis<\xint_gob_til_^>\fi
+ \if {#2\xint_dothis<\xintexpraligninnercomma\XINT:expr:toalign_a>\fi
+ \xint_orthat<\xintexpraligntab\xintexpralignrightbracket\XINT:expr:toalign_C>#1#2%
+>%
+\def\XINT:expr:toalign_C #1}#2%
+<%
+ \if ^#2\xint_dothis<\xint_gob_til_^>\fi
+ \if {#2\xint_dothis<\xintexpralignoutercomma\xintexpraligncr\XINT:expr:toalign_a>\fi
+ \xint_orthat<\xintexpralignrightbracket\XINT:expr:toalign_C>#1#2%
+>%
+\catcode`{ 1 \catcode`} 2 \catcode`< 12 \catcode`> 12
+\def\XINT:expr:mapwithin#1#2%
+{%
+ {{\expandafter\XINT:expr:mapwithin_checkempty
+ \expanded{\noexpand#1!\expandafter}\detokenize{#2}^}}%
+}%
+\def\XINT:expr:mapwithin_checkempty #1!#2%
+{%
+ \if ^#2\expandafter\xint_gob_til_^\else\expandafter\XINT:expr:mapwithin_a\fi
+ #1!#2%
+}%
+\begingroup % should I check lccode s generally if corrupted context at load?
+\catcode`[ 1 \catcode`] 2 \lccode`[`{ \lccode`]`}
+\catcode`< 1 \catcode`> 2 \catcode`{ 12 \catcode`} 12
+\lowercase<\endgroup
+\def\XINT:expr:mapwithin_a #1{#2%
+<%
+ \if{#2\xint_dothis<[\iffalse]\fi\XINT:expr:mapwithin_a>\fi%
+ \xint_orthat\XINT:expr:mapwithin_b #1#2%
+>%
+\def\XINT:expr:mapwithin_b #1!#2}%
+<%
+ #1<#2>\XINT:expr:mapwithin_c #1!}%
+>%
+\def\XINT:expr:mapwithin_c #1}#2%
+<%
+ \if ^#2\xint_dothis<\xint_gob_til_^>\fi
+ \if{#2\xint_dothis<\XINT:expr:mapwithin_a>\fi%
+ \xint_orthat<\iffalse[\fi]\XINT:expr:mapwithin_c>#1#2%
+>%
+>% back to normal catcodes
\def\xintexpr {\romannumeral0\xintexpro }%
\def\xintiexpr {\romannumeral0\xintiexpro }%
\def\xintfloatexpr {\romannumeral0\xintfloatexpro }%
@@ -104,20 +208,33 @@
}%
\def\XINT_iexpr_noopt
{%
- \expandafter\XINT_iexpr_round\expandafter 0%
- \romannumeral0\xintbareeval
+ \expandafter\XINT_iexpr_iiround\romannumeral0\xintbareeval
+}%
+\def\XINT_iexpr_iiround
+{%
+ \expandafter\XINT_expr_wrap
+ \expanded
+ \XINT:NEhook:x:mapwithin\XINT:expr:mapwithin{\XINTbracediRoundzero}%
}%
+\def\XINTbracediRoundzero#1{{\xintiRound{0}{#1}}}%
\def\XINT_iexpr_withopt [#1]%
{%
- \expandafter\XINT_iexpr_round\expandafter
- {\the\numexpr \xint_zapspaces #1 \xint_gobble_i\expandafter}%
+ \expandafter\XINT_iexpr_round
+ \the\numexpr \xint_zapspaces #1 \xint_gobble_i\expandafter.%
\romannumeral0\xintbareeval
}%
-\def\XINT_iexpr_round #1#2%
+\def\XINT_iexpr_round #1.%
+{%
+ \ifnum#1=\xint_c_\xint_dothis{\XINT_iexpr_iiround}\fi
+ \xint_orthat{\XINT_iexpr_round_a #1.}%
+}%
+\def\XINT_iexpr_round_a #1.%
{%
\expandafter\XINT_expr_wrap
- \csname .=\xintRound::csv {#1}{\XINT_expr_unlock #2}\endcsname
+ \expanded
+ \XINT:NEhook:x:mapwithin\XINT:expr:mapwithin{\XINTbracedRound{#1}}%
}%
+\def\XINTbracedRound#1#2{{\xintRound{#1}{#2}}}%
\def\xintfloatexpro #1%
{%
\ifx [#1\expandafter\XINT_flexpr_withopt\else\expandafter\XINT_flexpr_noopt
@@ -125,12 +242,8 @@
}%
\def\XINT_flexpr_noopt
{%
- \expandafter\XINT_flexpr_noopt_a\romannumeral0\xintbarefloateval
-}%
-\def\XINT_flexpr_noopt_a #1%
-{%
- \expandafter\XINT_flexpr_wrap
- \csname .;\xinttheDigits.=\XINT_expr_unlock #1\endcsname
+ \expandafter\XINT_flexpr_wrap\the\numexpr\XINTdigits\expandafter.%
+ \romannumeral0\xintbarefloateval
}%
\def\XINT_flexpr_withopt [#1]%
{%
@@ -138,80 +251,75 @@
\the\numexpr\xint_zapspaces #1 \xint_gobble_i\expandafter.%
\romannumeral0\xintbarefloateval
}%
-\def\XINT_flexpr_withopt_a #1.#2%
+\def\XINT_flexpr_withopt_a #1#2.%
{%
- \expandafter\XINT_flexpr_wrap
- \csname .;#1.=\XINTinFloat::csv {#1}{\XINT_expr_unlock #2}\endcsname
+ \expandafter\XINT_flexpr_withopt_b\the\numexpr\if#1-\XINTdigits\fi#1#2.%
}%
-\def\XINT:NE_flexpr_withopt_a #1.#2%
+\def\XINT_flexpr_withopt_b #1.%
{%
\expandafter\XINT_flexpr_wrap
- \csname .;#1.=\XINT:NE:one{\XINTinFloat::csv{#1}}{\XINT_expr_unlock #2}\endcsname
-}%
-\def\XINT_expr_wrap {!\XINT_expr_usethe\XINT_protectii\XINT_expr_print}%
-\def\XINT_iiexpr_wrap {!\XINT_expr_usethe\XINT_protectii\XINT_iiexpr_print}%
-\def\XINT_flexpr_wrap {!\XINT_expr_usethe\XINT_protectii\XINT_flexpr_print}%
-\def\XINT_protectii #1{\noexpand\XINT_protectii\noexpand #1\noexpand }%
-\protected\def\XINT_expr_usethe\XINT_protectii {\xintError:missing_xintthe!}%
-\def\XINT_expr_print #1{\xintSPRaw::csv {\XINT_expr_unlock #1}}%
-\def\XINT:NE_expr_print#1{\expandafter
- \xintSPRaw::csv\expandafter{\romannumeral`&&@\XINT_expr_unlock #1}}%
-\def\XINT_iiexpr_print #1{\xintCSV::csv {\XINT_expr_unlock #1}}%
-\def\XINT:NE_iiexpr_print #1{\expandafter
- \xintCSV::csv\expandafter{\romannumeral`&&@\XINT_expr_unlock #1}}%
-\def\XINT_flexpr_print #1%
-{%
- \expandafter\xintPFloat::csv
- \romannumeral`&&@\expandafter\XINT_expr_unlock_sp\string #1!%
-}%
-\def\XINT_expr_unlock_sp #1.;#2.=#3!{{#2}{#3}}%
+ \the\numexpr#1\expandafter.%
+ \expanded
+ \XINT:NEhook:x:mapwithin\XINT:expr:mapwithin{\XINTbracedinFloat[#1]}%
+}%
+\def\XINTbracedinFloat[#1]#2{{\XINTinFloat[#1]{#2}}}%
+\def\XINT_expr_wrap {\XINTfstop\XINTexprprint.}%
+\def\XINT_iiexpr_wrap {\XINTfstop\XINTiiexprprint.}%
+\def\XINT_flexpr_wrap {\XINTfstop\XINTflexprprint}%
+\protected\def\XINTexprprint.%
+ {\XINT:NEhook:x:toblist\XINT:expr:toblistwith\xintexprPrintOne}%
+\let\xintexprPrintOne\xintFracToSci
+\def\xintexprEmptyItem{[]}%
+\protected\def\XINTiiexprprint.%
+ {\XINT:NEhook:x:toblist\XINT:expr:toblistwith\xintiiexprPrintOne}%
+\let\xintiiexprPrintOne\xint_firstofone
+\protected\def\XINTflexprprint #1.%
+ {\XINT:NEhook:x:toblist\XINT:expr:toblistwith{\xintfloatexprPrintOne{#1}}}%
+\def\xintfloatexprPrintOne#1%
+ {\romannumeral0\XINT_pfloat_opt [\xint:#1]}% bad direct jump
+\protected\def\XINTboolexprprint.%
+ {\XINT:NEhook:x:toblist\XINT:expr:toblistwith\xintboolexprPrintOne}%
+\def\xintboolexprPrintOne#1{\xintiiifNotZero{#1}{True}{False}}%
+\def\xintthe #1{\expanded\expandafter\xint_gobble_i\romannumeral`&&@#1}%
+\def\xintthealign #1{\xintexpralignbegin
+ \expanded\expandafter\XINT:expr:toalignwith
+ \romannumeral0\expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\xint_gob_andstop_ii
+ \expandafter\xint_gobble_i\romannumeral`&&@#1}%
\def\xinttheexpr
- {\romannumeral`&&@\expandafter\XINT_expr_print\romannumeral0\xintbareeval}%
+ {\expanded\expandafter\XINTexprprint\expandafter.\romannumeral0\xintbareeval}%
\def\xinttheiexpr
- {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintiexpr}%
+ {\expanded\expandafter\xint_gobble_i\romannumeral`&&@\xintiexpr}%
\def\xintthefloatexpr
- {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintfloatexpr}%
+ {\expanded\expandafter\xint_gobble_i\romannumeral`&&@\xintfloatexpr}%
\def\xinttheiiexpr
- {\romannumeral`&&@\expandafter\XINT_iiexpr_print\romannumeral0\xintbareiieval}%
+ {\expanded\expandafter\XINTiiexprprint\expandafter.\romannumeral0\xintbareiieval}%
\let\thexintexpr \xinttheexpr
\let\thexintiexpr \xinttheiexpr
\let\thexintfloatexpr\xintthefloatexpr
\let\thexintiiexpr \xinttheiiexpr
+\def\xintbareeval {\XINT_expr_start }%
+\def\xintbarefloateval{\XINT_flexpr_start}%
+\def\xintbareiieval {\XINT_iiexpr_start}%
+\def\xintthebareeval {\romannumeral0\expandafter\xint_stop_atfirstofone\romannumeral0\xintbareeval}%
+\def\xintthebarefloateval {\romannumeral0\expandafter\xint_stop_atfirstofone\romannumeral0\xintbarefloateval}%
+\def\xintthebareiieval {\romannumeral0\expandafter\xint_stop_atfirstofone\romannumeral0\xintbareiieval}%
\def\xinteval #1%
- {\romannumeral`&&@\expandafter\XINT_expr_print\romannumeral0\xintbareeval#1\relax}%
+ {\expanded\expandafter\XINTexprprint\expandafter.\romannumeral0\xintbareeval#1\relax}%
\def\xintieval #1%
- {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintiexpr#1\relax}%
+ {\expanded\expandafter\xint_gobble_i\romannumeral`&&@\xintiexpr#1\relax}%
\def\xintfloateval #1%
- {\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@\xintfloatexpr#1\relax}%
+ {\expanded\expandafter\xint_gobble_i\romannumeral`&&@\xintfloatexpr#1\relax}%
\def\xintiieval #1%
- {\romannumeral`&&@\expandafter\XINT_iiexpr_print\romannumeral0\xintbareiieval#1\relax}%
-\def\XINT:NE:eval #1{\xintexpr #1\relax}%
-\def\XINT:NE:ieval #1{\xintiexpr #1\relax}%
-\def\XINT:NE:floateval#1{\xintfloatexpr #1\relax}%
-\def\XINT:NE:iieval #1{\xintiiexpr #1\relax}%
-\def\xintthe #1{\romannumeral`&&@\expandafter\xint_gobble_iii\romannumeral`&&@#1}%
-\def\xintbareeval
- {\expandafter\XINT_expr_until_end_a\romannumeral`&&@\XINT_expr_getnext }%
-\def\xintbarefloateval
- {\expandafter\XINT_flexpr_until_end_a\romannumeral`&&@\XINT_expr_getnext }%
-\def\xintbareiieval
- {\expandafter\XINT_iiexpr_until_end_a\romannumeral`&&@\XINT_expr_getnext }%
-\def\xintthebareeval {\expandafter\XINT_expr_unlock\romannumeral0\xintbareeval}%
-\def\xintthebarefloateval {\expandafter\XINT_expr_unlock\romannumeral0\xintbarefloateval}%
-\def\xintthebareiieval {\expandafter\XINT_expr_unlock\romannumeral0\xintbareiieval}%
+ {\expanded\expandafter\XINTiiexprprint\expandafter.\romannumeral0\xintbareiieval#1\relax}%
\def\xintboolexpr
{%
- \romannumeral0\expandafter\expandafter\expandafter
- \XINT_boolexpr_done\expandafter\xint_gobble_iv\romannumeral0\xintexpro
+ \romannumeral0\expandafter\XINT_boolexpr_done\romannumeral0\xintexpro
}%
-\def\XINT_boolexpr_done {!\XINT_expr_usethe\XINT_protectii\XINT_boolexpr_print}%
-\def\XINT_boolexpr_print #1{\xintIsTrue::csv {\XINT_expr_unlock #1}}%
-\def\XINT:NE_boolexpr_print #1{\expandafter
- \xintIsTrue::csv\expandafter{\romannumeral`&&@\XINT_expr_unlock #1}}%
+\def\XINT_boolexpr_done #1.{\XINTfstop\XINTboolexprprint.}%
\def\xinttheboolexpr
{%
- \romannumeral`&&@\expandafter\expandafter\expandafter
- \XINT_boolexpr_print\expandafter\xint_gobble_iv\romannumeral0\xintexpro
+ \expanded\expandafter\XINTboolexprprint\expandafter.\romannumeral0\xintbareeval
}%
\let\thexintboolexpr\xinttheboolexpr
\def\xintifboolexpr #1{\romannumeral0\xintiiifnotzero {\xinttheexpr #1\relax}}%
@@ -220,216 +328,188 @@
\def\xintifsgnexpr #1{\romannumeral0\xintiiifsgn {\xinttheexpr #1\relax}}%
\def\xintifsgnfloatexpr #1{\romannumeral0\xintiiifsgn {\xintthefloatexpr #1\relax}}%
\def\xintifsgniiexpr #1{\romannumeral0\xintiiifsgn {\xinttheiiexpr #1\relax}}%
-\def\xintthecoords #1{\romannumeral`&&@\expandafter\expandafter\expandafter
- \XINT_thecoords_a
- \expandafter\xint_gobble_iii\romannumeral0#1}%
-\def\XINT_thecoords_a #1#2% #1=print macro, indispensible for scientific notation
- {\expandafter\XINT_expr_unlock\csname.=\expandafter\XINT_thecoords_b
- \romannumeral`&&@#1#2,!,!,^\endcsname }%
+\def\XINT_embrace#1{{#1}}%
+\def\xint_gob_til_! #1!{}% ! with catcode 11
+\def\xintError:noopening
+{%
+ \XINT_expandableerror{Extra ) found during balancing, e(X)it before the worst.}%
+}%
+\def\xintthecoords#1%
+ {\romannumeral`&&@\expandafter\XINT_thecoords_a\romannumeral0#1}%
+\def\XINT_thecoords_a #1#2.#3% #2.=\XINTfloatprint<digits>. etc...
+ {\expanded{\expandafter\XINT_thecoords_b\expanded#2.{#3},!,!,^}}%
\def\XINT_thecoords_b #1#2,#3#4,%
{\xint_gob_til_! #3\XINT_thecoords_c ! (#1#2, #3#4)\XINT_thecoords_b }%
\def\XINT_thecoords_c #1^{}%
-\def\xint_gob_til_! #1!{}% ! with catcode 11
-\def\XINT_expr_lockscan#1{% not used for decimal numbers in xintexpr 1.2
-\def\XINT_expr_lockscan##1!{\expandafter#1\csname .=##1\endcsname}%
-}\XINT_expr_lockscan{ }%
-\def\XINT_expr_lockit#1{%
-\def\XINT_expr_lockit##1{\expandafter#1\csname .=##1\endcsname}%
-}\XINT_expr_lockit{ }%
-\def\XINT_expr_unlock_hex_in #1% expanded inside \csname..\endcsname
- {\expandafter\XINT_expr_inhex\romannumeral`&&@\XINT_expr_unlock#1;}%
-\def\XINT_expr_inhex #1.#2#3;% expanded inside \csname..\endcsname
-{%
- \if#2>%
- \xintHexToDec{#1}%
- \else
- \xintiiMul{\xintiiPow{625}{\xintLength{#3}}}{\xintHexToDec{#1#3}}%
- [\the\numexpr-4*\xintLength{#3}]%
- \fi
-}%
-\def\XINT_expr_unlock {\expandafter\XINT_expr_unlock_a\string }%
-\def\XINT_expr_unlock_a #1.={}%
-\def\XINT_expr_unexpectedtoken {\xintError:ignored }%
-\let\XINT_expr_done\space
-\let\XINT:NEhook:one\empty
-\let\XINT:NEhook:two\empty
-\let\XINT:NEhook:csv\empty
-\def\XINT:NEhook:twosp #1,#2,!#3{#3{#1}{#2}}%
-\def\XINT_::_end #1,#2{\xint_gobble_i #2}%
-\def\xintCSV::csv #1{\expandafter\XINT_csv::_a\romannumeral`&&@#1,^,}%
-\def\XINT_csv::_a {\XINT_csv::_b {}}%
-\def\XINT_csv::_b #1#2,{\expandafter\XINT_csv::_c \romannumeral`&&@#2,{#1}}%
-\def\XINT_csv::_c #1{\if ^#1\expandafter\XINT_::_end\fi\XINT_csv::_d #1}%
-\def\XINT_csv::_d #1,#2{\XINT_csv::_b {#2, #1}}% possibly, item #1 is empty.
-\def\xintSPRaw {\romannumeral0\xintspraw }%
-\def\xintspraw #1{\expandafter\XINT_spraw\romannumeral`&&@#1[\W]}%
-\def\XINT_spraw #1[#2#3]{\xint_gob_til_W #2\XINT_spraw_a\W\XINT_spraw_p #1[#2#3]}%
-\def\XINT_spraw_a\W\XINT_spraw_p #1[\W]{ #1}%
-\def\XINT_spraw_p #1[\W]{\xintpraw {#1}}%
-\def\xintSPRaw::csv #1{\romannumeral0\expandafter\XINT_spraw::_a\romannumeral`&&@#1,^,}%
-\def\XINT_spraw::_a {\XINT_spraw::_b {}}%
-\def\XINT_spraw::_b #1#2,{\expandafter\XINT_spraw::_c \romannumeral`&&@#2,{#1}}%
-\def\XINT_spraw::_c #1{\if ,#1\xint_dothis\XINT_spraw::_e\fi
- \if ^#1\xint_dothis\XINT_::_end\fi
- \xint_orthat\XINT_spraw::_d #1}%
-\def\XINT_spraw::_d #1,{\expandafter\XINT_spraw::_e\romannumeral0\XINT_spraw #1[\W],}%
-\def\XINT_spraw::_e #1,#2{\XINT_spraw::_b {#2, #1}}%
-\def\xintIsTrue::csv #1{\romannumeral0\expandafter\XINT_istrue::_a\romannumeral`&&@#1,^,}%
-\def\XINT_istrue::_a {\XINT_istrue::_b {}}%
-\def\XINT_istrue::_b #1#2,{\expandafter\XINT_istrue::_c \romannumeral`&&@#2,{#1}}%
-\def\XINT_istrue::_c #1{\if ,#1\xint_dothis\XINT_istrue::_e\fi
- \if ^#1\xint_dothis\XINT_::_end\fi
- \xint_orthat\XINT_istrue::_d #1}%
-\def\XINT_istrue::_d #1,{\expandafter\XINT_istrue::_e\romannumeral0\xintisnotzero {#1},}%
-\def\XINT_istrue::_e #1,#2{\XINT_istrue::_b {#2, #1}}%
-\def\XINT_:::_end #1,#2#3{\xint_gobble_i #3}%
-\def\xintRound::csv #1#2{\romannumeral0\expandafter\XINT_round::_a
- \the\numexpr#1\expandafter.\romannumeral`&&@#2,^,}%
-\def\XINT_round::_a #1.{\XINT_round::_b #1.{}}%
-\def\XINT_round::_b #1.#2#3,{\expandafter\XINT_round::_c \romannumeral`&&@#3,{#1}{#2}}%
-\def\XINT_round::_c #1{\if ,#1\xint_dothis\XINT_round::_e\fi
- \if ^#1\xint_dothis\XINT_:::_end\fi
- \xint_orthat\XINT_round::_d #1}%
-\def\XINT_round::_d #1,#2{%
- \expandafter\XINT_round::_e\romannumeral0\ifnum#2>\xint_c_
- \expandafter\xintround\else\expandafter\xintiround\fi {#2}{#1},{#2}}%
-\def\XINT_round::_e #1,#2#3{\XINT_round::_b #2.{#3, #1}}%
-\def\XINTinFloat::csv #1#2{\romannumeral0\expandafter\XINT_infloat::_a
- \the\numexpr #1\expandafter.\romannumeral`&&@#2,^,}%
-\def\XINT_infloat::_a #1#2.%
- {\expandafter\XINT_infloat::_b\the\numexpr\if#1-\XINTdigits\fi#1#2.{}}%
-\def\XINT_infloat::_b #1.#2#3,{\XINT_infloat::_c #3,{#1}{#2}}%
-\def\XINT_infloat::_c #1{\if ,#1\xint_dothis\XINT_infloat::_e\fi
- \if ^#1\xint_dothis\XINT_:::_end\fi
- \xint_orthat\XINT_infloat::_d #1}%
-\def\XINT_infloat::_d #1,#2%
- {\expandafter\XINT_infloat::_e\romannumeral0\XINTinfloat [#2]{#1},{#2}}%
-\def\XINT_infloat::_e #1,#2#3{\XINT_infloat::_b #2.{#3, #1}}%
-\def\xintPFloat::csv #1#2{\romannumeral0\expandafter\XINT_pfloat::_a
- \the\numexpr #1\expandafter.\romannumeral`&&@#2,^,}%
-\def\XINT_pfloat::_a #1#2.%
- {\expandafter\XINT_pfloat::_b\the\numexpr\if#1-\XINTdigits\fi#1#2.{}}%
-\def\XINT_pfloat::_b #1.#2#3,{\expandafter\XINT_pfloat::_c \romannumeral`&&@#3,{#1}{#2}}%
-\def\XINT_pfloat::_c #1{\if ,#1\xint_dothis\XINT_pfloat::_e\fi
- \if ^#1\xint_dothis\XINT_:::_end\fi
- \xint_orthat\XINT_pfloat::_d #1}%
-\def\XINT_pfloat::_d #1,#2%
- {\expandafter\XINT_pfloat::_e\romannumeral0\XINT_pfloat_opt [\xint:#2]{#1},{#2}}%
-\def\XINT_pfloat::_e #1,#2#3{\XINT_pfloat::_b #2.{#3, #1}}%
+\def\XINT:NEhook:unpack{\xint_stop_atfirstofone}%
+\let\XINT:NEhook:f:one:from:one\expandafter
+\let\XINT:NEhook:f:one:from:one:direct\empty
+\let\XINT:NEhook:f:one:from:two\expandafter
+\let\XINT:NEhook:f:one:from:two:direct\empty
+\let\XINT:NEhook:x:one:from:two\empty
+\let\XINT:NEhook:x:one:from:twoandone\empty
+\let\XINT:NEhook:f:one:and:opt:direct \empty
+\let\XINT:NEhook:f:tacitzeroifone:direct \empty
+\let\XINT:NEhook:f:iitacitzeroifone:direct \empty
+\let\XINT:NEhook:x:select:obey\empty
+\let\XINT:NEhook:x:listsel\empty
+\let\XINT:NEhook:f:reverse\empty
+\def\XINT:NEhook:f:from:delim:u #1#2^{#1#2^}%
+\def\XINT:NEhook:f:noeval:from:braced:u#1#2^{#1{#2}}%
+\let\XINT:NEhook:branch\expandafter
+\let\XINT:NEhook:seqx\empty
+\let\XINT:NEhook:iter\expandafter
+\let\XINT:NEhook:opx\empty
+\let\XINT:NEhook:rseq\expandafter
+\let\XINT:NEhook:iterr\expandafter
+\let\XINT:NEhook:rrseq\expandafter
+\let\XINT:NEhook:x:toblist\empty
+\let\XINT:NEhook:x:mapwithin\empty
+\let\XINT:NEhook:x:ndmapx\empty
\def\XINT_expr_getnext #1%
{%
+ \expandafter\XINT_expr_put_op_first\romannumeral`&&@%
\expandafter\XINT_expr_getnext_a\romannumeral`&&@#1%
}%
+\def\XINT_expr_put_op_first #1#2#3{\expandafter#2\expandafter#3\expandafter{#1}}%
\def\XINT_expr_getnext_a #1%
-{% screens out sub-expressions and \count or \dimen registers/variables
- \xint_gob_til_! #1\XINT_expr_subexpr !% recall this ! has catcode 11
- \ifcat\relax#1% \count or \numexpr etc... token or count, dimen, skip cs
- \expandafter\XINT_expr_countetc
- \else
- \expandafter\expandafter\expandafter\XINT_expr_getnextfork\expandafter\string
- \fi
- #1%
+{%
+ \ifx\relax #1\xint_dothis\XINT_expr_foundprematureend\fi
+ \ifx\XINTfstop#1\xint_dothis\XINT_expr_subexpr\fi
+ \ifcat\relax#1\xint_dothis\XINT_expr_countetc\fi
+ \xint_orthat{}\XINT_expr_getnextfork #1%
+}%
+\def\XINT_expr_foundprematureend\XINT_expr_getnextfork #1{{}\xint_c_\relax}%
+\def\XINT_expr_subexpr #1.#2%
+{%
+ \expanded{\unexpanded{{#2}}\expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_expr_countetc\XINT_expr_getnextfork#1%
+{%
+ \if0\ifx\count#11\fi
+ \ifx\dimen#11\fi
+ \ifx\numexpr#11\fi
+ \ifx\dimexpr#11\fi
+ \ifx\skip#11\fi
+ \ifx\glueexpr#11\fi
+ \ifx\fontdimen#11\fi
+ \ifx\ht#11\fi
+ \ifx\dp#11\fi
+ \ifx\wd#11\fi
+ \ifx\fontcharht#11\fi
+ \ifx\fontcharwd#11\fi
+ \ifx\fontchardp#11\fi
+ \ifx\fontcharic#11\fi 0\expandafter\XINT_expr_fetch_as_number\fi
+ \expandafter\XINT_expr_getnext_a\number #1%
+}%
+\def\XINT_expr_fetch_as_number
+ \expandafter\XINT_expr_getnext_a\number #1%
+{%
+ \expanded{{{\number#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
}%
-\def\XINT_expr_subexpr !#1\fi !{\expandafter\XINT_expr_getop\xint_gobble_iii }%
-\def\XINT_expr_countetc #1%
-{%
- \ifx\count#1\else\ifx\dimen#1\else\ifx\numexpr#1\else\ifx\dimexpr#1\else
- \ifx\skip#1\else\ifx\glueexpr#1\else\ifx\fontdimen#1\else\ifx\ht#1\else
- \ifx\dp#1\else\ifx\wd#1\else\ifx\fontcharht#1\else\ifx\fontcharwd#1\else
- \ifx\fontchardp#1\else\ifx\fontcharic#1\else
- \XINT_expr_unpackvar
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \expandafter\XINT_expr_getnext\number #1%
-}%
-\def\XINT_expr_unpackvar\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \expandafter\XINT_expr_getnext\number #1%
- {\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \expandafter\XINT_expr_getop\csname .=\number#1\endcsname }%
\begingroup
-\lccode`*=`#
+\lccode`;=`#
\lowercase{\endgroup
\def\XINT_expr_getnextfork #1{%
- \if#1*\xint_dothis {\XINT_expr_scan_macropar *}\fi
- \if#1[\xint_dothis {\xint_c_xviii ({}}\fi
- \if#1+\xint_dothis \XINT_expr_getnext \fi
+ \if#1;\xint_dothis {\XINT_expr_scan_macropar ;}\fi
+ \if#1+\xint_dothis \XINT_expr_getnext_a \fi
+ \if#1*\xint_dothis {{}\xint_c_ii^v 0}\fi
+ \if#1[\xint_dothis {{}\xint_c_ii^v \XINT_expr_itself_obracket}\fi
\if#1.\xint_dothis {\XINT_expr_startdec}\fi
- \if#1-\xint_dothis -\fi
- \if#1(\xint_dothis {\xint_c_xviii ({}}\fi
+ \if#1-\xint_dothis {{}{}-}\fi
+ \if#1(\xint_dothis {{}\xint_c_ii^v (}\fi
\xint_orthat {\XINT_expr_scan_nbr_or_func #1}%
}}%
-\def\XINT_expr_scan_macropar #1#2{\expandafter\XINT_expr_getop\csname .=#1#2\endcsname }%
+\def\XINT_expr_scan_macropar #1#2%
+{%
+ \expandafter{\expandafter{\expandafter#1\expandafter
+ #2\expandafter}\expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
\catcode96 11 % `
-\def\XINT_expr_scan_nbr_or_func #1% this #1 has necessarily here catcode 12
-{%(
- \if )#1\xint_dothis \XINT_expr_gotnil \fi
+\def\XINT_expr_scan_nbr_or_func #1%
+{%
\if "#1\xint_dothis \XINT_expr_scanhex_I\fi
\if `#1\xint_dothis {\XINT_expr_onliteral_`}\fi
- \ifnum \xint_c_ix<1#1 \xint_dothis \XINT_expr_startint\fi
+ \ifnum \xint_c_ix<1\string#1 \xint_dothis \XINT_expr_startint\fi
\xint_orthat \XINT_expr_scanfunc #1%
}%
-\def\XINT_expr_gotnil{\expandafter\XINT_expr_getop\csname.= \endcsname}%
-\def\XINT_expr_onliteral_` #1#2#3({\xint_c_xviii `{#2}}%
+\def\XINT_expr_onliteral_` #1#2#3({{#2}\xint_c_ii^v `}%
\catcode96 12 % `
\def\XINT_expr_startint #1%
{%
- \if #10\expandafter\XINT_expr_gobz_a\else\XINT_expr_scanint_a\fi #1%
+ \if #10\expandafter\XINT_expr_gobz_a\else\expandafter\XINT_expr_scanint_a\fi #1%
}%
\def\XINT_expr_scanint_a #1#2%
- {\expandafter\XINT_expr_getop\csname.=#1%
- \expandafter\XINT_expr_scanint_b\romannumeral`&&@#2}%
-\def\XINT_expr_gobz_a #1%
- {\expandafter\XINT_expr_getop\csname.=%
- \expandafter\XINT_expr_gobz_scanint_b\romannumeral`&&@#1}%
+ {\expanded\bgroup{{\iffalse}}\fi #1% spare a \string
+ \expandafter\XINT_expr_scanint_main\romannumeral`&&@#2}%
+\def\XINT_expr_gobz_a #1#2%
+ {\expanded\bgroup{{\iffalse}}\fi
+ \expandafter\XINT_expr_gobz_scanint_main\romannumeral`&&@#2}%
\def\XINT_expr_startdec #1%
- {\expandafter\XINT_expr_getop\csname.=%
+ {\expanded\bgroup{{\iffalse}}\fi
\expandafter\XINT_expr_scandec_a\romannumeral`&&@#1}%
-\def\XINT_expr_scanint_b #1%
+\def\XINT_expr_scanint_main #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_scanint_hit_cs \fi
+ \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanint_next\fi
+ #1\XINT_expr_scanint_again
+}%
+\def\XINT_expr_scanint_again #1%
{%
- \ifcat \relax #1\expandafter\XINT_expr_scanint_endbycs\expandafter #1\fi
- \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanint_c\fi
- \string#1\XINT_expr_scanint_d
+ \expandafter\XINT_expr_scanint_main\romannumeral`&&@#1%
}%
-\def\XINT_expr_scanint_d #1%
+\def\XINT_expr_scanint_hit_cs \ifnum#1\fi#2\XINT_expr_scanint_again
{%
- \expandafter\XINT_expr_scanint_b\romannumeral`&&@#1%
+ \iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#2%
}%
-\def\XINT_expr_scanint_endbycs#1#2\XINT_expr_scanint_d{\endcsname #1}%
-\def\XINT_expr_scanint_c\string #1\XINT_expr_scanint_d
+\def\XINT_expr_scanint_next #1\XINT_expr_scanint_again
{%
- \if _#1\xint_dothis\XINT_expr_scanint_d\fi
+ \if [#1\xint_dothis\XINT_expr_rawxintfrac\fi
+ \if _#1\xint_dothis\XINT_expr_scanint_again\fi
\if e#1\xint_dothis{[\the\numexpr0\XINT_expr_scanexp_a +}\fi
\if E#1\xint_dothis{[\the\numexpr0\XINT_expr_scanexp_a +}\fi
\if .#1\xint_dothis{\XINT_expr_startdec_a .}\fi
- \xint_orthat {\endcsname #1}%
+ \xint_orthat
+ {\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
}%
-\def\XINT_expr_startdec_a .#1%
+\def\XINT_expr_rawxintfrac
{%
- \expandafter\XINT_expr_scandec_a\romannumeral`&&@#1%
+ \iffalse{{{\fi}}\expandafter}\csname XINT_expr_precedence_&&@\endcsname&&@%
}%
-\def\XINT_expr_scandec_a #1%
+\def\XINT_expr_gobz_scanint_main #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_gobz_scanint_hit_cs\fi
+ \ifnum\xint_c_x<1\string#1 \else\expandafter\XINT_expr_gobz_scanint_next\fi
+ #1\XINT_expr_scanint_again
+}%
+\def\XINT_expr_gobz_scanint_again #1%
{%
- \if .#1\xint_dothis{\endcsname..}\fi
- \xint_orthat {\XINT_expr_scandec_b 0.#1}%
+ \expandafter\XINT_expr_gobz_scanint_main\romannumeral`&&@#1%
}%
-\def\XINT_expr_gobz_scanint_b #1%
+\def\XINT_expr_gobz_scanint_hit_cs\ifnum#1\fi#2\XINT_expr_scanint_again
{%
- \ifcat \relax #1\expandafter\XINT_expr_gobz_scanint_endbycs\expandafter #1\fi
- \ifnum\xint_c_x<1\string#1 \else\expandafter\XINT_expr_gobz_scanint_c\fi
- \string#1\XINT_expr_scanint_d
+ 0\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#2%
}%
-\def\XINT_expr_gobz_scanint_endbycs#1#2\XINT_expr_scanint_d{0\endcsname #1}%
-\def\XINT_expr_gobz_scanint_c\string #1\XINT_expr_scanint_d
+\def\XINT_expr_gobz_scanint_next #1\XINT_expr_scanint_again
{%
- \if _#1\xint_dothis\XINT_expr_gobz_scanint_d\fi
+ \if [#1\xint_dothis{\expandafter0\XINT_expr_rawxintfrac}\fi
+ \if _#1\xint_dothis\XINT_expr_gobz_scanint_again\fi
\if e#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
\if E#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
\if .#1\xint_dothis{\XINT_expr_gobz_startdec_a .}\fi
- \if 0#1\xint_dothis\XINT_expr_gobz_scanint_d\fi
- \xint_orthat {0\endcsname #1}%
+ \if 0#1\xint_dothis\XINT_expr_gobz_scanint_again\fi
+ \xint_orthat
+ {0\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
+}%
+\def\XINT_expr_startdec_a .#1%
+{%
+ \expandafter\XINT_expr_scandec_a\romannumeral`&&@#1%
}%
-\def\XINT_expr_gobz_scanint_d #1%
+\def\XINT_expr_scandec_a #1%
{%
- \expandafter\XINT_expr_gobz_scanint_b\romannumeral`&&@#1%
+ \if .#1\xint_dothis{\iffalse{{{\fi}}\expandafter}%
+ \romannumeral`&&@\XINT_expr_getop..}\fi
+ \xint_orthat {\XINT_expr_scandec_main 0.#1}%
}%
\def\XINT_expr_gobz_startdec_a .#1%
{%
@@ -437,93 +517,117 @@
}%
\def\XINT_expr_gobz_scandec_a #1%
{%
- \if .#1\xint_dothis{0\endcsname..}\fi
- \xint_orthat {\XINT_expr_gobz_scandec_b 0.#1}%
+ \if .#1\xint_dothis
+ {0\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop..}\fi
+ \xint_orthat {\XINT_expr_gobz_scandec_main 0.#1}%
}%
-\def\XINT_expr_scandec_b #1.#2%
+\def\XINT_expr_scandec_main #1.#2%
{%
- \ifcat \relax #2\expandafter\XINT_expr_scandec_endbycs\expandafter#2\fi
- \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_scandec_c\fi
- \string#2\expandafter\XINT_expr_scandec_d\the\numexpr #1-\xint_c_i.%
+ \ifcat \relax #2\expandafter\XINT_expr_scandec_hit_cs\fi
+ \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_scandec_next\fi
+ #2\expandafter\XINT_expr_scandec_again\the\numexpr #1-\xint_c_i.%
}%
-\def\XINT_expr_scandec_endbycs #1#2\XINT_expr_scandec_d
- \the\numexpr#3-\xint_c_i.{[#3]\endcsname #1}%
-\def\XINT_expr_scandec_d #1.#2%
+\def\XINT_expr_scandec_again #1.#2%
{%
- \expandafter\XINT_expr_scandec_b
+ \expandafter\XINT_expr_scandec_main
\the\numexpr #1\expandafter.\romannumeral`&&@#2%
}%
-\def\XINT_expr_scandec_c\string #1#2\the\numexpr#3-\xint_c_i.%
+\def\XINT_expr_scandec_hit_cs\ifnum#1\fi
+ #2\expandafter\XINT_expr_scandec_again\the\numexpr#3-\xint_c_i.%
{%
- \if _#1\xint_dothis{\XINT_expr_scandec_d#3.}\fi
+ [#3]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#2%
+}%
+\def\XINT_expr_scandec_next #1#2\the\numexpr#3-\xint_c_i.%
+{%
+ \if _#1\xint_dothis{\XINT_expr_scandec_again#3.}\fi
\if e#1\xint_dothis{[\the\numexpr#3\XINT_expr_scanexp_a +}\fi
\if E#1\xint_dothis{[\the\numexpr#3\XINT_expr_scanexp_a +}\fi
- \xint_orthat {[#3]\endcsname #1}%
+ \xint_orthat
+ {[#3]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
}%
-\def\XINT_expr_gobz_scandec_b #1.#2%
+\def\XINT_expr_gobz_scandec_main #1.#2%
{%
- \ifcat \relax #2\expandafter\XINT_expr_gobz_scandec_endbycs\expandafter#2\fi
- \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_gobz_scandec_c\fi
+ \ifcat \relax #2\expandafter\XINT_expr_gobz_scandec_hit_cs\fi
+ \ifnum\xint_c_ix<1\string#2 \else\expandafter\XINT_expr_gobz_scandec_next\fi
\if0#2\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi
- {\expandafter\XINT_expr_gobz_scandec_b}%
- {\string#2\expandafter\XINT_expr_scandec_d}\the\numexpr#1-\xint_c_i.%
+ {\expandafter\XINT_expr_gobz_scandec_main}%
+ {#2\expandafter\XINT_expr_scandec_again}\the\numexpr#1-\xint_c_i.%
+}%
+\def\XINT_expr_gobz_scandec_hit_cs \ifnum#1\fi\if0#2#3\xint_c_i.%
+{%
+ 0[0]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#2%
}%
-\def\XINT_expr_gobz_scandec_endbycs #1#2\xint_c_i.{0[0]\endcsname #1}%
-\def\XINT_expr_gobz_scandec_c\if0#1#2\fi #3\numexpr#4-\xint_c_i.%
+\def\XINT_expr_gobz_scandec_next\if0#1#2\fi #3\numexpr#4-\xint_c_i.%
{%
- \if _#1\xint_dothis{\XINT_expr_gobz_scandec_b #4.}\fi
+ \if _#1\xint_dothis{\XINT_expr_gobz_scandec_main #4.}\fi
\if e#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
\if E#1\xint_dothis{0[\the\numexpr0\XINT_expr_scanexp_a +}\fi
- \xint_orthat {0[0]\endcsname #1}%
+ \xint_orthat
+ {0[0]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
}%
\def\XINT_expr_scanexp_a #1#2%
{%
- #1\expandafter\XINT_expr_scanexp_b\romannumeral`&&@#2%
+ #1\expandafter\XINT_expr_scanexp_main\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scanexp_main #1%
+{%
+ \ifcat \relax #1\expandafter\XINT_expr_scanexp_hit_cs\fi
+ \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanexp_next\fi
+ #1\XINT_expr_scanexp_again
}%
-\def\XINT_expr_scanexp_b #1%
+\def\XINT_expr_scanexp_again #1%
{%
- \ifcat \relax #1\expandafter\XINT_expr_scanexp_endbycs\expandafter #1\fi
- \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanexp_c\fi
- \string#1\XINT_expr_scanexp_d
+ \expandafter\XINT_expr_scanexp_main_b\romannumeral`&&@#1%
}%
-\def\XINT_expr_scanexpr_endbycs#1#2\XINT_expr_scanexp_d {]\endcsname #1}%
-\def\XINT_expr_scanexp_d #1%
+\def\XINT_expr_scanexpr_hit_cs\ifnum#1\fi#2\XINT_expr_scanexp_again
{%
- \expandafter\XINT_expr_scanexp_bb\romannumeral`&&@#1%
+ ]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#2%
}%
-\def\XINT_expr_scanexp_c\string #1\XINT_expr_scanexp_d
+\def\XINT_expr_scanexp_next #1\XINT_expr_scanexp_again
{%
- \if _#1\xint_dothis \XINT_expr_scanexp_d \fi
+ \if _#1\xint_dothis \XINT_expr_scanexp_again \fi
\if +#1\xint_dothis {\XINT_expr_scanexp_a +}\fi
\if -#1\xint_dothis {\XINT_expr_scanexp_a -}\fi
- \xint_orthat {]\endcsname #1}%
+ \xint_orthat
+ {]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
}%
-\def\XINT_expr_scanexp_bb #1%
+\def\XINT_expr_scanexp_main_b #1%
{%
- \ifcat \relax #1\expandafter\XINT_expr_scanexp_endbycs_b\expandafter #1\fi
- \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanexp_cb\fi
- \string#1\XINT_expr_scanexp_db
+ \ifcat \relax #1\expandafter\XINT_expr_scanexp_hit_cs_b\fi
+ \ifnum\xint_c_ix<1\string#1 \else\expandafter\XINT_expr_scanexp_next_b\fi
+ #1\XINT_expr_scanexp_again_b
}%
-\def\XINT_expr_scanexp_endbycs_b#1#2\XINT_expr_scanexp_db {]\endcsname #1}%
-\def\XINT_expr_scanexp_db #1%
+\def\XINT_expr_scanexp_hit_cs_b\ifnum#1\fi#2\XINT_expr_scanexp_again_b
{%
- \expandafter\XINT_expr_scanexp_bb\romannumeral`&&@#1%
+ ]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#2%
}%
-\def\XINT_expr_scanexp_cb\string #1\XINT_expr_scanexp_db
+\def\XINT_expr_scanexp_again_b #1%
{%
- \if _#1\xint_dothis\XINT_expr_scanexp_d\fi
- \xint_orthat{]\endcsname #1}%
+ \expandafter\XINT_expr_scanexp_main_b\romannumeral`&&@#1%
+}%
+\def\XINT_expr_scanexp_next_b #1\XINT_expr_scanexp_again_b
+{%
+ \if _#1\xint_dothis\XINT_expr_scanexp_again\fi
+ \xint_orthat
+ {]\iffalse{{{\fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
+}%
+\def\XINT_expr_hex_in #1.#2#3;%
+{%
+ \expanded{{{\if#2>%
+ \xintHexToDec{#1}%
+ \else
+ \xintiiMul{\xintiiPow{625}{\xintLength{#3}}}{\xintHexToDec{#1#3}}%
+ [\the\numexpr-4*\xintLength{#3}]%
+ \fi}}\expandafter}\romannumeral`&&@\XINT_expr_getop
}%
\def\XINT_expr_scanhex_I #1% #1="
{%
- \expandafter\XINT_expr_getop\csname.=\expandafter
- \XINT_expr_unlock_hex_in\csname.=\XINT_expr_scanhexI_a
+ \expandafter\XINT_expr_hex_in\expanded\bgroup\XINT_expr_scanhexI_a
}%
\def\XINT_expr_scanhexI_a #1%
{%
- \ifcat #1\relax\xint_dothis{.>\endcsname\endcsname #1}\fi
- \ifx !#1\xint_dothis{.>\endcsname\endcsname !}\fi
- \xint_orthat {\expandafter\XINT_expr_scanhexI_aa\string #1}%
+ \ifcat #1\relax\xint_dothis{.>;\iffalse{\fi}#1}\fi
+ \xint_orthat {\XINT_expr_scanhexI_aa #1}%
}%
\def\XINT_expr_scanhexI_aa #1%
{%
@@ -536,8 +640,7 @@
\else
\if _#1\xint_dothis{\expandafter\XINT_expr_scanhexI_bgob}\fi
\if .#1\xint_dothis{\expandafter\XINT_expr_scanhex_transition}\fi
- \xint_orthat % gather what we got so far, leave catcode 12 #1 in stream
- {\xint_afterfi {.>\endcsname\endcsname}}%
+ \xint_orthat {\xint_afterfi {.>;\iffalse{\fi}}}%
\fi
#1%
}%
@@ -556,9 +659,8 @@
}%
\def\XINT_expr_scanhexII_a #1%
{%
- \ifcat #1\relax\xint_dothis{\endcsname\endcsname#1}\fi
- \ifx !#1\xint_dothis{\endcsname\endcsname !}\fi
- \xint_orthat {\expandafter\XINT_expr_scanhexII_aa\string #1}%
+ \ifcat #1\relax\xint_dothis{;\iffalse{\fi}#1}\fi
+ \xint_orthat {\XINT_expr_scanhexII_aa #1}%
}%
\def\XINT_expr_scanhexII_aa #1%
{%
@@ -570,7 +672,7 @@
\expandafter\XINT_expr_scanhexII_b
\else
\if _#1\xint_dothis{\expandafter\XINT_expr_scanhexII_bgob}\fi
- \xint_orthat{\xint_afterfi {\endcsname\endcsname}}%
+ \xint_orthat{\xint_afterfi {;\iffalse{\fi}}}%
\fi
#1%
}%
@@ -582,78 +684,137 @@
{%
\expandafter\XINT_expr_scanhexII_a\romannumeral`&&@#2%
}%
-\def\XINT_expr_scanfunc
+\def\XINT_expr_scanfunc #1%
{%
- \expandafter\XINT_expr_func\romannumeral`&&@\XINT_expr_scanfunc_a
+ \if 1\ifcat a#10\fi\if @#10\fi\if !#10\fi\if ?#10\fi 1%
+ \expandafter\xint_firstoftwo
+ \else\expandafter\xint_secondoftwo
+ \fi
+ {\expandafter{\expandafter}\romannumeral`&&@\XINT_expr_getop#1}%
+ {\expandafter\XINT_expr_func\expanded\bgroup#1\XINT_expr_scanfunc_a}%
}%
-\def\XINT_expr_scanfunc_a #1#2%
+\def\XINT_expr_scanfunc_a #1%
{%
- \expandafter #1\romannumeral`&&@\expandafter\XINT_expr_scanfunc_b\romannumeral`&&@#2%
+ \expandafter\XINT_expr_scanfunc_b\romannumeral`&&@#1%
}%
\def\XINT_expr_scanfunc_b #1%
{%
- \ifx !#1\xint_dothis{(_}\fi
- \ifcat \relax#1\xint_dothis{(_}\fi
- \if (#1\xint_dothis{\xint_firstoftwo{(`}}\fi
- \if @#1\xint_dothis \XINT_expr_scanfunc_a \fi
- \if _#1\xint_dothis \XINT_expr_scanfunc_a \fi
- \ifnum \xint_c_ix<1\string#1 \xint_dothis \XINT_expr_scanfunc_a \fi
- \ifcat a#1\xint_dothis \XINT_expr_scanfunc_a \fi
- \xint_orthat {(_}%
- #1%
+ \ifcat \relax#1\xint_dothis{\iffalse{\fi}(_#1}\fi
+ \if (#1\xint_dothis{\iffalse{\fi}(`}\fi
+ \if 1\ifcat a#10\fi
+ \ifnum\xint_c_ix<1\string#1 0\fi
+ \if @#10\fi
+ \if _#10\fi
+ 1%
+ \xint_dothis{\iffalse{\fi}(_#1}\fi
+ \xint_orthat {#1\XINT_expr_scanfunc_a}%
+}%
+\def\XINT_expr_func #1(#2{\if _#2\xint_dothis{\XINT_expr_op__{#1}}\fi
+ \xint_orthat{{#1}\xint_c_ii^v #2}}%
+\def\XINT_tmpa #1#2#3{%
+ \def #1##1%
+ {%
+ \ifcsname XINT_#3_func_##1\endcsname
+ \csname XINT_#3_func_##1\expandafter\endcsname
+ \romannumeral`&&@\expandafter#2%
+ \else
+ \ifcsname XINT_expr_onliteral_##1\endcsname
+ \csname XINT_expr_onliteral_##1\expandafter\expandafter\expandafter
+ \endcsname
+ \else
+ \csname XINT_#3_func_\XINT_expr_unknown_function {##1}%
+ \expandafter\endcsname
+ \romannumeral`&&@\expandafter\expandafter\expandafter#2%
+ \fi
+ \fi
+ }%
+}%
+\def\XINT_expr_unknown_function #1%
+ {\XINT_expandableerror{"#1" is unknown as function. (I)nsert correct name:}}%
+\def\XINT_expr_func_ #1#2#3{#1#2{{0}}}%
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\XINT_tmpa
+ \csname XINT_#1_op_`\expandafter\endcsname
+ \csname XINT_#1_oparen\endcsname
+ {#1}%
+}%
+\def\XINT_expr_op__ #1% op__ with two _'s
+{%
+ \ifcsname XINT_expr_var_#1\endcsname
+ \expandafter\expandafter\expandafter\XINT_expr_getop_legacy
+ \csname XINT_expr_var_#1\expandafter\endcsname
+ \else
+ \expandafter\expandafter\expandafter\XINT_expr_getop_legacy
+ \csname XINT_expr_var_\XINT_expr_unknown_variable {#1}%
+ \expandafter\endcsname
+ \fi
+}%
+\def\XINT_expr_unknown_variable #1%
+ {\XINT_expandableerror {"#1" is unknown as a variable. (I)nsert correct one:}}%
+\def\XINT_expr_var_{{0}}%
+\let\XINT_flexpr_op__ \XINT_expr_op__
+\let\XINT_iiexpr_op__ \XINT_expr_op__
+\def\XINT_expr_getop_legacy #1%
+{%
+ \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
}%
-\def\XINT_expr_func #1(#2{\if _#2\xint_dothis\XINT_expr_op__\fi
- \xint_orthat{\xint_c_xviii #2}{#1}}%
-\def\XINT_expr_getop #1#2% this #1 is the current locked computed value
+\def\XINT_expr_getop #1%
{%
- \expandafter\XINT_expr_getop_a\expandafter #1\romannumeral`&&@#2%
+ \expandafter\XINT_expr_getop_a\romannumeral`&&@#1%
}%
\catcode`* 11
-\def\XINT_expr_getop_a #1#2%
-{%
- \ifx \relax #2\xint_dothis\xint_firstofthree\fi
- \ifcat \relax #2\xint_dothis\xint_secondofthree\fi
- \ifnum\xint_c_ix<1\string#2 \xint_dothis\xint_secondofthree\fi
- \if _#2\xint_dothis \xint_secondofthree\fi
- \if @#2\xint_dothis \xint_secondofthree\fi
- \if (#2\xint_dothis \xint_secondofthree\fi
- \ifcat a#2\xint_dothis \xint_secondofthree\fi
+\def\XINT_expr_getop_a #1%
+{%
+ \ifx \relax #1\xint_dothis\xint_firstofthree\fi
+ \ifcat \relax #1\xint_dothis\xint_secondofthree\fi
+ \ifnum\xint_c_ix<1\string#1 \xint_dothis\xint_secondofthree\fi
+ \if :#1\xint_dothis \xint_thirdofthree\fi
+ \if _#1\xint_dothis \xint_secondofthree\fi
+ \if @#1\xint_dothis \xint_secondofthree\fi
+ \if (#1\xint_dothis \xint_secondofthree\fi %)
+ \ifcat a#1\xint_dothis \xint_secondofthree\fi
\xint_orthat \xint_thirdofthree
- {\XINT_expr_foundend #1}%
- {\XINT_expr_precedence_*** *#1#2}% tacit multiplication with higher precedence
- {\expandafter\XINT_expr_getop_b \string#2#1}%
+ {\XINT_expr_foundend}%
+ {\XINT_expr_precedence_*** *#1}%
+ {\expandafter\XINT_expr_getop_b \string#1}%
}%
\catcode`* 12
-\def\XINT_expr_foundend {\xint_c_ \relax }% \relax is a place holder here.
+\def\XINT_expr_foundend {\xint_c_ \relax}%
\def\XINT_expr_getop_b #1%
{%
+ \if &&@#1\xint_dothis{\csname XINT_expr_precedence_&&@\endcsname&&@}\fi
\if '#1\xint_dothis{\XINT_expr_binopwrd }\fi
\if ?#1\xint_dothis{\XINT_expr_precedence_? ?}\fi
\xint_orthat {\XINT_expr_scanop_a #1}%
}%
-\def\XINT_expr_binopwrd #1#2'{\expandafter\XINT_expr_foundop_a
- \csname XINT_expr_itself_\xint_zapspaces #2 \xint_gobble_i\endcsname #1}%
-\def\XINT_expr_scanop_a #1#2#3%
- {\expandafter\XINT_expr_scanop_b\expandafter #1\expandafter #2\romannumeral`&&@#3}%
-\def\XINT_expr_scanop_b #1#2#3%
+\def\XINT_expr_binopwrd #1'%
{%
- \ifcat#3\relax\xint_dothis{\XINT_expr_foundop_a #1#2#3}\fi
- \ifcsname XINT_expr_itself_#1#3\endcsname
- \xint_dothis
- {\expandafter\XINT_expr_scanop_c\csname XINT_expr_itself_#1#3\endcsname #2}\fi
- \xint_orthat {\XINT_expr_foundop_a #1#2#3}%
+ \expandafter\XINT_expr_foundop_a
+ \csname XINT_expr_itself_\xint_zapspaces #1 \xint_gobble_i\endcsname
+}%
+\def\XINT_expr_scanop_a #1#2%
+{%
+ \expandafter\XINT_expr_scanop_b\expandafter#1\romannumeral`&&@#2%
+}%
+\def\XINT_expr_scanop_b #1#2%
+{%
+ \ifcat#2\relax\xint_dothis{\XINT_expr_foundop_a #1#2}\fi
+ \ifcsname XINT_expr_itself_#1#2\endcsname
+ \xint_dothis
+ {\expandafter\XINT_expr_scanop_c\csname XINT_expr_itself_#1#2\endcsname}\fi
+ \xint_orthat {\XINT_expr_foundop_a #1#2}%
}%
-\def\XINT_expr_scanop_c #1#2#3%
+\def\XINT_expr_scanop_c #1#2%
{%
- \expandafter\XINT_expr_scanop_d\expandafter #1\expandafter #2\romannumeral`&&@#3%
+ \expandafter\XINT_expr_scanop_d\expandafter#1\romannumeral`&&@#2%
}%
-\def\XINT_expr_scanop_d #1#2#3%
+\def\XINT_expr_scanop_d #1#2%
{%
- \ifcat#3\relax \xint_dothis{\XINT_expr_foundop #1#2#3}\fi
- \ifcsname XINT_expr_itself_#1#3\endcsname
+ \ifcat#2\relax \xint_dothis{\XINT_expr_foundop #1#2}\fi
+ \ifcsname XINT_expr_itself_#1#2\endcsname
\xint_dothis
- {\expandafter\XINT_expr_scanop_c\csname XINT_expr_itself_#1#3\endcsname #2}\fi
- \xint_orthat {\csname XINT_expr_precedence_#1\endcsname #1#2#3}%
+ {\expandafter\XINT_expr_scanop_c\csname XINT_expr_itself_#1#2\endcsname }\fi
+ \xint_orthat {\csname XINT_expr_precedence_#1\endcsname #1#2}%
}%
\def\XINT_expr_foundop_a #1%
{%
@@ -661,898 +822,925 @@
\csname XINT_expr_precedence_#1\expandafter\endcsname
\expandafter #1%
\else
- \xint_afterfi{\XINT_expr_unknown_operator {#1}\XINT_expr_getop}%
+ \xint_afterfi{\XINT_expr_getop\romannumeral0%
+ \XINT_expandableerror
+ {"#1" is unknown as operator. (I)nsert one:} }%<<deliberate space
\fi
}%
-\def\XINT_expr_unknown_operator #1{\xintError:removed \xint_gobble_i {#1}}%
\def\XINT_expr_foundop #1{\csname XINT_expr_precedence_#1\endcsname #1}%
\catcode`) 11
-\def\XINT_tmpa #1#2#3#4%
+\def\XINT_tmpa #1#2#3#4#5#6%
{%
- \def#1##1%
+ \def#1% start
+ {%
+ \expandafter#2\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def#2##1% check
{%
\xint_UDsignfork
- ##1{\expandafter#1\romannumeral`&&@#3}%
- -{#2##1}%
+ ##1{\expandafter#3\romannumeral`&&@#4}%
+ -{#3##1}%
\krof
}%
- \def#2##1##2%
+ \def#3##1##2% checkp
{%
- \ifcase ##1\expandafter\XINT_expr_done
- \or\xint_afterfi{\XINT_expr_extra_)
- \expandafter #1\romannumeral`&&@\XINT_expr_getop }%
+ \ifcase ##1%
+ \expandafter\XINT_expr_done
+ \or\expandafter#5%
\else
- \xint_afterfi{\expandafter#1\romannumeral`&&@\csname XINT_#4_op_##2\endcsname }%
+ \expandafter#3\romannumeral`&&@\csname XINT_#6_op_##2\expandafter\endcsname
\fi
}%
+ \def#5%
+ {%
+ \XINT_expandableerror
+ {An extra ) has been removed. Hit Return, fingers crossed.}%
+ \expandafter#2\romannumeral`&&@\expandafter\XINT_expr_put_op_first
+ \romannumeral`&&@\XINT_expr_getop_legacy
+ }%
}%
-\def\XINT_expr_extra_) {\xintError:removed }%
+\let\XINT_expr_done\space
\xintFor #1 in {expr,flexpr,iiexpr} \do {%
\expandafter\XINT_tmpa
- \csname XINT_#1_until_end_a\expandafter\endcsname
- \csname XINT_#1_until_end_b\expandafter\endcsname
- \csname XINT_#1_op_-vi\endcsname
+ \csname XINT_#1_start\expandafter\endcsname
+ \csname XINT_#1_check\expandafter\endcsname
+ \csname XINT_#1_checkp\expandafter\endcsname
+ \csname XINT_#1_op_-xii\expandafter\endcsname
+ \csname XINT_#1_extra_)\endcsname
{#1}%
}%
-\def\XINT_tmpa #1#2#3#4#5#6%
+\def\XINT_tmpa #1#2#3#4#5#6#7%
{%
- \def #1##1{\expandafter #3\romannumeral`&&@\XINT_expr_getnext }%
- \def #2{\expandafter #3\romannumeral`&&@\XINT_expr_getnext }%
- \def #3##1{\xint_UDsignfork
- ##1{\expandafter #3\romannumeral`&&@#5}%
- -{#4##1}%
- \krof }%
- \def #4##1##2{\ifcase ##1\expandafter\XINT_expr_missing_)
- \or \csname XINT_#6_op_##2\expandafter\endcsname
- \else
- \xint_afterfi{\expandafter #3\romannumeral`&&@\csname XINT_#6_op_##2\endcsname }%
- \fi
+ \def #1##1% op_(
+ {%
+ \expandafter #4\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1% op_)
+ {%
+ \expanded{\unexpanded{\XINT_expr_put_op_first{##1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
+ }%
+ \def #3% oparen
+ {%
+ \expandafter #4\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #4##1% check-
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#5\romannumeral`&&@#6}%
+ -{#5##1}%
+ \krof
+ }%
+ \def #5##1##2% checkp
+ {%
+ \ifcase ##1\expandafter\XINT_expr_missing_)
+ \or \csname XINT_#7_op_##2\expandafter\endcsname
+ \else
+ \expandafter #5\romannumeral`&&@\csname XINT_#7_op_##2\expandafter\endcsname
+ \fi
}%
}%
-\def\XINT_expr_missing_) {\xintError:inserted \xint_c_ \XINT_expr_done }%
-\catcode`) 12
+\def\XINT_expr_missing_)
+ {\XINT_expandableerror{Sorry to report a missing ) at the end of this journey.}%
+ \xint_c_ \XINT_expr_done }%
\xintFor #1 in {expr,flexpr,iiexpr} \do {%
\expandafter\XINT_tmpa
\csname XINT_#1_op_(\expandafter\endcsname
+ \csname XINT_#1_op_)\expandafter\endcsname
\csname XINT_#1_oparen\expandafter\endcsname
- \csname XINT_#1_until_)_a\expandafter\endcsname
- \csname XINT_#1_until_)_b\expandafter\endcsname
- \csname XINT_#1_op_-vi\endcsname
+ \csname XINT_#1_check-_)\expandafter\endcsname
+ \csname XINT_#1_checkp_)\expandafter\endcsname
+ \csname XINT_#1_op_-xii\endcsname
{#1}%
}%
-\expandafter\let\csname XINT_expr_precedence_)\endcsname\xint_c_i
-\expandafter\let\csname XINT_expr_precedence_]\endcsname\xint_c_i
-\expandafter\let\csname XINT_expr_precedence_;\endcsname\xint_c_i
-\let\XINT_expr_precedence_a \xint_c_xviii
-\let\XINT_expr_precedence_!? \xint_c_ii
-\expandafter\let\csname XINT_expr_precedence_++)\endcsname \xint_c_i
-\catcode`. 11 \catcode`= 11 \catcode`+ 11
+\let\XINT_expr_precedence_)\xint_c_i
+\catcode`) 12
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1% \XINT_expr_op_,
+ {%
+ \expanded{\unexpanded{#2{##1}}\expandafter}%
+ \romannumeral`&&@\expandafter#3\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2##3##4{##2##3{##1##4}}% \XINT_expr_exec_,
+ \def #3##1% \XINT_expr_check-_,
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#4\romannumeral`&&@#5}%
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% \XINT_expr_checkp_,
+ {%
+ \ifnum ##1>\xint_c_iii
+ \expandafter#4%
+ \romannumeral`&&@\csname XINT_#6_op_##2\expandafter\endcsname
+ \else
+ \expandafter##1\expandafter##2%
+ \fi
+ }%
+}%
\xintFor #1 in {expr,flexpr,iiexpr} \do {%
- \expandafter\let\csname XINT_#1_op_)\endcsname \XINT_expr_getop
- \expandafter\let\csname XINT_#1_op_;\endcsname \space
- \expandafter\def\csname XINT_#1_op_]\endcsname ##1{\XINT_expr_scanop_a a##1}%
- \expandafter\let\csname XINT_#1_op_a\endcsname \XINT_expr_getop
- \expandafter\def\csname XINT_#1_op_++)\endcsname ##1##2\relax
- {\expandafter\XINT_expr_foundend \expandafter
- {\expandafter\.=+\csname .=\XINT:NEhook:one\xintiCeil{\XINT_expr_unlock ##1}\endcsname }}%
+\expandafter\XINT_tmpa
+ \csname XINT_#1_op_,\expandafter\endcsname
+ \csname XINT_#1_exec_,\expandafter\endcsname
+ \csname XINT_#1_check-_,\expandafter\endcsname
+ \csname XINT_#1_checkp_,\expandafter\endcsname
+ \csname XINT_#1_op_-xii\endcsname {#1}%
+}%
+\expandafter\let\csname XINT_expr_precedence_,\endcsname\xint_c_iii
+\def\XINT_tmpb #1#2#3#4#5#6#7%
+{%
+ \def #1% \XINT_expr_op_-<level>
+ {%
+ \expandafter #2\romannumeral`&&@\expandafter#3%
+ \romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2##3% \XINT_expr_exec_-<level>
+ {%
+ \expandafter ##1\expandafter ##2\expandafter
+ {%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@#7##3}%
+ }%
+ }%
+ \def #3##1% \XINT_expr_check-_-<level>
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter #4\romannumeral`&&@#1}%
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% \XINT_expr_checkp_-<level>
+ {%
+ \ifnum ##1>#5%
+ \expandafter #4%
+ \romannumeral`&&@\csname XINT_#6_op_##2\expandafter\endcsname
+ \else
+ \expandafter ##1\expandafter ##2%
+ \fi
+ }%
+}%
+\def\XINT_tmpa #1#2#3%
+{%
+ \expandafter\XINT_tmpb
+ \csname XINT_#1_op_-#3\expandafter\endcsname
+ \csname XINT_#1_exec_-#3\expandafter\endcsname
+ \csname XINT_#1_check-_-#3\expandafter\endcsname
+ \csname XINT_#1_checkp_-#3\expandafter\endcsname
+ \csname xint_c_#3\endcsname {#1}#2%
+}%
+\xintApplyInline{\XINT_tmpa {expr}\xintOpp}{{xii}{xiv}{xvi}{xviii}}%
+\xintApplyInline{\XINT_tmpa {flexpr}\xintOpp}{{xii}{xiv}{xvi}{xviii}}%
+\xintApplyInline{\XINT_tmpa {iiexpr}\xintiiOpp}{{xii}{xiv}{xvi}{xviii}}%
+\def\XINT_tmpa#1#2#3%
+{%
+ \def#1##1{\expandafter#2\romannumeral`&&@\XINT_expr_getnext}%
+ \def#2##1##2%
+ {%
+ \ifnum ##1>\xint_c_xx
+ \expandafter #2%
+ \romannumeral`&&@\csname XINT_#3_op_##2\expandafter\endcsname
+ \else
+ \expandafter##1\expandafter##2\romannumeral0\expandafter\XINT:NEhook:unpack
+ \fi
+ }%
}%
-\catcode`. 12 \catcode`= 12 \catcode`+ 12
+\xintFor* #1 in {{expr}{flexpr}{iiexpr}}:
+ {\expandafter\XINT_tmpa\csname XINT_#1_op_0\expandafter\endcsname
+ \csname XINT_#1_until_unpack\endcsname {#1}}%
\catcode`& 12
-\xintFor* #1 in {{==}{<=}{>=}{!=}{&&}{||}{**}{//}{/:}{..}{..[}{].}{]..}%
- {+[}{-[}{*[}{/[}{**[}{^[}{a+}{a-}{a*}{a/}{a**}{a^}%
- {][}{][:}{:]}{!?}{++}{++)}}%{***}}
+\xintFor* #1 in {{==}{<=}{>=}{!=}{&&}{||}{**}{//}{/:}{..}{..[}{].}{]..}}%
\do {\expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}}%
\catcode`& 7
-\expandafter\let\csname XINT_expr_precedence_***\endcsname \xint_c_viii
+\expandafter\let\csname XINT_expr_precedence_***\endcsname \xint_c_xvi
\def\XINT_expr_defbin_c #1#2#3#4#5#6#7#8#9%
{%
- \def #1##1% \XINT_expr_op_<op> ou flexpr ou iiexpr
- {% keep value, get next number and operator, then do until
- \expandafter #2\expandafter ##1%
- \romannumeral`&&@\expandafter\XINT_expr_getnext }%
- \def #2##1##2% \XINT_expr_until_<op>_a ou flexpr ou iiexpr
- {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
- -{#3##1##2}%
- \krof }%
- \def #3##1##2##3##4% \XINT_expr_until_<op>_b ou flexpr ou iiexpr
- {% either execute next operation now, or first do next (possibly unary)
- \ifnum ##2>#7%
- \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
- \csname XINT_#8_op_##3\endcsname {##4}}%
- \else \xint_afterfi {\expandafter ##2\expandafter ##3%
- \csname .=#9#6{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname }%
- \fi }%
- \let #7#5%
+ \def #1##1% \XINT_expr_op_<op>
+ {%
+ \expanded{\unexpanded{#2{##1}}\expandafter}%
+ \romannumeral`&&@\expandafter#3\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2##3##4% \XINT_expr_exec_<op>
+ {%
+ \expandafter##2\expandafter##3\expandafter
+ {#9{\romannumeral`&&@#6##1##4}}%
+ }%
+ \def #3##1% \XINT_expr_check-_<op>
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#4\romannumeral`&&@#5}%
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% \XINT_expr_checkp_<op>
+ {%
+ \ifnum ##1>#7%
+ \expandafter#4%
+ \romannumeral`&&@\csname XINT_#8_op_##2\expandafter\endcsname
+ \else
+ \expandafter ##1\expandafter ##2%
+ \fi
+ }%
}%
\def\XINT_expr_defbin_b #1#2#3#4#5%
{%
\expandafter\XINT_expr_defbin_c
\csname XINT_#1_op_#2\expandafter\endcsname
- \csname XINT_#1_until_#2_a\expandafter\endcsname
- \csname XINT_#1_until_#2_b\expandafter\endcsname
- \csname XINT_#1_op_-#4\expandafter\endcsname
- \csname xint_c_#3\expandafter\endcsname
- \csname #5\expandafter\endcsname
- \csname XINT_expr_precedence_#2\endcsname {#1}\XINT:NEhook:two
-}%
-\XINT_expr_defbin_b {expr} | {iii}{vi} {xintOR}%
-\XINT_expr_defbin_b {flexpr} | {iii}{vi} {xintOR}%
-\XINT_expr_defbin_b {iiexpr} | {iii}{vi} {xintOR}%
-\XINT_expr_defbin_b {expr} & {iv}{vi} {xintAND}%
-\XINT_expr_defbin_b {flexpr} & {iv}{vi} {xintAND}%
-\XINT_expr_defbin_b {iiexpr} & {iv}{vi} {xintAND}%
-\XINT_expr_defbin_b {expr} {xor}{iii}{vi} {xintXOR}%
-\XINT_expr_defbin_b {flexpr}{xor}{iii}{vi} {xintXOR}%
-\XINT_expr_defbin_b {iiexpr}{xor}{iii}{vi} {xintXOR}%
-\XINT_expr_defbin_b {expr} < {v}{vi} {xintLt}%
-\XINT_expr_defbin_b {flexpr} < {v}{vi} {xintLt}%
-\XINT_expr_defbin_b {iiexpr} < {v}{vi} {xintiiLt}%
-\XINT_expr_defbin_b {expr} > {v}{vi} {xintGt}%
-\XINT_expr_defbin_b {flexpr} > {v}{vi} {xintGt}%
-\XINT_expr_defbin_b {iiexpr} > {v}{vi} {xintiiGt}%
-\XINT_expr_defbin_b {expr} = {v}{vi} {xintEq}%
-\XINT_expr_defbin_b {flexpr} = {v}{vi} {xintEq}%
-\XINT_expr_defbin_b {iiexpr} = {v}{vi} {xintiiEq}%
-\XINT_expr_defbin_b {expr} {<=} {v}{vi} {xintLtorEq}%
-\XINT_expr_defbin_b {flexpr}{<=} {v}{vi} {xintLtorEq}%
-\XINT_expr_defbin_b {iiexpr}{<=} {v}{vi} {xintiiLtorEq}%
-\XINT_expr_defbin_b {expr} {>=} {v}{vi} {xintGtorEq}%
-\XINT_expr_defbin_b {flexpr}{>=} {v}{vi} {xintGtorEq}%
-\XINT_expr_defbin_b {iiexpr}{>=} {v}{vi} {xintiiGtorEq}%
-\XINT_expr_defbin_b {expr} {!=} {v}{vi} {xintNotEq}%
-\XINT_expr_defbin_b {flexpr}{!=} {v}{vi} {xintNotEq}%
-\XINT_expr_defbin_b {iiexpr}{!=} {v}{vi} {xintiiNotEq}%
-\XINT_expr_defbin_b {expr} {//} {vii}{vii}{xintDivFloor}% CHANGED IN 1.2p!
-\XINT_expr_defbin_b {flexpr}{//} {vii}{vii}{XINTinFloatDivFloor}% "
-\XINT_expr_defbin_b {iiexpr}{//} {vii}{vii}{xintiiDivFloor}% "
-\XINT_expr_defbin_b {expr} {/:} {vii}{vii}{xintMod}% "
-\XINT_expr_defbin_b {flexpr}{/:} {vii}{vii}{XINTinFloatMod}% "
-\XINT_expr_defbin_b {iiexpr}{/:} {vii}{vii}{xintiiMod}% "
-\XINT_expr_defbin_b {expr} + {vi}{vi} {xintAdd}%
-\XINT_expr_defbin_b {flexpr} + {vi}{vi} {XINTinFloatAdd}%
-\XINT_expr_defbin_b {iiexpr} + {vi}{vi} {xintiiAdd}%
-\XINT_expr_defbin_b {expr} - {vi}{vi} {xintSub}%
-\XINT_expr_defbin_b {flexpr} - {vi}{vi} {XINTinFloatSub}%
-\XINT_expr_defbin_b {iiexpr} - {vi}{vi} {xintiiSub}%
-\XINT_expr_defbin_b {expr} * {vii}{vii}{xintMul}%
-\XINT_expr_defbin_b {flexpr} * {vii}{vii}{XINTinFloatMul}%
-\XINT_expr_defbin_b {iiexpr} * {vii}{vii}{xintiiMul}%
-\XINT_expr_defbin_b {expr} / {vii}{vii}{xintDiv}%
-\XINT_expr_defbin_b {flexpr} / {vii}{vii}{XINTinFloatDiv}%
-\XINT_expr_defbin_b {iiexpr} / {vii}{vii}{xintiiDivRound}% CHANGED IN 1.1!
-\XINT_expr_defbin_b {expr} ^ {ix}{ix} {xintPow}%
-\XINT_expr_defbin_b {flexpr} ^ {ix}{ix} {XINTinFloatPowerH}%
-\XINT_expr_defbin_b {iiexpr} ^ {ix}{ix} {xintiiPow}%
-\XINT_expr_defbin_b {expr} {..[}{iii}{vi} {xintSeqA::csv}%
-\XINT_expr_defbin_b {flexpr}{..[}{iii}{vi} {XINTinFloatSeqA::csv}%
-\XINT_expr_defbin_b {iiexpr}{..[}{iii}{vi} {xintiiSeqA::csv}%
-\def\XINT_expr_defbin_b #1#2#3#4#5%
-{%
- \expandafter\XINT_expr_defbin_c
- \csname XINT_#1_op_#2\expandafter\endcsname
- \csname XINT_#1_until_#2_a\expandafter\endcsname
- \csname XINT_#1_until_#2_b\expandafter\endcsname
+ \csname XINT_#1_exec_#2\expandafter\endcsname
+ \csname XINT_#1_check-_#2\expandafter\endcsname
+ \csname XINT_#1_checkp_#2\expandafter\endcsname
\csname XINT_#1_op_-#4\expandafter\endcsname
- \csname xint_c_#3\expandafter\endcsname
\csname #5\expandafter\endcsname
- \csname XINT_expr_precedence_#2\endcsname {#1}{}%
-}%
-\XINT_expr_defbin_b {expr} {..} {iii}{vi} {xintSeq::csv}%
-\XINT_expr_defbin_b {flexpr}{..} {iii}{vi} {xintSeq::csv}%
-\XINT_expr_defbin_b {iiexpr}{..} {iii}{vi} {xintiiSeq::csv}%
-\XINT_expr_defbin_b {expr} {]..}{iii}{vi} {xintSeqB::csv}%
-\XINT_expr_defbin_b {flexpr}{]..}{iii}{vi} {XINTinFloatSeqB::csv}%
-\XINT_expr_defbin_b {iiexpr}{]..}{iii}{vi} {xintiiSeqB::csv}%
-\def\XINT_expr_binop_inline#1%
- {\XINT_expr_binop_inline_a{\expandafter\XINT:NEhook:two\expandafter#1}}%
-\def\XINT_expr_binop_inline_a
- {\expandafter\xint_gobble_i\romannumeral`&&@\XINT_expr_binop_inline_b }%
-\def\XINT_expr_binop_inline_b #1#2,{\XINT_expr_binop_inline_c #2,{#1}}%
-\def\XINT_expr_binop_inline_c #1{%
- \if ,#1\xint_dothis\XINT_expr_binop_inline_e\fi
- \if ^#1\xint_dothis\XINT_expr_binop_inline_end\fi
- \xint_orthat\XINT_expr_binop_inline_d #1}%
-\def\XINT_expr_binop_inline_d #1,#2{,#2{#1}\XINT_expr_binop_inline_b {#2}}%
-\def\XINT_expr_binop_inline_e #1,#2{,\XINT_expr_binop_inline_b {#2}}%
-\def\XINT_expr_binop_inline_end #1,#2{}%
-\def\XINT_expr_deflistopr_c #1#2#3#4#5#6#7#8%
-{%
- \def #1##1% \XINT_expr_op_<op> ou flexpr ou iiexpr
- {% keep value, get next number and operator, then do until
- \expandafter #2\expandafter ##1%
- \romannumeral`&&@\expandafter\XINT_expr_getnext }%
- \def #2##1##2% \XINT_expr_until_<op>_a ou flexpr ou iiexpr
- {\xint_UDsignfork ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
- -{#3##1##2}%
- \krof }%
- \def #3##1##2##3##4% \XINT_expr_until_<op>_b ou flexpr ou iiexpr
- {% either execute next operation now, or first do next (possibly unary)
- \ifnum ##2>#7%
- \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
- \csname XINT_#8_op_##3\endcsname {##4}}%
- \else \xint_afterfi {\expandafter ##2\expandafter ##3%
- \csname .=\expandafter\XINT_expr_binop_inline\expandafter
- {\expandafter#6\expandafter\xint_exchangetwo_keepbraces\expandafter
- {\expandafter\XINT_expr_unlock\expandafter ##4\expandafter}\expandafter}%
- \romannumeral`&&@\XINT_expr_unlock ##1,^,\endcsname }%
- \fi }%
- \let #7#5%
-}%
-\def\XINT_expr_deflistopr_b #1#2#3#4%
-{%
- \expandafter\XINT_expr_deflistopr_c
- \csname XINT_#1_op_#2\expandafter\endcsname
- \csname XINT_#1_until_#2_a\expandafter\endcsname
- \csname XINT_#1_until_#2_b\expandafter\endcsname
- \csname XINT_#1_op_-#3\expandafter\endcsname
- \csname xint_c_#3\expandafter\endcsname
- \csname #4\expandafter\endcsname
- \csname XINT_expr_precedence_#2\endcsname {#1}%
-}%
-\XINT_expr_deflistopr_b {expr} {a+}{vi} {xintAdd}%
-\XINT_expr_deflistopr_b {expr} {a-}{vi} {xintSub}%
-\XINT_expr_deflistopr_b {expr} {a*}{vii}{xintMul}%
-\XINT_expr_deflistopr_b {expr} {a/}{vii}{xintDiv}%
-\XINT_expr_deflistopr_b {expr} {a^}{ix} {xintPow}%
-\XINT_expr_deflistopr_b {iiexpr}{a+}{vi} {xintiiAdd}%
-\XINT_expr_deflistopr_b {iiexpr}{a-}{vi} {xintiiSub}%
-\XINT_expr_deflistopr_b {iiexpr}{a*}{vii}{xintiiMul}%
-\XINT_expr_deflistopr_b {iiexpr}{a/}{vii}{xintiiDivRound}%
-\XINT_expr_deflistopr_b {iiexpr}{a^}{ix} {xintiiPow}%
-\XINT_expr_deflistopr_b {flexpr}{a+}{vi} {XINTinFloatAdd}%
-\XINT_expr_deflistopr_b {flexpr}{a-}{vi} {XINTinFloatSub}%
-\XINT_expr_deflistopr_b {flexpr}{a*}{vii}{XINTinFloatMul}%
-\XINT_expr_deflistopr_b {flexpr}{a/}{vii}{XINTinFloatDiv}%
-\XINT_expr_deflistopr_b {flexpr}{a^}{ix} {XINTinFloatPowerH}%
-\def\XINT_expr_deflistopl_c #1#2#3#4#5#6#7%
-{%
- \def #1##1{\expandafter#2\expandafter##1\romannumeral`&&@%
- \expandafter #3\romannumeral`&&@\XINT_expr_getnext }%
- \def #2##1##2##3##4%
- {% either execute next operation now, or first do next (possibly unary)
- \ifnum ##2>#6%
- \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
- \csname XINT_#7_op_##3\endcsname {##4}}%
- \else \xint_afterfi {\expandafter ##2\expandafter ##3%
- \csname .=\expandafter\XINT_expr_binop_inline\expandafter
- {\expandafter#5\expandafter
- {\expandafter\XINT_expr_unlock\expandafter ##1\expandafter}\expandafter}%
- \romannumeral`&&@\XINT_expr_unlock ##4,^,\endcsname }%
- \fi }%
- \let #6#4%
-}%
-\def\XINT_expr_deflistopl_b #1#2#3#4%
-{%
- \expandafter\XINT_expr_deflistopl_c
- \csname XINT_#1_op_#2\expandafter\endcsname
- \csname XINT_#1_until_#2\expandafter\endcsname
- \csname XINT_#1_until_)_a\expandafter\endcsname
- \csname xint_c_#3\expandafter\endcsname
- \csname #4\expandafter\endcsname
- \csname XINT_expr_precedence_#2\endcsname {#1}%
-}%
-\XINT_expr_deflistopl_b {expr} {+[}{vi} {xintAdd}%
-\XINT_expr_deflistopl_b {expr} {-[}{vi} {xintSub}%
-\XINT_expr_deflistopl_b {expr} {*[}{vii}{xintMul}%
-\XINT_expr_deflistopl_b {expr} {/[}{vii}{xintDiv}%
-\XINT_expr_deflistopl_b {expr} {^[}{ix} {xintPow}%
-\XINT_expr_deflistopl_b {iiexpr}{+[}{vi} {xintiiAdd}%
-\XINT_expr_deflistopl_b {iiexpr}{-[}{vi} {xintiiSub}%
-\XINT_expr_deflistopl_b {iiexpr}{*[}{vii}{xintiiMul}%
-\XINT_expr_deflistopl_b {iiexpr}{/[}{vii}{xintiiDivRound}%
-\XINT_expr_deflistopl_b {iiexpr}{^[}{ix} {xintiiPow}%
-\XINT_expr_deflistopl_b {flexpr}{+[}{vi} {XINTinFloatAdd}%
-\XINT_expr_deflistopl_b {flexpr}{-[}{vi} {XINTinFloatSub}%
-\XINT_expr_deflistopl_b {flexpr}{*[}{vii}{XINTinFloatMul}%
-\XINT_expr_deflistopl_b {flexpr}{/[}{vii}{XINTinFloatDiv}%
-\XINT_expr_deflistopl_b {flexpr}{^[}{ix} {XINTinFloatPowerH}%
-\xintFor #1 in {and,or,xor,mod} \do {%
- \expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}}%
+ \csname XINT_expr_precedence_#2\endcsname
+ {#1}{\romannumeral`&&@\XINT:NEhook:f:one:from:two}%
+ \expandafter % done 3 times but well
+ \let\csname XINT_expr_precedence_#2\expandafter\endcsname
+ \csname xint_c_#3\endcsname
+}%
+\catcode`& 12
+\XINT_expr_defbin_b {expr} {||} {vi}{xii} {xintOR}%
+\XINT_expr_defbin_b {flexpr}{||} {vi}{xii} {xintOR}%
+\XINT_expr_defbin_b {iiexpr}{||} {vi}{xii} {xintOR}%
+\XINT_expr_defbin_b {expr} {&&} {viii}{xii} {xintAND}%
+\XINT_expr_defbin_b {flexpr}{&&} {viii}{xii} {xintAND}%
+\XINT_expr_defbin_b {iiexpr}{&&} {viii}{xii} {xintAND}%
+\XINT_expr_defbin_b {expr} {xor}{vi}{xii} {xintXOR}%
+\XINT_expr_defbin_b {flexpr}{xor}{vi}{xii} {xintXOR}%
+\XINT_expr_defbin_b {iiexpr}{xor}{vi}{xii} {xintXOR}%
+\XINT_expr_defbin_b {expr} < {x}{xii} {xintLt}%
+\XINT_expr_defbin_b {flexpr} < {x}{xii} {xintLt}%
+\XINT_expr_defbin_b {iiexpr} < {x}{xii} {xintiiLt}%
+\XINT_expr_defbin_b {expr} > {x}{xii} {xintGt}%
+\XINT_expr_defbin_b {flexpr} > {x}{xii} {xintGt}%
+\XINT_expr_defbin_b {iiexpr} > {x}{xii} {xintiiGt}%
+\XINT_expr_defbin_b {expr} {==} {x}{xii} {xintEq}%
+\XINT_expr_defbin_b {flexpr}{==} {x}{xii} {xintEq}%
+\XINT_expr_defbin_b {iiexpr}{==} {x}{xii} {xintiiEq}%
+\XINT_expr_defbin_b {expr} {<=} {x}{xii} {xintLtorEq}%
+\XINT_expr_defbin_b {flexpr}{<=} {x}{xii} {xintLtorEq}%
+\XINT_expr_defbin_b {iiexpr}{<=} {x}{xii} {xintiiLtorEq}%
+\XINT_expr_defbin_b {expr} {>=} {x}{xii} {xintGtorEq}%
+\XINT_expr_defbin_b {flexpr}{>=} {x}{xii} {xintGtorEq}%
+\XINT_expr_defbin_b {iiexpr}{>=} {x}{xii} {xintiiGtorEq}%
+\XINT_expr_defbin_b {expr} {!=} {x}{xii} {xintNotEq}%
+\XINT_expr_defbin_b {flexpr}{!=} {x}{xii} {xintNotEq}%
+\XINT_expr_defbin_b {iiexpr}{!=} {x}{xii} {xintiiNotEq}%
+\XINT_expr_defbin_b {expr} {//} {xiv}{xiv}{xintDivFloor}% CHANGED IN 1.2p!
+\XINT_expr_defbin_b {flexpr}{//} {xiv}{xiv}{XINTinFloatDivFloor}% "
+\XINT_expr_defbin_b {iiexpr}{//} {xiv}{xiv}{xintiiDivFloor}% "
+\XINT_expr_defbin_b {expr} {/:} {xiv}{xiv}{xintMod}% "
+\XINT_expr_defbin_b {flexpr}{/:} {xiv}{xiv}{XINTinFloatMod}% "
+\XINT_expr_defbin_b {iiexpr}{/:} {xiv}{xiv}{xintiiMod}% "
+\XINT_expr_defbin_b {expr} + {xii}{xii} {xintAdd}%
+\XINT_expr_defbin_b {flexpr} + {xii}{xii} {XINTinFloatAdd}%
+\XINT_expr_defbin_b {iiexpr} + {xii}{xii} {xintiiAdd}%
+\XINT_expr_defbin_b {expr} - {xii}{xii} {xintSub}%
+\XINT_expr_defbin_b {flexpr} - {xii}{xii} {XINTinFloatSub}%
+\XINT_expr_defbin_b {iiexpr} - {xii}{xii} {xintiiSub}%
+\XINT_expr_defbin_b {expr} * {xiv}{xiv}{xintMul}%
+\XINT_expr_defbin_b {flexpr} * {xiv}{xiv}{XINTinFloatMul}%
+\XINT_expr_defbin_b {iiexpr} * {xiv}{xiv}{xintiiMul}%
+\XINT_expr_defbin_b {expr} / {xiv}{xiv}{xintDiv}%
+\XINT_expr_defbin_b {flexpr} / {xiv}{xiv}{XINTinFloatDiv}%
+\XINT_expr_defbin_b {iiexpr} / {xiv}{xiv}{xintiiDivRound}% CHANGED IN 1.1!
+\XINT_expr_defbin_b {expr} ^ {xviii}{xviii} {xintPow}%
+\XINT_expr_defbin_b {flexpr} ^ {xviii}{xviii} {XINTinFloatPowerH}%
+\XINT_expr_defbin_b {iiexpr} ^ {xviii}{xviii} {xintiiPow}%
+\xintFor #1 in {and,or,xor,mod} \do
+{%
+ \expandafter\def\csname XINT_expr_itself_#1\endcsname {#1}%
+}%
\expandafter\let\csname XINT_expr_precedence_and\expandafter\endcsname
- \csname XINT_expr_precedence_&\endcsname
+ \csname XINT_expr_precedence_&&\endcsname
\expandafter\let\csname XINT_expr_precedence_or\expandafter\endcsname
- \csname XINT_expr_precedence_|\endcsname
+ \csname XINT_expr_precedence_||\endcsname
\expandafter\let\csname XINT_expr_precedence_mod\expandafter\endcsname
\csname XINT_expr_precedence_/:\endcsname
-\xintFor #1 in {expr, flexpr, iiexpr} \do {%
+\xintFor #1 in {expr, flexpr, iiexpr} \do
+{%
\expandafter\let\csname XINT_#1_op_and\expandafter\endcsname
- \csname XINT_#1_op_&\endcsname
+ \csname XINT_#1_op_&&\endcsname
\expandafter\let\csname XINT_#1_op_or\expandafter\endcsname
- \csname XINT_#1_op_|\endcsname
+ \csname XINT_#1_op_||\endcsname
\expandafter\let\csname XINT_#1_op_mod\expandafter\endcsname
\csname XINT_#1_op_/:\endcsname
}%
-\expandafter\let\csname XINT_expr_precedence_==\expandafter\endcsname
- \csname XINT_expr_precedence_=\endcsname
-\expandafter\let\csname XINT_expr_precedence_&\string&\expandafter\endcsname
- \csname XINT_expr_precedence_&\endcsname
-\expandafter\let\csname XINT_expr_precedence_||\expandafter\endcsname
- \csname XINT_expr_precedence_|\endcsname
+\expandafter\let\csname XINT_expr_precedence_=\expandafter\endcsname
+ \csname XINT_expr_precedence_==\endcsname
+\expandafter\let\csname XINT_expr_precedence_&\expandafter\endcsname
+ \csname XINT_expr_precedence_&&\endcsname
+\expandafter\let\csname XINT_expr_precedence_|\expandafter\endcsname
+ \csname XINT_expr_precedence_||\endcsname
\expandafter\let\csname XINT_expr_precedence_**\expandafter\endcsname
\csname XINT_expr_precedence_^\endcsname
-\expandafter\let\csname XINT_expr_precedence_a**\expandafter\endcsname
- \csname XINT_expr_precedence_a^\endcsname
-\expandafter\let\csname XINT_expr_precedence_**[\expandafter\endcsname
- \csname XINT_expr_precedence_^[\endcsname
-\xintFor #1 in {expr, flexpr, iiexpr} \do {%
- \expandafter\let\csname XINT_#1_op_==\expandafter\endcsname
- \csname XINT_#1_op_=\endcsname
- \expandafter\let\csname XINT_#1_op_&\string&\expandafter\endcsname
- \csname XINT_#1_op_&\endcsname
- \expandafter\let\csname XINT_#1_op_||\expandafter\endcsname
- \csname XINT_#1_op_|\endcsname
+\xintFor #1 in {expr, flexpr, iiexpr} \do
+{%
+ \expandafter\let\csname XINT_#1_op_=\expandafter\endcsname
+ \csname XINT_#1_op_==\endcsname
+ \expandafter\let\csname XINT_#1_op_&\expandafter\endcsname
+ \csname XINT_#1_op_&&\endcsname
+ \expandafter\let\csname XINT_#1_op_|\expandafter\endcsname
+ \csname XINT_#1_op_||\endcsname
\expandafter\let\csname XINT_#1_op_**\expandafter\endcsname
\csname XINT_#1_op_^\endcsname
- \expandafter\let\csname XINT_#1_op_a**\expandafter\endcsname
- \csname XINT_#1_op_a^\endcsname
- \expandafter\let\csname XINT_#1_op_**[\expandafter\endcsname
- \csname XINT_#1_op_^[\endcsname
}%
+\catcode`& 7
+\def\XINT_expr_defbin_b #1#2#3#4%
+{%
+ \expandafter\XINT_expr_defbin_c
+ \csname XINT_#1_op_#2\expandafter\endcsname
+ \csname XINT_#1_exec_#2\expandafter\endcsname
+ \csname XINT_#1_check-_#2\expandafter\endcsname
+ \csname XINT_#1_checkp_#2\expandafter\endcsname
+ \csname XINT_#1_op_-#4\expandafter\endcsname
+ \expandafter{\expandafter}%
+ \csname XINT_expr_precedence_#2\endcsname
+ {#1}{\expandafter}% REVOIR
+ \expandafter
+ \let\csname XINT_expr_precedence_#2\expandafter\endcsname
+ \csname xint_c_#3\endcsname
+}%
+\XINT_expr_defbin_b {expr} {..[}{vi}{xii}%
+\XINT_expr_defbin_b {flexpr}{..[}{vi}{xii}%
+\XINT_expr_defbin_b {iiexpr}{..[}{vi}{xii}%
+\def\XINT_expr_defbin_c #1#2#3#4#5#6#7#8#9%
+{%
+ \def #1##1% \XINT_expr_op_<op>
+ {%
+ \expanded{\unexpanded{#2{##1}}\expandafter}%
+ \romannumeral`&&@\expandafter#3\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2##3##4% \XINT_expr_exec_<op>
+ {%
+ \expandafter##2\expandafter##3\expanded{{#9#6##1##4}}%
+ }%
+ \def #3##1% \XINT_expr_check-_<op>
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#4\romannumeral`&&@#5}%
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% \XINT_expr_checkp_<op>
+ {%
+ \ifnum ##1>#7%
+ \expandafter#4%
+ \romannumeral`&&@\csname XINT_#8_op_##2\expandafter\endcsname
+ \else
+ \expandafter ##1\expandafter ##2%
+ \fi
+ }%
+}%
+\def\XINT_expr_defbin_b #1#2#3#4#5#6%
+{%
+ \expandafter\XINT_expr_defbin_c
+ \csname XINT_#1_op_#2\expandafter\endcsname
+ \csname XINT_#1_exec_#2\expandafter\endcsname
+ \csname XINT_#1_check-_#2\expandafter\endcsname
+ \csname XINT_#1_checkp_#2\expandafter\endcsname
+ \csname XINT_#1_op_-#4\expandafter\endcsname
+ \csname #5\expandafter\endcsname
+ \csname XINT_expr_precedence_#2\endcsname {#1}#6%
+ \expandafter\let
+ \csname XINT_expr_precedence_#2\expandafter\endcsname
+ \csname xint_c_#3\endcsname
+}%
+\XINT_expr_defbin_b {expr} {..} {vi}{xii}{xintSeq:tl:x}\XINT:NEhook:x:one:from:two
+\XINT_expr_defbin_b {flexpr}{..} {vi}{xii}{xintSeq:tl:x}\XINT:NEhook:x:one:from:two
+\XINT_expr_defbin_b {iiexpr}{..} {vi}{xii}{xintiiSeq:tl:x}\XINT:NEhook:x:one:from:two
+\XINT_expr_defbin_b {expr} {]..}{vi}{xii}{xintSeqB:tl:x}\XINT:NEhook:x:one:from:twoandone
+\XINT_expr_defbin_b {flexpr}{]..}{vi}{xii}{xintSeqB:tl:x}\XINT:NEhook:x:one:from:twoandone
+\XINT_expr_defbin_b {iiexpr}{]..}{vi}{xii}{xintiiSeqB:tl:x}\XINT:NEhook:x:one:from:twoandone
+\def\xintSeq:tl:x #1#2%
+{%
+ \expandafter\XINT_Seq:tl:x
+ \the\numexpr \xintiCeil{#1}\expandafter.\the\numexpr \xintiFloor{#2}.%
+}%
+\def\XINT_Seq:tl:x #1.#2.%
+{%
+ \ifnum #2=#1 \xint_dothis\XINT_Seq:tl:x_z\fi
+ \ifnum #2<#1 \xint_dothis\XINT_Seq:tl:x_n\fi
+ \xint_orthat\XINT_Seq:tl:x_p
+ #1.#2.%
+}%
+\def\XINT_Seq:tl:x_z #1.#2.{{#1/1[0]}}%
+\def\XINT_Seq:tl:x_p #1.#2.%
+{%
+ {#1/1[0]}\ifnum #1=#2 \XINT_Seq:tl:x_e\fi
+ \expandafter\XINT_Seq:tl:x_p \the\numexpr #1+\xint_c_i.#2.%
+}%
+\def\XINT_Seq:tl:x_n #1.#2.%
+{%
+ {#1/1[0]}\ifnum #1=#2 \XINT_Seq:tl:x_e\fi
+ \expandafter\XINT_Seq:tl:x_n \the\numexpr #1-\xint_c_i.#2.%
+}%
+\def\XINT_Seq:tl:x_e#1#2.#3.{#1}%
+\def\xintiiSeq:tl:x #1#2%
+{%
+ \expandafter\XINT_iiSeq:tl:x
+ \the\numexpr \xintiCeil{#1}\expandafter.\the\numexpr \xintiFloor{#2}.%
+}%
+\def\XINT_iiSeq:tl:x #1.#2.%
+{%
+ \ifnum #2=#1 \xint_dothis\XINT_iiSeq:tl:x_z\fi
+ \ifnum #2<#1 \xint_dothis\XINT_iiSeq:tl:x_n\fi
+ \xint_orthat\XINT_iiSeq:tl:x_p
+ #1.#2.%
+}%
+\def\XINT_iiSeq:tl:x_z #1.#2.{{#1}}%
+\def\XINT_iiSeq:tl:x_p #1.#2.%
+{%
+ {#1}\ifnum #1=#2 \XINT_Seq:tl:x_e\fi
+ \expandafter\XINT_iiSeq:tl:x_p \the\numexpr #1+\xint_c_i.#2.%
+}%
+\def\XINT_iiSeq:tl:x_n #1.#2.%
+{%
+ {#1}\ifnum #1=#2 \XINT_Seq:tl:x_e\fi
+ \expandafter\XINT_iiSeq:tl:x_n \the\numexpr #1-\xint_c_i.#2.%
+}%
+\def\xintSeqA {\expandafter\XINT_SeqA\romannumeral0\xintraw}%
+\def\xintiiSeqA #1{\expandafter\XINT_iiSeqA\romannumeral`&&@#1;}%
+\def\XINT_SeqA #1]#2{\expandafter\XINT_SeqA_a\romannumeral0\xintraw {#2}#1]}%
+\def\XINT_iiSeqA#1;#2{\expandafter\XINT_SeqA_a\romannumeral`&&@#2;#1;}%
+\def\XINT_SeqA_a #1{\xint_UDzerominusfork
+ #1-{z}%
+ 0#1{n}%
+ 0-{p}%
+ \krof #1}%
+\def\xintSeqB:tl:x #1{\expandafter\XINT_SeqB:tl:x\romannumeral`&&@\xintSeqA#1}%
+\def\XINT_SeqB:tl:x #1{\csname XINT_SeqB#1:tl:x\endcsname}%
+\def\XINT_SeqBz:tl:x #1]#2]#3{{#2]}}%
+\def\XINT_SeqBp:tl:x #1]#2]#3{\expandafter\XINT_SeqBp:tl:x_a\romannumeral0\xintraw{#3}#2]#1]}%
+\def\XINT_SeqBp:tl:x_a #1]#2]#3]%
+{%
+ \xintifCmp{#1]}{#2]}%
+ {}{{#2]}}{{#2]}\expandafter\XINT_SeqBp:tl:x_b\romannumeral0\xintadd{#3]}{#2]}#1]#3]}%
+}%
+\def\XINT_SeqBp:tl:x_b #1]#2]#3]%
+{%
+ \xintifCmp{#1]}{#2]}%
+ {{#1]}\expandafter\XINT_SeqBp:tl:x_b\romannumeral0\xintadd{#3]}{#1]}#2]#3]}{{#1]}}{}%
+}%
+\def\XINT_SeqBn:tl:x #1]#2]#3{\expandafter\XINT_SeqBn:tl:x_a\romannumeral0\xintraw{#3}#2]#1]}%
+\def\XINT_SeqBn:tl:x_a #1]#2]#3]%
+{%
+ \xintifCmp{#1]}{#2]}%
+ {{#2]}\expandafter\XINT_SeqBn:tl:x_b\romannumeral0\xintadd{#3]}{#2]}#1]#3]}{{#2]}}{}%
+}%
+\def\XINT_SeqBn:tl:x_b #1]#2]#3]%
+{%
+ \xintifCmp{#1]}{#2]}%
+ {}{{#1]}}{{#1]}\expandafter\XINT_SeqBn:tl:x_b\romannumeral0\xintadd{#3]}{#1]}#2]#3]}%
+}%
+\def\xintiiSeqB:tl:x #1{\expandafter\XINT_iiSeqB:tl:x\romannumeral`&&@\xintiiSeqA#1}%
+\def\XINT_iiSeqB:tl:x #1{\csname XINT_iiSeqB#1:tl:x\endcsname}%
+\def\XINT_iiSeqBz:tl:x #1;#2;#3{{#2}}%
+\def\XINT_iiSeqBp:tl:x #1;#2;#3{\expandafter\XINT_iiSeqBp:tl:x_a\romannumeral`&&@#3;#2;#1;}%
+\def\XINT_iiSeqBp:tl:x_a #1;#2;#3;%
+{%
+ \xintiiifCmp{#1}{#2}%
+ {}{{#2}}{{#2}\expandafter\XINT_iiSeqBp:tl:x_b\romannumeral0\xintiiadd{#3}{#2};#1;#3;}%
+}%
+\def\XINT_iiSeqBp:tl:x_b #1;#2;#3;%
+{%
+ \xintiiifCmp{#1}{#2}%
+ {{#1}\expandafter\XINT_iiSeqBp:tl:x_b\romannumeral0\xintiiadd{#3}{#1};#2;#3;}{{#1}}{}%
+}%
+\def\XINT_iiSeqBn:tl:x #1;#2;#3{\expandafter\XINT_iiSeqBn:tl:x_a\romannumeral`&&@#3;#2;#1;}%
+\def\XINT_iiSeqBn:tl:x_a #1;#2;#3;%
+{%
+ \xintiiifCmp{#1}{#2}%
+ {{#2}\expandafter\XINT_iiSeqBn:tl:x_b\romannumeral0\xintiiadd{#3}{#2};#1;#3;}{{#2}}{}%
+}%
+\def\XINT_iiSeqBn:tl:x_b #1;#2;#3;%
+{%
+ \xintiiifCmp{#1}{#2}%
+ {}{{#1}}{{#1}\expandafter\XINT_iiSeqBn:tl:x_b\romannumeral0\xintiiadd{#3}{#1};#2;#3;}%
+}%
+\def\XINT_expr_itself_obracket{obracket}%
+\catcode`] 11 \catcode`[ 11
\def\XINT_tmpa #1#2#3#4#5#6%
{%
- \def #1##1% \XINT_expr_op_][
+ \def #1##1%
{%
- \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext
+ \expandafter#3\romannumeral`&&@\XINT_expr_getnext
}%
- \def #2##1##2% \XINT_expr_until_][_a
- {\xint_UDsignfork
- ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
- -{#3##1##2}%
- \krof }%
- \def #3##1##2##3##4% \XINT_expr_until_][_b
+ \def #2##1% op_]
{%
- \ifnum ##2>#5%
- \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
- \csname XINT_#6_op_##3\endcsname {##4}}%
+ \expanded{\unexpanded{\XINT_expr_put_op_first{{##1}}}\expandafter}%
+ \romannumeral`&&@\XINT_expr_getop
+ }%
+ \def #3##1% until_cbracket_a
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#4\romannumeral`&&@#5}% #5 = op_-xii
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% until_cbracket_b
+ {%
+ \ifcase ##1\expandafter\XINT_expr_missing_]
+ \or \expandafter\XINT_expr_missing_]
+ \or \expandafter#2%
\else
- \xint_afterfi
- {\expandafter ##2\expandafter ##3\csname
- .=\expandafter\xintListSel:x:csv % will be \xintListSel:f:csv in \xintNewExpr output
- \romannumeral`&&@\XINT_expr_unlock ##4;% selector
- \XINT_expr_unlock ##1;\endcsname % unlock already pre-positioned for \xintNewExpr
- }%
+ \expandafter #4%
+ \romannumeral`&&@\csname XINT_#6_op_##2\expandafter\endcsname
\fi
}%
- \let #5\xint_c_ii
}%
\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\XINT_tmpa
+ \csname XINT_#1_op_obracket\expandafter\endcsname
+ \csname XINT_#1_op_]\expandafter\endcsname
+ \csname XINT_#1_until_cbracket_a\expandafter\endcsname
+ \csname XINT_#1_until_cbracket_b\expandafter\endcsname
+ \csname XINT_#1_op_-xii\endcsname
+ {#1}%
+}%
+\def\XINT_expr_missing_]
+ {\XINT_expandableerror{Ooops, looks like we are missing a ] here. Goodbye!}%
+ \xint_c_ \XINT_expr_done}%
+\let\XINT_expr_precedence_]\xint_c_ii
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1% \XINT_expr_op_[
+ {%
+ \expanded{\unexpanded{#2{##1}}\expandafter}%
+ \romannumeral`&&@\expandafter#3\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def #2##1##2##3##4% \XINT_expr_exec_]
+ {%
+ \expandafter\XINT_expr_put_op_first
+ \expanded
+ {%
+ {\XINT:NEhook:x:listsel\XINT_ListSel_top ##1__##4&({##1}\expandafter}%
+ \expandafter
+ }%
+ \romannumeral`&&@\XINT_expr_getop
+ }%
+ \def #3##1% \XINT_expr_check-_]
+ {%
+ \xint_UDsignfork
+ ##1{\expandafter#4\romannumeral`&&@#5}%
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% \XINT_expr_checkp_]
+ {%
+ \ifcase ##1\XINT_expr_missing_]
+ \or \XINT_expr_missing_]
+ \or \expandafter##1\expandafter##2%
+ \else \expandafter#4%
+ \romannumeral`&&@\csname XINT_#6_op_##2\expandafter\endcsname
+ \fi
+ }%
+}%
+\let\XINT_expr_precedence_[ \xint_c_xx
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
\expandafter\XINT_tmpa
- \csname XINT_#1_op_][\expandafter\endcsname
- \csname XINT_#1_until_][_a\expandafter\endcsname
- \csname XINT_#1_until_][_b\expandafter\endcsname
- \csname XINT_#1_op_-vi\expandafter\endcsname
- \csname XINT_expr_precedence_][\endcsname {#1}%
+ \csname XINT_#1_op_[\expandafter\endcsname
+ \csname XINT_#1_exec_]\expandafter\endcsname
+ \csname XINT_#1_check-_]\expandafter\endcsname
+ \csname XINT_#1_checkp_]\expandafter\endcsname
+ \csname XINT_#1_op_-xii\endcsname
+ {#1}%
}%
+\catcode`] 12 \catcode`[ 12
\def\XINT_tmpa #1#2#3#4#5#6%
{%
\def #1##1% \XINT_expr_op_:
{%
- \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext
+ \expanded{\unexpanded{#2{##1}}\expandafter}%
+ \romannumeral`&&@\expandafter#3\romannumeral`&&@\XINT_expr_getnext
}%
- \def #2##1##2% \XINT_expr_until_:_a
+ \def #2##1##2##3##4% \XINT_expr_exec_:
+ {%
+ ##2##3{:##1{0};##4:_}%
+ }%
+ \def #3##1% \XINT_expr_check-_:
{\xint_UDsignfork
- ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
- -{#3##1##2}%
- \krof }%
- \def #3##1##2##3##4% \XINT_expr_until_:_b
+ ##1{\expandafter#4\romannumeral`&&@#5}%
+ -{#4##1}%
+ \krof
+ }%
+ \def #4##1##2% \XINT_expr_checkp_:
{%
- \ifnum ##2>#5%
- \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
- \csname XINT_#6_op_##3\endcsname {##4}}%
+ \ifnum ##1>\XINT_expr_precedence_:
+ \expandafter #4\romannumeral`&&@%
+ \csname XINT_#6_op_##2\expandafter\endcsname
\else
- \xint_afterfi
- {\expandafter ##2\expandafter ##3\csname
- .=:\XINT:NEhook:one\xintNum{\XINT_expr_unlock ##1};%
- \XINT:NEhook:one\xintNum{\XINT_expr_unlock ##4}%
- \endcsname
- }%
+ \expandafter##1\expandafter##2%
\fi
}%
- \let #5\xint_c_iii
}%
+\let\XINT_expr_precedence_: \xint_c_vi
\xintFor #1 in {expr,flexpr,iiexpr} \do {%
\expandafter\XINT_tmpa
\csname XINT_#1_op_:\expandafter\endcsname
- \csname XINT_#1_until_:_a\expandafter\endcsname
- \csname XINT_#1_until_:_b\expandafter\endcsname
- \csname XINT_#1_op_-vi\expandafter\endcsname
- \csname XINT_expr_precedence_:\endcsname {#1}%
+ \csname XINT_#1_exec_:\expandafter\endcsname
+ \csname XINT_#1_check-_:\expandafter\endcsname
+ \csname XINT_#1_checkp_:\expandafter\endcsname
+ \csname XINT_#1_op_-xii\endcsname {#1}%
}%
-\catcode`[ 11 \catcode`] 11
-\let\XINT_expr_precedence_:] \xint_c_iii
-\def\XINT_expr_op_:] #1%
+\def\XINT_ListSel_deeper #1%
{%
- \expandafter\xint_c_i\expandafter )%
- \csname .=]\XINT:NEhook:one\xintNum{\XINT_expr_unlock #1}\endcsname
+ \if :#1\xint_dothis\XINT_ListSel_slice_next\fi
+ \xint_orthat {\XINT_ListSel_extract_next {#1}}%
}%
-\let\XINT_flexpr_op_:] \XINT_expr_op_:]
-\let\XINT_iiexpr_op_:] \XINT_expr_op_:]
-\let\XINT_expr_precedence_][: \xint_c_iii
-\edef\XINT_expr_op_][: #1{\xint_c_ii\noexpand\XINT_expr_itself_][#10\string :}%
-\let\XINT_flexpr_op_][: \XINT_expr_op_][:
-\let\XINT_iiexpr_op_][: \XINT_expr_op_][:
-\catcode`[ 12 \catcode`] 12
-\def\xintListSel:x:csv #1%
+\def\XINT_ListSel_slice_next #1(%
{%
- \if ]\noexpand#1\xint_dothis\XINT_listsel:_s\fi
- \if :\noexpand#1\xint_dothis\XINT_listxsel:_:\fi
- \xint_orthat {\XINT_listsel:_nth #1}%
+ \xintApply{\XINT_ListSel_recurse{:#1}}%
}%
-\def\XINT_listsel:_s #1#2;#3;%
+\def\XINT_ListSel_extract_next #1(%
{%
- \if-#1\expandafter\xintKeep:f:csv\else\expandafter\xintTrim:f:csv\fi
- {#1#2}{#3}%
+ \xintApplyUnbraced{\XINT_ListSel_recurse{#1}}%
}%
-\def\XINT_listsel:_nth #1;#2;{\xintNthEltPy:f:csv {\xintNum{#1}}{#2}}%
-\def\XINT_listxsel:_: #1#2;#3#4;%
+\def\XINT_ListSel_recurse #1#2%
{%
- \xint_UDsignsfork
- #1#3\XINT_listxsel:_N:N
- #1-\XINT_listxsel:_N:P
- -#3\XINT_listxsel:_P:N
- --\XINT_listxsel:_P:P
- \krof #1#2;#3#4;%
+ \XINT_ListSel_check #2__#1({#2}\expandafter\empty\empty
}%
-\def\XINT_listxsel:_P:P #1;#2;#3;%
+\def\XINT_ListSel_check{\expandafter\XINT_ListSel_check_a \string}%
+\def\XINT_ListSel_check_a #1%
{%
- \unless\ifnum #1<#2 \expandafter\xint_gobble_iii\fi
- \xintKeep:x:csv{#2-#1}{\xintTrim:f:csv{#1}{#3}}%
+ \if #1\bgroup\xint_dothis\XINT_ListSel_check_is_ok\fi
+ \xint_orthat\XINT_ListSel_check_leaf
}%
-\def\XINT_listxsel:_N:N #1;#2;#3;%
+\def\XINT_ListSel_check_leaf #1\expandafter{\expandafter}%
+\def\XINT_ListSel_check_is_ok
{%
- \expandafter\XINT_listxsel:_N:N_a
- \the\numexpr #2-#1\expandafter;\the\numexpr#1+\xintLength:f:csv{#3};#3;%
+ \expandafter\XINT_ListSel_check_is_ok_a\expandafter{\string}%
}%
-\def\XINT_listxsel:_N:N_a #1;#2;#3;%
+\def\XINT_ListSel_check_is_ok_a #1__#2%
{%
- \unless\ifnum #1>\xint_c_ \expandafter\xint_gobble_iii\fi
- \xintKeep:x:csv{#1}{\xintTrim:f:csv{\ifnum#2<\xint_c_\xint_c_\else#2\fi}{#3}}%
+ \if :#2\xint_dothis{\XINT_ListSel_slice}\fi
+ \xint_orthat {\XINT_ListSel_nthone {#2}}%
}%
-\def\XINT_listxsel:_N:P #1;#2;#3;{\expandafter\XINT_listxsel:_N:P_a
- \the\numexpr #1+\xintLength:f:csv{#3};#2;#3;}%
-\def\XINT_listxsel:_N:P_a #1#2;%
- {\if -#1\expandafter\XINT_listxsel:_O:P\fi\XINT_listxsel:_P:P #1#2;}%
-\def\XINT_listxsel:_O:P\XINT_listxsel:_P:P #1;{\XINT_listxsel:_P:P 0;}%
-\def\XINT_listxsel:_P:N #1;#2;#3;{\expandafter\XINT_listxsel:_P:N_a
- \the\numexpr #2+\xintLength:f:csv{#3};#1;#3;}%
-\def\XINT_listxsel:_P:N_a #1#2;#3;%
- {\if -#1\expandafter\XINT_listxsel:_P:O\fi\XINT_listxsel:_P:P #3;#1#2;}%
-\def\XINT_listxsel:_P:O\XINT_listxsel:_P:P #1;#2;{\XINT_listxsel:_P:P #1;0;}%
-\def\xintListSel:f:csv #1%
+\def\XINT_ListSel_top #1#2%
{%
- \if ]\noexpand#1\xint_dothis{\expandafter\XINT_listsel:_s\romannumeral`&&@}\fi
- \if :\noexpand#1\xint_dothis{\XINT_listsel:_:}\fi
- \xint_orthat {\XINT_listsel:_nth #1}%
+ \if _\noexpand#2%
+ \expandafter\XINT_ListSel_top_one_or_none\string#1.\else
+ \expandafter\XINT_ListSel_top_at_least_two\fi
}%
-\def\XINT_listsel:_: #1;#2;%
+\def\XINT_ListSel_top_at_least_two #1__{\XINT_ListSel_top_ople}%
+\def\XINT_ListSel_top_one_or_none #1%
{%
- \expandafter\XINT_listsel:_:a
- \the\numexpr #1\expandafter;\the\numexpr #2\expandafter;\romannumeral`&&@%
+ \if #1_\xint_dothis\XINT_ListSel_top_nil\fi
+ \if #1.\xint_dothis\XINT_ListSel_top_nutple_a\fi
+ \if #1\bgroup\xint_dothis\XINT_ListSel_top_nutple\fi
+ \xint_orthat\XINT_ListSel_top_number
}%
-\def\XINT_listsel:_:a #1#2;#3#4;%
+\def\XINT_ListSel_top_nil #1\expandafter#2\expandafter{\fi\expandafter}%
+\def\XINT_ListSel_top_nutple
{%
- \xint_UDsignsfork
- #1#3\XINT_listsel:_N:N
- #1-\XINT_listsel:_N:P
- -#3\XINT_listsel:_P:N
- --\XINT_listsel:_P:P
- \krof #1#2;#3#4;%
+ \expandafter\XINT_ListSel_top_nutple_a\expandafter{\string}%
}%
-\def\XINT_listsel:_P:P #1;#2;#3;%
+\def\XINT_ListSel_top_nutple_a #1_#2#3(#4%
{%
- \unless\ifnum #1<#2 \xint_afterfi{\expandafter\space\xint_gobble_iii}\fi
- \xintKeep:f:csv{#2-#1}{\xintTrim:f:csv{#1}{#3}}%
+ \fi\if :#2\xint_dothis{{\XINT_ListSel_slice #3(#4}}\fi
+ \xint_orthat {\XINT_ListSel_nthone {#2}#3(#4}%
}%
-\def\XINT_listsel:_N:N #1;#2;#3;%
+\def\XINT_ListSel_top_number #1_{\fi\XINT_ListSel_top_ople}%
+\def\XINT_ListSel_top_ople #1%
{%
- \unless\ifnum #1<#2 \expandafter\XINT_listsel:_N:N_abort\fi
- \expandafter\XINT_listsel:_N:N_a
- \the\numexpr#1+\xintLength:f:csv{#3}\expandafter;\the\numexpr#2-#1;#3;%
+ \if :#1\xint_dothis\XINT_ListSel_slice\fi
+ \xint_orthat {\XINT_ListSel_nthone {#1}}%
}%
-\def\XINT_listsel:_N:N_abort #1;#2;#3;{ }%
-\def\XINT_listsel:_N:N_a #1;#2;#3;%
+\def\XINT_ListSel_slice #1%
{%
- \xintKeep:f:csv{#2}{\xintTrim:f:csv{\ifnum#1<\xint_c_\xint_c_\else#1\fi}{#3}}%
+ \expandafter\XINT_ListSel_slice_a \expandafter{\romannumeral0\xintnum{#1}}%
}%
-\def\XINT_listsel:_N:P #1;#2;#3;{\expandafter\XINT_listsel:_N:P_a
- \the\numexpr #1+\xintLength:f:csv{#3};#2;#3;}%
-\def\XINT_listsel:_N:P_a #1#2;%
- {\if -#1\expandafter\XINT_listsel:_O:P\fi\XINT_listsel:_P:P #1#2;}%
-\def\XINT_listsel:_O:P\XINT_listsel:_P:P #1;{\XINT_listsel:_P:P 0;}%
-\def\XINT_listsel:_P:N #1;#2;#3;{\expandafter\XINT_listsel:_P:N_a
- \the\numexpr #2+\xintLength:f:csv{#3};#1;#3;}%
-\def\XINT_listsel:_P:N_a #1#2;#3;%
- {\if -#1\expandafter\XINT_listsel:_P:O\fi\XINT_listsel:_P:P #3;#1#2;}%
-\def\XINT_listsel:_P:O\XINT_listsel:_P:P #1;#2;{\XINT_listsel:_P:P #1;0;}%
-\def\xintKeep:x:csv #1#2%
+\def\XINT_ListSel_slice_a #1#2;#3#4%
{%
- \expandafter\xint_gobble_i
- \romannumeral0\expandafter\XINT_keep:x:csv_pos
- \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+ \if _#4\expandafter\XINT_ListSel_s_b
+ \else\expandafter\XINT_ListSel_slice_b\fi
+ #1;#3%
}%
-\def\XINT_keep:x:csv_pos #1.#2%
+\def\XINT_ListSel_s_b #1#2;#3#4%
{%
- \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.%
- #2\xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,%
- \xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,\xint_bye
+ \if &#4\expandafter\XINT_ListSel_s_last\fi
+ \XINT_ListSel_s_c #1{#1#2}{#4}%
}%
-\def\XINT_keep:x:csv_loop #1%
+\def\XINT_ListSel_s_last\XINT_ListSel_s_c #1#2#3(#4%
{%
- \xint_gob_til_minus#1\XINT_keep:x:csv_finish-%
- \XINT_keep:x:csv_loop_pickeight #1%
+ \if-#1\expandafter\xintKeep\else\expandafter\xintTrim\fi {#2}{#4}%
}%
-\def\XINT_keep:x:csv_loop_pickeight #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+\def\XINT_ListSel_s_c #1#2#3(#4%
{%
- ,#2,#3,#4,#5,#6,#7,#8,#9%
- \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.%
+ \expandafter\XINT_ListSel_deeper
+ \expanded{\unexpanded{#3}(\expandafter}\expandafter{%
+ \romannumeral0%
+ \if-#1\expandafter\xintkeep\else\expandafter\xinttrim\fi {#2}{#4}}%
}%
-\def\XINT_keep:x:csv_finish-\XINT_keep:x:csv_loop_pickeight -#1.%
+\def\XINT_ListSel_nthone #1#2%
{%
- \csname XINT_keep:x:csv_finish#1\endcsname
+ \if &#2\expandafter\XINT_ListSel_nthone_last\fi
+ \XINT_ListSel_nthone_a {#1}{#2}%
}%
-\expandafter\def\csname XINT_keep:x:csv_finish1\endcsname
- #1,#2,#3,#4,#5,#6,#7,{,#1,#2,#3,#4,#5,#6,#7\xint_Bye}%
-\expandafter\def\csname XINT_keep:x:csv_finish2\endcsname
- #1,#2,#3,#4,#5,#6,{,#1,#2,#3,#4,#5,#6\xint_Bye}%
-\expandafter\def\csname XINT_keep:x:csv_finish3\endcsname
- #1,#2,#3,#4,#5,{,#1,#2,#3,#4,#5\xint_Bye}%
-\expandafter\def\csname XINT_keep:x:csv_finish4\endcsname
- #1,#2,#3,#4,{,#1,#2,#3,#4\xint_Bye}%
-\expandafter\def\csname XINT_keep:x:csv_finish5\endcsname
- #1,#2,#3,{,#1,#2,#3\xint_Bye}%
-\expandafter\def\csname XINT_keep:x:csv_finish6\endcsname
- #1,#2,{,#1,#2\xint_Bye}%
-\expandafter\def\csname XINT_keep:x:csv_finish7\endcsname
- #1,{,#1\xint_Bye}%
-\expandafter\let\csname XINT_keep:x:csv_finish8\endcsname\xint_Bye
-\def\xintSeq::csv {\romannumeral0\xintseq::csv }%
-\def\xintseq::csv #1#2%
+\def\XINT_ListSel_nthone_a #1#2(#3%
{%
- \expandafter\XINT_seq::csv\expandafter
- {\the\numexpr \xintiCeil{#1}\expandafter}\expandafter
- {\the\numexpr \xintiFloor{#2}}%
+ \expandafter\XINT_ListSel_deeper
+ \expanded{\unexpanded{#2}(\expandafter}\expandafter{%
+ \romannumeral0\expandafter\XINT_nthonepy_a\the\numexpr\xintNum{#1}.{#3}}%
}%
-\def\XINT_seq::csv #1#2%
+\def\XINT_ListSel_nthone_last\XINT_ListSel_nthone_a #1#2(%#3%
{%
- \ifcase\ifnum #1=#2 0\else\ifnum #2>#1 1\else -1\fi\fi\space
- \expandafter\XINT_seq::csv_z
- \or
- \expandafter\XINT_seq::csv_p
- \else
- \expandafter\XINT_seq::csv_n
- \fi
- {#2}{#1}%
+ \romannumeral0\expandafter\XINT_nthonepy_a\the\numexpr\xintNum{#1}.%{#3}
}%
-\def\XINT_seq::csv_z #1#2{ #1/1[0]}%
-\def\XINT_seq::csv_p #1#2%
+\def\XINT_ListSel_slice_b #1;#2_#3%
{%
- \ifnum #1>#2
- \expandafter\expandafter\expandafter\XINT_seq::csv_p
- \else
- \expandafter\XINT_seq::csv_e
- \fi
- \expandafter{\the\numexpr #1-\xint_c_i}{#2},#1/1[0]%
+ \if &#3\expandafter\XINT_ListSel_slice_last\fi
+ \expandafter\XINT_ListSel_slice_c \expandafter{\romannumeral0\xintnum{#2}};#1;{#3}%
}%
-\def\XINT_seq::csv_n #1#2%
+\def\XINT_ListSel_slice_last\expandafter\XINT_ListSel_slice_c #1;#2;#3(%#4
{%
- \ifnum #1<#2
- \expandafter\expandafter\expandafter\XINT_seq::csv_n
- \else
- \expandafter\XINT_seq::csv_e
- \fi
- \expandafter{\the\numexpr #1+\xint_c_i}{#2},#1/1[0]%
+ \expandafter\XINT_ListSel_slice_last_c #1;#2;%{#4}
}%
-\def\XINT_seq::csv_e #1,{ }%
-\def\xintiiSeq::csv {\romannumeral0\xintiiseq::csv }%
-\def\xintiiseq::csv #1#2%
+\def\XINT_ListSel_slice_last_c #1;#2;#3%
{%
- \expandafter\XINT_iiseq::csv\expandafter
- {\the\numexpr #1\expandafter}\expandafter{\the\numexpr #2}%
+ \romannumeral0\XINT_ListSel_slice_d #2;#1;{#3}%
}%
-\def\XINT_iiseq::csv #1#2%
+\def\XINT_ListSel_slice_c #1;#2;#3(#4%
{%
- \ifcase\ifnum #1=#2 0\else\ifnum #2>#1 1\else -1\fi\fi\space
- \expandafter\XINT_iiseq::csv_z
- \or
- \expandafter\XINT_iiseq::csv_p
- \else
- \expandafter\XINT_iiseq::csv_n
- \fi
- {#2}{#1}%
+ \expandafter\XINT_ListSel_deeper
+ \expanded{\unexpanded{#3}(\expandafter}\expandafter{%
+ \romannumeral0\XINT_ListSel_slice_d #2;#1;{#4}}%
}%
-\def\XINT_iiseq::csv_z #1#2{ #1}%
-\def\XINT_iiseq::csv_p #1#2%
+\def\XINT_ListSel_slice_d #1#2;#3#4;%
{%
- \ifnum #1>#2
- \expandafter\expandafter\expandafter\XINT_iiseq::csv_p
- \else
- \expandafter\XINT_seq::csv_e
- \fi
- \expandafter{\the\numexpr #1-\xint_c_i}{#2},#1%
+ \xint_UDsignsfork
+ #1#3\XINT_ListSel_N:N
+ #1-\XINT_ListSel_N:P
+ -#3\XINT_ListSel_P:N
+ --\XINT_ListSel_P:P
+ \krof #1#2;#3#4;%
}%
-\def\XINT_iiseq::csv_n #1#2%
+\def\XINT_ListSel_P:P #1;#2;#3%
{%
- \ifnum #1<#2
- \expandafter\expandafter\expandafter\XINT_iiseq::csv_n
- \else
- \expandafter\XINT_seq::csv_e
- \fi
- \expandafter{\the\numexpr #1+\xint_c_i}{#2},#1%
-}%
-\def\XINT_seq::csv_e #1,{ }%
-\def\xintSeqA::csv #1%
- {\expandafter\XINT_seqa::csv\expandafter{\romannumeral0\xintraw {#1}}}%
-\def\XINT_seqa::csv #1#2{\expandafter\XINT_seqa::csv_a \romannumeral0\xintraw {#2};#1;}%
-\def\xintiiSeqA::csv #1{\expandafter\XINT_iiseqa::csv\expandafter{\romannumeral`&&@#1}}%
-\def\XINT_iiseqa::csv #1#2{\expandafter\XINT_seqa::csv_a\romannumeral`&&@#2;#1;}%
-\def\XINTinFloatSeqA::csv #1{\expandafter\XINT_flseqa::csv\expandafter
- {\romannumeral0\XINTinfloat [\XINTdigits]{#1}}}%
-\def\XINT_flseqa::csv #1#2%
- {\expandafter\XINT_seqa::csv_a\romannumeral0\XINTinfloat [\XINTdigits]{#2};#1;}%
-\def\XINT_seqa::csv_a #1{\xint_UDzerominusfork
- #1-{z}%
- 0#1{n}%
- 0-{p}%
- \krof #1}%
-\def\xintSeqB::csv #1#2%
- {\expandafter\XINT_seqb::csv \expandafter{\romannumeral0\xintraw{#2}}{#1}}%
-\def\XINT_seqb::csv #1#2{\expandafter\XINT_seqb::csv_a\romannumeral`&&@#2#1!}%
-\def\XINT_seqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty?
- \romannumeral0\csname XINT_seqb::csv_#1\endcsname {#3}{#4}{#2}}%
-\def\XINT_seqb::csv_p #1#2#3%
-{%
- \xintifCmp {#1}{#2}{,#1\expandafter\XINT_seqb::csv_p\expandafter}%
- {,#1\xint_gobble_iii}{\xint_gobble_iii}%
- {\romannumeral0\xintadd {#3}{#1}}{#2}{#3}%
-}%
-\def\XINT_seqb::csv_n #1#2#3%
-{%
- \xintifCmp {#1}{#2}{\xint_gobble_iii}{,#1\xint_gobble_iii}%
- {,#1\expandafter\XINT_seqb::csv_n\expandafter}%
- {\romannumeral0\xintadd {#3}{#1}}{#2}{#3}%
-}%
-\def\XINT_seqb::csv_z #1#2#3{,#1}%
-\def\xintiiSeqB::csv #1#2{\XINT_iiseqb::csv #1#2}%
-\def\XINT_iiseqb::csv #1#2#3#4%
- {\expandafter\XINT_iiseqb::csv_a
- \romannumeral`&&@\expandafter \XINT_expr_unlock\expandafter#2%
- \romannumeral`&&@\XINT_expr_unlock #4!}%
-\def\XINT_iiseqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty?
- \romannumeral`&&@\csname XINT_iiseqb::csv_#1\endcsname {#3}{#4}{#2}}%
-\def\XINT_iiseqb::csv_p #1#2#3%
-{%
- \xintSgnFork{\XINT_Cmp {#1}{#2}}{,#1\expandafter\XINT_iiseqb::csv_p\expandafter}%
- {,#1\xint_gobble_iii}{\xint_gobble_iii}%
- {\romannumeral0\xintiiadd {#3}{#1}}{#2}{#3}%
-}%
-\def\XINT_iiseqb::csv_n #1#2#3%
-{%
- \xintSgnFork{\XINT_Cmp {#1}{#2}}{\xint_gobble_iii}{,#1\xint_gobble_iii}%
- {,#1\expandafter\XINT_iiseqb::csv_n\expandafter}%
- {\romannumeral0\xintiiadd {#3}{#1}}{#2}{#3}%
-}%
-\def\XINT_iiseqb::csv_z #1#2#3{,#1}%
-\def\XINTinFloatSeqB::csv #1#2{\expandafter\XINT_flseqb::csv \expandafter
- {\romannumeral0\XINTinfloat [\XINTdigits]{#2}}{#1}}%
-\def\XINT_flseqb::csv #1#2{\expandafter\XINT_flseqb::csv_a\romannumeral`&&@#2#1!}%
-\def\XINT_flseqb::csv_a #1#2;#3;#4!{\expandafter\XINT_expr_seq_empty?
- \romannumeral`&&@\csname XINT_flseqb::csv_#1\endcsname {#3}{#4}{#2}}%
-\def\XINT_flseqb::csv_p #1#2#3%
-{%
- \xintifCmp {#1}{#2}{,#1\expandafter\XINT_flseqb::csv_p\expandafter}%
- {,#1\xint_gobble_iii}{\xint_gobble_iii}%
- {\romannumeral0\XINTinfloatadd {#3}{#1}}{#2}{#3}%
-}%
-\def\XINT_flseqb::csv_n #1#2#3%
-{%
- \xintifCmp {#1}{#2}{\xint_gobble_iii}{,#1\xint_gobble_iii}%
- {,#1\expandafter\XINT_flseqb::csv_n\expandafter}%
- {\romannumeral0\XINTinfloatadd {#3}{#1}}{#2}{#3}%
-}%
-\def\XINT_flseqb::csv_z #1#2#3{,#1}%
-\def\XINT_tmpa #1#2#3#4#5#6%
+ \unless\ifnum #1<#2 \expandafter\xint_gob_andstop_iii\fi
+ \xintkeep{#2-#1}{\xintTrim{#1}{#3}}%
+}%
+\def\XINT_ListSel_N:N #1;#2;#3%
{%
- \def #1##1% \XINT_expr_op_,
- {%
- \expandafter #2\expandafter ##1\romannumeral`&&@\XINT_expr_getnext
- }%
- \def #2##1##2% \XINT_expr_until_,_a
- {\xint_UDsignfork
- ##2{\expandafter #2\expandafter ##1\romannumeral`&&@#4}%
- -{#3##1##2}%
- \krof }%
- \def #3##1##2##3##4% \XINT_expr_until_,_b
- {%
- \ifnum ##2>\xint_c_ii
- \xint_afterfi {\expandafter #2\expandafter ##1\romannumeral`&&@%
- \csname XINT_#6_op_##3\endcsname {##4}}%
- \else
- \xint_afterfi
- {\expandafter ##2\expandafter ##3%
- \csname .=\XINT_expr_unlock ##1,\XINT_expr_unlock ##4\endcsname }%
- \fi
- }%
- \let #5\xint_c_ii
+ \expandafter\XINT_ListSel_N:N_a
+ \the\numexpr #2-#1\expandafter;\the\numexpr#1+\xintLength{#3};{#3}%
}%
-\xintFor #1 in {expr,flexpr,iiexpr} \do {%
-\expandafter\XINT_tmpa
- \csname XINT_#1_op_,\expandafter\endcsname
- \csname XINT_#1_until_,_a\expandafter\endcsname
- \csname XINT_#1_until_,_b\expandafter\endcsname
- \csname XINT_#1_op_-vi\expandafter\endcsname
- \csname XINT_expr_precedence_,\endcsname {#1}%
+\def\XINT_ListSel_N:N_a #1;#2;#3%
+{%
+ \unless\ifnum #1>\xint_c_ \expandafter\xint_gob_andstop_iii\fi
+ \xintkeep{#1}{\xintTrim{\ifnum#2<\xint_c_\xint_c_\else#2\fi}{#3}}%
}%
-\def\XINT_tmpa #1#2#3%
+\def\XINT_ListSel_N:P #1;#2;#3%
{%
- \expandafter\XINT_tmpb
- \csname XINT_#1_op_-#3\expandafter\endcsname
- \csname XINT_#1_until_-#3_a\expandafter\endcsname
- \csname XINT_#1_until_-#3_b\expandafter\endcsname
- \csname xint_c_#3\endcsname {#1}#2%
+ \expandafter\XINT_ListSel_N:P_a
+ \the\numexpr #1+\xintLength{#3};#2;{#3}%
}%
-\def\XINT_tmpb #1#2#3#4#5#6%
+\def\XINT_ListSel_N:P_a #1#2;%
+ {\if -#1\expandafter\XINT_ListSel_O:P\fi\XINT_ListSel_P:P #1#2;}%
+\def\XINT_ListSel_O:P\XINT_ListSel_P:P #1;{\XINT_ListSel_P:P 0;}%
+\def\XINT_ListSel_P:N #1;#2;#3%
{%
- \def #1% \XINT_expr_op_-<level>
- {% get next number+operator then switch to _until macro
- \expandafter #2\romannumeral`&&@\XINT_expr_getnext
- }%
- \def #2##1% \XINT_expr_until_-<l>_a
- {\xint_UDsignfork
- ##1{\expandafter #2\romannumeral`&&@#1}%
- -{#3##1}%
- \krof }%
- \def #3##1##2##3% \XINT_expr_until_-<l>_b
- {% _until tests precedence level with next op, executes now or postpones
- \ifnum ##1>#4%
- \xint_afterfi {\expandafter #2\romannumeral`&&@%
- \csname XINT_#5_op_##2\endcsname {##3}}%
- \else
- \xint_afterfi {\expandafter ##1\expandafter ##2%
- \csname .=%
- \XINT:NEhook:one#6{\XINT_expr_unlock ##3}\endcsname }%
- \fi
- }%
+ \expandafter\XINT_ListSel_P:N_a
+ \the\numexpr #2+\xintLength{#3};#1;{#3}%
}%
-\xintApplyInline{\XINT_tmpa {expr}\xintOpp}{{vi}{vii}{viii}{ix}}%
-\xintApplyInline{\XINT_tmpa {flexpr}\xintOpp}{{vi}{vii}{viii}{ix}}%
-\xintApplyInline{\XINT_tmpa {iiexpr}\xintiiOpp}{{vi}{vii}{viii}{ix}}%
-\let\XINT_expr_precedence_? \xint_c_x
-\def\XINT_expr_op_? #1#2%
- {\XINT_expr_op_?checka #2!\xint_bye\XINT_expr_op_?a #1{#2}}%
-\def\XINT_expr_op_?checka #1{\expandafter\XINT_expr_op_?checkb\detokenize{#1}}%
-\def\XINT_expr_op_?checkb #1{\if ?#1\expandafter\XINT_expr_op_?checkc
- \else\expandafter\xint_bye\fi }%
-\def\XINT_expr_op_?checkc #1{\xint_gob_til_! #1\XINT_expr_op_?? !\xint_bye}%
-\def\XINT_expr_op_?a #1#2#3%
-{%
- \xintiiifNotZero{\XINT_expr_unlock #1}{\XINT_expr_getnext #2}{\XINT_expr_getnext #3}%
-}%
-\let\XINT_flexpr_op_?\XINT_expr_op_?
-\let\XINT_iiexpr_op_?\XINT_expr_op_?
-\def\XINT_expr_op_?? !\xint_bye\xint_bye\XINT_expr_op_?a #1#2#3#4#5%
-{%
- \xintiiifSgn {\XINT_expr_unlock #1}%
- {\XINT_expr_getnext #3}{\XINT_expr_getnext #4}{\XINT_expr_getnext #5}%
-}%
-\let\XINT_expr_precedence_! \xint_c_x
-\def\XINT_expr_op_! #1{\expandafter\XINT_expr_getop
- \csname .=\XINT:NEhook:one\xintFac{\XINT_expr_unlock #1}\endcsname }%
-\def\XINT_flexpr_op_! #1{\expandafter\XINT_expr_getop
- \csname .=\XINT:NEhook:one\XINTinFloatFac{\XINT_expr_unlock #1}\endcsname }%
-\def\XINT_iiexpr_op_! #1{\expandafter\XINT_expr_getop
- \csname .=\XINT:NEhook:one\xintiiFac{\XINT_expr_unlock #1}\endcsname }%
-\catcode`[ 11
-\let\XINT_expr_precedence_[ \xint_c_vii
-\def\XINT_expr_op_[ #1#2]{\expandafter\XINT_expr_getop
- \csname .=\xintE{\XINT_expr_unlock #1}%
- {\xint_zapspaces #2 \xint_gobble_i}\endcsname}%
-\def\XINT_iiexpr_op_[ #1#2]{\expandafter\XINT_expr_getop
- \csname .=\xintiiE{\XINT_expr_unlock #1}%
- {\xint_zapspaces #2 \xint_gobble_i}\endcsname}%
-\def\XINT_flexpr_op_[ #1#2]{\expandafter\XINT_expr_getop
- \csname .=\XINTinFloatE{\XINT_expr_unlock #1}%
- {\xint_zapspaces #2 \xint_gobble_i}\endcsname}%
-\catcode`[ 12
-\def\XINT_tmpa #1#2#3{%
- \def #1##1%
- {%
- \ifcsname XINT_#3_func_##1\endcsname
- \xint_dothis{\expandafter\expandafter
- \csname XINT_#3_func_##1\endcsname\romannumeral`&&@#2}\fi
- \ifcsname XINT_expr_onliteral_##1\endcsname
- \xint_dothis{\csname XINT_expr_onliteral_##1\endcsname}\fi
- \xint_orthat{\XINT_expr_unknown_function {##1}%
- \expandafter\XINT_expr_func_unknown\romannumeral`&&@#2}%
- }%
+\def\XINT_ListSel_P:N_a #1#2;#3;%
+ {\if -#1\expandafter\XINT_ListSel_P:O\fi\XINT_ListSel_P:P #3;#1#2;}%
+\def\XINT_ListSel_P:O\XINT_ListSel_P:P #1;#2;{\XINT_ListSel_P:P #1;0;}%
+\catcode0 11
+\let\XINT_expr_precedence_&&@ \xint_c_xiv
+\def\XINT_expr_op_&&@ #1#2]%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{{{\xintE#1{\xint_zapspaces #2 \xint_gobble_i}}}%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
}%
-\def\XINT_expr_unknown_function #1{\xintError:removed \xint_gobble_i {#1}}%
-\xintFor #1 in {expr,flexpr,iiexpr} \do {%
- \expandafter\XINT_tmpa
- \csname XINT_#1_op_`\expandafter\endcsname
- \csname XINT_#1_oparen\endcsname
- {#1}%
+\def\XINT_iiexpr_op_&&@ #1#2]%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{{{\xintiiE#1{\xint_zapspaces #2 \xint_gobble_i}}}%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_flexpr_op_&&@ #1#2]%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{{{\XINTinFloatE#1{\xint_zapspaces #2 \xint_gobble_i}}}%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\catcode0 12
+\let\XINT_expr_precedence_? \xint_c_xx
+\catcode`- 11
+\def\XINT_expr_op_? {\XINT_expr_op__? \XINT_expr_op_-xii}%
+\def\XINT_flexpr_op_?{\XINT_expr_op__? \XINT_flexpr_op_-xii}%
+\def\XINT_iiexpr_op_?{\XINT_expr_op__? \XINT_iiexpr_op_-xii}%
+\catcode`- 12
+\def\XINT_expr_op__? #1#2#3%
+ {\XINT_expr_op__?_a #3!\xint_bye\XINT_expr_exec_? {#1}{#2}{#3}}%
+\def\XINT_expr_op__?_a #1{\expandafter\XINT_expr_op__?_b\detokenize{#1}}%
+\def\XINT_expr_op__?_b #1%
+ {\if ?#1\expandafter\XINT_expr_op__?_c\else\expandafter\xint_bye\fi }%
+\def\XINT_expr_op__?_c #1{\xint_gob_til_! #1\XINT_expr_op_?? !\xint_bye}%
+\def\XINT_expr_op_?? !\xint_bye\xint_bye\XINT_expr_exec_?{\XINT_expr_exec_??}%
+\catcode`- 11
+\def\XINT_expr_exec_? #1#2%
+{%
+ \expandafter\XINT_expr_check-_after?\expandafter#1%
+ \romannumeral`&&@\expandafter\XINT_expr_getnext\romannumeral0\xintiiifnotzero#2%
+}%
+\def\XINT_expr_exec_?? #1#2#3%
+{%
+ \expandafter\XINT_expr_check-_after?\expandafter#1%
+ \romannumeral`&&@\expandafter\XINT_expr_getnext\romannumeral0\xintiiifsgn#2%
+}%
+\def\XINT_expr_check-_after? #1{%
+\def\XINT_expr_check-_after? ##1##2%
+{%
+ \xint_UDsignfork
+ ##2{##1}%
+ #1{##2}%
+ \krof
+}}\expandafter\XINT_expr_check-_after?\string -%
+\catcode`- 12
+\let\XINT_expr_precedence_! \xint_c_xx
+\def\XINT_expr_op_! #1%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{{\romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintFac#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_flexpr_op_! #1%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{{\romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatFac#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_iiexpr_op_! #1%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{{\romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiFac#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
}%
-\def\XINT_expr_func_unknown #1#2#3%
- {\expandafter #1\expandafter #2\csname .=0\endcsname }%
-\def\XINT_expr_onliteral_bool #1)%
- {\expandafter\XINT_expr_getop\csname .=\xintBool{#1}\endcsname }%
-\def\XINT_expr_onliteral_togl #1)%
- {\expandafter\XINT_expr_getop\csname .=\xintToggle{#1}\endcsname }%
-\def\XINT_expr_onliteral_protect #1)%
- {\expandafter\XINT_expr_getop\csname .=\detokenize{#1}\endcsname }%
-\def\XINT_expr_func_break #1#2#3%
- {\expandafter #1\expandafter #2\csname.=?\romannumeral`&&@\XINT_expr_unlock #3\endcsname }%
-\let\XINT_flexpr_func_break \XINT_expr_func_break
-\let\XINT_iiexpr_func_break \XINT_expr_func_break
-\def\XINT_expr_onliteral_qint #1)%
- {\expandafter\XINT_expr_getop\csname .=\xintiNum{#1}\endcsname }%
-\def\XINT_expr_onliteral_qfrac #1)%
- {\expandafter\XINT_expr_getop\csname .=\xintRaw{#1}\endcsname }%
-\def\XINT_expr_onliteral_qfloat #1)%
- {\expandafter\XINT_expr_getop\csname .=\XINTinFloatSdigits{#1}\endcsname }%
-\def\XINT_expr_onliteral_qraw #1)%
- {\expandafter\XINT_expr_getop\csname .=#1\endcsname }%
-\def\XINT_expr_onliteral_random #1)%
- {\expandafter\XINT_expr_getop\csname .=\XINTinRandomFloatSdigits\endcsname }%
-\def\XINT_expr_onliteral_qrand #1)%
- {\expandafter\XINT_expr_getop\csname .=\XINTinRandomFloatSixteen\endcsname }%
-\def\XINT_expr_op__ #1% op__ with two _'s
- {%
- \ifcsname XINT_expr_var_#1\endcsname
- \expandafter\xint_firstoftwo
- \else
- \expandafter\xint_secondoftwo
- \fi
- {\expandafter\expandafter\expandafter
- \XINT_expr_getop\csname XINT_expr_var_#1\endcsname}%
- {\XINT_expr_unknown_variable {#1}%
- \expandafter\XINT_expr_getop\csname .=0\endcsname}%
- }%
-\def\XINT_expr_unknown_variable #1{\xintError:removed \xint_gobble_i {#1}}%
-\let\XINT_flexpr_op__ \XINT_expr_op__
-\let\XINT_iiexpr_op__ \XINT_expr_op__
\catcode`* 11
\def\XINT_expr_defvar_one #1#2%
{%
\XINT_global
- \expandafter\edef\csname XINT_expr_var_#1\endcsname
- {\expandafter\noexpand#2}%
+ \expandafter\edef\csname XINT_expr_varvalue_#1\endcsname {#2}%
+ \XINT_expr_defvar_one_b {#1}%
+}%
+\def\XINT_expr_defvar_one_b #1%
+{%
+ \XINT_global
+ \expandafter\edef\csname XINT_expr_var_#1\endcsname
+ {{\expandafter\noexpand\csname XINT_expr_varvalue_#1\endcsname}}%
\XINT_global
\expandafter\edef\csname XINT_expr_onliteral_#1\endcsname
- {\XINT_expr_precedence_*** *\expandafter\noexpand#2(}%
+ {\noexpand\expandafter\XINT_expr_precedence_***
+ \noexpand\expandafter *\expandafter
+ \noexpand\csname XINT_expr_var_#1\endcsname(}%
\ifxintverbose\xintMessage{xintexpr}{Info}
{Variable "#1" \ifxintglobaldefs globally \fi
- defined with value \expandafter\XINT_expr_unlock#2.}%
+ defined with value \csname XINT_expr_varvalue_#1\endcsname.}%
\fi
}%
\catcode`* 12
\catcode`~ 13
\catcode`: 12
-\def\XINT_expr_defvar_getname #1:#2~{\endgroup
- \def\XINT_defvar_tmpa{#1}\edef\XINT_defvar_tmpc{\xintCSVLength{#1}}}%
-\def\XINT_expr_defvar #1#2#3;%
+\def\XINT_expr_defvar_getname #1:#2~%
+{%
+ \endgroup
+ \def\XINT_defvar_tmpa{#1}\edef\XINT_defvar_tmpc{\xintCSVLength{#1}}%
+}%
+\def\XINT_expr_defvar #1#2%
+{%
+ \def\XINT_defvar_tmpa{#2}%
+ \expandafter\XINT_expr_defvar_a\expandafter#1\romannumeral\XINT_expr_fetch_to_semicolon
+}%
+\def\XINT_expr_defvar_a #1#2%
{%
\xintexprRestoreCatcodes
\begingroup\lccode`~`: \lowercase{\let~}\empty
- \edef\XINT_defvar_tmpa{#2}%
+ \edef\XINT_defvar_tmpa{\XINT_defvar_tmpa}%
\edef\XINT_defvar_tmpa{\xint_zapspaces_o\XINT_defvar_tmpa}%
\expandafter\XINT_expr_defvar_getname
\detokenize\expandafter{\XINT_defvar_tmpa}:~%
\ifcase\XINT_defvar_tmpc\space
- \xintMessage {xintexpr}{Warning}
+ \xintMessage {xintexpr}{Error}
{Aborting: not allowed to declare variable with empty name.}%
\or
- \edef\XINT_defvar_tmpb{\romannumeral0#1#3\relax}%
- \XINT_expr_defvar_one\XINT_defvar_tmpa\XINT_defvar_tmpb
+ \XINT_global
+ \expandafter\edef\csname XINT_expr_varvalue_\XINT_defvar_tmpa\endcsname
+ {\romannumeral0#1#2\relax}%
+ \XINT_expr_defvar_one_b\XINT_defvar_tmpa
\else
- \edef\XINT_defvar_tmpb
- {\expandafter\XINT_expr_unlock\romannumeral0#1#3\relax}%
- \edef\XINT_defvar_tmpd{\xintCSVLength{\XINT_defvar_tmpb}}%
+ \edef\XINT_defvar_tmpb{\romannumeral0#1#2\relax}%
+ \edef\XINT_defvar_tmpd{\expandafter\xintLength\expandafter{\XINT_defvar_tmpb}}%
+ \let\XINT_defvar_tmpe\empty
+ \if1\XINT_defvar_tmpd
+ \def\XINT_defvar_tmpe{unpacked }%
+ \oodef\XINT_defvar_tmpb{\expandafter\xint_firstofone\XINT_defvar_tmpb}%
+ \edef\XINT_defvar_tmpd{\expandafter\xintLength\expandafter{\XINT_defvar_tmpb}}%
+ \fi
\ifnum\XINT_defvar_tmpc=\XINT_defvar_tmpd\space
\xintAssignArray\xintCSVtoList\XINT_defvar_tmpa\to\XINT_defvar_tmpvar
- \xintAssignArray
- \xintApply\XINT_expr_lockit{\xintCSVtoList\XINT_defvar_tmpb}%
- \to\XINT_defvar_tmpval
+ \xintAssignArray\xintApply\XINT_embrace{\XINT_defvar_tmpb}\to\XINT_defvar_tmpval
\def\XINT_defvar_tmpd{1}%
\xintloop
\expandafter\XINT_expr_defvar_one
@@ -1564,20 +1752,24 @@
\xintRelaxArray\XINT_defvar_tmpvar
\xintRelaxArray\XINT_defvar_tmpval
\else
- \xintMessage {xintexpr}{Warning}
+ \xintMessage {xintexpr}{Error}
{Aborting: mismatch between number of variables (\XINT_defvar_tmpc)
- and number of values (\XINT_defvar_tmpd).}%
+ and number of \XINT_defvar_tmpe values (\XINT_defvar_tmpd).}%
\fi
\fi
+ \let\XINT_defvar_tmpa\empty
+ \let\XINT_defvar_tmpb\empty
+ \let\XINT_defvar_tmpc\empty
+ \let\XINT_defvar_tmpd\empty
}%
\catcode`~ 3
\catcode`: 11
\def\xintdefvar {\xintexprSafeCatcodes\xintdefvar_a}%
\def\xintdefiivar {\xintexprSafeCatcodes\xintdefiivar_a}%
\def\xintdeffloatvar {\xintexprSafeCatcodes\xintdeffloatvar_a}%
-\def\xintdefvar_a #1={\XINT_expr_defvar\xintbareeval {#1}}%
-\def\xintdefiivar_a #1={\XINT_expr_defvar\xintbareiieval {#1}}%
-\def\xintdeffloatvar_a #1={\XINT_expr_defvar\xintbarefloateval {#1}}%
+\def\xintdefvar_a #1={\XINT_expr_defvar\xintthebareeval {#1}}%
+\def\xintdefiivar_a #1={\XINT_expr_defvar\xintthebareiieval {#1}}%
+\def\xintdeffloatvar_a #1={\XINT_expr_defvar\xintthebarefloateval {#1}}%
\def\xintunassignvar #1{%
\edef\XINT_unvar_tmpa{#1}%
\edef\XINT_unvar_tmpa {\xint_zapspaces_o\XINT_unvar_tmpa}%
@@ -1586,6 +1778,8 @@
\expandafter\xintnewdummy\XINT_unvar_tmpa
\else
\XINT_global\expandafter
+ \let\csname XINT_expr_varvalue_\XINT_unvar_tmpa\endcsname\xint_undefined
+ \XINT_global\expandafter
\let\csname XINT_expr_var_\XINT_unvar_tmpa\endcsname\xint_undefined
\XINT_global\expandafter
\let\csname XINT_expr_onliteral_\XINT_unvar_tmpa\endcsname\xint_undefined
@@ -1602,1337 +1796,1479 @@
\catcode`* 11
\def\XINT_expr_makedummy #1%
{%
- \ifcsname XINT_expr_var_#1\endcsname
+ \edef\XINT_tmpa{\xint_zapspaces #1 \xint_gobble_i}%
+ \ifcsname XINT_expr_var_\XINT_tmpa\endcsname
\XINT_global
- \expandafter\let\csname XINT_expr_var_#1/old\expandafter\endcsname
- \csname XINT_expr_var_#1\expandafter\endcsname
+ \expandafter\let\csname XINT_expr_var_\XINT_tmpa/old\expandafter\endcsname
+ \csname XINT_expr_var_\XINT_tmpa\expandafter\endcsname
\fi
- \ifcsname XINT_expr_onliteral_#1\endcsname
+ \ifcsname XINT_expr_onliteral_\XINT_tmpa\endcsname
\XINT_global
- \expandafter\let\csname XINT_expr_onliteral_#1/old\expandafter\endcsname
- \csname XINT_expr_onliteral_#1\expandafter\endcsname
+ \expandafter\let\csname XINT_expr_onliteral_\XINT_tmpa/old\expandafter\endcsname
+ \csname XINT_expr_onliteral_\XINT_tmpa\expandafter\endcsname
\fi
- \XINT_global
- \expandafter\def\csname XINT_expr_var_#1\endcsname ##1\relax !#1##2%
- {##2##1\relax !#1##2}%
- \XINT_global
- \expandafter\def\csname XINT_expr_onliteral_#1\endcsname ##1\relax !#1##2%
- {\XINT_expr_precedence_*** *##2(##1\relax !#1##2}%
+ \expandafter\XINT_global
+ \expanded
+ {\edef\expandafter\noexpand
+ \csname XINT_expr_var_\XINT_tmpa\endcsname ##1\relax !\XINT_tmpa##2}%
+ {{##2}##1\relax !\XINT_tmpa{##2}}%
+ \expandafter\XINT_global
+ \expanded
+ {\edef\expandafter\noexpand
+ \csname XINT_expr_onliteral_\XINT_tmpa\endcsname ##1\relax !\XINT_tmpa##2}%
+ {\XINT_expr_precedence_*** *{##2}(##1\relax !\XINT_tmpa{##2}}%)
}%
\xintApplyUnbraced \XINT_expr_makedummy {abcdefghijklmnopqrstuvwxyz}%
\xintApplyUnbraced \XINT_expr_makedummy {ABCDEFGHIJKLMNOPQRSTUVWXYZ}%
\def\xintnewdummy #1{%
\XINT_expr_makedummy{#1}%
\ifxintverbose\xintMessage {xintexpr}{Info}%
- {#1 (with letter catcode) now
+ {\XINT_tmpa\space now
\ifxintglobaldefs globally \fi usable as dummy variable.}%
\fi
}%
-\edef\XINT_expr_var_nil {\expandafter\noexpand\csname .= \endcsname}%
-\edef\XINT_expr_onliteral_nil
- {\XINT_expr_precedence_*** *\expandafter\noexpand\csname .= \endcsname (}%
+\def\XINT_expr_var_nil{{}}%
+\def\XINT_expr_var_None{{{}}}% ? tentative
+\def\XINT_expr_var_false{{{0}}}% Maple, TeX
+\def\XINT_expr_var_true{{{1}}}%
+\def\XINT_expr_var_False{{{0}}}% Python
+\def\XINT_expr_var_True{{{1}}}%
\catcode`* 12
\def\xintensuredummy #1{%
\XINT_expr_makedummy{#1}%
\ifxintverbose\xintMessage {xintexpr}{Info}%
- {#1 (with letter catcode) now
+ {\XINT_tmpa\space now
\ifxintglobaldefs globally \fi usable as dummy variable.&&J
- Use \string\xintrestoredummy{#1} to restore it to its former meaning.}%
+ Issue \string\xintrestorevariable{\XINT_tmpa} to restore former meaning.}%
\fi
}%
-\def\xintrestorelettervar #1{%
- \ifcsname XINT_expr_var_#1/old\endcsname
+\def\xintrestorevariablesilently #1{%
+ \edef\XINT_tmpa{\xint_zapspaces #1 \xint_gobble_i}%
+ \ifcsname XINT_expr_var_\XINT_tmpa/old\endcsname
\XINT_global
- \expandafter\let\csname XINT_expr_var_#1\expandafter\endcsname
- \csname XINT_expr_var_#1/old\expandafter\endcsname
+ \expandafter\let\csname XINT_expr_var_\XINT_tmpa\expandafter\endcsname
+ \csname XINT_expr_var_\XINT_tmpa/old\expandafter\endcsname
\fi
- \ifcsname XINT_expr_onliteral_#1/old\endcsname
+ \ifcsname XINT_expr_onliteral_\XINT_tmpa/old\endcsname
\XINT_global
- \expandafter\let\csname XINT_expr_onliteral_#1\expandafter\endcsname
- \csname XINT_expr_onliteral_#1/old\expandafter\endcsname
+ \expandafter\let\csname XINT_expr_onliteral_\XINT_tmpa\expandafter\endcsname
+ \csname XINT_expr_onliteral_\XINT_tmpa/old\expandafter\endcsname
\fi
+}%
+\def\xintrestorevariable #1{%
+ \xintrestorevariablesilently {#1}%
\ifxintverbose\xintMessage {xintexpr}{Info}%
- {Character #1 (with letter catcode)
+ {\XINT_tmpa\space
\ifxintglobaldefs globally \fi restored to its earlier status, if any.}%
\fi
}%
+\def\XINT_isbalanced_a #1({\XINT_isbalanced_b #1)\xint_bye }%
+\def\XINT_isbalanced_b #1)#2%
+ {\xint_bye #2\XINT_isbalanced_c\xint_bye\XINT_isbalanced_error }%
+\def\XINT_isbalanced_error #1)\xint_bye {\xint_c_mone}%
+\def\XINT_isbalanced_c\xint_bye\XINT_isbalanced_error #1%
+ {\xint_bye #1\XINT_isbalanced_yes\xint_bye\XINT_isbalanced_d #1}%
+\def\XINT_isbalanced_yes\xint_bye\XINT_isbalanced_d\xint_bye )\xint_bye {\xint_c_ }%
+\def\XINT_isbalanced_d #1)#2%
+ {\xint_bye #2\XINT_isbalanced_no\xint_bye\XINT_isbalanced_a #1#2}%
+\def\XINT_isbalanced_no\xint_bye #1\xint_bye\xint_bye {\xint_c_i }%
+\def\XINT_expr_fetch_E_comma_V_equal_E_a #1#2,%
+{%
+ \ifcase\XINT_isbalanced_a \relax #1#2(\xint_bye)\xint_bye
+ \expandafter\XINT_expr_fetch_E_comma_V_equal_E_c
+ \or\expandafter\XINT_expr_fetch_E_comma_V_equal_E_b
+ \else\expandafter\xintError:noopening
+ \fi {#1#2},%
+}%
+\def\XINT_expr_fetch_E_comma_V_equal_E_b #1,%
+ {\XINT_expr_fetch_E_comma_V_equal_E_a {#1,}}%
+\def\XINT_expr_fetch_E_comma_V_equal_E_c #1,#2#3=%
+{%
+ \expandafter\XINT_expr_fetch_E_comma_V_equal_E_d\expandafter
+ {\expanded{{\xint_zapspaces #2#3 \xint_gobble_i}}{#1}}{}%
+}%
+\def\XINT_expr_fetch_E_comma_V_equal_E_d #1#2#3)%
+{%
+ \ifcase\XINT_isbalanced_a \relax #2#3(\xint_bye)\xint_bye
+ \or\expandafter\XINT_expr_fetch_E_comma_V_equal_E_e
+ \else\expandafter\xintError:noopening
+ \fi
+ {#1}{#2#3}%
+}%
+\def\XINT_expr_fetch_E_comma_V_equal_E_e #1#2{\XINT_expr_fetch_E_comma_V_equal_E_d {#1}{#2)}}%
+\def\XINT_expr_fetch_to_semicolon {\XINT_expr_fetch_to_semicolon_a {}\empty}%
+\def\XINT_expr_fetch_to_semicolon_a #1#2;%
+{%
+ \ifcase\XINT_isbalanced_a \relax #1#2(\xint_bye)\xint_bye
+ \xint_dothis{\expandafter\XINT_expr_fetch_to_semicolon_c}%
+ \or\xint_dothis{\expandafter\XINT_expr_fetch_to_semicolon_b}%
+ \else\expandafter\xintError:noopening
+ \fi\xint_orthat{}\expandafter{#2}{#1}%
+}%
+\def\XINT_expr_fetch_to_semicolon_b #1#2{\XINT_expr_fetch_to_semicolon_a {#2#1;}\empty}%
+\def\XINT_expr_fetch_to_semicolon_c #1#2{\xint_c_{#2#1}}%
+\expandafter\def\csname XINT_expr_itself_++\endcsname {++}%
+\expandafter\def\csname XINT_expr_itself_++)\endcsname {++)}%
+\expandafter\let\csname XINT_expr_precedence_++)\endcsname \xint_c_i
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\def\csname XINT_#1_op_++)\endcsname ##1##2\relax
+ {\expandafter\XINT_expr_foundend
+ \expanded{{+{\XINT:NEhook:f:one:from:one:direct\xintiCeil##1}}}%
+ }%
+}%
+\catcode`? 3
+\def\XINT_expr_func_break #1#2#3{#1#2{?#3}}%
+\catcode`? 11
+\let\XINT_flexpr_func_break \XINT_expr_func_break
+\let\XINT_iiexpr_func_break \XINT_expr_func_break
\edef\XINT_expr_var_omit #1\relax !{1\string !?!\relax !}%
\edef\XINT_expr_var_abort #1\relax !{1\string !?^\relax !}%
-\def\XINT_expr_op_!? #1#2\relax {\expandafter\XINT_expr_foundend\csname .=#2\endcsname}%
+\def\XINT_expr_itself_!? {!?}%
+\def\XINT_expr_op_!? #1#2\relax{\XINT_expr_foundend{#2}}%
\let\XINT_iiexpr_op_!? \XINT_expr_op_!?
\let\XINT_flexpr_op_!? \XINT_expr_op_!?
-\catcode`? 3 \catcode`* 11
-\def\XINT_expr_var_@ #1~#2{#2#1~#2}%
-\expandafter\let\csname XINT_expr_var_@1\endcsname \XINT_expr_var_@
-\expandafter\def\csname XINT_expr_var_@2\endcsname #1~#2#3{#3#1~#2#3}%
-\expandafter\def\csname XINT_expr_var_@3\endcsname #1~#2#3#4{#4#1~#2#3#4}%
-\expandafter\def\csname XINT_expr_var_@4\endcsname #1~#2#3#4#5{#5#1~#2#3#4#5}%
-\def\XINT_expr_onliteral_@ #1~#2{\XINT_expr_precedence_*** *#2(#1~#2}%
-\expandafter\let\csname XINT_expr_onliteral_@1\endcsname \XINT_expr_onliteral_@
+\let\XINT_expr_precedence_!? \xint_c_iv
+\xintFor #1 in {expr,flexpr,iiexpr} \do {%
+ \expandafter\def\csname XINT_#1_op_;\endcsname {\xint_c_i ;}%
+}%
+\expandafter\let\csname XINT_expr_precedence_;\endcsname\xint_c_i
+\expandafter\def\csname XINT_expr_itself_;)\endcsname {)}%
+\expandafter\let\csname XINT_expr_precedence_;)\endcsname\xint_c_i
+\catcode`* 11
+\def\XINT_expr_var_@ #1~#2{{#2}#1~{#2}}%
+\def\XINT_expr_onliteral_@ #1~#2{\XINT_expr_precedence_*** *{#2}(#1~{#2}}%
+\expandafter
+\def\csname XINT_expr_var_@1\endcsname #1~#2{{{#2}}#1~{#2}}%
+\expandafter
+\def\csname XINT_expr_var_@2\endcsname #1~#2#3{{{#3}}#1~{#2}{#3}}%
+\expandafter
+\def\csname XINT_expr_var_@3\endcsname #1~#2#3#4{{{#4}}#1~{#2}{#3}{#4}}%
+\expandafter
+\def\csname XINT_expr_var_@4\endcsname #1~#2#3#4#5{{{#5}}#1~{#2}{#3}{#4}{#5}}%
+\expandafter\def\csname XINT_expr_onliteral_@1\endcsname #1~#2%
+ {\XINT_expr_precedence_*** *{{#2}}(#1~{#2}}%
\expandafter\def\csname XINT_expr_onliteral_@2\endcsname #1~#2#3%
- {\XINT_expr_precedence_*** *#3(#1~#2#3}%
+ {\XINT_expr_precedence_*** *{{#3}}(#1~{#2}{#3}}%
\expandafter\def\csname XINT_expr_onliteral_@3\endcsname #1~#2#3#4%
- {\XINT_expr_precedence_*** *#4(#1~#2#3#4}%
+ {\XINT_expr_precedence_*** *{{#4}}(#1~{#2}{#3}{#4}}%
\expandafter\def\csname XINT_expr_onliteral_@4\endcsname #1~#2#3#4#5%
- {\XINT_expr_precedence_*** *#5(#1~#2#3#4#5}%
+ {\XINT_expr_precedence_*** *{{#5}}(#1~{#2}{#3}{#4}{#5}}%
\catcode`* 12
+\catcode`? 3
\def\XINT_expr_func_@@ #1#2#3#4~#5?%
{%
- \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
- {\xintNum{\XINT_expr_unlock#3}}{#5}#4~#5?%
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral0\xintntheltnoexpand{\xintNum#3}{#5}}}#4~#5?%
}%
\def\XINT_expr_func_@@@ #1#2#3#4~#5~#6?%
{%
- \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
- {\xintNum{\XINT_expr_unlock#3}}{#6}#4~#5~#6?%
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral0\xintntheltnoexpand{\xintNum#3}{#6}}}#4~#5~#6?%
}%
\def\XINT_expr_func_@@@@ #1#2#3#4~#5~#6~#7?%
{%
- \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
- {\xintNum{\XINT_expr_unlock#3}}{#7}#4~#5~#6~#7?%
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral0\xintntheltnoexpand{\xintNum#3}{#7}}}#4~#5~#6~#7?%
}%
\let\XINT_flexpr_func_@@\XINT_expr_func_@@
\let\XINT_flexpr_func_@@@\XINT_expr_func_@@@
\let\XINT_flexpr_func_@@@@\XINT_expr_func_@@@@
\def\XINT_iiexpr_func_@@ #1#2#3#4~#5?%
{%
- \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
- {\XINT_expr_unlock#3}{#5}#4~#5?%
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral0\xintntheltnoexpand{\xint_firstofone#3}{#5}}}#4~#5?%
}%
\def\XINT_iiexpr_func_@@@ #1#2#3#4~#5~#6?%
{%
- \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
- {\XINT_expr_unlock#3}{#6}#4~#5~#6?%
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral0\xintntheltnoexpand{\xint_firstofone#3}{#6}}}#4~#5~#6?%
}%
\def\XINT_iiexpr_func_@@@@ #1#2#3#4~#5~#6~#7?%
{%
- \expandafter#1\expandafter#2\romannumeral0\xintntheltnoexpand
- {\XINT_expr_unlock#3}{#7}#4~#5~#6~#7?%
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral0\xintntheltnoexpand{\xint_firstofone#3}{#7}}}#4~#5~#6~#7?%
}%
\catcode`? 11
-\def\XINT_expr_onliteral_seq
- {\expandafter\XINT_expr_onliteral_seq_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
-\def\XINT_expr_onliteral_seq_f #1#2{\xint_c_xviii `{seqx}#2)\relax #1}%
-\def\XINT_expr_onliteral_seq_a #1#2,%
+\def\XINT_expr_onliteral_subs
{%
- \ifcase\XINT_isbalanced_a \relax #1#2(\xint_bye)\xint_bye
- \expandafter\XINT_expr_onliteral_seq_c
- \or\expandafter\XINT_expr_onliteral_seq_b
- \else\expandafter\xintError:we_are_doomed
- \fi {#1#2},%
+ \expandafter\XINT_allexpr_subs_f
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
}%
-\def\XINT_expr_onliteral_seq_b #1,{\XINT_expr_onliteral_seq_a {#1,}}%
-\def\XINT_expr_onliteral_seq_c #1,#2#3% #3 pour absorber le =
+\def\XINT_allexpr_subs_f #1#2{\xint_c_ii^v `{subsx}#2)\relax #1}%
+\def\XINT_expr_func_subsx #1#2{\XINT_allexpr_subsx \xintbareeval }%
+\def\XINT_flexpr_func_subsx #1#2{\XINT_allexpr_subsx \xintbarefloateval}%
+\def\XINT_iiexpr_func_subsx #1#2{\XINT_allexpr_subsx \xintbareiieval }%
+\def\XINT_allexpr_subsx #1#2#3#4%
{%
- \XINT_expr_onliteral_seq_d {#2{#1}}{}%
+ \expandafter\XINT_expr_put_op_first
+ \expanded
+ \bgroup\romannumeral0#1#4\relax \iffalse\relax !#3{#2}{\fi
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
}%
-\def\XINT_expr_onliteral_seq_d #1#2#3)%
+\def\XINT_expr_onliteral_subsm
{%
- \ifcase\XINT_isbalanced_a \relax #2#3(\xint_bye)\xint_bye
- \or\expandafter\XINT_expr_onliteral_seq_e
- \else\expandafter\xintError:we_are_doomed
- \fi
- {#1}{#2#3}%
+ \expandafter\XINT_allexpr_subsm_f
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
}%
-\def\XINT_expr_onliteral_seq_e #1#2{\XINT_expr_onliteral_seq_d {#1}{#2)}}%
-\def\XINT_isbalanced_a #1({\XINT_isbalanced_b #1)\xint_bye }%
-\def\XINT_isbalanced_b #1)#2%
- {\xint_bye #2\XINT_isbalanced_c\xint_bye\XINT_isbalanced_error }%
-\def\XINT_isbalanced_error #1)\xint_bye {\xint_c_mone}%
-\def\XINT_isbalanced_c\xint_bye\XINT_isbalanced_error #1%
- {\xint_bye #1\XINT_isbalanced_yes\xint_bye\XINT_isbalanced_d #1}%
-\def\XINT_isbalanced_yes\xint_bye\XINT_isbalanced_d\xint_bye )\xint_bye {\xint_c_ }%
-\def\XINT_isbalanced_d #1)#2%
- {\xint_bye #2\XINT_isbalanced_no\xint_bye\XINT_isbalanced_a #1#2}%
-\def\XINT_isbalanced_no\xint_bye #1\xint_bye\xint_bye {\xint_c_i }%
-\def\XINT_expr_func_seqx #1#2{\XINT_allexpr_seqx \xintthebareeval }%
-\def\XINT_flexpr_func_seqx #1#2{\XINT_allexpr_seqx \xintthebarefloateval}%
-\def\XINT_iiexpr_func_seqx #1#2{\XINT_allexpr_seqx \xintthebareiieval }%
+\def\XINT_allexpr_subsm_f #1#2{\xint_c_ii^v `{subsmx}#2)\relax #1}%
+\def\XINT_expr_func_subsmx
+{%
+ \expandafter\XINT_allexpr_subsmx\expandafter\xintbareeval
+ \expanded\bgroup{\iffalse}\fi\XINT_allexpr_subsm_A\XINT_expr_oparen
+}%
+\def\XINT_flexpr_func_subsmx
+{%
+ \expandafter\XINT_allexpr_subsmx\expandafter\xintbarefloateval
+ \expanded\bgroup{\iffalse}\fi\XINT_allexpr_subsm_A\XINT_flexpr_oparen
+}%
+\def\XINT_iiexpr_func_subsmx
+{%
+ \expandafter\XINT_allexpr_subsmx\expandafter\xintbareiieval
+ \expanded\bgroup{\iffalse}\fi\XINT_allexpr_subsm_A\XINT_iiexpr_oparen
+}%
+\def\XINT_allexpr_subsm_A #1#2#3%
+{%
+ \ifx#2\xint_c_
+ \expandafter\XINT_allexpr_subsm_done
+ \else
+ \expandafter\XINT_allexpr_subsm_B
+ \fi #1%
+}%
+\def\XINT_allexpr_subsm_B #1#2#3#4=%
+{%
+ {#2}\relax !\xint_zapspaces#3#4 \xint_gobble_i
+ \expandafter\XINT_allexpr_subsm_A\expandafter#1\romannumeral`&&@#1%
+}%
+\def\XINT_allexpr_subsm_done #1#2{{#2}\iffalse{{\fi}}}%
+\def\XINT_allexpr_subsmx #1#2#3#4%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded
+ \bgroup\romannumeral0#1#4\relax \iffalse\relax !#3#2{\fi
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_expr_onliteral_subsn
+{%
+ \expandafter\XINT_allexpr_subsn_f
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
+}%
+\def\XINT_allexpr_subsn_f #1{\XINT_allexpr_subsn_g #1}%
+\def\XINT_allexpr_subsn_g #1#2#3%
+{%
+ \expandafter\XINT_allexpr_subsn_h
+ \expanded\bgroup{\iffalse}\fi\expandafter\XINT_allexpr_subsn_B
+ \romannumeral\XINT_expr_fetch_to_semicolon #1=#3;\hbox=;;^{#2}%
+}%
+\def\XINT_allexpr_subsn_B #1{\XINT_allexpr_subsn_C #1\vbox}%
+\def\XINT_allexpr_subsn_C #1#2=#3\vbox
+{%
+ \ifx\hbox#1\iffalse{{\fi}\expandafter}\else
+ {{\xint_zapspaces #1#2 \xint_gobble_i}};\unexpanded{{{#3}}}%
+ \expandafter\XINT_allexpr_subsn_B
+ \romannumeral\expandafter\XINT_expr_fetch_to_semicolon\fi
+}%
+\def\XINT_allexpr_subsn_h
+{%
+ \xint_c_ii^v `{subsnx}\romannumeral0\xintreverseorder
+}%
+\def\XINT_expr_func_subsnx #1#2#3#4#5;#6%
+{%
+ \xint_gob_til_^ #6\XINT_allexpr_subsnx_H ^%
+ \expandafter\XINT_allexpr_subsnx\expandafter
+ \xintbareeval\romannumeral0\xintbareeval #5\relax !#4{#3}\xintundefined
+ {\relax !#4{#3}\relax !#6}%
+}%
+\def\XINT_iiexpr_func_subsnx #1#2#3#4#5;#6%
+{%
+ \xint_gob_til_^ #6\XINT_allexpr_subsnx_H ^%
+ \expandafter\XINT_allexpr_subsnx\expandafter
+ \xintbareiieval\romannumeral0\xintbareiieval #5\relax !#4{#3}\xintundefined
+ {\relax !#4{#3}\relax !#6}%
+}%
+\def\XINT_flexpr_func_subsnx #1#2#3#4#5;#6%
+{%
+ \xint_gob_til_^ #6\XINT_allexpr_subsnx_H ^%
+ \expandafter\XINT_allexpr_subsnx\expandafter
+ \xintbarefloateval\romannumeral0\xintbarefloateval #5\relax !#4{#3}\xintundefined
+ {\relax !#4{#3}\relax !#6}%
+}%
+\def\XINT_allexpr_subsnx #1#2!#3\xintundefined#4#5;#6%
+{%
+ \xint_gob_til_^ #6\XINT_allexpr_subsnx_I ^%
+ \expandafter\XINT_allexpr_subsnx\expandafter
+ #1\romannumeral0#1#5\relax !#4{#2}\xintundefined
+ {\relax !#4{#2}\relax !#6}%
+}%
+\def\XINT_allexpr_subsnx_H ^#1\romannumeral0#2#3!#4\xintundefined #5#6%
+{%
+ \expandafter\XINT_allexpr_subsnx_J\romannumeral0#2#6#5%
+}%
+\def\XINT_allexpr_subsnx_I ^#1\romannumeral0#2#3\xintundefined #4#5%
+{%
+ \expandafter\XINT_allexpr_subsnx_J\romannumeral0#2#5#4%
+}%
+\def\XINT_allexpr_subsnx_J #1#2^%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded{\unexpanded{{#1}}\expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_allexpr_seq_f #1#2{\xint_c_ii^v `{seqx}#2)\relax #1}%
+\def\XINT_expr_onliteral_seq
+ {\expandafter\XINT_allexpr_seq_f\romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}}%
+\def\XINT_expr_func_seqx #1#2{\XINT:NEhook:seqx\XINT_allexpr_seqx\xintbareeval }%
+\def\XINT_flexpr_func_seqx #1#2{\XINT:NEhook:seqx\XINT_allexpr_seqx\xintbarefloateval}%
+\def\XINT_iiexpr_func_seqx #1#2{\XINT:NEhook:seqx\XINT_allexpr_seqx\xintbareiieval }%
\def\XINT_allexpr_seqx #1#2#3#4%
{%
- \expandafter \XINT_expr_getop
- \csname .=\expandafter\XINT_expr_seq:_aa
- \romannumeral`&&@\XINT_expr_unlock #2!{#1#4\relax !#3}\endcsname
-}%
-\def\XINT_expr_seq:_aa #1{\if +#1\expandafter\XINT_expr_seq:_A\else
- \expandafter\XINT_expr_seq:_a\fi #1}%
-\def\XINT_expr_seq:_a #1!#2{\expandafter\XINT_expr_seq_empty?
- \romannumeral0\XINT_expr_seq:_b {#2}#1,^,}%
-\def\XINT_expr_seq:_b #1#2#3,{%
- \if ,#2\xint_dothis\XINT_expr_seq:_noop\fi
- \if ^#2\xint_dothis\XINT_expr_seq:_end\fi
- \xint_orthat{\expandafter\XINT_expr_seq:_c}\csname.=#2#3\endcsname {#1}%
-}%
-\def\XINT_expr_seq:_noop\csname.=,#1\endcsname #2{\XINT_expr_seq:_b {#2}#1,}%
-\def\XINT_expr_seq:_end \csname.=^\endcsname #1{}%
-\def\XINT_expr_seq:_c #1#2{\expandafter\XINT_expr_seq:_d\romannumeral`&&@#2#1{#2}}%
-\def\XINT_expr_seq:_d #1{\if #1^\xint_dothis\XINT_expr_seq:_abort\fi
- \if #1?\xint_dothis\XINT_expr_seq:_break\fi
- \if #1!\xint_dothis\XINT_expr_seq:_omit\fi
- \xint_orthat{\XINT_expr_seq:_goon #1}}%
-\def\XINT_expr_seq:_abort #1!#2#3#4#5^,{}%
-\def\XINT_expr_seq:_break #1!#2#3#4#5^,{,#1}%
-\def\XINT_expr_seq:_omit #1!#2#3#4{\XINT_expr_seq:_b {#4}}%
-\def\XINT_expr_seq:_goon #1!#2#3#4{,#1\XINT_expr_seq:_b {#4}}%
-\def\XINT_expr_seq_empty? #1{%
-\def\XINT_expr_seq_empty? ##1{\if ,##1\expandafter\xint_gobble_i\fi #1\endcsname }}%
-\XINT_expr_seq_empty? { }%
-\def\XINT_expr_seq:_A +#1!%
- {\expandafter\XINT_expr_seq_empty?\romannumeral0\XINT_expr_seq:_D #1}%
-\def\XINT_expr_seq:_D #1#2{\expandafter\XINT_expr_seq:_E\romannumeral`&&@#2#1{#2}}%
-\def\XINT_expr_seq:_E #1{\if #1^\xint_dothis\XINT_expr_seq:_Abort\fi
- \if #1?\xint_dothis\XINT_expr_seq:_Break\fi
- \if #1!\xint_dothis\XINT_expr_seq:_Omit\fi
- \xint_orthat{\XINT_expr_seq:_Goon #1}}%
-\def\XINT_expr_seq:_Abort #1!#2#3#4{}%
-\def\XINT_expr_seq:_Break #1!#2#3#4{,#1}%
-\def\XINT_expr_seq:_Omit #1!#2#3%
- {\expandafter\XINT_expr_seq:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
-\def\XINT_expr_seq:_Goon #1!#2#3%
- {,#1\expandafter\XINT_expr_seq:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
+ \expandafter\XINT_expr_put_op_first
+ \expanded \bgroup {\iffalse}\fi\XINT_expr_seq:_b {#1#4\relax !#3}#2^%
+ \XINT_expr_cb_and_getop
+}%
+\def\XINT_expr_cb_and_getop{\iffalse{\fi\expandafter}\romannumeral`&&@\XINT_expr_getop}%
+\catcode`? 3
+\def\XINT_expr_seq:_b #1#2%
+{%
+ \ifx +#2\xint_dothis\XINT_expr_seq:_Ca\fi
+ \ifx !#2!\xint_dothis\XINT_expr_seq:_noop\fi
+ \ifx ^#2\xint_dothis\XINT_expr_seq:_end\fi
+ \xint_orthat{\XINT_expr_seq:_c}{#2}{#1}%
+}%
+\def\XINT_expr_seq:_noop #1{\XINT_expr_seq:_b }%
+\def\XINT_expr_seq:_end #1#2{\iffalse{\fi}}%
+\def\XINT_expr_seq:_c #1#2{\expandafter\XINT_expr_seq:_d\romannumeral0#2{{#1}}{#2}}%
+\def\XINT_expr_seq:_d #1{\ifx ^#1\xint_dothis\XINT_expr_seq:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_seq:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_seq:_omit\fi
+ \xint_orthat{\XINT_expr_seq:_goon {#1}}}%
+\def\XINT_expr_seq:_abort #1!#2^{\iffalse{\fi}}%
+\def\XINT_expr_seq:_break #1!#2^{#1\iffalse{\fi}}%
+\def\XINT_expr_seq:_omit #1!#2#{\expandafter\XINT_expr_seq:_b\xint_gobble_i}%
+\def\XINT_expr_seq:_goon #1!#2#{#1\expandafter\XINT_expr_seq:_b\xint_gobble_i}%
+\def\XINT_expr_seq:_Ca #1#2#3{\XINT_expr_seq:_Cc#3.{#2}}%
+\def\XINT_expr_seq:_Cb #1{\expandafter\XINT_expr_seq:_Cc\the\numexpr#1+\xint_c_i.}%
+\def\XINT_expr_seq:_Cc #1.#2{\expandafter\XINT_expr_seq:_D\romannumeral0#2{{#1}}{#1}{#2}}%
+\def\XINT_expr_seq:_D #1{\ifx ^#1\xint_dothis\XINT_expr_seq:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_seq:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_seq:_Omit\fi
+ \xint_orthat{\XINT_expr_seq:_Goon {#1}}}%
+\def\XINT_expr_seq:_Omit #1!#2#{\expandafter\XINT_expr_seq:_Cb\xint_gobble_i}%
+\def\XINT_expr_seq:_Goon #1!#2#{#1\expandafter\XINT_expr_seq:_Cb\xint_gobble_i}%
+\def\XINT_expr_func_iter {\XINT_allexpr_iter \xintbareeval }%
+\def\XINT_flexpr_func_iter {\XINT_allexpr_iter \xintbarefloateval }%
+\def\XINT_iiexpr_func_iter {\XINT_allexpr_iter \xintbareiieval }%
+\def\XINT_allexpr_iter #1#2#3#4%
+{%
+ \expandafter\XINT_expr_iterx
+ \expandafter#1\expanded{\unexpanded{{#4}}\expandafter}%
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
+}%
+\def\XINT_expr_iterx #1#2#3#4%
+{%
+ \XINT:NEhook:iter\XINT_expr_itery\romannumeral0#1(#4)\relax {#2}#3#1%
+}%
+\def\XINT_expr_itery #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded \bgroup {\iffalse}\fi
+ \XINT_expr_iter:_b {#5#4\relax !#3}#1^~{#2}\XINT_expr_cb_and_getop
+}%
+\def\XINT_expr_iter:_b #1#2%
+{%
+ \ifx +#2\xint_dothis\XINT_expr_iter:_Ca\fi
+ \ifx !#2!\xint_dothis\XINT_expr_iter:_noop\fi
+ \ifx ^#2\xint_dothis\XINT_expr_iter:_end\fi
+ \xint_orthat{\XINT_expr_iter:_c}{#2}{#1}%
+}%
+\def\XINT_expr_iter:_noop #1{\XINT_expr_iter:_b }%
+\def\XINT_expr_iter:_end #1#2~#3{#3\iffalse{\fi}}%
+\def\XINT_expr_iter:_c #1#2{\expandafter\XINT_expr_iter:_d\romannumeral0#2{{#1}}{#2}}%
+\def\XINT_expr_iter:_d #1{\ifx ^#1\xint_dothis\XINT_expr_iter:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_iter:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_iter:_omit\fi
+ \xint_orthat{\XINT_expr_iter:_goon {#1}}}%
+\def\XINT_expr_iter:_abort #1!#2^~#3{#3\iffalse{\fi}}%
+\def\XINT_expr_iter:_break #1!#2^~#3{#1\iffalse{\fi}}%
+\def\XINT_expr_iter:_omit #1!#2#{\expandafter\XINT_expr_iter:_b\xint_gobble_i}%
+\def\XINT_expr_iter:_goon #1!#2#{\XINT_expr_iter:_goon_a {#1}}%
+\def\XINT_expr_iter:_goon_a #1#2#3~#4{\XINT_expr_iter:_b #3~{#1}}%
+\def\XINT_expr_iter:_Ca #1#2#3{\XINT_expr_iter:_Cc#3.{#2}}%
+\def\XINT_expr_iter:_Cb #1{\expandafter\XINT_expr_iter:_Cc\the\numexpr#1+\xint_c_i.}%
+\def\XINT_expr_iter:_Cc #1.#2{\expandafter\XINT_expr_iter:_D\romannumeral0#2{{#1}}{#1}{#2}}%
+\def\XINT_expr_iter:_D #1{\ifx ^#1\xint_dothis\XINT_expr_iter:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_iter:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_iter:_Omit\fi
+ \xint_orthat{\XINT_expr_iter:_Goon {#1}}}%
+\def\XINT_expr_iter:_Omit #1!#2#{\expandafter\XINT_expr_iter:_Cb\xint_gobble_i}%
+\def\XINT_expr_iter:_Goon #1!#2#{\XINT_expr_iter:_Goon_a {#1}}%
+\def\XINT_expr_iter:_Goon_a #1#2#3~#4{\XINT_expr_iter:_Cb #3~{#1}}%
\def\XINT_expr_onliteral_add
- {\expandafter\XINT_expr_onliteral_add_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
-\def\XINT_expr_onliteral_add_f #1#2{\xint_c_xviii `{opxadd}#2)\relax #1}%
+ {\expandafter\XINT_allexpr_add_f\romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}}%
+\def\XINT_allexpr_add_f #1#2{\xint_c_ii^v `{opx}#2)\relax #1{+@}{0}}%
\def\XINT_expr_onliteral_mul
- {\expandafter\XINT_expr_onliteral_mul_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
-\def\XINT_expr_onliteral_mul_f #1#2{\xint_c_xviii `{opxmul}#2)\relax #1}%
-\def\XINT_expr_func_opxadd #1#2{\XINT_allexpr_opx \xintbareeval {\xintAdd 0}}%
-\def\XINT_flexpr_func_opxadd #1#2{\XINT_allexpr_opx \xintbarefloateval {\XINTinFloatAdd 0}}%
-\def\XINT_iiexpr_func_opxadd #1#2{\XINT_allexpr_opx \xintbareiieval {\xintiiAdd 0}}%
-\def\XINT_expr_func_opxmul #1#2{\XINT_allexpr_opx \xintbareeval {\xintMul 1}}%
-\def\XINT_flexpr_func_opxmul #1#2{\XINT_allexpr_opx \xintbarefloateval {\XINTinFloatMul 1}}%
-\def\XINT_iiexpr_func_opxmul #1#2{\XINT_allexpr_opx \xintbareiieval {\xintiiMul 1}}%
-\def\XINT_allexpr_opx #1#2#3#4#5%
-{%
- \expandafter\XINT_expr_getop
- \csname.=\romannumeral`&&@\expandafter\XINT_expr_op:_a
- \romannumeral`&&@\XINT_expr_unlock #3!{#1#5\relax !#4}{#2}\endcsname
-}%
-\def\XINT_expr_op:_a #1!#2#3{\XINT_expr_op:_b #3{#2}#1,^,}%
-\def\XINT_expr_op:_b #1#2#3#4#5,{%
- \if ,#4\xint_dothis\XINT_expr_op:_noop\fi
- \if ^#4\xint_dothis\XINT_expr_op:_end\fi
- \xint_orthat{\expandafter\XINT_expr_op:_c}\csname.=#4#5\endcsname {#3}#1{#2}%
-}%
-\def\XINT_expr_op:_c #1#2#3#4%
- {\expandafter\XINT_expr_op:_d\romannumeral0#2#1#3{#4}{#2}}%
-\def\XINT_expr_op:_d #1!#2#3#4#5%
- {\expandafter\XINT_expr_op:_b\expandafter #4\expandafter
- {\romannumeral`&&@\XINT:NEhook:two#4{\XINT_expr_unlock#1}{#5}}}%
-\def\XINT_expr_op:_noop\csname.=,#1\endcsname #2#3#4{\XINT_expr_op:_b #3{#4}{#2}#1,}%
-\def\XINT_expr_op:_end \csname.=^\endcsname #1#2#3{#3}%
-\def\XINT_expr_onliteral_subs
- {\expandafter\XINT_expr_onliteral_subs_f\romannumeral`&&@\XINT_expr_onliteral_seq_a {}}%
-\def\XINT_expr_onliteral_subs_f #1#2{\xint_c_xviii `{subx}#2)\relax #1}%
-\def\XINT_expr_func_subx #1#2{\XINT_allexpr_subx \xintbareeval }%
-\def\XINT_flexpr_func_subx #1#2{\XINT_allexpr_subx \xintbarefloateval}%
-\def\XINT_iiexpr_func_subx #1#2{\XINT_allexpr_subx \xintbareiieval }%
-\def\XINT_allexpr_subx #1#2#3#4% #2 is the value to assign to the dummy variable
-{% #3 is the dummy variable, #4 is the expression to evaluate
- \expandafter\expandafter\expandafter\XINT_expr_getop
- \expandafter\XINT_expr_subx:_end\romannumeral0#1#4\relax !#3#2%
-}%
-\def\XINT_expr_subx:_end #1!#2#3{#1}%
-\def\XINT_expr_func_rseq {\XINT_allexpr_rseq \xintbareeval \xintthebareeval }%
-\def\XINT_flexpr_func_rseq {\XINT_allexpr_rseq \xintbarefloateval \xintthebarefloateval }%
-\def\XINT_iiexpr_func_rseq {\XINT_allexpr_rseq \xintbareiieval \xintthebareiieval }%
-\def\XINT_allexpr_rseq #1#2#3%
+ {\expandafter\XINT_allexpr_mul_f\romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}}%
+\def\XINT_allexpr_mul_f #1#2{\xint_c_ii^v `{opx}#2)\relax #1{*@}{1}}%
+\def\XINT_expr_func_opx {\XINT:NEhook:opx \XINT_allexpr_opx \xintbareeval }%
+\def\XINT_flexpr_func_opx {\XINT:NEhook:opx \XINT_allexpr_opx \xintbarefloateval}%
+\def\XINT_iiexpr_func_opx {\XINT:NEhook:opx \XINT_allexpr_opx \xintbareiieval }%
+\def\XINT_allexpr_opx #1#2#3#4#5#6#7#8%
{%
- \expandafter\XINT_expr_rseqx\expandafter #1\expandafter#2\expandafter
- #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
+ \expandafter\XINT_expr_put_op_first
+ \expanded \bgroup {\iffalse}\fi
+ \XINT_expr_iter:_b {#1(#6)#7\relax !#5}#4^~{{#8}}\XINT_expr_cb_and_getop
}%
-\def\XINT_expr_rseqx #1#2#3#4#5%
+\def\XINT_expr_func_rseq {\XINT_allexpr_rseq \xintbareeval }%
+\def\XINT_flexpr_func_rseq {\XINT_allexpr_rseq \xintbarefloateval }%
+\def\XINT_iiexpr_func_rseq {\XINT_allexpr_rseq \xintbareiieval }%
+\def\XINT_allexpr_rseq #1#2#3#4%
{%
- \expandafter\XINT_expr_rseqy\romannumeral0#1(#5)\relax #3#4#2%
+ \expandafter\XINT_expr_rseqx
+ \expandafter #1\expanded{\unexpanded{{#4}}\expandafter}%
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
}%
-\def\XINT_expr_rseqy #1#2#3#4#5%
+\def\XINT_expr_rseqx #1#2#3#4%
{%
- \expandafter \XINT_expr_getop
- \csname .=\XINT_expr_unlock #2%
- \expandafter\XINT_expr_rseq:_aa
- \romannumeral`&&@\XINT_expr_unlock #1!{#5#4\relax !#3}#2\endcsname
-}%
-\def\XINT_expr_rseq:_aa #1{\if +#1\expandafter\XINT_expr_rseq:_A\else
- \expandafter\XINT_expr_rseq:_a\fi #1}%
-\def\XINT_expr_rseq:_a #1!#2#3{\XINT_expr_rseq:_b {#3}{#2}#1,^,}%
-\def\XINT_expr_rseq:_b #1#2#3#4,{%
- \if ,#3\xint_dothis\XINT_expr_rseq:_noop\fi
- \if ^#3\xint_dothis\XINT_expr_rseq:_end\fi
- \xint_orthat{\expandafter\XINT_expr_rseq:_c}\csname.=#3#4\endcsname
- {#1}{#2}%
-}%
-\def\XINT_expr_rseq:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_rseq:_b {#2}{#3}#1,}%
-\def\XINT_expr_rseq:_end \csname.=^\endcsname #1#2{}%
-\def\XINT_expr_rseq:_c #1#2#3%
- {\expandafter\XINT_expr_rseq:_d\romannumeral`&&@#3#1~#2{#3}}%
-\def\XINT_expr_rseq:_d #1{%
- \if ^#1\xint_dothis\XINT_expr_rseq:_abort\fi
- \if ?#1\xint_dothis\XINT_expr_rseq:_break\fi
- \if !#1\xint_dothis\XINT_expr_rseq:_omit\fi
- \xint_orthat{\XINT_expr_rseq:_goon #1}}%
-\def\XINT_expr_rseq:_goon #1!#2#3~#4#5{,#1\expandafter\XINT_expr_rseq:_b
- \romannumeral0\XINT_expr_lockit {#1}{#5}}%
-\def\XINT_expr_rseq:_omit #1!#2#3~{\XINT_expr_rseq:_b }%
-\def\XINT_expr_rseq:_abort #1!#2#3~#4#5#6^,{}%
-\def\XINT_expr_rseq:_break #1!#2#3~#4#5#6^,{,#1}%
-\def\XINT_expr_rseq:_A +#1!#2#3{\XINT_expr_rseq:_D #1#3{#2}}%
-\def\XINT_expr_rseq:_D #1#2#3%
- {\expandafter\XINT_expr_rseq:_E\romannumeral`&&@#3#1~#2{#3}}%
-\def\XINT_expr_rseq:_E #1{\if #1^\xint_dothis\XINT_expr_rseq:_Abort\fi
- \if #1?\xint_dothis\XINT_expr_rseq:_Break\fi
- \if #1!\xint_dothis\XINT_expr_rseq:_Omit\fi
- \xint_orthat{\XINT_expr_rseq:_Goon #1}}%
-\def\XINT_expr_rseq:_Goon #1!#2#3~#4#5%
- {,#1\expandafter\XINT_expr_rseq:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
- \romannumeral0\XINT_expr_lockit{#1}{#5}}%
-\def\XINT_expr_rseq:_Omit #1!#2#3~%#4#5%
- {\expandafter\XINT_expr_rseq:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname }%
-\def\XINT_expr_rseq:_Abort #1!#2#3~#4#5{}%
-\def\XINT_expr_rseq:_Break #1!#2#3~#4#5{,#1}%
-\def\XINT_expr_func_iter {\XINT_allexpr_iter \xintbareeval \xintthebareeval }%
-\def\XINT_flexpr_func_iter {\XINT_allexpr_iter \xintbarefloateval \xintthebarefloateval }%
-\def\XINT_iiexpr_func_iter {\XINT_allexpr_iter \xintbareiieval \xintthebareiieval }%
-\def\XINT_allexpr_iter #1#2#3%
-{%
- \expandafter\XINT_expr_iterx\expandafter #1\expandafter#2\expandafter
- #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
-}%
-\def\XINT_expr_iterx #1#2#3#4#5%
-{%
- \expandafter\XINT_expr_itery\romannumeral0#1(#5)\relax #3#4#2%
+ \XINT:NEhook:rseq \XINT_expr_rseqy\romannumeral0#1(#4)\relax {#2}#3#1%
}%
-\def\XINT_expr_itery #1#2#3#4#5%
+\def\XINT_expr_rseqy #1#2#3#4#5%
{%
- \expandafter \XINT_expr_getop
- \csname .=%
- \expandafter\XINT_expr_iter:_aa
- \romannumeral`&&@\XINT_expr_unlock #1!{#5#4\relax !#3}#2\endcsname
-}%
-\def\XINT_expr_iter:_aa #1{\if +#1\expandafter\XINT_expr_iter:_A\else
- \expandafter\XINT_expr_iter:_a\fi #1}%
-\def\XINT_expr_iter:_a #1!#2#3{\XINT_expr_iter:_b {#3}{#2}#1,^,}%
-\def\XINT_expr_iter:_b #1#2#3#4,{%
- \if ,#3\xint_dothis\XINT_expr_iter:_noop\fi
- \if ^#3\xint_dothis\XINT_expr_iter:_end\fi
- \xint_orthat{\expandafter\XINT_expr_iter:_c}%
- \csname.=#3#4\endcsname {#1}{#2}%
-}%
-\def\XINT_expr_iter:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_iter:_b {#2}{#3}#1,}%
-\def\XINT_expr_iter:_end \csname.=^\endcsname #1#2{\XINT_expr:_unlock #1}%
-\def\XINT_expr_iter:_c #1#2#3%
- {\expandafter\XINT_expr_iter:_d\romannumeral`&&@#3#1~#2{#3}}%
-\def\XINT_expr_iter:_d #1{%
- \if ^#1\xint_dothis\XINT_expr_iter:_abort\fi
- \if ?#1\xint_dothis\XINT_expr_iter:_break\fi
- \if !#1\xint_dothis\XINT_expr_iter:_omit\fi
- \xint_orthat{\XINT_expr_iter:_goon #1}}%
-\def\XINT_expr_iter:_goon #1!#2#3~#4#5%
- {\expandafter\XINT_expr_iter:_b\romannumeral0\XINT_expr_lockit {#1}{#5}}%
-\def\XINT_expr_iter:_omit #1!#2#3~{\XINT_expr_iter:_b }%
-\def\XINT_expr_iter:_abort #1!#2#3~#4#5#6^,{\XINT_expr_unlock #4}%
-\def\XINT_expr_iter:_break #1!#2#3~#4#5#6^,{#1}%
-\def\XINT_expr_iter:_A +#1!#2#3{\XINT_expr_iter:_D #1#3{#2}}%
-\def\XINT_expr_iter:_D #1#2#3%
- {\expandafter\XINT_expr_iter:_E\romannumeral`&&@#3#1~#2{#3}}%
-\def\XINT_expr_iter:_E #1{\if #1^\xint_dothis\XINT_expr_iter:_Abort\fi
- \if #1?\xint_dothis\XINT_expr_iter:_Break\fi
- \if #1!\xint_dothis\XINT_expr_iter:_Omit\fi
- \xint_orthat{\XINT_expr_iter:_Goon #1}}%
-\def\XINT_expr_iter:_Goon #1!#2#3~#4#5%
- {\expandafter\XINT_expr_iter:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
- \romannumeral0\XINT_expr_lockit{#1}{#5}}%
-\def\XINT_expr_iter:_Omit #1!#2#3~%#4#5%
- {\expandafter\XINT_expr_iter:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname }%
-\def\XINT_expr_iter:_Abort #1!#2#3~#4#5{\XINT_expr:_unlock #4}%
-\def\XINT_expr_iter:_Break #1!#2#3~#4#5{#1}%
-\def\XINT_expr_func_rrseq {\XINT_allexpr_rrseq \xintbareeval \xintthebareeval }%
-\def\XINT_flexpr_func_rrseq {\XINT_allexpr_rrseq \xintbarefloateval \xintthebarefloateval }%
-\def\XINT_iiexpr_func_rrseq {\XINT_allexpr_rrseq \xintbareiieval \xintthebareiieval }%
-\def\XINT_allexpr_rrseq #1#2#3%
-{%
- \expandafter\XINT_expr_rrseqx\expandafter #1\expandafter#2\expandafter
- #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
+ \expandafter\XINT_expr_put_op_first
+ \expanded \bgroup {\iffalse}\fi
+ #2%
+ \XINT_expr_rseq:_b {#5#4\relax !#3}#1^~{#2}\XINT_expr_cb_and_getop
+}%
+\def\XINT_expr_rseq:_b #1#2%
+{%
+ \ifx +#2\xint_dothis\XINT_expr_rseq:_Ca\fi
+ \ifx !#2!\xint_dothis\XINT_expr_rseq:_noop\fi
+ \ifx ^#2\xint_dothis\XINT_expr_rseq:_end\fi
+ \xint_orthat{\XINT_expr_rseq:_c}{#2}{#1}%
+}%
+\def\XINT_expr_rseq:_noop #1{\XINT_expr_rseq:_b }%
+\def\XINT_expr_rseq:_end #1#2~#3{\iffalse{\fi}}%
+\def\XINT_expr_rseq:_c #1#2{\expandafter\XINT_expr_rseq:_d\romannumeral0#2{{#1}}{#2}}%
+\def\XINT_expr_rseq:_d #1{\ifx ^#1\xint_dothis\XINT_expr_rseq:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_rseq:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_rseq:_omit\fi
+ \xint_orthat{\XINT_expr_rseq:_goon {#1}}}%
+\def\XINT_expr_rseq:_abort #1!#2^~#3{\iffalse{\fi}}%
+\def\XINT_expr_rseq:_break #1!#2^~#3{#1\iffalse{\fi}}%
+\def\XINT_expr_rseq:_omit #1!#2#{\expandafter\XINT_expr_rseq:_b\xint_gobble_i}%
+\def\XINT_expr_rseq:_goon #1!#2#{\XINT_expr_rseq:_goon_a {#1}}%
+\def\XINT_expr_rseq:_goon_a #1#2#3~#4{#1\XINT_expr_rseq:_b #3~{#1}}%
+\def\XINT_expr_rseq:_Ca #1#2#3{\XINT_expr_rseq:_Cc#3.{#2}}%
+\def\XINT_expr_rseq:_Cb #1{\expandafter\XINT_expr_rseq:_Cc\the\numexpr#1+\xint_c_i.}%
+\def\XINT_expr_rseq:_Cc #1.#2{\expandafter\XINT_expr_rseq:_D\romannumeral0#2{{#1}}{#1}{#2}}%
+\def\XINT_expr_rseq:_D #1{\ifx ^#1\xint_dothis\XINT_expr_rseq:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_rseq:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_rseq:_Omit\fi
+ \xint_orthat{\XINT_expr_rseq:_Goon {#1}}}%
+\def\XINT_expr_rseq:_Omit #1!#2#{\expandafter\XINT_expr_rseq:_Cb\xint_gobble_i}%
+\def\XINT_expr_rseq:_Goon #1!#2#{\XINT_expr_rseq:_Goon_a {#1}}%
+\def\XINT_expr_rseq:_Goon_a #1#2#3~#4{#1\XINT_expr_rseq:_Cb #3~{#1}}%
+\def\XINT_expr_func_iterr {\XINT_allexpr_iterr \xintbareeval }%
+\def\XINT_flexpr_func_iterr {\XINT_allexpr_iterr \xintbarefloateval }%
+\def\XINT_iiexpr_func_iterr {\XINT_allexpr_iterr \xintbareiieval }%
+\def\XINT_allexpr_iterr #1#2#3#4%
+{%
+ \expandafter\XINT_expr_iterrx
+ \expandafter #1\expanded{{\xintRevWithBraces{#4}}\expandafter}%
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
+}%
+\def\XINT_expr_iterrx #1#2#3#4%
+{%
+ \XINT:NEhook:iterr\XINT_expr_iterry\romannumeral0#1(#4)\relax {#2}#3#1%
+}%
+\def\XINT_expr_iterry #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded \bgroup {\iffalse}\fi
+ \XINT_expr_iterr:_b {#5#4\relax !#3}#1^~#20?\XINT_expr_cb_and_getop
+}%
+\def\XINT_expr_iterr:_b #1#2%
+{%
+ \ifx +#2\xint_dothis\XINT_expr_iterr:_Ca\fi
+ \ifx !#2!\xint_dothis\XINT_expr_iterr:_noop\fi
+ \ifx ^#2\xint_dothis\XINT_expr_iterr:_end\fi
+ \xint_orthat{\XINT_expr_iterr:_c}{#2}{#1}%
+}%
+\def\XINT_expr_iterr:_noop #1{\XINT_expr_iterr:_b }%
+\def\XINT_expr_iterr:_end #1#2~#3#4?{{#3}\iffalse{\fi}}%
+\def\XINT_expr_iterr:_c #1#2{\expandafter\XINT_expr_iterr:_d\romannumeral0#2{{#1}}{#2}}%
+\def\XINT_expr_iterr:_d #1{\ifx ^#1\xint_dothis\XINT_expr_iterr:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_iterr:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_iterr:_omit\fi
+ \xint_orthat{\XINT_expr_iterr:_goon {#1}}}%
+\def\XINT_expr_iterr:_abort #1!#2^~#3?{\iffalse{\fi}}%
+\def\XINT_expr_iterr:_break #1!#2^~#3?{#1\iffalse{\fi}}%
+\def\XINT_expr_iterr:_omit #1!#2#{\expandafter\XINT_expr_iterr:_b\xint_gobble_i}%
+\def\XINT_expr_iterr:_goon #1!#2#{\XINT_expr_iterr:_goon_a{#1}}%
+\def\XINT_expr_iterr:_goon_a #1#2#3~#4?%
+{%
+ \expandafter\XINT_expr_iterr:_b \expanded{\unexpanded{#3~}\xintTrim{-2}{#1#4}}0?%
+}%
+\def\XINT_expr_iterr:_Ca #1#2#3{\XINT_expr_iterr:_Cc#3.{#2}}%
+\def\XINT_expr_iterr:_Cb #1{\expandafter\XINT_expr_iterr:_Cc\the\numexpr#1+\xint_c_i.}%
+\def\XINT_expr_iterr:_Cc #1.#2{\expandafter\XINT_expr_iterr:_D\romannumeral0#2{{#1}}{#1}{#2}}%
+\def\XINT_expr_iterr:_D #1{\ifx ^#1\xint_dothis\XINT_expr_iterr:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_iterr:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_iterr:_Omit\fi
+ \xint_orthat{\XINT_expr_iterr:_Goon {#1}}}%
+\def\XINT_expr_iterr:_Omit #1!#2#{\expandafter\XINT_expr_iterr:_Cb\xint_gooble_i}%
+\def\XINT_expr_iterr:_Goon #1!#2#{\XINT_expr_iterr:_Goon_a{#1}}%
+\def\XINT_expr_iterr:_Goon_a #1#2#3~#4?%
+{%
+ \expandafter\XINT_expr_iterr:_Cb \expanded{\unexpanded{#3~}\xintTrim{-2}{#1#4}}0?%
+}%
+\def\XINT_expr_func_rrseq {\XINT_allexpr_rrseq \xintbareeval }%
+\def\XINT_flexpr_func_rrseq {\XINT_allexpr_rrseq \xintbarefloateval }%
+\def\XINT_iiexpr_func_rrseq {\XINT_allexpr_rrseq \xintbareiieval }%
+\def\XINT_allexpr_rrseq #1#2#3#4%
+{%
+ \expandafter\XINT_expr_rrseqx\expandafter#1\expanded
+ {\unexpanded{{#4}}{\xintRevWithBraces{#4}}\expandafter}%
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
}%
\def\XINT_expr_rrseqx #1#2#3#4#5%
{%
- \expandafter\XINT_expr_rrseqy\romannumeral0#1(#5)\expandafter\relax
- \expandafter{\romannumeral0\xintapply \XINT_expr_lockit
- {\xintRevWithBraces{\xintCSVtoListNonStripped{\XINT_expr_unlock #3}}}}%
- #3#4#2%
+ \XINT:NEhook:rrseq\XINT_expr_rrseqy\romannumeral0#1(#5)\relax {#2}{#3}#4#1%
}%
\def\XINT_expr_rrseqy #1#2#3#4#5#6%
{%
- \expandafter \XINT_expr_getop
- \csname .=\XINT_expr_unlock #3%
- \expandafter\XINT_expr_rrseq:_aa
- \romannumeral`&&@\XINT_expr_unlock #1!{#6#5\relax !#4}{#2}\endcsname
+ \expandafter\XINT_expr_put_op_first
+ \expanded \bgroup {\iffalse}\fi
+ #2\XINT_expr_rrseq:_b {#6#5\relax !#4}#1^~#30?\XINT_expr_cb_and_getop
+}%
+\def\XINT_expr_rrseq:_b #1#2%
+{%
+ \ifx +#2\xint_dothis\XINT_expr_rrseq:_Ca\fi
+ \ifx !#2!\xint_dothis\XINT_expr_rrseq:_noop\fi
+ \ifx ^#2\xint_dothis\XINT_expr_rrseq:_end\fi
+ \xint_orthat{\XINT_expr_rrseq:_c}{#2}{#1}%
+}%
+\def\XINT_expr_rrseq:_noop #1{\XINT_expr_rrseq:_b }%
+\def\XINT_expr_rrseq:_end #1#2~#3?{\iffalse{\fi}}%
+\def\XINT_expr_rrseq:_c #1#2{\expandafter\XINT_expr_rrseq:_d\romannumeral0#2{{#1}}{#2}}%
+\def\XINT_expr_rrseq:_d #1{\ifx ^#1\xint_dothis\XINT_expr_rrseq:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_rrseq:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_rrseq:_omit\fi
+ \xint_orthat{\XINT_expr_rrseq:_goon {#1}}}%
+\def\XINT_expr_rrseq:_abort #1!#2^~#3?{\iffalse{\fi}}%
+\def\XINT_expr_rrseq:_break #1!#2^~#3?{#1\iffalse{\fi}}%
+\def\XINT_expr_rrseq:_omit #1!#2#{\expandafter\XINT_expr_rrseq:_b\xint_gobble_i}%
+\def\XINT_expr_rrseq:_goon #1!#2#{\XINT_expr_rrseq:_goon_a {#1}}%
+\def\XINT_expr_rrseq:_goon_a #1#2#3~#4?%
+{%
+ #1\expandafter\XINT_expr_rrseq:_b\expanded{\unexpanded{#3~}\xintTrim{-2}{#1#4}}0?%
+}%
+\def\XINT_expr_rrseq:_Ca #1#2#3{\XINT_expr_rrseq:_Cc#3.{#2}}%
+\def\XINT_expr_rrseq:_Cb #1{\expandafter\XINT_expr_rrseq:_Cc\the\numexpr#1+\xint_c_i.}%
+\def\XINT_expr_rrseq:_Cc #1.#2{\expandafter\XINT_expr_rrseq:_D\romannumeral0#2{{#1}}{#1}{#2}}%
+\def\XINT_expr_rrseq:_D #1{\ifx ^#1\xint_dothis\XINT_expr_rrseq:_abort\fi
+ \ifx ?#1\xint_dothis\XINT_expr_rrseq:_break\fi
+ \ifx !#1\xint_dothis\XINT_expr_rrseq:_Omit\fi
+ \xint_orthat{\XINT_expr_rrseq:_Goon {#1}}}%
+\def\XINT_expr_rrseq:_Omit #1!#2#{\expandafter\XINT_expr_rrseq:_Cb\xint_gobble_i}%
+\def\XINT_expr_rrseq:_Goon #1!#2#{\XINT_expr_rrseq:_Goon_a {#1}}%
+\def\XINT_expr_rrseq:_Goon_a #1#2#3~#4?%
+{%
+ #1\expandafter\XINT_expr_rrseq:_Cb\expanded{\unexpanded{#3~}\xintTrim{-2}{#1#4}}0?%
}%
-\def\XINT_expr_rrseq:_aa #1{\if +#1\expandafter\XINT_expr_rrseq:_A\else
- \expandafter\XINT_expr_rrseq:_a\fi #1}%
-\catcode`? 3
-\def\XINT_expr_rrseq:_a #1!#2#3{\XINT_expr_rrseq:_b {#3}{#2}#1,^,}%
-\def\XINT_expr_rrseq:_b #1#2#3#4,{%
- \if ,#3\xint_dothis\XINT_expr_rrseq:_noop\fi
- \if ^#3\xint_dothis\XINT_expr_rrseq:_end\fi
- \xint_orthat{\expandafter\XINT_expr_rrseq:_c}\csname.=#3#4\endcsname
- {#1}{#2}%
-}%
-\def\XINT_expr_rrseq:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_rrseq:_b {#2}{#3}#1,}%
-\def\XINT_expr_rrseq:_end \csname.=^\endcsname #1#2{}%
-\def\XINT_expr_rrseq:_c #1#2#3%
- {\expandafter\XINT_expr_rrseq:_d\romannumeral`&&@#3#1~#2?{#3}}%
-\def\XINT_expr_rrseq:_d #1{%
- \if ^#1\xint_dothis\XINT_expr_rrseq:_abort\fi
- \if ?#1\xint_dothis\XINT_expr_rrseq:_break\fi
- \if !#1\xint_dothis\XINT_expr_rrseq:_omit\fi
- \xint_orthat{\XINT_expr_rrseq:_goon #1}%
-}%
-\def\XINT_expr_rrseq:_goon #1!#2#3~#4?#5{,#1\expandafter\XINT_expr_rrseq:_b\expandafter
- {\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
-\def\XINT_expr_rrseq:_omit #1!#2#3~{\XINT_expr_rrseq:_b }%
-\def\XINT_expr_rrseq:_abort #1!#2#3~#4?#5#6^,{}%
-\def\XINT_expr_rrseq:_break #1!#2#3~#4?#5#6^,{,#1}%
-\def\XINT_expr_rrseq:_A +#1!#2#3{\XINT_expr_rrseq:_D #1{#3}{#2}}%
-\def\XINT_expr_rrseq:_D #1#2#3%
- {\expandafter\XINT_expr_rrseq:_E\romannumeral`&&@#3#1~#2?{#3}}%
-\def\XINT_expr_rrseq:_Goon #1!#2#3~#4?#5%
- {,#1\expandafter\XINT_expr_rrseq:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
- \expandafter{\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
-\def\XINT_expr_rrseq:_Omit #1!#2#3~%#4?#5%
- {\expandafter\XINT_expr_rrseq:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
-\def\XINT_expr_rrseq:_Abort #1!#2#3~#4?#5{}%
-\def\XINT_expr_rrseq:_Break #1!#2#3~#4?#5{,#1}%
-\def\XINT_expr_rrseq:_E #1{\if #1^\xint_dothis\XINT_expr_rrseq:_Abort\fi
- \if #1?\xint_dothis\XINT_expr_rrseq:_Break\fi
- \if #1!\xint_dothis\XINT_expr_rrseq:_Omit\fi
- \xint_orthat{\XINT_expr_rrseq:_Goon #1}}%
-\def\XINT_expr_func_iterr {\XINT_allexpr_iterr \xintbareeval \xintthebareeval }%
-\def\XINT_flexpr_func_iterr {\XINT_allexpr_iterr \xintbarefloateval \xintthebarefloateval }%
-\def\XINT_iiexpr_func_iterr {\XINT_allexpr_iterr \xintbareiieval \xintthebareiieval }%
-\def\XINT_allexpr_iterr #1#2#3%
-{%
- \expandafter\XINT_expr_iterrx\expandafter #1\expandafter #2\expandafter
- #3\romannumeral`&&@\XINT_expr_onliteral_seq_a {}%
-}%
-\def\XINT_expr_iterrx #1#2#3#4#5%
-{%
- \expandafter\XINT_expr_iterry\romannumeral0#1(#5)\expandafter\relax
- \expandafter{\romannumeral0\xintapply \XINT_expr_lockit
- {\xintRevWithBraces{\xintCSVtoListNonStripped{\XINT_expr_unlock #3}}}}%
- #3#4#2%
-}%
-\def\XINT_expr_iterry #1#2#3#4#5#6%
-{%
- \expandafter \XINT_expr_getop
- \csname .=%
- \expandafter\XINT_expr_iterr:_aa
- \romannumeral`&&@\XINT_expr_unlock #1!{#6#5\relax !#4}{#2}\endcsname
-}%
-\def\XINT_expr_iterr:_aa #1{\if +#1\expandafter\XINT_expr_iterr:_A\else
- \expandafter\XINT_expr_iterr:_a\fi #1}%
-\def\XINT_expr_iterr:_a #1!#2#3{\XINT_expr_iterr:_b {#3}{#2}#1,^,}%
-\def\XINT_expr_iterr:_b #1#2#3#4,{%
- \if ,#3\xint_dothis\XINT_expr_iterr:_noop\fi
- \if ^#3\xint_dothis\XINT_expr_iterr:_end\fi
- \xint_orthat{\expandafter\XINT_expr_iterr:_c}%
- \csname.=#3#4\endcsname {#1}{#2}%
-}%
-\def\XINT_expr_iterr:_noop\csname.=,#1\endcsname #2#3{\XINT_expr_iterr:_b {#2}{#3}#1,}%
-\def\XINT_expr_iterr:_end \csname.=^\endcsname #1#2%
- {\expandafter\xint_gobble_i\romannumeral0\xintapplyunbraced
- {,\XINT_expr:_unlock}{\xintReverseOrder{#1\space}}}%
-\def\XINT_expr_iterr:_c #1#2#3%
- {\expandafter\XINT_expr_iterr:_d\romannumeral`&&@#3#1~#2?{#3}}%
-\def\XINT_expr_iterr:_d #1{%
- \if ^#1\xint_dothis\XINT_expr_iterr:_abort\fi
- \if ?#1\xint_dothis\XINT_expr_iterr:_break\fi
- \if !#1\xint_dothis\XINT_expr_iterr:_omit\fi
- \xint_orthat{\XINT_expr_iterr:_goon #1}%
-}%
-\def\XINT_expr_iterr:_goon #1!#2#3~#4?#5{\expandafter\XINT_expr_iterr:_b\expandafter
- {\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
-\def\XINT_expr_iterr:_omit #1!#2#3~{\XINT_expr_iterr:_b }%
-\def\XINT_expr_iterr:_abort #1!#2#3~#4?#5#6^,%
- {\expandafter\xint_gobble_i\romannumeral0\xintapplyunbraced
- {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}}}%
-\def\XINT_expr_iterr:_break #1!#2#3~#4?#5#6^,%
- {\expandafter\xint_gobble_iv\romannumeral0\xintapplyunbraced
- {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}},#1}%
-\def\XINT_expr:_unlock #1{\XINT_expr_unlock #1}%
-\def\XINT_expr_iterr:_A +#1!#2#3{\XINT_expr_iterr:_D #1{#3}{#2}}%
-\def\XINT_expr_iterr:_D #1#2#3%
- {\expandafter\XINT_expr_iterr:_E\romannumeral`&&@#3#1~#2?{#3}}%
-\def\XINT_expr_iterr:_Goon #1!#2#3~#4?#5%
- {\expandafter\XINT_expr_iterr:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\expandafter\endcsname
- \expandafter{\romannumeral0\xinttrim{-1}{\XINT_expr_lockit{#1}#4}}{#5}}%
-\def\XINT_expr_iterr:_Omit #1!#2#3~%#4?#5%
- {\expandafter\XINT_expr_iterr:_D
- \csname.=\the\numexpr \XINT_expr_unlock#3+\xint_c_i\endcsname}%
-\def\XINT_expr_iterr:_Abort #1!#2#3~#4?#5%
- {\expandafter\xint_gobble_i\romannumeral0\xintapplyunbraced
- {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}}}%
-\def\XINT_expr_iterr:_Break #1!#2#3~#4?#5%
- {\expandafter\xint_gobble_iv\romannumeral0\xintapplyunbraced
- {,\XINT_expr:_unlock}{\xintReverseOrder{#4\space}},#1}%
-\def\XINT_expr_iterr:_E #1{\if #1^\xint_dothis\XINT_expr_iterr:_Abort\fi
- \if #1?\xint_dothis\XINT_expr_iterr:_Break\fi
- \if #1!\xint_dothis\XINT_expr_iterr:_Omit\fi
- \xint_orthat{\XINT_expr_iterr:_Goon #1}}%
\catcode`? 11
-\def\xintANDof:csv #1{\expandafter\XINT_andof:_a\romannumeral`&&@#1,,^}%
-\def\XINT_andof:_a #1{\if ,#1\expandafter\XINT_andof:_e
- \else\expandafter\XINT_andof:_c\fi #1}%
-\def\XINT_andof:_c #1,{\xintiiifNotZero {#1}{\XINT_andof:_a}{\XINT_andof:_no}}%
-\def\XINT_andof:_no #1^{0}%
-\def\XINT_andof:_e #1^{1}% works with empty list
-\def\xintORof:csv #1{\expandafter\XINT_orof:_a\romannumeral`&&@#1,,^}%
-\def\XINT_orof:_a #1{\if ,#1\expandafter\XINT_orof:_e
- \else\expandafter\XINT_orof:_c\fi #1}%
-\def\XINT_orof:_c #1,{\xintiiifNotZero{#1}{\XINT_orof:_yes}{\XINT_orof:_a}}%
-\def\XINT_orof:_yes #1^{1}%
-\def\XINT_orof:_e #1^{0}% works with empty list
-\def\xintXORof:csv #1{\expandafter\XINT_xorof:_a\expandafter 0\romannumeral`&&@#1,,^}%
-\def\XINT_xorof:_a #1#2,{\XINT_xorof:_b #2,#1}%
-\def\XINT_xorof:_b #1{\if ,#1\expandafter\XINT_xorof:_e
- \else\expandafter\XINT_xorof:_c\fi #1}%
-\def\XINT_xorof:_c #1,#2%
- {\xintiiifNotZero {#1}{\if #20\xint_afterfi{\XINT_xorof:_a 1}%
- \else\xint_afterfi{\XINT_xorof:_a 0}\fi}%
- {\XINT_xorof:_a #2}%
- }%
-\def\XINT_xorof:_e ,#1#2^{#1}% allows empty list (then returns 0)
-\def\XINT_oncsv:_empty #1,^,#2{#2}%
-\def\XINT_oncsv:_end ^,#1#2#3#4{#1}%
-\def\XINT_oncsv:_a #1#2#3%
- {\if ,#3\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_oncsv:_b\fi #1#2#3}%
-\def\XINT_oncsv:_b #1#2#3,%
- {\expandafter\XINT_oncsv:_c \expandafter{\romannumeral`&&@#2{#3}}#1#2}%
-\def\XINT_oncsv:_c #1#2#3#4,{\expandafter\XINT_oncsv:_d \romannumeral`&&@#4,{#1}#2#3}%
-\def\XINT_oncsv:_d #1%
- {\if ^#1\expandafter\XINT_oncsv:_end\else\expandafter\XINT_oncsv:_e\fi #1}%
-\def\XINT_oncsv:_e #1,#2#3#4%
- {\expandafter\XINT_oncsv:_c\expandafter {\romannumeral`&&@#3{#4{#1}}{#2}}#3#4}%
-\def\xintMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmax
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}%
-\def\xintiiMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimax
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
-\def\xintMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmin
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}%
-\def\xintiiMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimin
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
-\def\xintSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintadd
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,{0/1[0]}}%
-\def\xintiiSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiiadd
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
-\def\xintPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmul
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,{1/1[0]}}%
-\def\xintiiPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiimul
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}%
-\def\xintGCDof:csv #1{\expandafter\XINT_gcdof:_a\romannumeral`&&@#1,^,{1/1[0]}}%
-\def\XINT_gcdof:_a #1%
- {\if ,#1\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_gcdof:_b\fi #1}%
-\def\XINT_gcdof:_b #1,%
- {\expandafter\XINT_gcdof:_c\romannumeral0\xintiiabs#1\xint:}%
-\def\XINT_gcdof:_c #1\xint:#2,%
- {\expandafter\XINT_gcdof:_d\romannumeral0\xintiiabs#2\xint:#1\xint:}%
-\def\XINT_gcdof:_d #1%
- {\if ^#1\expandafter\XINT_gcdof:_end\else\expandafter\XINT_gcdof:_e\fi #1}%
-\def\XINT_gcdof:_e#1#2\xint:#3\xint:
-{%
- \if0#1\expandafter\XINT_gcdof:_f\fi
- \expandafter\XINT_gcdof:_e\romannumeral0\xintmod{#3}{#1#2}\xint:#1#2\xint:
-}%
-\def\XINT_gcdof:_f
- \expandafter\XINT_gcdof:_e\romannumeral0\xintmod#1#2\xint:#3\xint:#4,%
-{%
- \expandafter\XINT_gcdof:_d\romannumeral0\xintiiabs#4\xint:#1\xint:
-}%
-\def\XINT_gcdof:_end ^\xint:#1\xint:#2{#1}%
-\def\xintLCMof:csv #1{\expandafter\XINT_lcmof:_a\romannumeral`&&@#1,^,{0/1[0]}}%
-\def\XINT_lcmof:_a #1%
- {\if ,#1\expandafter\XINT_oncsv:_empty\else\expandafter\XINT_lcmof:_b\fi #1}%
-\def\XINT_lcmof:_b #1,%
- {\expandafter\XINT_lcmof:_c\romannumeral0\xintiiabs\xintRaw{#1}\xint:}%
-\def\XINT_lcmof:_c #1{\if0#1\expandafter\XINT_lcmof:_zero\fi
- \expandafter\XINT_lcmof:_d\romannumeral0\XINT_inv #1}%
-\def\XINT_lcmof:_d #1\xint:#2,%
- {\expandafter\XINT_lcmof:_e\romannumeral0\xintiiabs#2\xint:#1\xint:}%
-\def\XINT_lcmof:_e #1%
- {\if ^#1\expandafter\XINT_lcmof:_end\else\expandafter\XINT_lcmof:_f\fi #1}%
-\def\XINT_lcmof:_f#1#2\xint:
-{%
- \if0#1\expandafter\XINT_lcmof:_zero\fi
- \expandafter\XINT_lcmof:_g\romannumeral0\expandafter\XINT_inv
- \romannumeral0\xintraw{#1#2}\xint:
-}%
-\def\XINT_lcmof:_g #1#2\xint:#3\xint:
-{%
- \if0#1\expandafter\XINT_lcmof:_h\fi
- \expandafter\XINT_lcmof:_g\romannumeral0\xintmod{#3}{#1#2}\xint:#1#2\xint:
-}%
-\def\XINT_lcmof:_h
- \expandafter\XINT_lcmof:_g\romannumeral0\xintmod#1#2\xint:#3\xint:#4,%
-{%
- \expandafter\XINT_lcmof:_e\romannumeral0\xintiiabs#4\xint:#1\xint:
-}%
-\def\XINT_lcmof:_zero #1^,#2{0/1[0]}%
-\def\XINT_lcmof:_end ^\xint:#1\xint:#2{\romannumeral0\XINT_inv #1}%
-\def\xintiiGCDof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiigcd
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,1}%
-\def\xintiiLCMof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintiilcm
- \expandafter\xint_firstofone\romannumeral`&&@#1,^,0}%
-\def\XINTinFloatdigits {\XINTinFloat [\XINTdigits]}%
-\def\XINTinFloatSdigits {\XINTinFloatS [\XINTdigits]}%
-\def\XINTinFloatSqrtdigits {\XINTinFloatSqrt[\XINTdigits]}%
-\def\XINTinFloatFacdigits {\XINTinFloatFac [\XINTdigits]}%
-\def\XINTFloatiLogTendigits{\XINTFloatiLogTen[\XINTdigits]}%
-\def\XINTinFloatMaxof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmax
- \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{0[0]}}%
-\def\XINTinFloatMinof:csv #1{\expandafter\XINT_oncsv:_a\expandafter\xintmin
- \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{0[0]}}%
-\def\XINTinFloatSum:csv #1{\expandafter\XINT_oncsv:_a\expandafter\XINTinfloatadd
- \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{0[0]}}%
-\def\XINTinFloatPrd:csv #1{\expandafter\XINT_oncsv:_a\expandafter\XINTinfloatmul
- \expandafter\XINTinFloatSdigits\romannumeral`&&@#1,^,{1[0]}}%
-\def\XINT:expr:one:and:opt #1,#2,#3!#4#5%
+\def\XINT_expr_onliteral_ndseq
+{%
+ \expandafter\XINT_allexpr_ndseq_f
+ \romannumeral`&&@\XINT_expr_fetch_E_comma_V_equal_E_a {}%
+}%
+\def\XINT_allexpr_ndseq_f #1#2{\xint_c_ii^v `{ndseqx}#2)\relax #1}%
+\def\XINT_expr_func_ndseqx
+{%
+ \expandafter\XINT_allexpr_ndseqx\expandafter\xintbareeval
+ \expandafter{\romannumeral0\expandafter\xint_gobble_i\string}%
+ \expandafter\xintrevwithbraces
+ \expanded\bgroup{\iffalse}\fi\XINT_allexpr_ndseq_A\XINT_expr_oparen
+}%
+\def\XINT_flexpr_func_ndseqx
+{%
+ \expandafter\XINT_allexpr_ndseqx\expandafter\xintbarefloateval
+ \expandafter{\romannumeral0\expandafter\xint_gobble_i\string}%
+ \expandafter\xintrevwithbraces
+ \expanded\bgroup{\iffalse}\fi\XINT_allexpr_ndseq_A\XINT_flexpr_oparen
+}%
+\def\XINT_iiexpr_func_ndseqx
+{%
+ \expandafter\XINT_allexpr_ndseqx\expandafter\xintbareiieval
+ \expandafter{\romannumeral0\expandafter\xint_gobble_i\string}%
+ \expandafter\xintrevwithbraces
+ \expanded\bgroup{\iffalse}\fi\XINT_allexpr_ndseq_A\XINT_iiexpr_oparen
+}%
+\def\XINT_allexpr_ndseq_A #1#2#3%
+{%
+ \ifx#2\xint_c_
+ \expandafter\XINT_allexpr_ndseq_C
+ \else
+ \expandafter\XINT_allexpr_ndseq_B
+ \fi #1%
+}%
+\def\XINT_allexpr_ndseq_B #1#2#3#4=%
+{%
+ {#2}{\xint_zapspaces#3#4 \xint_gobble_i}%
+ \expandafter\XINT_allexpr_ndseq_A\expandafter#1\romannumeral`&&@#1%
+}%
+\def\XINT_allexpr_ndseq_C #1#2{{#2}\iffalse{{{\fi}}}}%
+\def\XINT_allexpr_ndseqx #1#2#3#4%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded
+ \bgroup
+ \romannumeral0#1\empty
+ \expanded{\xintReplicate{\xintLength{{#3}#2}/2}{[seq(}%
+ \unexpanded{#4}%
+ \XINT_allexpr_ndseqx_a #2{#3}^^%
+ }%
+ \relax
+ \iffalse{\fi\expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT_allexpr_ndseqx_a #1#2%
+{%
+ \xint_gob_til_^ #1\XINT_allexpr_ndseqx_e ^%
+ \unexpanded{,#2=\XINTfstop.{#1})]}\XINT_allexpr_ndseqx_a
+}%
+\def\XINT_allexpr_ndseqx_e ^#1\XINT_allexpr_ndseqx_a{}%
+\def\XINT_expr_onliteral_ndmap #1,{\xint_c_ii^v `{ndmapx}\XINTfstop.{#1};}%
+\def\XINT_expr_func_ndmapx #1#2#3%
+{%
+ \expandafter\XINT_allexpr_ndmapx
+ \csname XINT_expr_func_\xint_zapspaces #3 \xint_gobble_i\endcsname
+ \XINT_expr_oparen
+}%
+\def\XINT_flexpr_func_ndmapx #1#2#3%
+{%
+ \expandafter\XINT_allexpr_ndmapx
+ \csname XINT_flexpr_func_\xint_zapspaces #3 \xint_gobble_i\endcsname
+ \XINT_flexpr_oparen
+}%
+\def\XINT_iiexpr_func_ndmapx #1#2#3%
+{%
+ \expandafter\XINT_allexpr_ndmapx
+ \csname XINT_iiexpr_func_\xint_zapspaces #3 \xint_gobble_i\endcsname
+ \XINT_iiexpr_oparen
+}%
+\def\XINT_allexpr_ndmapx #1#2%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded\bgroup{\iffalse}\fi
+ \expanded
+ {\noexpand\XINT:NEhook:x:ndmapx
+ \noexpand\XINT_allexpr_ndmapx_a
+ \noexpand#1{}\expandafter}%
+ \expanded\bgroup\expandafter\XINT_allexpr_ndmap_A
+ \expandafter#2\romannumeral`&&@#2%
+}%
+\def\XINT_allexpr_ndmap_A #1#2#3%
+{%
+ \ifx#3;%
+ \expandafter\XINT_allexpr_ndmap_B
+ \else
+ \xint_afterfi{\XINT_allexpr_ndmap_C#2#3}%
+ \fi #1%
+}%
+\def\XINT_allexpr_ndmap_B #1#2%
+{%
+ {#2}\expandafter\XINT_allexpr_ndmap_A\expandafter#1\romannumeral`&&@#1%
+}%
+\def\XINT_allexpr_ndmap_C #1#2#3#4%
+{%
+ {#4}^\relax\iffalse{{{\fi}}}#1#2%
+}%
+\def\XINT_allexpr_ndmapx_a #1#2#3%
+{%
+ \xint_gob_til_^ #3\XINT_allexpr_ndmapx_l ^%
+ \XINT_allexpr_ndmapx_b #1{#2}{#3}%
+}%
+\def\XINT_allexpr_ndmapx_l ^#1\XINT_allexpr_ndmapx_b #2#3#4\relax
+{%
+ #2\empty\xint_firstofone{#3}%
+}%
+\def\XINT_allexpr_ndmapx_b #1#2#3#4\relax
+{%
+ {\iffalse}\fi\XINT_allexpr_ndmapx_c {#4\relax}#1{#2}#3^%
+}%
+\def\XINT_allexpr_ndmapx_c #1#2#3#4%
+{%
+ \xint_gob_til_^ #4\XINT_allexpr_ndmapx_e ^%
+ \XINT_allexpr_ndmapx_a #2{#3{#4}}#1%
+ \XINT_allexpr_ndmapx_c {#1}#2{#3}%
+}%
+\def\XINT_allexpr_ndmapx_e ^#1\XINT_allexpr_ndmapx_c
+ {\iffalse{\fi}\xint_gobble_iii}%
+\def\XINT_expr_onliteral_ndfillraw #1,{\xint_c_ii^v `{ndfillrawx}\XINTfstop.{{#1}},}%
+\def\XINT_expr_func_ndfillrawx #1#2#3%
+{%
+ \expandafter#1\expandafter#2\expanded{{{\XINT_allexpr_ndfillrawx_a #3}}}%
+}%
+\let\XINT_iiexpr_func_ndfillrawx\XINT_expr_func_ndfillrawx
+\let\XINT_flexpr_func_ndfillrawx\XINT_expr_func_ndfillrawx
+\def\XINT_allexpr_ndfillrawx_a #1#2%
+{%
+ \expandafter\XINT_allexpr_ndfillrawx_b
+ \romannumeral0\xintApply{\xintNum}{#2}^\relax {#1}%
+}%
+\def\XINT_allexpr_ndfillrawx_b #1#2\relax#3%
+{%
+ \xint_gob_til_^ #1\XINT_allexpr_ndfillrawx_c ^%
+ \xintReplicate{#1}{{\XINT_allexpr_ndfillrawx_b #2\relax {#3}}}%
+}%
+\def\XINT_allexpr_ndfillrawx_c ^\xintReplicate #1#2%
+{%
+ \expandafter\XINT_allexpr_ndfillrawx_d\xint_firstofone #2%
+}%
+\def\XINT_allexpr_ndfillrawx_d\XINT_allexpr_ndfillrawx_b \relax #1{#1}%
+\def\XINT_expr_onliteral_bool #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\xintBool{#1}}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_togl #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\xintToggle{#1}}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_protect #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\detokenize{#1}}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_qint #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\xintiNum{#1}}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_qfrac #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\xintRaw{#1}}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_qfloat #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\XINTinFloatSdigits{#1}}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_qraw #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{#1}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_random #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\XINTinRandomFloatSdigits}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_qrand #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\XINTinRandomFloatSixteen}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT_expr_onliteral_rbit #1)%
+ {\expandafter\XINT_expr_put_op_first\expanded{{{\xintRandBit}}\expandafter
+ }\romannumeral`&&@\XINT_expr_getop}%
+\def\XINT:expr:f:one:and:opt #1#2#3!#4#5%
{%
\if\relax#3\relax\expandafter\xint_firstoftwo\else
- \expandafter\xint_secondoftwo\fi
+ \expandafter\xint_secondoftwo\fi
{#4}{#5[\xintNum{#2}]}{#1}%
}%
-\def\XINT:expr:tacitzeroifonearg #1,#2,#3!#4#5%
+\def\XINT:expr:f:tacitzeroifone #1#2#3!#4#5%
{%
\if\relax#3\relax\expandafter\xint_firstoftwo\else
- \expandafter\xint_secondoftwo\fi
+ \expandafter\xint_secondoftwo\fi
{#4{0}}{#5{\xintNum{#2}}}{#1}%
}%
-\def\XINT:iiexpr:tacitzeroifonearg #1,#2,#3!#4%
+\def\XINT:expr:f:iitacitzeroifone #1#2#3!#4%
{%
\if\relax#3\relax\expandafter\xint_firstoftwo\else
- \expandafter\xint_secondoftwo\fi
+ \expandafter\xint_secondoftwo\fi
{#4{0}}{#4{#2}}{#1}%
}%
-\def\XINT:expr:totwo #1#2{#1,#2}%
-\def\XINT:expr:two:to:two #1,#2,!#3%
-{%
- \expandafter\XINT:expr:totwo\romannumeral`&&@#3{#1}{#2}%
-}%
-\let\XINT:flexpr:two:to:two\XINT:expr:two:to:two
-\let\XINT:iiexpr:two:to:two\XINT:expr:two:to:two
\def\XINT_expr_func_num #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintNum{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintNum#3}}%
}%
\let\XINT_flexpr_func_num\XINT_expr_func_num
\let\XINT_iiexpr_func_num\XINT_expr_func_num
\def\XINT_expr_func_reduce #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintIrr{\XINT_expr_unlock #3}[0]\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintIrr#3}}%
}%
\let\XINT_flexpr_func_reduce\XINT_expr_func_reduce
\def\XINT_expr_func_preduce #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintPIrr{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintPIrr#3}}%
}%
\let\XINT_flexpr_func_preduce\XINT_expr_func_preduce
\def\XINT_expr_func_abs #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintAbs{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintAbs#3}}%
}%
\let\XINT_flexpr_func_abs\XINT_expr_func_abs
\def\XINT_iiexpr_func_abs #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiAbs{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiAbs#3}}%
}%
\def\XINT_expr_func_sgn #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintSgn{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintSgn#3}}%
}%
\let\XINT_flexpr_func_sgn\XINT_expr_func_sgn
\def\XINT_iiexpr_func_sgn #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiSgn{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiSgn#3}}%
}%
\def\XINT_expr_func_frac #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintTFrac{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintTFrac#3}}%
}%
\def\XINT_flexpr_func_frac #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\XINTinFloatFracdigits{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatFracdigits#3}}%
}%
\def\XINT_expr_func_floor #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintFloor{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintFloor#3}}%
}%
\let\XINT_flexpr_func_floor\XINT_expr_func_floor
\def\XINT_iiexpr_func_floor #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiFloor{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiFloor#3}}%
}%
\def\XINT_expr_func_ceil #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintCeil{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintCeil#3}}%
}%
\let\XINT_flexpr_func_ceil\XINT_expr_func_ceil
\def\XINT_iiexpr_func_ceil #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiCeil{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiCeil#3}}%
}%
\def\XINT_expr_func_sqr #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintSqr{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintSqr#3}}%
}%
-\def\XINTinFloatSqr#1{\XINTinFloatMul{#1}{#1}}% revoir apr^^c3^^a8s
+\def\XINTinFloatSqr#1{\XINTinFloatMul{#1}{#1}}%
\def\XINT_flexpr_func_sqr #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\XINTinFloatSqr{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatSqr#3}}%
}%
\def\XINT_iiexpr_func_sqr #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiSqr{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiSqr#3}}%
}%
\def\XINT_expr_func_? #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiIsNotZero{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiIsNotZero#3}}%
}%
\let\XINT_flexpr_func_? \XINT_expr_func_?
\let\XINT_iiexpr_func_? \XINT_expr_func_?
\def\XINT_expr_func_! #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiIsZero{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiIsZero#3}}%
}%
\let\XINT_flexpr_func_! \XINT_expr_func_!
\let\XINT_iiexpr_func_! \XINT_expr_func_!
\def\XINT_expr_func_not #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiIsZero{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiIsZero#3}}%
}%
\let\XINT_flexpr_func_not \XINT_expr_func_not
\let\XINT_iiexpr_func_not \XINT_expr_func_not
\def\XINT_expr_func_odd #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintOdd{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintOdd#3}}%
}%
\let\XINT_flexpr_func_odd\XINT_expr_func_odd
\def\XINT_iiexpr_func_odd #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiOdd{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiOdd#3}}%
}%
\def\XINT_expr_func_even #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintEven{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintEven#3}}%
}%
\let\XINT_flexpr_func_even\XINT_expr_func_even
\def\XINT_iiexpr_func_even #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiEven{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiEven#3}}%
}%
\def\XINT_expr_func_isint #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintIsInt{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintIsInt#3}}%
}%
\def\XINT_flexpr_func_isint #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintFloatIsInt{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintFloatIsInt#3}}%
}%
\let\XINT_iiexpr_func_isint\XINT_expr_func_isint % ? perhaps rather always 1
\def\XINT_expr_func_isone #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintIsOne{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintIsOne#3}}%
}%
\let\XINT_flexpr_func_isone\XINT_expr_func_isone
\def\XINT_iiexpr_func_isone #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiIsOne{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiIsOne#3}}%
}%
-\def\XINT_expr_func_nuple #1#2#3%
- {\expandafter #1\expandafter #2\csname.=\XINT_expr_unlock #3\endcsname }%
-\let\XINT_flexpr_func_nuple\XINT_expr_func_nuple
-\let\XINT_iiexpr_func_nuple\XINT_expr_func_nuple
\def\XINT_expr_func_factorial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock#3,,!\xintFac\XINTinFloatFac
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt #3,!\xintFac\XINTinFloatFac
+ }}%
}%
\def\XINT_flexpr_func_factorial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock#3,,!\XINTinFloatFacdigits\XINTinFloatFac
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt#3,!\XINTinFloatFacdigits\XINTinFloatFac
+ }}%
}%
\def\XINT_iiexpr_func_factorial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiFac{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiFac#3}}%
}%
\def\XINT_expr_func_sqrt #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock#3,,!\XINTinFloatSqrtdigits\XINTinFloatSqrt
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt #3,!\XINTinFloatSqrtdigits\XINTinFloatSqrt
+ }}%
}%
\let\XINT_flexpr_func_sqrt\XINT_expr_func_sqrt
+\def\XINT_expr_func_sqrt_ #1#2#3%
+{%
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatSqrtdigits#3}}%
+}%
+\let\XINT_flexpr_func_sqrt_\XINT_expr_func_sqrt_
\def\XINT_iiexpr_func_sqrt #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiSqrt{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiSqrt#3}}%
}%
\def\XINT_iiexpr_func_sqrtr #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiSqrtR{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiSqrtR#3}}%
}%
\def\XINT_expr_func_inv #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintInv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintInv#3}}%
}%
\def\XINT_flexpr_func_inv #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\XINTinFloatInv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatInv#3}}%
}%
\def\XINT_expr_func_round #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:tacitzeroifonearg
- \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiRound\xintRound
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:tacitzeroifone:direct
+ \XINT:expr:f:tacitzeroifone #3,!\xintiRound\xintRound
+ }}%
}%
\let\XINT_flexpr_func_round\XINT_expr_func_round
\def\XINT_iiexpr_func_round #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:iiexpr:tacitzeroifonearg
- \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiRound
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:iitacitzeroifone:direct
+ \XINT:expr:f:iitacitzeroifone #3,!\xintiRound
+ }}%
}%
\def\XINT_expr_func_trunc #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:tacitzeroifonearg
- \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiTrunc\xintTrunc
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:tacitzeroifone:direct
+ \XINT:expr:f:tacitzeroifone #3,!\xintiTrunc\xintTrunc
+ }}%
}%
\let\XINT_flexpr_func_trunc\XINT_expr_func_trunc
\def\XINT_iiexpr_func_trunc #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:iiexpr:tacitzeroifonearg
- \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiTrunc
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:iitacitzeroifone:direct
+ \XINT:expr:f:iitacitzeroifone #3,!\xintiTrunc
+ }}%
}%
\def\XINT_expr_func_float #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock #3,,!\XINTinFloatdigits\XINTinFloat
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt #3,!\XINTinFloatdigits\XINTinFloat
+ }}%
}%
\let\XINT_flexpr_func_float\XINT_expr_func_float
+\def\XINT_expr_func_float_ #1#2#3%
+{%
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatdigits#3}}%
+}%
+\let\XINT_flexpr_func_float_\XINT_expr_func_float_
\def\XINT_expr_func_sfloat #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock #3,,!\XINTinFloatSdigits\XINTinFloatS
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt #3,!\XINTinFloatSdigits\XINTinFloatS
+ }}%
}%
\let\XINT_flexpr_func_sfloat\XINT_expr_func_sfloat
\expandafter\def\csname XINT_expr_func_ilog10\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock #3,,!\xintiLogTen\XINTFloatiLogTen
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt #3,!\xintiLogTen\XINTFloatiLogTen
+ }}%
}%
\expandafter\def\csname XINT_flexpr_func_ilog10\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:one:and:opt
- \romannumeral`&&@\XINT_expr_unlock #3,,!\XINTFloatiLogTendigits\XINTFloatiLogTen
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:and:opt:direct
+ \XINT:expr:f:one:and:opt #3,!\XINTFloatiLogTendigits\XINTFloatiLogTen
+ }}%
}%
\expandafter\def\csname XINT_iiexpr_func_ilog10\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintiiLogTen{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintiiLogTen#3}}%
}%
\def\XINT_expr_func_divmod #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:two:to:two
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintDivMod
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintDivMod #3}}%
}%
\def\XINT_flexpr_func_divmod #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatDivMod
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\XINTinFloatDivMod #3}}%
}%
\def\XINT_iiexpr_func_divmod #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:two:to:two
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiDivMod
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiiDivMod #3}}%
}%
\def\XINT_expr_func_mod #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintMod
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintMod#3}}%
}%
\def\XINT_flexpr_func_mod #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatMod
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\XINTinFloatMod#3}}%
}%
\def\XINT_iiexpr_func_mod #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiMod
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiiMod#3}}%
}%
\def\XINT_expr_func_binomial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintBinomial
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintBinomial #3}}%
}%
\def\XINT_flexpr_func_binomial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatBinomial
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\XINTinFloatBinomial #3}}%
}%
\def\XINT_iiexpr_func_binomial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiBinomial
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiiBinomial #3}}%
}%
\def\XINT_expr_func_pfactorial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintPFactorial
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintPFactorial #3}}%
}%
\def\XINT_flexpr_func_pfactorial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\XINTinFloatPFactorial
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\XINTinFloatPFactorial #3}}%
}%
\def\XINT_iiexpr_func_pfactorial #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiPFactorial
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiiPFactorial #3}}%
}%
\def\XINT_expr_func_randrange #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:expr:randrange
- \romannumeral`&&@\XINT_expr_unlock #3,,!%
- \endcsname
+ \expandafter #1\expandafter #2\expanded{{{%
+ \XINT:expr:randrange #3,!%
+ }}}%
}%
\let\XINT_flexpr_func_randrange\XINT_expr_func_randrange
\def\XINT_iiexpr_func_randrange #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:iiexpr:randrange
- \romannumeral`&&@\XINT_expr_unlock #3,,!%
- \endcsname
+ \expandafter #1\expandafter #2\expanded{{{%
+ \XINT:iiexpr:randrange #3,!%
+ }}}%
}%
-\def\XINT:expr:randrange #1,#2,#3!%
+\def\XINT:expr:randrange #1#2#3!%
{%
\if\relax#3\relax\expandafter\xint_firstoftwo\else
\expandafter\xint_secondoftwo\fi
- {\xintiiRandRange{\XINT:NEhook:one\xintNum{#1}}}%
- {\xintiiRandRangeAtoB{\XINT:NEhook:one\xintNum{#1}}%
- {\XINT:NEhook:one\xintNum{#2}}}%
+ {\xintiiRandRange{\XINT:NEhook:f:one:from:one:direct\xintNum{#1}}}%
+ {\xintiiRandRangeAtoB{\XINT:NEhook:f:one:from:one:direct\xintNum{#1}}%
+ {\XINT:NEhook:f:one:from:one:direct\xintNum{#2}}%
+ }%
}%
-\def\XINT:iiexpr:randrange #1,#2,#3!%
+\def\XINT:iiexpr:randrange #1#2#3!%
{%
\if\relax#3\relax\expandafter\xint_firstoftwo\else
\expandafter\xint_secondoftwo\fi
- {\xintiiRandRange{#1}}{\xintiiRandRangeAtoB{#1}{#2}}%
+ {\xintiiRandRange{#1}}%
+ {\xintiiRandRangeAtoB{#1}{#2}}%
}%
\def\XINT_expr_func_quo #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiQuo
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiQuo #3}}%
}%
\let\XINT_flexpr_func_quo\XINT_expr_func_quo
\def\XINT_iiexpr_func_quo #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiQuo
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiiQuo #3}}%
}%
\def\XINT_expr_func_rem #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiRem
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiRem #3}}%
}%
\let\XINT_flexpr_func_rem\XINT_expr_func_rem
\def\XINT_iiexpr_func_rem #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\xintiiRem
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{\romannumeral`&&@%
+ \XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\xintiiRem #3}}%
}%
\def\XINT_expr_func_gcd #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintGCDof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_GCDof#3^}}%
}%
\let\XINT_flexpr_func_gcd\XINT_expr_func_gcd
\def\XINT_iiexpr_func_gcd #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintiiGCDof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_iiGCDof#3^}}%
}%
\def\XINT_expr_func_lcm #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintLCMof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_LCMof#3^}}%
}%
\let\XINT_flexpr_func_lcm\XINT_expr_func_lcm
\def\XINT_iiexpr_func_lcm #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintiiLCMof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_iiLCMof#3^}}%
}%
\def\XINT_expr_func_max #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintMaxof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_Maxof#3^}}%
}%
\def\XINT_iiexpr_func_max #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintiiMaxof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_iiMaxof#3^}}%
}%
\def\XINT_flexpr_func_max #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\XINTinFloatMaxof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINTinFloatMaxof#3^}}%
}%
\def\XINT_expr_func_min #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintMinof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_Minof#3^}}%
}%
\def\XINT_iiexpr_func_min #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintiiMinof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_iiMinof#3^}}%
}%
\def\XINT_flexpr_func_min #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\XINTinFloatMinof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINTinFloatMinof#3^}}%
}%
\expandafter
\def\csname XINT_expr_func_+\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintSum:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_Sum#3^}}%
}%
\expandafter
\def\csname XINT_flexpr_func_+\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\XINTinFloatSum:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINTinFloatSum#3^}}%
}%
\expandafter
\def\csname XINT_iiexpr_func_+\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintiiSum:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_iiSum#3^}}%
}%
\expandafter
\def\csname XINT_expr_func_*\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintPrd:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_Prd#3^}}%
}%
\expandafter
\def\csname XINT_flexpr_func_*\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\XINTinFloatPrd:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINTinFloatPrd#3^}}%
}%
\expandafter
\def\csname XINT_iiexpr_func_*\endcsname #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintiiPrd:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_iiPrd#3^}}%
}%
\def\XINT_expr_func_all #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintANDof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_ANDof#3^}}%
}%
\let\XINT_flexpr_func_all\XINT_expr_func_all
\let\XINT_iiexpr_func_all\XINT_expr_func_all
\def\XINT_expr_func_any #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintORof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_ORof#3^}}%
}%
\let\XINT_flexpr_func_any\XINT_expr_func_any
\let\XINT_iiexpr_func_any\XINT_expr_func_any
\def\XINT_expr_func_xor #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintXORof:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{\expandafter
+ {\romannumeral`&&@\XINT:NEhook:f:from:delim:u\XINT_XORof#3^}}%
}%
\let\XINT_flexpr_func_xor\XINT_expr_func_xor
\let\XINT_iiexpr_func_xor\XINT_expr_func_xor
\def\XINT_expr_func_len #1#2#3%
{%
- \expandafter#1\expandafter#2\csname.=%
- \XINT:NEhook:csv\xintLength:f:csv{\XINT_expr_unlock#3}\endcsname
+ \expandafter#1\expandafter#2\expandafter{\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:noeval:from:braced:u\xintLength#3^%
+ }}%
}%
\let\XINT_flexpr_func_len \XINT_expr_func_len
\let\XINT_iiexpr_func_len \XINT_expr_func_len
\def\XINT_expr_func_first #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintFirstItem:f:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:noeval:from:braced:u\xintFirstOne#3^%
+ }%
}%
\let\XINT_flexpr_func_first\XINT_expr_func_first
\let\XINT_iiexpr_func_first\XINT_expr_func_first
\def\XINT_expr_func_last #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintLastItem:f:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:noeval:from:braced:u\xintLastOne#3^%
+ }%
}%
\let\XINT_flexpr_func_last\XINT_expr_func_last
\let\XINT_iiexpr_func_last\XINT_expr_func_last
\def\XINT_expr_func_reversed #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:csv\xintReverse:f:csv{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:reverse\XINT_expr_reverse
+ #3^^#3\xint:\xint:\xint:\xint:
+ \xint:\xint:\xint:\xint:\xint_bye
+ }%
+}%
+\def\XINT_expr_reverse #1#2%
+{%
+ \if ^\noexpand#2%
+ \expandafter\XINT_expr_reverse:_one_or_none\string#1.%
+ \else
+ \expandafter\XINT_expr_reverse:_at_least_two
+ \fi
+}%
+\def\XINT_expr_reverse:_at_least_two #1^^{\XINT_revwbr_loop {}}%
+\def\XINT_expr_reverse:_one_or_none #1%
+{%
+ \if #1\bgroup\xint_dothis\XINT_expr_reverse:_nutple\fi
+ \if #1^\xint_dothis\XINT_expr_reverse:_nil\fi
+ \xint_orthat\XINT_expr_reverse:_leaf
+}%
+\edef\XINT_expr_reverse:_nil #1\xint_bye{\noexpand\fi\space}%
+\def\XINT_expr_reverse:_leaf#1\fi #2\xint:#3\xint_bye{\fi\xint_gob_andstop_i#2}%
+\def\XINT_expr_reverse:_nutple%
+{%
+ \expandafter\XINT_expr_reverse:_nutple_a\expandafter{\string}%
+}%
+\def\XINT_expr_reverse:_nutple_a #1^#2\xint:#3\xint_bye
+{%
+ \fi\expandafter
+ {\romannumeral0\XINT_revwbr_loop{}#2\xint:#3\xint_bye}%
}%
\let\XINT_flexpr_func_reversed\XINT_expr_func_reversed
\let\XINT_iiexpr_func_reversed\XINT_expr_func_reversed
-\def\xintiiifNotZero: #1,#2,#3,{\xintiiifNotZero{#1}{#2}{#3}}%
\def\XINT_expr_func_if #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\xintiiifNotZero:%
- \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:branch{\romannumeral`&&@\xintiiifNotZero #3}}%
}%
\let\XINT_flexpr_func_if\XINT_expr_func_if
\let\XINT_iiexpr_func_if\XINT_expr_func_if
-\def\xintifInt: #1,#2,#3,{\xintifInt{#1}{#2}{#3}}%
\def\XINT_expr_func_ifint #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\xintifInt:%
- \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:branch{\romannumeral`&&@\xintifInt #3}}%
}%
\let\XINT_iiexpr_func_ifint\XINT_expr_func_ifint
-\def\xintifFloatInt: #1,#2,#3,{\xintifFloatInt{#1}{#2}{#3}}%
\def\XINT_flexpr_func_ifint #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\xintifFloatInt:%
- \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:branch{\romannumeral`&&@\xintifFloatInt #3}}%
}%
-\def\xintifOne: #1,#2,#3,{\xintifOne{#1}{#2}{#3}}%
\def\XINT_expr_func_ifone #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\xintifOne:%
- \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:branch{\romannumeral`&&@\xintifOne #3}}%
}%
\let\XINT_flexpr_func_ifone\XINT_expr_func_ifone
-\def\xintiiifOne: #1,#2,#3,{\xintiiifOne{#1}{#2}{#3}}%
\def\XINT_iiexpr_func_ifone #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\xintiiifOne:%
- \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:branch{\romannumeral`&&@\xintiiifOne #3}}%
}%
-\def\xintiiifSgn: #1,#2,#3,#4,{\xintiiifSgn{#1}{#2}{#3}{#4}}%
\def\XINT_expr_func_ifsgn #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\xintiiifSgn:%
- \romannumeral`&&@\XINT_expr_unlock #3,\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:branch{\romannumeral`&&@\xintiiifSgn #3}}%
}%
\let\XINT_flexpr_func_ifsgn\XINT_expr_func_ifsgn
\let\XINT_iiexpr_func_ifsgn\XINT_expr_func_ifsgn
-\def\xintSeqB:f:csv #1#2%
- {\expandafter\XINT_seqb:f:csv \expandafter{\romannumeral0\xintraw{#2}}{#1}}%
-\def\XINT_seqb:f:csv #1#2{\expandafter\XINT_seqb:f:csv_a\romannumeral`&&@#2#1!}%
-\def\XINT_seqb:f:csv_a #1#2;#3;#4!{%
- \expandafter\xint_gobble_i\romannumeral`&&@%
- \xintifCmp {#3}{#4}\XINT_seqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_seqb:f:csv_bg
- #1{#3}{#4}{}{#2}}%
-\def\XINT_seqb:f:csv_be #1#2#3#4#5{,#2}%
-\def\XINT_seqb:f:csv_bl #1{\if #1p\expandafter\XINT_seqb:f:csv_pa\else
- \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
-\def\XINT_seqb:f:csv_pa #1#2#3#4{\expandafter\XINT_seqb:f:csv_p\expandafter
- {\romannumeral0\xintadd{#4}{#1}}{#2}{#3,#1}{#4}}%
-\def\XINT_seqb:f:csv_p #1#2%
-{%
- \xintifCmp {#1}{#2}\XINT_seqb:f:csv_pa\XINT_seqb:f:csv_pb\XINT_seqb:f:csv_pc
- {#1}{#2}%
-}%
-\def\XINT_seqb:f:csv_pb #1#2#3#4{#3,#1}%
-\def\XINT_seqb:f:csv_pc #1#2#3#4{#3}%
-\def\XINT_seqb:f:csv_bg #1{\if #1n\expandafter\XINT_seqb:f:csv_na\else
- \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
-\def\XINT_seqb:f:csv_na #1#2#3#4{\expandafter\XINT_seqb:f:csv_n\expandafter
- {\romannumeral0\xintadd{#4}{#1}}{#2}{#3,#1}{#4}}%
-\def\XINT_seqb:f:csv_n #1#2%
-{%
- \xintifCmp {#1}{#2}\XINT_seqb:f:csv_nc\XINT_seqb:f:csv_nb\XINT_seqb:f:csv_na
- {#1}{#2}%
-}%
-\def\XINT_seqb:f:csv_nb #1#2#3#4{#3,#1}%
-\def\XINT_seqb:f:csv_nc #1#2#3#4{#3}%
-\def\xintiiSeqB:f:csv #1#2%
- {\expandafter\XINT_iiseqb:f:csv \expandafter{\romannumeral`&&@#2}{#1}}%
-\def\XINT_iiseqb:f:csv #1#2{\expandafter\XINT_iiseqb:f:csv_a\romannumeral`&&@#2#1!}%
-\def\XINT_iiseqb:f:csv_a #1#2;#3;#4!{%
- \expandafter\xint_gobble_i\romannumeral`&&@%
- \xintSgnFork{\XINT_Cmp {#3}{#4}}%
- \XINT_iiseqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_iiseqb:f:csv_bg
- #1{#3}{#4}{}{#2}}%
-\def\XINT_iiseqb:f:csv_bl #1{\if #1p\expandafter\XINT_iiseqb:f:csv_pa\else
- \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
-\def\XINT_iiseqb:f:csv_pa #1#2#3#4{\expandafter\XINT_iiseqb:f:csv_p\expandafter
- {\romannumeral0\xintiiadd{#4}{#1}}{#2}{#3,#1}{#4}}%
-\def\XINT_iiseqb:f:csv_p #1#2%
-{%
- \xintSgnFork{\XINT_Cmp {#1}{#2}}%
- \XINT_iiseqb:f:csv_pa\XINT_iiseqb:f:csv_pb\XINT_iiseqb:f:csv_pc {#1}{#2}%
-}%
-\def\XINT_iiseqb:f:csv_pb #1#2#3#4{#3,#1}%
-\def\XINT_iiseqb:f:csv_pc #1#2#3#4{#3}%
-\def\XINT_iiseqb:f:csv_bg #1{\if #1n\expandafter\XINT_iiseqb:f:csv_na\else
- \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
-\def\XINT_iiseqb:f:csv_na #1#2#3#4{\expandafter\XINT_iiseqb:f:csv_n\expandafter
- {\romannumeral0\xintiiadd{#4}{#1}}{#2}{#3,#1}{#4}}%
-\def\XINT_iiseqb:f:csv_n #1#2%
-{%
- \xintSgnFork{\XINT_Cmp {#1}{#2}}%
- \XINT_seqb:f:csv_nc\XINT_seqb:f:csv_nb\XINT_iiseqb:f:csv_na {#1}{#2}%
-}%
-\def\XINTinFloatSeqB:f:csv #1#2{\expandafter\XINT_flseqb:f:csv \expandafter
- {\romannumeral0\XINTinfloat [\XINTdigits]{#2}}{#1}}%
-\def\XINT_flseqb:f:csv #1#2{\expandafter\XINT_flseqb:f:csv_a\romannumeral`&&@#2#1!}%
-\def\XINT_flseqb:f:csv_a #1#2;#3;#4!{%
- \expandafter\xint_gobble_i\romannumeral`&&@%
- \xintifCmp {#3}{#4}\XINT_flseqb:f:csv_bl\XINT_seqb:f:csv_be\XINT_flseqb:f:csv_bg
- #1{#3}{#4}{}{#2}}%
-\def\XINT_flseqb:f:csv_bl #1{\if #1p\expandafter\XINT_flseqb:f:csv_pa\else
- \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
-\def\XINT_flseqb:f:csv_pa #1#2#3#4{\expandafter\XINT_flseqb:f:csv_p\expandafter
- {\romannumeral0\XINTinfloatadd{#4}{#1}}{#2}{#3,#1}{#4}}%
-\def\XINT_flseqb:f:csv_p #1#2%
-{%
- \xintifCmp {#1}{#2}%
- \XINT_flseqb:f:csv_pa\XINT_flseqb:f:csv_pb\XINT_flseqb:f:csv_pc {#1}{#2}%
-}%
-\def\XINT_flseqb:f:csv_pb #1#2#3#4{#3,#1}%
-\def\XINT_flseqb:f:csv_pc #1#2#3#4{#3}%
-\def\XINT_flseqb:f:csv_bg #1{\if #1n\expandafter\XINT_flseqb:f:csv_na\else
- \xint_afterfi{\expandafter,\xint_gobble_iv}\fi }%
-\def\XINT_flseqb:f:csv_na #1#2#3#4{\expandafter\XINT_flseqb:f:csv_n\expandafter
- {\romannumeral0\XINTinfloatadd{#4}{#1}}{#2}{#3,#1}{#4}}%
-\def\XINT_flseqb:f:csv_n #1#2%
-{%
- \xintifCmp {#1}{#2}%
- \XINT_seqb:f:csv_nc\XINT_seqb:f:csv_nb\XINT_flseqb:f:csv_na {#1}{#2}%
-}%
-\def\XINT_tmpa #1#2#3#4%
-{%
- \def #1##1(##2)##3=##4;{%
+\def\XINT_expr_func_nuple #1#2#3{#1#2{{#3}}}%
+\let\XINT_flexpr_func_nuple\XINT_expr_func_nuple
+\let\XINT_iiexpr_func_nuple\XINT_expr_func_nuple
+\def\XINT_expr_func_unpack #1#2%#3%
+ {\expandafter#1\expandafter#2\romannumeral0\XINT:NEhook:unpack}%
+\let\XINT_flexpr_func_unpack\XINT_expr_func_unpack
+\let\XINT_iiexpr_func_unpack\XINT_expr_func_unpack
+\def\XINT_tmpa #1#2#3#4#5%
+{%
+ \def #1##1(##2)##3={%
\edef\XINT_deffunc_tmpa {##1}%
\edef\XINT_deffunc_tmpa {\xint_zapspaces_o \XINT_deffunc_tmpa}%
\def\XINT_deffunc_tmpb {0}%
- \def\XINT_deffunc_tmpc {(##4)}%
\edef\XINT_deffunc_tmpd {##2}%
+ \edef\XINT_deffunc_tmpd {\xint_zapspaces_o\XINT_deffunc_tmpd}%
+ \def\XINT_deffunc_tmpe {0}%
+ \expandafter#5\romannumeral\XINT_expr_fetch_to_semicolon
+ }% end of \xintdeffunc_a definition
+ \def#5##1{%
+ \def\XINT_deffunc_tmpc{(##1)}%
\ifnum\xintLength:f:csv{\XINT_deffunc_tmpd}>\xint_c_
\xintFor ####1 in {\XINT_deffunc_tmpd}\do
- {\edef\XINT_deffunc_tmpb {\the\numexpr\XINT_deffunc_tmpb+\xint_c_i}%
+ {%
+ \xintifForFirst{\let\XINT_deffunc_tmpd\empty}{}%
+ \def\XINT_deffunc_tmpf{####1}%
+ \if*\xintFirstItem{####1}%
+ \xintifForLast
+ {%
+ \def\XINT_deffunc_tmpe{1}%
+ \edef\XINT_deffunc_tmpf{\xintTrim{1}{####1}}%
+ }%
+ {%
+ \edef\XINT_deffunc_tmpf{\xintTrim{1}{####1}}%
+ \xintMessage{xintexpr}{Error}
+ {Only the last positional argument can be variadic. Trimmed ####1 to
+ \XINT_deffunc_tmpf}%
+ }%
+ \fi
+ \XINT_expr_makedummy{\XINT_deffunc_tmpf}%
+ \edef\XINT_deffunc_tmpd{\XINT_deffunc_tmpd{\XINT_deffunc_tmpf}}%
+ \edef\XINT_deffunc_tmpb {\the\numexpr\XINT_deffunc_tmpb+\xint_c_i}%
\edef\XINT_deffunc_tmpc {subs(\unexpanded\expandafter{\XINT_deffunc_tmpc},%
- ####1=################\XINT_deffunc_tmpb)}%
+ \XINT_deffunc_tmpf=################\XINT_deffunc_tmpb)}%
}%
\fi
- \ifnum\XINT_deffunc_tmpb=\xint_c_
- \expandafter\XINT_expr_defuserfunc_none\csname
+ \ifcase\XINT_deffunc_tmpb\space
+ \expandafter\XINT_expr_defuserfunc_none\csname
\else
- \expandafter\XINT_expr_defuserfunc\csname
+ \expandafter\XINT_expr_defuserfunc\csname
\fi
- XINT_#2_func_\XINT_deffunc_tmpa\expandafter\endcsname
- \expandafter{\XINT_deffunc_tmpa}{#2}%
+ XINT_#2_func_\XINT_deffunc_tmpa\expandafter\endcsname
+ \csname XINT_#2_userfunc_\XINT_deffunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_deffunc_tmpa}{#2}%
\expandafter#3\csname XINT_#2_userfunc_\XINT_deffunc_tmpa\endcsname
[\XINT_deffunc_tmpb]{\XINT_deffunc_tmpc}%
\ifxintverbose\xintMessage {xintexpr}{Info}
@@ -2941,150 +3277,109 @@
with \ifxintglobaldefs global \fi meaning \expandafter\meaning
\csname XINT_#2_userfunc_\XINT_deffunc_tmpa\endcsname}%
\fi
+ \xintFor* ####1 in {\XINT_deffunc_tmpd}:{\xintrestorevariablesilently{####1}}%
\xintexprRestoreCatcodes
- }%
+ }% end of \xintdeffunc_b definition
}%
\def\xintdeffunc {\xintexprSafeCatcodes\xintdeffunc_a}%
\def\xintdefiifunc {\xintexprSafeCatcodes\xintdefiifunc_a}%
\def\xintdeffloatfunc {\xintexprSafeCatcodes\xintdeffloatfunc_a}%
-\XINT_tmpa\xintdeffunc_a {expr} \XINT_NewFunc {expr}%
-\XINT_tmpa\xintdefiifunc_a {iiexpr}\XINT_NewIIFunc {iiexpr}%
-\XINT_tmpa\xintdeffloatfunc_a{flexpr}\XINT_NewFloatFunc{floatexpr}%
-\def\XINT_expr_defuserfunc #1#2#3%
+\XINT_tmpa\xintdeffunc_a {expr} \XINT_NewFunc {expr}\xintdeffunc_b
+\XINT_tmpa\xintdefiifunc_a {iiexpr}\XINT_NewIIFunc {iiexpr}\xintdefiifunc_b
+\XINT_tmpa\xintdeffloatfunc_a{flexpr}\XINT_NewFloatFunc{floatexpr}\xintdeffloatfunc_b
+\def\XINT_expr_defuserfunc_none #1#2#3#4%
{%
\XINT_global
- \def #1##1##2##3{\expandafter ##1\expandafter ##2%
- \csname.=\XINT:expr:userfunc{#3}{#2}{\XINT_expr_unlock ##3}\endcsname
+ \def #1##1##2##3%
+ {%
+ \expandafter##1\expandafter##2\expanded{%
+ {\XINT:NEhook:usernoargfunc\csname XINT_#4_userfunc_#3\endcsname}%
+ }%
}%
}%
-\def\XINT:expr:userfunc #1#2#3%
-{%
- \csname XINT_#1_userfunc_#2\expandafter\endcsname
- \romannumeral0\xintcsvtolistnonstripped{#3}%
-}%
-\def\XINT_expr_defuserfunc_none #1#2#3%
+\let\XINT:NEhook:usernoargfunc \empty
+\def\XINT_expr_defuserfunc #1#2#3#4%
{%
+ \if0\XINT_deffunc_tmpe
\XINT_global
- \def #1##1##2##3{\expandafter ##1\expandafter ##2%
- \csname.=\XINT:expr:userfunc:none{#3}{#2}\endcsname
+ \def #1##1##2%##3%
+ {%
+ \expandafter ##1\expandafter##2\expanded\bgroup{\iffalse}\fi
+ \XINT:NEhook:userfunc{XINT_#4_userfunc_#3}#2%##3%
}%
+ \else
+ \def #1##1{%
+ \XINT_global\def #1####1####2%####3%
+ {%
+ \expandafter ####1\expandafter####2\expanded\bgroup{\iffalse}\fi
+ \XINT:NEhook:userfunc:argv{##1}{XINT_#4_userfunc_#3}#2%####3%
+ }}\expandafter#1\expandafter{\the\numexpr\XINT_deffunc_tmpb-1}%
+ \fi
}%
-\def\XINT:expr:userfunc:none #1#2{\csname XINT_#1_userfunc_#2\endcsname}%
-\def\XINT_tmpa #1#2#3#4%
-{%
- \def #1##1(##2)##3=##4;{%
- \edef\XINT_defefunc_tmpa {##1}%
- \edef\XINT_defefunc_tmpa {\xint_zapspaces_o \XINT_defefunc_tmpa}%
- \def\XINT_defefunc_tmpb {0}%
- \def\XINT_defefunc_tmpc {(##4)}%
- \edef\XINT_defefunc_tmpd {##2}%
- \ifnum\xintLength:f:csv{\XINT_defefunc_tmpd}>\xint_c_
- \xintFor ####1 in {\XINT_defefunc_tmpd}\do
- {\edef\XINT_defefunc_tmpb {\the\numexpr\XINT_defefunc_tmpb+\xint_c_i}%
- \edef\XINT_defefunc_tmpc {subs(\unexpanded\expandafter{\XINT_defefunc_tmpc},%
- ####1=################\XINT_defefunc_tmpb)}%
- }%
- \fi
- \expandafter#3\csname XINT_#2_userefunc_\XINT_defefunc_tmpa\endcsname
- [\XINT_defefunc_tmpb]{\XINT_defefunc_tmpc}%
- \edef\XINT_defefunc_tmpd{\xintLength:f:csv
- {\expandafter\meaning\csname
- XINT_#2_userfunc_\XINT_defefunc_tmpa\endcsname}}%
- \ifcase\XINT_defefunc_tmpb\space
- \expandafter\XINT_expr_defuserefunc_none\csname
- \or
- \expandafter\XINT_expr_defuserefunc_one\csname
- \or
- \expandafter\XINT_expr_defuserefunc_two\csname
+\def\XINT:NEhook:userfunc #1#2#3{#2#3\iffalse{{\fi}}}%
+\def\XINT:NEhook:userfunc:argv #1#2#3#4%
+ {\expandafter#3\expanded{\xintKeep{#1}{#4}{\xintTrim{#1}{#4}}}\iffalse{{\fi}}}%
+\let\xintdefefunc\xintdeffunc
+\let\xintdefiifunc\xintdefiifunc
+\let\xintdeffloatefunc\xintdeffloatfunc
+\def\XINT_tmpa #1#2#3#4#5#6%
+{%
+ \def #1##1(##2)##3={%
+ \edef\XINT_defufunc_tmpa {##1}%
+ \edef\XINT_defufunc_tmpa {\xint_zapspaces_o \XINT_defufunc_tmpa}%
+ \edef\XINT_defufunc_tmpd {##2}%
+ \edef\XINT_defufunc_tmpd {\xint_zapspaces_o\XINT_defufunc_tmpd}%
+ \expandafter#5\romannumeral\XINT_expr_fetch_to_semicolon
+ }% end of \xint_defufunc_a
+ \def#5##1{%
+ \def\XINT_defufunc_tmpc{(##1)}%
+ \ifnum\xintLength:f:csv{\XINT_defufunc_tmpd}=\xint_c_i
+ \expandafter#6%
\else
- \expandafter\XINT_expr_defuserefunc_many\csname
+ \xintMessage {xintexpr}{ERROR}
+ {Universal functions must be functions of one argument only,
+ but the declaration of \XINT_defufunc_tmpa\space
+ has \xintLength:f:csv{\XINT_defufunc_tmpd} of them. Cancelled.}%
+ \xintexprRestoreCatcodes
\fi
- XINT_#2_func_\XINT_defefunc_tmpa\expandafter\endcsname
- \expandafter{\XINT_defefunc_tmpa}{#2}%
+ }% end of \xint_defufunc_b
+ \def #6{%
+ \XINT_expr_makedummy{\XINT_defufunc_tmpd}%
+ \edef\XINT_defufunc_tmpc {subs(\unexpanded\expandafter{\XINT_defufunc_tmpc},%
+ \XINT_defufunc_tmpd=########1)}%
+ \expandafter\XINT_expr_defuserufunc
+ \csname XINT_#2_func_\XINT_defufunc_tmpa\expandafter\endcsname
+ \csname XINT_#2_userufunc_\XINT_defufunc_tmpa\expandafter\endcsname
+ \expandafter{\XINT_defufunc_tmpa}{#2}%
+ \expandafter#3\csname XINT_#2_userufunc_\XINT_defufunc_tmpa\endcsname
+ [1]{\XINT_defufunc_tmpc}%
\ifxintverbose\xintMessage {xintexpr}{Info}
- {Function \XINT_defefunc_tmpa\space for \string\xint #4 parser
- associated to \string\XINT_#2_userefunc_\XINT_defefunc_tmpa\space
+ {Universal function \XINT_defufunc_tmpa\space for \string\xint #4 parser
+ associated to \string\XINT_#2_userufunc_\XINT_defufunc_tmpa\space
with \ifxintglobaldefs global \fi meaning \expandafter\meaning
- \csname XINT_#2_userefunc_\XINT_defefunc_tmpa\endcsname}%
+ \csname XINT_#2_userufunc_\XINT_defufunc_tmpa\endcsname}%
\fi
- \xintexprRestoreCatcodes
- }%
-}%
-\def\xintdefefunc {\xintexprSafeCatcodes\xintdefefunc_a}%
-\def\xintdefiiefunc {\xintexprSafeCatcodes\xintdefiiefunc_a}%
-\def\xintdeffloatefunc {\xintexprSafeCatcodes\xintdeffloatefunc_a}%
-\XINT_tmpa\xintdefefunc_a {expr} \XINT_NewFunc {expr}%
-\XINT_tmpa\xintdefiiefunc_a {iiexpr}\XINT_NewIIFunc {iiexpr}%
-\XINT_tmpa\xintdeffloatefunc_a{flexpr}\XINT_NewFloatFunc{floatexpr}%
-\def\XINT_expr_defuserefunc_none #1#2#3%
-{%
- \expandafter\XINT_expr_defuserefunc_none_a
- \csname XINT_#3_userefunc_#2\endcsname #1%
-}%
-\def\XINT_expr_defuserefunc_none_a #1#2%
-{%
- \XINT_global
- \def #2##1##2##3{\expandafter ##1\expandafter ##2\csname.=#1\endcsname}%
-}%
-\def\XINT_expr_defuserefunc_one #1#2#3%
-{%
- \expandafter\XINT_expr_defuserefunc_one_a
- \csname XINT_#3_userefunc_#2\expandafter\endcsname
- \csname XINT_#3_userefunc:f_#2\endcsname #1{#2}{#3}%
-}%
-\def\XINT_expr_defuserefunc_one_a #1#2#3#4#5%
-{%
- \XINT_global
- \def #2##1{\expandafter#1\expandafter{\romannumeral`&&@##1}}%
- \XINT_global
- \def #3##1##2##3%
- {%
- \expandafter ##1\expandafter ##2%
- \csname.=\XINT:expr:userefunc:one{#5}{#4}{\XINT_expr_unlock##3}\endcsname
- }%
-}%
-\def\XINT:expr:userefunc:one #1#2#3%
-{%
- \csname XINT_#1_userefunc_#2\expandafter\endcsname\expandafter
- {\romannumeral`&&@#3}%
-}%
-\def\XINT_expr_defuserefunc_two #1#2#3%
-{%
- \expandafter\XINT_expr_defuserefunc_two_a
- \csname XINT_#3_userefunc:f_#2\endcsname #1{#2}{#3}%
-}%
-\def\XINT_expr_defuserefunc_two_a #1#2#3#4%
+ }% end of \xint_defufunc_c
+}%
+\def\xintdefufunc {\xintexprSafeCatcodes\xintdefufunc_a}%
+\def\xintdefiiufunc {\xintexprSafeCatcodes\xintdefiiufunc_a}%
+\def\xintdeffloatufunc {\xintexprSafeCatcodes\xintdeffloatufunc_a}%
+\XINT_tmpa\xintdefufunc_a {expr} \XINT_NewFunc {expr}%
+ \xintdefufunc_b\xintdefufunc_c
+\XINT_tmpa\xintdefiiufunc_a {iiexpr}\XINT_NewIIFunc {iiexpr}%
+ \xintdefiiufunc_b\xintdefiiufunc_c
+\XINT_tmpa\xintdeffloatufunc_a{flexpr}\XINT_NewFloatFunc{floatexpr}%
+ \xintdeffloatufunc_b\xintdeffloatufunc_c
+\def\XINT_expr_defuserufunc #1#2#3#4%
{%
\XINT_global
- \def #1##1##2{\xintExpandArgs{XINT_#4_userefunc_#3}{{##1}{##2}}}%
- \XINT_global
- \def #2##1##2##3%
+ \def #1##1##2%##3%
{%
- \expandafter ##1\expandafter ##2%
- \csname.=\XINT:expr:userefunc:two{#4}{#3}{\XINT_expr_unlock##3}\endcsname
+ \expandafter ##1\expandafter##2\expanded
+ \XINT:NEhook:userufunc{XINT_#4_userufunc_#3}#2%##3%
}%
}%
-\def\XINT:expr:userefunc:two #1#2#3%
-{%
- \expandafter\XINT:expr:userefunc:two_a
- \csname XINT_#1_userefunc_#2\expandafter\endcsname
- \romannumeral`&&@#3,%
-}%
-\def\XINT:expr:userefunc:two_a #1#2,#3,{#1{#2}{#3}}%
-\def\XINT_expr_defuserefunc_many #1#2#3%
-{%
- \XINT_global
- \def #1##1##2##3%
- {%
- \expandafter ##1\expandafter ##2%
- \csname.=\XINT:expr:userefunc{#3}{#2}{\XINT_expr_unlock##3}\endcsname
- }%
-}%
-\def\XINT:expr:userefunc #1#2#3%
-{%
- \csname XINT_#1_userefunc_#2\expandafter\endcsname
- \romannumeral0\xintcsvtolistnonstripped{#3}%
-}%
+\def\XINT:NEhook:userufunc #1{\XINT:expr:mapwithin}%
\def\XINT_tmpa #1{\expandafter\def\csname xintunassign#1func\endcsname ##1{%
\edef\XINT_unfunc_tmpa{##1}%
\edef\XINT_unfunc_tmpa {\xint_zapspaces_o\XINT_unfunc_tmpa}%
@@ -3093,13 +3388,12 @@
\XINT_global\expandafter
\let\csname XINT_#1_userfunc_\XINT_unfunc_tmpa\endcsname\xint_undefined
\XINT_global\expandafter
- \let\csname XINT_#1_userefunc_\XINT_unfunc_tmpa\endcsname\xint_undefined
+ \let\csname XINT_#1_userufunc_\XINT_unfunc_tmpa\endcsname\xint_undefined
\ifxintverbose\xintMessage {xintexpr}{Info}
{Function \XINT_unfunc_tmpa\space for \string\xint #1 parser now
\ifxintglobaldefs globally \fi undefined.}%
\fi}}%
\XINT_tmpa{expr}\XINT_tmpa{iiexpr}\XINT_tmpa{floatexpr}%
-\def\XINT_expr_wrapit #1{\expandafter\XINT_expr_wrap\csname.=#1\endcsname}%
\def\xintNewFunction #1#2[#3]#4%
{%
\edef\XINT_newfunc_tmpa {#1}%
@@ -3123,18 +3417,18 @@
\XINT_global\expandafter
\def\csname XINT_expr_macrofunc_\XINT_newfunc_tmpa\expandafter\endcsname
\the\toks0\expandafter{\XINT_newfunc_tmpb
- {\XINT_expr_wrapit{##1}}{\XINT_expr_wrapit{##2}}{\XINT_expr_wrapit{##3}}%
- {\XINT_expr_wrapit{##4}}{\XINT_expr_wrapit{##5}}{\XINT_expr_wrapit{##6}}%
- {\XINT_expr_wrapit{##7}}{\XINT_expr_wrapit{##8}}{\XINT_expr_wrapit{##9}}}%
+ {\XINTfstop.{{##1}}}{\XINTfstop.{{##2}}}{\XINTfstop.{{##3}}}%
+ {\XINTfstop.{{##4}}}{\XINTfstop.{{##5}}}{\XINTfstop.{{##6}}}%
+ {\XINTfstop.{{##7}}}{\XINTfstop.{{##8}}}{\XINTfstop.{{##9}}}}%
\expandafter\XINT_expr_newfunction
\csname XINT_expr_func_\XINT_newfunc_tmpa\expandafter\endcsname
- \expandafter{\XINT_newfunc_tmpa}{eval}\xintbareeval
+ \expandafter{\XINT_newfunc_tmpa}\xintbareeval
\expandafter\XINT_expr_newfunction
\csname XINT_iiexpr_func_\XINT_newfunc_tmpa\expandafter\endcsname
- \expandafter{\XINT_newfunc_tmpa}{iieval}\xintbareiieval
+ \expandafter{\XINT_newfunc_tmpa}\xintbareiieval
\expandafter\XINT_expr_newfunction
\csname XINT_flexpr_func_\XINT_newfunc_tmpa\expandafter\endcsname
- \expandafter{\XINT_newfunc_tmpa}{floateval}\xintbarefloateval
+ \expandafter{\XINT_newfunc_tmpa}\xintbarefloateval
\ifxintverbose
\xintMessage {xintexpr}{Info}
{Function \XINT_newfunc_tmpa\space for the expression parsers is
@@ -3143,322 +3437,609 @@
\csname XINT_expr_macrofunc_\XINT_newfunc_tmpa\endcsname}%
\fi
}%
-\def\XINT_expr_newfunction #1#2#3#4%
+\def\XINT_expr_newfunction #1#2#3%
{%
\XINT_global
- \def#1##1##2##3{\expandafter ##1\expandafter ##2\romannumeral0%
- \XINT:expr:macrofunc{#4}{#3}{#2}{\XINT_expr_unlock##3}}%
-}%
-\def\XINT:expr:macrofunc #1#2#3#4%
-{%
- #1\csname XINT_expr_macrofunc_#3\expandafter\endcsname
- \romannumeral0\xintcsvtolistnonstripped{#4}\relax
+ \def#1##1##2##3%
+ {\expandafter ##1\expandafter ##2%
+ \romannumeral0\XINT:NEhook:macrofunc
+ #3{\csname XINT_expr_macrofunc_#2\endcsname##3}\relax
+ }%
}%
+\let\XINT:NEhook:macrofunc\empty
\catcode`~ 12
-\def\XINT:newexpr:macrofunc #1{%
-\def\XINT:newexpr:macrofunc ##1##2##3##4%
+\def\XINT:NE:hastilde#1~#2#3\relax{\unless\if !#21\fi}%
+\def\XINT:NE:hashash#1{%
+\def\XINT:NE:hashash##1#1##2##3\relax{\unless\if !##21\fi}%
+}\expandafter\XINT:NE:hashash\string#%
+\def\XINT:NE:unpack #1{%
+\def\XINT:NE:unpack ##1%
+{%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0\else
+ \expandafter\XINT:NE:unpack:p\fi
+ \xint_stop_atfirstofone{##1}%
+}}\expandafter\XINT:NE:unpack\string#%
+\def\XINT:NE:unpack:p#1#2%
+ {{~romannumeral0~expandafter~xint_stop_atfirstofone~expanded{#2}}}%
+\def\XINT:NE:f:one:from:one #1{%
+\def\XINT:NE:f:one:from:one ##1%
+{%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0\else
+ \xint_dothis\XINT:NE:f:one:from:one_a\fi
+ \xint_orthat\XINT:NE:f:one:from:one_b
+ ##1&&A%
+}}\expandafter\XINT:NE:f:one:from:one\string#%
+\def\XINT:NE:f:one:from:one_a\romannumeral`&&@#1#2&&A%
+{%
+ \expandafter{\detokenize{\expandafter#1}#2}%
+}%
+\def\XINT:NE:f:one:from:one_b#1{%
+\def\XINT:NE:f:one:from:one_b\romannumeral`&&@##1##2&&A%
+{%
+ \expandafter{\romannumeral`&&@%
+ \if0\XINT:NE:hastilde ##2~!\relax
+ \XINT:NE:hashash ##2#1!\relax 0\else
+ \expandafter\string\fi
+ ##1{##2}}%
+}}\expandafter\XINT:NE:f:one:from:one_b\string#%
+\def\XINT:NE:f:one:from:one:direct #1#2{\XINT:NE:f:one:from:one:direct_a #2&&A{#1}}%
+\def\XINT:NE:f:one:from:one:direct_a #1#2&&A#3%
{%
- \expandafter#1\csname.=~XINT:newexpr:macrofunc:a{##2}{##3}%
- {\xintCSVtoListNonStripped{##4}}\endcsname
+ \if ###1\xint_dothis {\detokenize{#3}}\fi
+ \if ~#1\xint_dothis {\detokenize{#3}}\fi
+ \xint_orthat {#3}{#1#2}%
}%
-}\XINT:newexpr:macrofunc { }%
-\catcode`~ 3
-\def\XINT:newexpr:macrofunc:a #1#2#3%
-{%
- \expandafter\XINT_expr_unlock\romannumeral0\csname xintbare#1\endcsname
- \csname XINT_expr_macrofunc_#2\endcsname#3\relax
-}%
-\def\xintApply::csv #1#2%
- {\expandafter\XINT_applyon::_a\expandafter {\romannumeral`&&@#2}{#1}}%
-\def\XINT_applyon::_a #1#2{\XINT_applyon::_b {#2}{}#1,,}%
-\def\XINT_applyon::_b #1#2#3,{\expandafter\XINT_applyon::_c \romannumeral`&&@#3,{#1}{#2}}%
-\def\XINT_applyon::_c #1{\if #1,\expandafter\XINT_applyon::_end
- \else\expandafter\XINT_applyon::_d\fi #1}%
-\def\XINT_applyon::_d #1,#2{\expandafter\XINT_applyon::_e\romannumeral`&&@#2{#1},{#2}}%
-\def\XINT_applyon::_e #1,#2#3{\XINT_applyon::_b {#2}{#3, #1}}%
-\def\XINT_applyon::_end #1,#2#3{\xint_secondoftwo #3}%
-\def\xintApply:::csv #1#2#3%
- {\expandafter\XINT_applyon:::_a\expandafter{\romannumeral`&&@#2}{#1}{#3}}%
-\def\XINT_applyon:::_a #1#2#3{\XINT_applyon:::_b {#2}{#3}{}#1,,}%
-\def\XINT_applyon:::_b #1#2#3#4,%
- {\expandafter\XINT_applyon:::_c \romannumeral`&&@#4,{#1}{#2}{#3}}%
-\def\XINT_applyon:::_c #1{\if #1,\expandafter\XINT_applyon:::_end
- \else\expandafter\XINT_applyon:::_d\fi #1}%
-\def\XINT_applyon:::_d #1,#2#3%
- {\expandafter\XINT_applyon:::_e\expandafter
- {\romannumeral`&&@\xintApply::csv {#2{#1}}{#3}},{#2}{#3}}%
-\def\XINT_applyon:::_e #1,#2#3#4{\XINT_applyon:::_b {#2}{#3}{#4, #1}}%
-\def\XINT_applyon:::_end #1,#2#3#4{\xint_secondoftwo #4}%
-\catcode`~ 12
-\catcode`$ 12 % $
-\def\xint_dfork #1$#2#3\krof {#2}% $
-\def\xint_ddfork #1$$#2#3\krof {#2}% $$
-\def\XINT:NE:RApply::csv #1#2#3#4%
- {~xintApply::csv{~expandafter #2~xint_exchangetwo_keepbraces{#4}}{#3}}%
-\def\XINT:NE:LApply::csv #1#2#3{~xintApply::csv{#2{#3}}}%
-\def\XINT:NE:RLApply:::csv #1{~xintApply:::csv}%
-\def\XINT:NE:two#1{\XINT:NE:two_{#1}{\detokenize{#1}}}%
-\def\XINT:NE:two_#1#2#3#4%
- {\expandafter\XINT:NE:two_a\romannumeral`&&@#4!{#3}{#1}{#2}}%
-\def\XINT:NE:two_a#1#2!#3#4#5%
- {\expandafter\XINT:NE:two_b\romannumeral`&&@#3!#1{#4}{#5}{#1#2}}%
-\def\XINT:NE:two_b#1#2!#3#4#5{\XINT:NE:two_fork_dd#1#3{#4}{#5}{#1#2}}%
-\def\XINT:NE:two_fork_dd #1#2{%
- \xint_ddfork
- #1#2\XINT:NE:RLApply:::csv
- #1$\XINT:NE:RApply::csv% $
- $#2\XINT:NE:LApply::csv% $
- $${\XINT:NE:two_fork_nn #1#2}% $$
- \krof
+\def\XINT:NE:f:one:from:two #1{%
+\def\XINT:NE:f:one:from:two ##1%
+{%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0\else
+ \xint_dothis\XINT:NE:f:one:from:two_a\fi
+ \xint_orthat\XINT:NE:f:one:from:two_b ##1&&A%
+}}\expandafter\XINT:NE:f:one:from:two\string#%
+\def\XINT:NE:f:one:from:two_a\romannumeral`&&@#1#2&&A%
+{%
+ \expandafter{\detokenize{\expandafter#1\expanded}{#2}}%
}%
-\def\XINT:NE:two_fork_nn #1#2#3#4{%
- \if #1##\xint_dothis{#4}\fi
- \if #1~\xint_dothis{#4}\fi
- \if #2##\xint_dothis{#4}\fi
- \if #2~\xint_dothis{#4}\fi
- \xint_orthat{#3}%
+\def\XINT:NE:f:one:from:two_b#1{%
+\def\XINT:NE:f:one:from:two_b\romannumeral`&&@##1##2##3&&A%
+{%
+ \expandafter{\romannumeral`&&@%
+ \if0\XINT:NE:hastilde ##2##3~!\relax
+ \XINT:NE:hashash ##2##3#1!\relax 0\else
+ \expandafter\string\fi
+ ##1{##2}{##3}}%
+}}\expandafter\XINT:NE:f:one:from:two_b\string#%
+\def\XINT:NE:f:one:from:two:direct #1#2#3{\XINT:NE:two_fork #2&&A#3&&A#1{#2}{#3}}%
+\def\XINT:NE:two_fork #1#2&&A#3#4&&A{\XINT:NE:two_fork_nn#1#3}%
+\def\XINT:NE:two_fork_nn #1#2%
+{%
+ \if #1##\xint_dothis\string\fi
+ \if #1~\xint_dothis\string\fi
+ \if #2##\xint_dothis\string\fi
+ \if #2~\xint_dothis\string\fi
+ \xint_orthat{}%
}%
-\def\XINT:NE:twosp#1#2,#3#4,!#5%
+\def\XINT:NE:f:one:and:opt:direct#1{%
+\def\XINT:NE:f:one:and:opt:direct##1!%
+{%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0\else
+ \xint_dothis\XINT:NE:f:one:and:opt_a\fi
+ \xint_orthat\XINT:NE:f:one:and:opt_b ##1&&A%
+}}\expandafter\XINT:NE:f:one:and:opt:direct\string#%
+\def\XINT:NE:f:one:and:opt_a #1#2&&A#3#4%
{%
- \XINT:NE:two_fork_dd#1#3{#5}{\detokenize{#5}}{#1#2}{#3#4}%
+ \detokenize{\romannumeral-`0\expandafter#1\expanded{#2}$XINT_expr_exclam#3#4}%$
}%
-\def\XINT:NE:one#1#2{\expandafter\XINT:NE:one_a\romannumeral`&&@#2!{#1}}%
-\def\XINT:NE:one_a#1#2!#3%
+\def\XINT:NE:f:one:and:opt_b\XINT:expr:f:one:and:opt #1#2#3&&A#4#5%
{%
- \if ###1\xint_dothis {\detokenize{#3}}\fi
- \if ~#1\xint_dothis {\detokenize{#3}}\fi
- \if $#1\xint_dothis {~xintApply::csv{\detokenize{#3}}}\fi %$
- \xint_orthat {#3}{#1#2}%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\XINT:NE:f:one:from:one:direct#4}%
+ {\expandafter\XINT:NE:f:onewithopttoone\expandafter#5%
+ \expanded{{\XINT:NE:f:one:from:one:direct\xintNum{#2}}}}%
+ {#1}%
}%
-\def\XINT:NE:userfunc #1#2#3%
- {~xintExpandArgs{XINT_#1_userfunc_#2}{\xintCSVtoListNonStripped{#3}}}%
-\def\XINT:NE:userfunc:none #1#2{~!{XINT_#1_userfunc_#2}}%
-\def\XINT:NE:userefunc:one#1#2#3%
- {\expandafter\XINT:NE:userefunc:one_a\romannumeral`&&@#3!{#1}{#2}}%
-\def\XINT:NE:userefunc:one_a#1#2!#3#4%
+\def\XINT:NE:f:onewithopttoone#1#2#3{\XINT:NE:two_fork #2&&A#3&&A#1[#2]{#3}}%
+\def\XINT:NE:f:tacitzeroifone:direct#1{%
+\def\XINT:NE:f:tacitzeroifone:direct##1!%
{%
- \if ###1\xint_dothis {~!{XINT_#3_userefunc:f_#4}}\fi
- \if ~#1\xint_dothis {~!{XINT_#3_userefunc:f_#4}}\fi
- \if $#1\xint_dothis {~xintApply::csv~!{XINT_#3_userefunc:f_#4}}\fi %$
- \xint_orthat {\csname XINT_#3_userefunc_#4\endcsname}%
- {#1#2}%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0\else
+ \xint_dothis\XINT:NE:f:one:and:opt_a\fi
+ \xint_orthat\XINT:NE:f:tacitzeroifone_b ##1&&A%
+}}\expandafter\XINT:NE:f:tacitzeroifone:direct\string#%
+\def\XINT:NE:f:tacitzeroifone:direct\XINT:expr:f:tacizeroifone #1#2#3&&A#4#5%
+{%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\XINT:NE:f:one:from:two#4{0}}%
+ {\expandafter\XINT:NE:f:one:from:two\expandafter#5%
+ \expanded{{\XINT:NE:f:one:from:one:direct\xintNum{#2}}}}%
+ {#1}%
}%
-\def\XINT:NE:twosp#1#2,#3#4,!#5%
+\def\XINT:NE:f:iitacitzeroifone:direct#1{%
+\def\XINT:NE:f:iitacitzeroifone:direct##1!%
{%
- \XINT:NE:two_fork_dd#1#3{#5}{\detokenize{#5}}{#1#2}{#3#4}%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0\else
+ \xint_dothis\XINT:NE:f:iitacitzeroifone_a\fi
+ \xint_orthat\XINT:NE:f:iitacitzeroifone_b ##1&&A%
+}}\expandafter\XINT:NE:f:iitacitzeroifone:direct\string#%
+\def\XINT:NE:f:iitacitzeroifone_a #1#2&&A#3%
+{%
+ \detokenize{\romannumeral`-0\expandafter#1\expanded{#2}$XINT_expr_exclam#3}%$
}%
-\def\XINT:NE:userefunc:two#1#2#3%
- {\expandafter\XINT:NE:userefunc:two_a\romannumeral`&&@#3,!{#1}{#2}}%
-\def\XINT:NE:userefunc:two_a#1#2,#3#4,!#5#6%
+\def\XINT:NE:f:iitacitzeroifone:direct\XINT:expr:f:iitacizeroifone #1#2#3&&A#4%
{%
- \XINT:NE:two_fork_dd#1#3{\csname XINT_#5_userefunc_#6\endcsname}%
- {~!{XINT_#5_userefunc:f_#6}}%
- {#1#2}{#3#4}%
+ \if\relax#3\relax\expandafter\xint_firstoftwo\else
+ \expandafter\xint_secondoftwo\fi
+ {\XINT:NE:f:one:from:two#4{0}}%
+ {\XINT:NE:f:one:from:two#4{#2}}%
+ {#1}%
}%
-\def\XINT:NE:userefunc#1#2#3%
+\def\XINT:NE:x:one:from:two #1#2#3{\XINT:NE:x:one:from:two_fork #2&&A#3&&A#1{#2}{#3}}%
+\def\XINT:NE:x:one:from:two_fork #1{%
+\def\XINT:NE:x:one:from:two_fork ##1##2&&A##3##4&&A%
{%
- \expandafter\XINT:NE:userefunc_a\romannumeral`&&@#3,2,3,4,5,6,7,8,9,!%
- {#1}{#2}{#3}%
+ \if0\XINT:NE:hastilde ##1##3~!\relax\XINT:NE:hashash ##1##3#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:x:one:from:two:p
+ \fi
+}}\expandafter\XINT:NE:x:one:from:two_fork\string#%
+\def\XINT:NE:x:one:from:two:p #1#2#3%
+ {~expanded{\detokenize{\expandafter#1}~expanded{{#2}{#3}}}}%
+\def\XINT:NE:x:one:from:twoandone #1#2#3{\XINT:NE:x:one:from:twoandone_a #2#3&&A#1{#2}{#3}}%
+\def\XINT:NE:x:one:from:twoandone_a #1#2{\XINT:NE:x:one:from:twoandone_fork #1&&A#2&&A}%
+\def\XINT:NE:x:one:from:twoandone_fork #1{%
+\def\XINT:NE:x:one:from:twoandone_fork ##1##2&&A##3##4&&A##5##6&&A%
+{%
+ \if0\XINT:NE:hastilde ##1##3##5~!\relax\XINT:NE:hashash ##1##3##5#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:x:one:from:two:p
+ \fi
+}}\expandafter\XINT:NE:x:one:from:twoandone_fork\string#%
+\def\XINT:NE:x:listsel #1{%
+\def\XINT:NE:x:listsel ##1##2&%
+{%
+ \if0\expandafter\XINT:NE:hastilde\detokenize{##2}~!\relax
+ \expandafter\XINT:NE:hashash\detokenize{##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:x:listsel:p
+ \fi
+ ##1##2&%
+}}\expandafter\XINT:NE:x:listsel\string#%
+\def\XINT:NE:x:listsel:p #1#2&(#3%
+{%
+ \detokenize
+ {%
+ \expanded{\expandafter#1\expanded{#2$XINT_expr_tab({#3}}\expandafter\empty\empty}%$
+ }%
}%
-\def\XINT:NE:userefunc_a#1#2,#3#4,#5#6,#7#8,#9%
+\def\XINT:NE:f:reverse #1{%
+\def\XINT:NE:f:reverse ##1^%
+{%
+ \if0\expandafter\XINT:NE:hastilde\detokenize\expandafter{\xint_gobble_i##1}~!\relax
+ \expandafter\XINT:NE:hashash\detokenize{##1}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:f:reverse:p
+ \fi
+ ##1^%
+}}\expandafter\XINT:NE:f:reverse\string#%
+\def\XINT:NE:f:reverse:p #1^#2\xint_bye
{%
- \XINT:NE:userefunc_b{#1#3#5#7#9}%
+ \detokenize
+ {%
+ \romannumeral0\expandafter\XINT:expr:f:reverse
+ \expandafter{\expanded\expandafter{\xint_gobble_i#1}}%
+ }%
}%
-\def\XINT:NE:userefunc_b#1#2,#3#4,#5#6,#7#8,#9%
+\def\XINT:expr:f:reverse #1%
{%
- \XINT:NE:userefunc_c{#1#3#5#7#9}%
+ \XINT_expr_reverse #1^^#1\xint:\xint:\xint:\xint:
+ \xint:\xint:\xint:\xint:\xint_bye
}%
-\def\XINT:NE:iftilde #1~#2#3\relax{\unless\if !#21\fi}%
-\def\XINT:NE:ifdollar #1$#2#3\relax{\unless\if !#21\fi}%$
-\def\XINT:NE:ifhash#1{%
-\def\XINT:NE:ifhash##1#1##2##3\relax{\unless\if !##21\fi}%
-}\expandafter\XINT:NE:ifhash\string#%
-\def\XINT:NE:userefunc_c#1#2!%
+\def\XINT:NE:f:from:delim:u #1{%
+\def\XINT:NE:f:from:delim:u ##1##2^%
{%
- \if0\XINT:NE:iftilde #1~!\relax\XINT:NE:ifdollar #1$!\relax%$
- \XINT:NE:ifhash #1##!\relax 0%
- \expandafter\XINT:NE:userefunc_x
+ \if0\expandafter\XINT:NE:hastilde\detokenize{##2}~!\relax
+ \expandafter\XINT:NE:hashash\detokenize{##2}#1!\relax 0%
+ \expandafter##1%
+ \else
+ \xint_afterfi{\XINT:NE:f:from:delim:u:p##1\empty}%
+ \fi
+ ##2^%
+}}\expandafter\XINT:NE:f:from:delim:u\string#%
+\def\XINT:NE:f:from:delim:u:p #1#2^%
+ {\detokenize{\expandafter#1}~expanded{#2}$XINT_expr_caret}%$
+\def\XINT:NE:f:noeval:from:braced:u #1{%
+\def\XINT:NE:f:noeval:from:braced:u ##1##2^%
+{%
+ \if0\XINT:NE:hastilde ##2~!\relax\XINT:NE:hashash ##2#1!\relax 0%
\else
- \expandafter\XINT:NE:userefunc_p
+ \expandafter\XINT:NE:f:noeval:from:braced:u:p
\fi
+ ##1{##2}%
+}}\expandafter\XINT:NE:f:noeval:from:braced:u\string#%
+\def\XINT:NE:f:noeval:from:braced:u:p #1#2%
+ {\detokenize{\expandafter#1}~expanded{{#2}}}%
+\catcode`- 11
+\def\XINT:NE:exec_? #1#2%
+{%
+ \XINT:NE:exec_?_b #2&&A#1{#2}%
}%
-\def\XINT:NE:userefunc_x#1#2%
- {\csname XINT_#1_userefunc_#2\expandafter\endcsname
- \romannumeral0\xintcsvtolistnonstripped}%
-\def\XINT:NE:userefunc_p #1#2#3%
- {~xintExpandArgs{XINT_#1_userefunc_#2}{\xintCSVtoListNonStripped{#3}}}%
-\def\XINT:NE:oneopt#1[#2]#3%
- {\expandafter\XINT:NE:oneopt_a\romannumeral`&&@#3!{#2}#1}%
-\def\XINT:NE:oneopt_a#1#2!#3#4%
- {\expandafter\XINT:NE:oneopt_b\romannumeral`&&@#3!#1#4{#1#2}}%
-\def\XINT:NE:oneopt_b#1#2!#3#4%
- {\expandafter\XINT:NE:oneopt_fork#1#3#4{#1#2}}%
-\def\XINT:NE:oneopt_fork#1#2#3#4{%
- \if1\if###11\else\if~#11\else\if###21\else\if~#21\else0\fi\fi\fi\fi
- \xint_dothis {\detokenize{#3}[#4]}\fi
- \if $#2\xint_dothis {~xintApply::csv{\detokenize{#3}[#4]}}\fi %$
- \xint_orthat{#3[#4]}%
-}% pas compl^^c3^^a9tement g^^c3^^a9n^^c3^^a9ral, mais bon
-\def\XINT:NE:csv #1{\detokenize{#1}}% radicalement fain^^c3^^a9ant
-\def\XINT:newexpr:one:and:opt #1,#2,#3!#4#5%
+\def\XINT:NE:exec_?_b #1{%
+\def\XINT:NE:exec_?_b ##1&&A%
{%
- \if\relax#3\relax\expandafter\xint_firstoftwo\else
- \expandafter\xint_secondoftwo\fi
- {\XINT:NE:one#4}{\XINT:NE:oneopt#5[\XINT:NE:one\xintNum{#2}]}{#1}%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0%
+ \xint_dothis\XINT:NE:exec_?:x\fi
+ \xint_orthat\XINT:NE:exec_?:p
+}}\expandafter\XINT:NE:exec_?_b\string#%
+\def\XINT:NE:exec_?:x #1#2#3%
+{%
+ \expandafter\XINT_expr_check-_after?\expandafter#1%
+ \romannumeral`&&@\expandafter\XINT_expr_getnext\romannumeral0\xintiiifnotzero#3%
}%
-\def\XINT:newexpr:tacitzeroifonearg #1,#2,#3!#4#5%
+\def\XINT:NE:exec_?:p #1#2#3#4#5%
{%
- \if\relax#3\relax\expandafter\xint_firstoftwo\else
- \expandafter\xint_secondoftwo\fi
- {\XINT:NE:two#4{0}}{\XINT:NE:two#5{\XINT:NE:one\xintNum{#2}}}{#1}%
+ \csname XINT_expr_func_*If\expandafter\endcsname
+ \romannumeral`&&@#2\XINTfstop.{#3},[#4],[#5])%
}%
-\def\XINT:newiiexpr:tacitzeroifonearg #1,#2,#3!#4%
+\expandafter\def\csname XINT_expr_func_*If\endcsname #1#2#3%
{%
- \if\relax#3\relax\expandafter\xint_firstoftwo\else
- \expandafter\xint_secondoftwo\fi
- {\XINT:NE:two#4{0}}{\XINT:NE:two#4{#2}}{#1}%
+ #1#2{~expanded{~xintiiifNotZero#3}}%
}%
-\def\XINT:newexpr:insertdollar~{$noexpand$}%
-\def\XINT:newexpr:two:to:two #1,#2,!#3%
+\def\XINT:NE:exec_?? #1#2#3%
{%
- \XINT:NE:two_
- {\expandafter\XINT:expr:totwo\romannumeral`&&@#3}%
- {$noexpand$expandafter~XINT:expr:totwo~romannumeral-`0\detokenize{#3}}%
- {#1}{#2}%
+ \XINT:NE:exec_??_b #2&&A#1{#2}%
}%
-\def\XINT:newflexpr:two:to:two #1,#2,!#3%
+\def\XINT:NE:exec_??_b #1{%
+\def\XINT:NE:exec_??_b ##1&&A%
{%
- \XINT:NE:two_
- {#3}%
- {\expandafter\XINT:newexpr:insertdollar\detokenize{#3}}%
- {#1}{#2}%
+ \if0\XINT:NE:hastilde ##1~!\relax
+ \XINT:NE:hashash ##1#1!\relax 0%
+ \xint_dothis\XINT:NE:exec_??:x\fi
+ \xint_orthat\XINT:NE:exec_??:p
+}}\expandafter\XINT:NE:exec_??_b\string#%
+\def\XINT:NE:exec_??:x #1#2#3%
+{%
+ \expandafter\XINT_expr_check-_after?\expandafter#1%
+ \romannumeral`&&@\expandafter\XINT_expr_getnext\romannumeral0\xintiiifsgn#3%
}%
-\def\xintiiifNotZeroNE:#1#2,#3,#4,%
+\def\XINT:NE:exec_??:p #1#2#3#4#5#6%
{%
- \if1\if###11\else\if~#11\else\if$#11\else0%$
- \fi\fi\fi
- \xint_dothis{~xintiiifNotZero}\fi
- \xint_orthat\xintiiifNotZero
- {#1#2}{#3}{#4}%
+ \csname XINT_expr_func_*IfSgn\expandafter\endcsname
+ \romannumeral`&&@#2\XINTfstop.{#3},[#4],[#5],[#6])%
}%
-\def\xintifIntNE:#1#2,#3,#4,%
+\expandafter\def\csname XINT_expr_func_*IfSgn\endcsname #1#2#3%
{%
- \if1\if###11\else\if~#11\else\if$#11\else0%$
- \fi\fi\fi
- \xint_dothis{~xintifInt}\fi
- \xint_orthat\xintifInt
- {#1#2}{#3}{#4}%
+ #1#2{~expanded{~xintiiifSgn#3}}%
}%
-\def\xintifFloatIntNE:#1#2,#3,#4,%
+\catcode`- 12
+\def\XINT:NE:branch #1%
{%
- \if1\if###11\else\if~#11\else\if$#11\else0%$
- \fi\fi\fi
- \xint_dothis{~xintifFloatInt}\fi
- \xint_orthat\xintifFloatInt
- {#1#2}{#3}{#4}%
+ \if0\XINT:NE:hastilde #1~!\relax 0\else
+ \xint_dothis\XINT:NE:branch_a\fi
+ \xint_orthat\XINT:NE:branch_b #1&&A%
}%
-\def\xintiiifOneNE:#1#2,#3,#4,%
+\def\XINT:NE:branch_a\romannumeral`&&@#1#2&&A%
{%
- \if1\if###11\else\if~#11\else\if$#11\else0%$
- \fi\fi\fi
- \xint_dothis{~xintiiifOne}\fi
- \xint_orthat\xintiiifOne
- {#1#2}{#3}{#4}%
+ \expandafter{\detokenize{\expandafter#1\expanded}{#2}}%
}%
-\def\xintifOneNE:#1#2,#3,#4,%
+\def\XINT:NE:branch_b#1{%
+\def\XINT:NE:branch_b\romannumeral`&&@##1##2##3&&A%
+{%
+ \expandafter{\romannumeral`&&@%
+ \if0\XINT:NE:hastilde ##2~!\relax
+ \XINT:NE:hashash ##2#1!\relax 0\else
+ \expandafter\string\fi
+ ##1{##2}##3}%
+}}\expandafter\XINT:NE:branch_b\string#%
+\def\XINT:NE:seqx#1{%
+\def\XINT:NE:seqx\XINT_allexpr_seqx##1##2%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:seqx:p
+ \fi \XINT_allexpr_seqx{##1}{##2}%
+}}\expandafter\XINT:NE:seqx\string#%
+\def\XINT:NE:seqx:p\XINT_allexpr_seqx #1#2#3#4%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded {%
+ {%
+ \detokenize
+ {%
+ \expanded\bgroup
+ \expanded
+ {\unexpanded{\XINT_expr_seq:_b{#1#4\relax $XINT_expr_exclam #3}}%
+ #2$XINT_expr_caret}%
+ }%
+ }%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT:NE:opx#1{%
+\def\XINT:NE:opx\XINT_allexpr_opx ##1##2##3##4%##5##6##7##8%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##4}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##4}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:opx:p
+ \fi \XINT_allexpr_opx ##1{##2}{##3}{##4}% en fait ##2 = \xint_c_, ##3 = \relax
+}}\expandafter\XINT:NE:opx\string#%
+\def\XINT:NE:opx:p\XINT_allexpr_opx #1#2#3#4#5#6#7#8%
{%
- \if1\if###11\else\if~#11\else\if$#11\else0%$
- \fi\fi\fi
- \xint_dothis{~xintifOne}\fi
- \xint_orthat\xintifOne
- {#1#2}{#3}{#4}%
+ \expandafter\XINT_expr_put_op_first
+ \expanded {%
+ {%
+ \detokenize
+ {%
+ \expanded\bgroup
+ \expanded{\unexpanded{\XINT_expr_iter:_b{#1(#6)#7\relax $XINT_expr_exclam #5}}%
+ #4$XINT_expr_caret$XINT_expr_tilde{{#8}}}%$
+ }%
+ }%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
}%
-\def\xintiiifSgnNE:#1#2,#3,#4,#5,%
+\def\XINT:NE:iter{\expandafter\XINT:NE:itery\expandafter}%
+\def\XINT:NE:itery#1{%
+\def\XINT:NE:itery\XINT_expr_itery##1##2%
{%
- \if1\if###11\else\if~#11\else\if$#11\else0%$
- \fi\fi\fi
- \xint_dothis{~xintiiifSgn}\fi
- \xint_orthat\xintiiifSgn
- {#1#2}{#3}{#4}{#5}%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##1##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##1##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:itery:p
+ \fi \XINT_expr_itery{##1}{##2}%
+}}\expandafter\XINT:NE:itery\string#%
+\def\XINT:NE:itery:p\XINT_expr_itery #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded {%
+ {%
+ \detokenize
+ {%
+ \expanded\bgroup
+ \expanded{\unexpanded{\XINT_expr_iter:_b {#5#4\relax $XINT_expr_exclam #3}}%
+ #1$XINT_expr_caret$XINT_expr_tilde{#2}}%$
+ }%
+ }%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
}%
+\def\XINT:NE:rseq{\expandafter\XINT:NE:rseqy\expandafter}%
+\def\XINT:NE:rseqy#1{%
+\def\XINT:NE:rseqy\XINT_expr_rseqy##1##2%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##1##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##1##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:rseqy:p
+ \fi \XINT_expr_rseqy{##1}{##2}%
+}}\expandafter\XINT:NE:rseqy\string#%
+\def\XINT:NE:rseqy:p\XINT_expr_rseqy #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded {%
+ {%
+ \detokenize
+ {%
+ \expanded\bgroup
+ \expanded{#2\unexpanded{\XINT_expr_rseq:_b {#5#4\relax $XINT_expr_exclam #3}}%
+ #1$XINT_expr_caret$XINT_expr_tilde{#2}}%$
+ }%
+ }%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT:NE:iterr{\expandafter\XINT:NE:iterry\expandafter}%
+\def\XINT:NE:iterry#1{%
+\def\XINT:NE:iterry\XINT_expr_iterry##1##2%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##1##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##1##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:iterry:p
+ \fi \XINT_expr_iterry{##1}{##2}%
+}}\expandafter\XINT:NE:iterry\string#%
+\def\XINT:NE:iterry:p\XINT_expr_iterry #1#2#3#4#5%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded {%
+ {%
+ \detokenize
+ {%
+ \expanded\bgroup
+ \expanded{\unexpanded{\XINT_expr_iterr:_b {#5#4\relax $XINT_expr_exclam #3}}%
+ #1$XINT_expr_caret$XINT_expr_tilde #20$XINT_expr_qmark}%
+ }%
+ }%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT:NE:rrseq{\expandafter\XINT:NE:rrseqy\expandafter}%
+\def\XINT:NE:rrseqy#1{%
+\def\XINT:NE:rrseqy\XINT_expr_rrseqy##1##2%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##1##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##1##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:rrseqy:p
+ \fi \XINT_expr_rrseqy{##1}{##2}%
+}}\expandafter\XINT:NE:rrseqy\string#%
+\def\XINT:NE:rrseqy:p\XINT_expr_rrseqy #1#2#3#4#5#6%
+{%
+ \expandafter\XINT_expr_put_op_first
+ \expanded {%
+ {%
+ \detokenize
+ {%
+ \expanded\bgroup
+ \expanded{#2\unexpanded{\XINT_expr_rrseq:_b {#6#5\relax $XINT_expr_exclam #4}}%
+ #1$XINT_expr_caret$XINT_expr_tilde #30$XINT_expr_qmark}%
+ }%
+ }%
+ \expandafter}\romannumeral`&&@\XINT_expr_getop
+}%
+\def\XINT:NE:x:toblist#1{%
+\def\XINT:NE:x:toblist\XINT:expr:toblistwith##1##2%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:x:toblist:p
+ \fi \XINT:expr:toblistwith{##1}{##2}%
+}}\expandafter\XINT:NE:x:toblist\string#%
+\def\XINT:NE:x:toblist:p\XINT:expr:toblistwith #1#2{{\XINTfstop.{#2}}}%
+\def\XINT:NE:x:mapwithin#1{%
+\def\XINT:NE:x:mapwithin\XINT:expr:mapwithin ##1##2%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:x:mapwithin:p
+ \fi \XINT:expr:mapwithin {##1}{##2}%
+}}\expandafter\XINT:NE:x:mapwithin\string#%
+\def\XINT:NE:x:mapwithin:p \XINT:expr:mapwithin #1#2%
+{%
+ {{%
+ \detokenize
+ {%
+%% \expanded
+%% {%
+ \expandafter\XINT:expr:mapwithin_checkempty
+ \expanded{\noexpand#1$XINT_expr_exclam\expandafter}%$
+ \detokenize\expandafter{\expanded{#2}}$XINT_expr_caret%$
+%% }%
+ }%
+ }}%
+}%
+\def\XINT:NE:x:ndmapx#1{%
+\def\XINT:NE:x:ndmapx\XINT_allexpr_ndmapx_a ##1##2^%
+{%
+ \if 0\expandafter\XINT:NE:hastilde\detokenize{##2}~!\relax
+ \expandafter\XINT:NE:hashash \detokenize{##2}#1!\relax 0%
+ \else
+ \expandafter\XINT:NE:x:ndmapx:p
+ \fi \XINT_allexpr_ndmapx_a ##1##2^%
+}}\expandafter\XINT:NE:x:ndmapx\string#%
+\def\XINT:NE:x:ndmapx:p #1#2#3^\relax
+{%
+ \detokenize
+ {%
+ \expanded{%
+ \expandafter#1\expandafter#2\expanded{#3}$XINT_expr_caret\relax %$
+ }%
+ }%
+}%
+\def\XINTusenoargfunc #1%
+{%
+ 0\csname #1\endcsname
+}%
+\def\XINT:NE:usernoargfunc\csname #1\endcsname
+{%
+ ~romannumeral~XINTusenoargfunc{#1}%
+}%
+\def\XINTusefunc #1%
+{%
+ 0\csname #1\expandafter\endcsname\expanded
+}%
+\def\XINT:NE:usefunc #1#2#3%
+{%
+ ~romannumeral~XINTusefunc{#1}{#3}\iffalse{{\fi}}%
+}%
+\def\XINTuseufunc #1%
+{%
+ \expanded\expandafter\XINT:expr:mapwithin\csname #1\expandafter\endcsname\expanded
+}%
+\def\XINT:NE:useufunc #1#2#3%
+{%
+ {{~expanded~XINTuseufunc{#1}{#3}}}%
+}%
+\def\XINT:NE:userfunc #1{%
+\def\XINT:NE:userfunc ##1##2##3%
+{%
+ \if0\expandafter\XINT:NE:hastilde\detokenize{##3}~!\relax
+ \expandafter\XINT:NE:hashash\detokenize{##3}#1!\relax 0%
+ \expandafter\XINT:NE:userfunc_x
+ \else
+ \expandafter\XINT:NE:usefunc
+ \fi {##1}{##2}{##3}%
+}}\expandafter\XINT:NE:userfunc\string#%
+\def\XINT:NE:userfunc_x #1#2#3{#2#3\iffalse{{\fi}}}%
+\def\XINT:NE:userufunc #1{%
+\def\XINT:NE:userufunc ##1##2##3%
+{%
+ \if0\expandafter\XINT:NE:hastilde\detokenize{##3}~!\relax
+ \expandafter\XINT:NE:hashash\detokenize{##3}#1!\relax 0%
+ \expandafter\XINT:NE:userufunc_x
+ \else
+ \expandafter\XINT:NE:useufunc
+ \fi {##1}{##2}{##3}%
+}}\expandafter\XINT:NE:userufunc\string#%
+\def\XINT:NE:userufunc_x #1{\XINT:expr:mapwithin}%
+\def\XINT:NE:macrofunc #1#2%
+ {\expandafter\XINT:NE:macrofunc:a\string#1#2\empty&}%
+\def\XINT:NE:macrofunc:a#1\csname #2\endcsname#3&%
+ {{~XINTusemacrofunc{#1}{#2}{#3}}}%
+\def\XINTusemacrofunc #1#2#3%
+{%
+ \romannumeral0\expandafter\xint_stop_atfirstofone
+ \romannumeral0#1\csname #2\endcsname#3\relax
+}%
+\catcode`- 11
\def\XINT_expr_redefinemacros {%
- \let\XINT:NEhook:one \XINT:NE:one
- \let\XINT:NEhook:two \XINT:NE:two
- \let\XINT:NEhook:csv \XINT:NE:csv
- \let\XINT:NEhook:twosp\XINT:NE:twosp
- \let\XINT:expr:userfunc \XINT:NE:userfunc
- \let\XINT:expr:userfunc:none \XINT:NE:userfunc:none
- \let\XINT:expr:userefunc \XINT:NE:userefunc
- \let\XINT:expr:userefunc:one \XINT:NE:userefunc:one
- \let\XINT:expr:userefunc:two \XINT:NE:userefunc:two
- \let\XINT:expr:macrofunc \XINT:newexpr:macrofunc
- \let\XINT:expr:one:and:opt \XINT:newexpr:one:and:opt
- \let\XINT:expr:one:or:two:nums \XINT:newexpr:one:or:two:nums
- \let\XINT:iiexpr:one:or:two: \XINT:newiiexpr:one:or:two:
- \let\XINT:expr:tacitzeroifonearg \XINT:newexpr:tacitzeroifonearg
- \let\XINT:iiexpr:tacitzeroifonearg \XINT:newiiexpr:tacitzeroifonearg
- \let\XINT:expr:two:to:two \XINT:newexpr:two:to:two
- \let\XINT:flexpr:two:to:two \XINT:newflexpr:two:to:two
- \let\xintiiifNotZero: \xintiiifNotZeroNE:
- \let\xintifInt: \xintifIntNE:
- \let\xintifFloatInt: \xintifFloatIntNE:
- \let\xintiiifOne: \xintiiifOneNE:
- \let\xintifOne: \xintifOneNE:
- \let\xintiiifSgn: \xintiiifSgnNE:
- \let\xintSeqNumeric::csv \xintSeq::csv
- \let\xintiiSeqNumeric::csv \xintiiSeq::csv
- \let\xintSeqBNumeric::csv \xintSeqB::csv
- \let\xintiiSeqBNumeric::csv \xintiiSeqB::csv
- \let\XINTinFloatSeqBNumeric::csv\XINTinFloatSeqB::csv
- \def\xintSeq::csv
- {\XINT:NE:two_\xintSeqNumeric::csv{$noexpand$xintSeq::csv}}%
- \def\xintiiSeq::csv
- {\XINT:NE:two_\xintiiSeqNumeric::csv{$noexpand$xintiiSeq::csv}}%
- \def\xintSeqB::csv
- {\XINT:NE:two_\xintSeqBNumeric::csv{$noexpand$xintSeqB:f:csv}}%
- \def\xintiiSeqB::csv
- {\XINT:NE:two_\xintiiSeqBNumeric::csv{$noexpand$xintiiSeqB:f:csv}}%
- \def\XINTinFloatSeqB::csv
- {\XINT:NE:two_\XINTinFloatSeqBNumeric::csv{$noexpand$XINTinFloatSeqB:f:csv}}%
- \def\xintListSel:x:csv {~xintListSel:f:csv }%
+ \let\XINT:NEhook:unpack \XINT:NE:unpack
+ \let\XINT:NEhook:f:one:from:one \XINT:NE:f:one:from:one
+ \let\XINT:NEhook:f:one:from:one:direct \XINT:NE:f:one:from:one:direct
+ \let\XINT:NEhook:f:one:from:two \XINT:NE:f:one:from:two
+ \let\XINT:NEhook:f:one:from:two:direct \XINT:NE:f:one:from:two:direct
+ \let\XINT:NEhook:x:one:from:two \XINT:NE:x:one:from:two
+ \let\XINT:NEhook:x:one:from:twoandone \XINT:NE:x:one:from:twoandone
+ \let\XINT:NEhook:f:one:and:opt:direct \XINT:NE:f:one:and:opt:direct
+ \let\XINT:NEhook:f:tacitzeroifone:direct \XINT:NE:f:tacitzeroifone:direct
+ \let\XINT:NEhook:f:iitacitzeroifone:direct \XINT:NE:f:iitacitzeroifone:direct
+ \let\XINT:NEhook:x:listsel \XINT:NE:x:listsel
+ \let\XINT:NEhook:f:reverse \XINT:NE:f:reverse
+ \let\XINT:NEhook:f:from:delim:u \XINT:NE:f:from:delim:u
+ \let\XINT:NEhook:f:noeval:from:braced:u\XINT:NE:f:noeval:from:braced:u
+ \let\XINT:NEhook:branch \XINT:NE:branch
+ \let\XINT:NEhook:seqx \XINT:NE:seqx
+ \let\XINT:NEhook:opx \XINT:NE:opx
+ \let\XINT:NEhook:rseq \XINT:NE:rseq
+ \let\XINT:NEhook:iter \XINT:NE:iter
+ \let\XINT:NEhook:rrseq \XINT:NE:rrseq
+ \let\XINT:NEhook:iterr \XINT:NE:iterr
+ \let\XINT:NEhook:x:toblist \XINT:NE:x:toblist
+ \let\XINT:NEhook:x:mapwithin \XINT:NE:x:mapwithin
+ \let\XINT:NEhook:x:ndmapx \XINT:NE:x:ndmapx
+ \let\XINT:NEhook:userfunc \XINT:NE:userfunc
+ \let\XINT:NEhook:userufunc \XINT:NE:userufunc
+ \let\XINT:NEhook:usernoargfunc \XINT:NE:usernoargfunc
+ \let\XINT:NEhook:macrofunc \XINT:NE:macrofunc
\def\XINTinRandomFloatSdigits{~XINTinRandomFloatSdigits }%
\def\XINTinRandomFloatSixteen{~XINTinRandomFloatSixteen }%
\def\xintiiRandRange{~xintiiRandRange }%
\def\xintiiRandRangeAtoB{~xintiiRandRangeAtoB }%
- \let\xinteval\XINT:NE:eval
- \let\xintieval\XINT:NE:ieval
- \let\xintiieval\XINT:NE:iieval
- \let\xintfloateval\XINT:NE:floateval
-}%
-\def\XINT_expr_redefineprints
-{%
- \let\XINT_flexpr_withopt_a\XINT:NE_flexpr_withopt_a
- \let\XINT_expr_print \XINT:NE_expr_print
- \let\XINT_iiexpr_print \XINT:NE_iiexpr_print
- \let\XINT_boolexpr_print \XINT:NE_boolexpr_print
- \def\xintCSV::csv {~xintCSV::csv }%
- \def\xintSPRaw::csv {~xintSPRaw::csv }%
- \def\xintPFloat::csv {~xintPFloat::csv }%
- \def\xintIsTrue::csv {~xintIsTrue::csv }%
- \def\xintRound::csv {~xintRound::csv }%
-}%
-\def\xintNewExpr {\XINT_NewExpr\xint_firstofone
- \xinttheexpr\XINT_newexpr_clean}%
-\def\xintNewFloatExpr{\XINT_NewExpr\xint_firstofone
- \xintthefloatexpr\XINT_newexpr_clean}%
-\def\xintNewIExpr {\XINT_NewExpr\xint_firstofone
- \xinttheiexpr\XINT_newexpr_clean}%
-\def\xintNewIIExpr {\XINT_NewExpr\xint_firstofone
- \xinttheiiexpr\XINT_newexpr_clean}%
-\def\xintNewBoolExpr {\XINT_NewExpr\xint_firstofone
- \xinttheboolexpr\XINT_newexpr_clean}%
-\def\XINT_newexpr_clean #1>{\noexpand\romannumeral`&&@}%
-\def\XINT_NewFunc
- {\XINT_NewExpr\xint_gobble_i\xintthebareeval\XINT_newfunc_clean}%
-\def\XINT_NewFloatFunc
- {\XINT_NewExpr\xint_gobble_i\xintthebarefloateval\XINT_newfunc_clean}%
-\def\XINT_NewIIFunc
- {\XINT_NewExpr\xint_gobble_i\xintthebareiieval\XINT_newfunc_clean}%
+ \def\xintRandBit{~xintRandBit }%
+ \let\XINT_expr_exec_? \XINT:NE:exec_?
+ \let\XINT_expr_exec_?? \XINT:NE:exec_??
+ \def\XINT_expr_op_? {\XINT_expr_op__?{\XINT_expr_op_-xii\XINT_expr_oparen}}%
+ \def\XINT_flexpr_op_?{\XINT_expr_op__?{\XINT_flexpr_op_-xii\XINT_flexpr_oparen}}%
+ \def\XINT_iiexpr_op_?{\XINT_expr_op__?{\XINT_iiexpr_op_-xii\XINT_iiexpr_oparen}}%
+}%
+\catcode`- 12
+\def\xintNewExpr {\XINT_NewExpr\xint_firstofone\xintexpr \XINT_newexpr_clean}%
+\def\xintNewFloatExpr{\XINT_NewExpr\xint_firstofone\xintfloatexpr\XINT_newexpr_clean}%
+\def\xintNewIExpr {\XINT_NewExpr\xint_firstofone\xintiexpr \XINT_newexpr_clean}%
+\def\xintNewIIExpr {\XINT_NewExpr\xint_firstofone\xintiiexpr \XINT_newexpr_clean}%
+\def\xintNewBoolExpr {\XINT_NewExpr\xint_firstofone\xintboolexpr \XINT_newexpr_clean}%
+\def\XINT_newexpr_clean #1>#2#3{\noexpand\expanded\noexpand\xintNEprinthook}%
+\def\xintNEprinthook#1.#2{\expanded{\unexpanded{#1.}{#2}}}%
+\def\XINT_NewFunc {\XINT_NewExpr\xint_gobble_i\xintthebareeval\XINT_newfunc_clean}%
+\def\XINT_NewFloatFunc{\XINT_NewExpr\xint_gobble_i\xintthebarefloateval\XINT_newfunc_clean}%
+\def\XINT_NewIIFunc {\XINT_NewExpr\xint_gobble_i\xintthebareiieval\XINT_newfunc_clean}%
\def\XINT_newfunc_clean #1>{}%
\def\XINT_NewExpr #1#2#3#4#5[#6]%
{%
@@ -3477,15 +4058,18 @@
\fi
#1\xintexprSafeCatcodes
\XINT_expr_redefinemacros
- \XINT_expr_redefineprints
\XINT_NewExpr_a #1#2#3#4%
}%
+\catcode`~ 3 \catcode`? 3
+\def\XINT_expr_tilde{~}\def\XINT_expr_qmark{?}% catcode 3
+\def\XINT_expr_caret{^}\def\XINT_expr_exclam{!}% catcode 11
+\def\XINT_expr_tab{&}% catcode 7
\catcode`~ 13 \catcode`@ 14 \catcode`\% 6 \catcode`# 12 \catcode`$ 11 @ $
\def\XINT_NewExpr_a %1%2%3%4%5@
{@
\def\XINT_tmpa %%1%%2%%3%%4%%5%%6%%7%%8%%9{%5}@
- \def~%%1{\if !%%1\noexpand~\else $noexpand$%%1\fi}@
- \catcode`: 11 \catcode`_ 11
+ \def~{$noexpand$}@
+ \catcode`: 11 \catcode`_ 11 \catcode`\@ 11
\catcode`# 12 \catcode`~ 13 \escapechar 126
\endlinechar -1 \everyeof {\noexpand }@
\edef\XINT_tmpb
@@ -3493,7 +4077,6 @@
%2\XINT_tmpa{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}\relax}@
}@
\escapechar 92 \catcode`# 6 \catcode`$ 0 @ $
- \def~%%1{\expandafter\noexpand\csname %%1\endcsname}@
\edef\XINT_tmpa %%1%%2%%3%%4%%5%%6%%7%%8%%9@
{\scantokens\expandafter{\expandafter%3\meaning\XINT_tmpb}}@
\the\toks0\expandafter
@@ -3566,6 +4149,7 @@
\catcode32=10 % space
}%
\let\XINT_tmpa\undefined \let\XINT_tmpb\undefined \let\XINT_tmpc\undefined
+\let\XINT_tmpd\undefined \let\XINT_tmpe\undefined
\ifdefined\RequirePackage\expandafter\xint_firstoftwo\else\expandafter\xint_secondoftwo\fi
{\RequirePackage{xinttrig}%
\RequirePackage{xintlog}}%
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
index a9371efa96a..b8e08f1936f 100644
--- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintfrac: Expandable operations on fractions
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2019/09/10 v1.3f Expandable operations on fractions (JFB)]%
+ [2020/01/31 v1.4 Expandable operations on fractions (JFB)]%
\def\XINT_cntSgnFork #1%
{%
\ifcase #1\expandafter\xint_secondofthree
@@ -453,6 +453,42 @@
\else\expandafter\xint_secondoftwo
\fi { #2}{ #2/#3}%
}%
+\def\xintSPRaw {\romannumeral0\xintspraw }%
+\def\xintspraw #1{\expandafter\XINT_spraw\romannumeral`&&@#1[\W]}%
+\def\XINT_spraw #1[#2#3]{\xint_gob_til_W #2\XINT_spraw_a\W\XINT_spraw_p #1[#2#3]}%
+\def\XINT_spraw_a\W\XINT_spraw_p #1[\W]{ #1}%
+\def\XINT_spraw_p #1[\W]{\xintpraw {#1}}%
+\def\xintFracToSci #1%
+ {\expandafter\XINT_FracToSci\romannumeral`&&@#1/\W[\R]}%
+\def\XINT_FracToSci #1/#2#3[#4%
+{%
+ \xint_gob_til_W #2\XINT_FracToSci_no\W
+ \xint_gob_til_R #4\XINT_FracToSci_yesno\R
+ \XINT_FracToSci_yesyes #1/#2#3[#4%
+}%
+\def\XINT_FracToSci_no #1\XINT_FracToSci_yesyes #2[#3%
+{%
+ \xint_gob_til_R #3\XINT_FracToSci_nono\R
+ \XINT_FracToSci_noyes #2[#3%
+}%
+\def\XINT_FracToSci_nono\R\XINT_FracToSci_noyes #1/\W[\R]{#1}%
+\def\XINT_FracToSci_noyes #1#2[#3]/\W[\R]%
+{%
+ #1\xint_gob_til_zero#1\expandafter\iffalse\xint_gobble_ii0\iftrue
+ #2\ifnum #3=\xint_c_\else\xintFracToSciE#3\fi\fi
+}%
+\def\XINT_FracToSci_yesno\R\XINT_FracToSci_yesyes #1#2/#3/\W[\R]%
+{%
+ #1\xint_gob_til_zero#1\expandafter\iffalse\xint_gobble_ii0\iftrue
+ #2\if\XINT_isOne{#3}1\else/#3\fi\fi
+}%
+\def\XINT_FracToSci_yesyes #1#2/#3[#4]/\W[\R]%
+{%
+ #1\xint_gob_til_zero#1\expandafter\iffalse\xint_gobble_ii0\iftrue
+ #2\ifnum #4=\xint_c_\else\xintFracToSciE#4\fi
+ \if\XINT_isOne{#3}1\else/#3\fi\fi
+}%
+\def\xintFracToSciE{e}%
\def\xintRawWithZeros {\romannumeral0\xintrawwithzeros }%
\def\xintrawwithzeros
{%
@@ -1340,21 +1376,21 @@
0-{\XINT_fadd_c -#1}%
\krof }%
\def\xintSum {\romannumeral0\xintsum }%
-\def\xintsum #1{\expandafter\XINT_fsumexpr\romannumeral`&&@#1\xint:}%
-\def\XINT_fsumexpr {\XINT_fsum_loop_a {0/1[0]}}%
-\def\XINT_fsum_loop_a #1#2%
-{%
- \expandafter\XINT_fsum_loop_b \romannumeral`&&@#2\xint:{#1}%
-}%
-\def\XINT_fsum_loop_b #1%
+\def\xintsum #1{\expandafter\XINT_sum\romannumeral`&&@#1^}%
+\def\XINT_Sum{\romannumeral0\XINT_sum}%
+\def\XINT_sum#1%
{%
- \xint_gob_til_xint: #1\XINT_fsum_finished\xint:\XINT_fsum_loop_c #1%
+ \xint_gob_til_^ #1\XINT_sum_empty ^%
+ \expandafter\XINT_sum_loop\romannumeral0\xintraw{#1}\xint:
}%
-\def\XINT_fsum_loop_c #1\xint:#2%
+\def\XINT_sum_empty ^#1\xint:{ 0/1[0]}%
+\def\XINT_sum_loop #1\xint:#2%
{%
- \expandafter\XINT_fsum_loop_a\expandafter{\romannumeral0\xintadd {#2}{#1}}%
+ \xint_gob_til_^ #2\XINT_sum_end ^%
+ \expandafter\XINT_sum_loop
+ \romannumeral0\xintadd{#1}{\romannumeral0\xintraw{#2}}\xint:
}%
-\def\XINT_fsum_finished #1\xint:\xint:#2{ #2}%
+\def\XINT_sum_end ^#1\xintadd #2#3\xint:{ #2}%
\def\xintMul {\romannumeral0\xintmul }%
\def\xintmul #1{\expandafter\XINT_fmul\romannumeral0\xintraw {#1}.}%
\def\XINT_fmul #1{\xint_gob_til_zero #1\XINT_fmul_zero 0\XINT_fmul_a #1}%
@@ -1449,21 +1485,21 @@
\the\numexpr\xintNum{#1}\expandafter.\the\numexpr\xintNum{#2}.[0]%
}%
\def\xintPrd {\romannumeral0\xintprd }%
-\def\xintprd #1{\expandafter\XINT_fprdexpr \romannumeral`&&@#1\xint:}%
-\def\XINT_fprdexpr {\XINT_fprod_loop_a {1/1[0]}}%
-\def\XINT_fprod_loop_a #1#2%
+\def\xintprd #1{\expandafter\XINT_prd\romannumeral`&&@#1^}%
+\def\XINT_Prd{\romannumeral0\XINT_prd}%
+\def\XINT_prd#1%
{%
- \expandafter\XINT_fprod_loop_b \romannumeral`&&@#2\xint:{#1}%
+ \xint_gob_til_^ #1\XINT_prd_empty ^%
+ \expandafter\XINT_prd_loop\romannumeral0\xintraw{#1}\xint:
}%
-\def\XINT_fprod_loop_b #1%
+\def\XINT_prd_empty ^#1\xint:{ 1/1[0]}%
+\def\XINT_prd_loop #1\xint:#2%
{%
- \xint_gob_til_xint: #1\XINT_fprod_finished\xint:\XINT_fprod_loop_c #1%
+ \xint_gob_til_^ #2\XINT_prd_end ^%
+ \expandafter\XINT_prd_loop
+ \romannumeral0\xintmul{#1}{\romannumeral0\xintraw{#2}}\xint:
}%
-\def\XINT_fprod_loop_c #1\xint:#2%
-{%
- \expandafter\XINT_fprod_loop_a\expandafter{\romannumeral0\xintmul {#1}{#2}}%
-}%
-\def\XINT_fprod_finished#1\xint:\xint:#2{ #2}%
+\def\XINT_prd_end ^#1\xintmul #2#3\xint:{ #2}%
\def\xintDiv {\romannumeral0\xintdiv }%
\def\xintdiv #1%
{%
@@ -1720,16 +1756,22 @@
\else \xint_afterfi{ #2}%
\fi
}%
-\def\xintMaxof {\romannumeral0\xintmaxof }%
-\def\xintmaxof #1{\expandafter\XINT_maxof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_maxof_a #1{\expandafter\XINT_maxof_b\romannumeral0\xintraw{#1}!}%
-\def\XINT_maxof_b #1!#2%
- {\expandafter\XINT_maxof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_maxof_c #1%
- {\xint_gob_til_xint: #1\XINT_maxof_e\xint:\XINT_maxof_d #1}%
-\def\XINT_maxof_d #1!%
- {\expandafter\XINT_maxof_b\romannumeral0\xintmax {#1}}%
-\def\XINT_maxof_e #1!#2!{ #2}%
+\def\xintMaxof {\romannumeral0\xintmaxof }%
+\def\xintmaxof #1{\expandafter\XINT_maxof\romannumeral`&&@#1^}%
+\def\XINT_Maxof{\romannumeral0\XINT_maxof}%
+\def\XINT_maxof#1%
+{%
+ \xint_gob_til_^ #1\XINT_maxof_empty ^%
+ \expandafter\XINT_maxof_loop\romannumeral0\xintraw{#1}\xint:
+}%
+\def\XINT_maxof_empty ^#1\xint:{ 0/1[0]}%
+\def\XINT_maxof_loop #1\xint:#2%
+{%
+ \xint_gob_til_^ #2\XINT_maxof_e ^%
+ \expandafter\XINT_maxof_loop
+ \romannumeral0\xintmax{#1}{\romannumeral0\xintraw{#2}}\xint:
+}%
+\def\XINT_maxof_e ^#1\xintmax #2#3\xint:{ #2}%
\def\xintMin {\romannumeral0\xintmin }%
\def\xintmin #1%
{%
@@ -1764,16 +1806,21 @@
\else \xint_afterfi{ #1}%
\fi
}%
-\def\xintMinof {\romannumeral0\xintminof }%
-\def\xintminof #1{\expandafter\XINT_minof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_minof_a #1{\expandafter\XINT_minof_b\romannumeral0\xintraw{#1}!}%
-\def\XINT_minof_b #1!#2%
- {\expandafter\XINT_minof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_minof_c #1%
- {\xint_gob_til_xint: #1\XINT_minof_e\xint:\XINT_minof_d #1}%
-\def\XINT_minof_d #1!%
- {\expandafter\XINT_minof_b\romannumeral0\xintmin {#1}}%
-\def\XINT_minof_e #1!#2!{ #2}%
+\def\xintMinof {\romannumeral0\xintminof }%
+\def\xintminof #1{\expandafter\XINT_minof\romannumeral`&&@#1^}%
+\def\XINT_Minof{\romannumeral0\XINT_minof}%
+\def\XINT_minof#1%
+{%
+ \xint_gob_til_^ #1\XINT_minof_empty ^%
+ \expandafter\XINT_minof_loop\romannumeral0\xintraw{#1}\xint:
+}%
+\def\XINT_minof_empty ^#1\xint:{ 0/1[0]}%
+\def\XINT_minof_loop #1\xint:#2%
+{%
+ \xint_gob_til_^ #2\XINT_minof_e ^%
+ \expandafter\XINT_minof_loop\romannumeral0\xintmin{#1}{\romannumeral0\xintraw{#2}}\xint:
+}%
+\def\XINT_minof_e ^#1\xintmin #2#3\xint:{ #2}%
\def\xintCmp {\romannumeral0\xintcmp }%
\def\xintcmp #1%
{%
@@ -1878,6 +1925,82 @@
\def\XINT_inv_b #1.#2{ #2[#1]}%
\def\xintSgn {\romannumeral0\xintsgn }%
\def\xintsgn #1{\expandafter\XINT_sgn\romannumeral0\xintraw {#1}\xint:}%
+\def\xintGCD {\romannumeral0\xintgcd}%
+\def\xintgcd #1#2{\XINT_fgcdof{#1}{#2}^}%
+\def\xintLCM {\romannumeral0\xintlcm}%
+\def\xintlcm #1#2{\XINT_flcmof{#1}{#2}^}%
+\def\xintGCDof {\romannumeral0\xintgcdof}%
+\def\xintgcdof #1{\expandafter\XINT_fgcdof\romannumeral`&&@#1^}%
+\def\XINT_GCDof{\romannumeral0\XINT_fgcdof}%
+\def\XINT_fgcdof #1%
+{%
+ \xint_gob_til_^ #1\XINT_fgcdof_empty ^%
+ \expandafter\XINT_fgcdof_loop\romannumeral0\xintiiabs#1\xint:
+}%
+\def\XINT_fgcdof_empty ^#1\xint:{ 1/1[0]}%
+\def\XINT_fgcdof_loop #1\xint:#2%
+{%
+ \expandafter\XINT_fgcdof_loop_a\romannumeral0\xintiiabs#2\xint:#1\xint:
+}%
+\def\XINT_fgcdof_loop_a#1#2\xint:#3\xint:
+{%
+ \xint_gob_til_^ #1\XINT_fgcdof_end ^%
+ \xint_gob_til_zero #1\XINT_fgcdof_skip 0%
+ \expandafter\XINT_fgcdof_loop_b\romannumeral0\xintmod{#1#2}{#3}\xint:#3\xint:
+}%
+\def\XINT_fgcdof_end ^#1\xint:#2\xint:{ #2}%
+\def\XINT_fgcdof_skip 0%
+ \expandafter\XINT_fgcdof_loop_b\romannumeral0\xintmod#1\xint:
+{%
+ \XINT_fgcdof_loop
+}%
+\def\XINT_fgcdof_loop_b#1#2\xint:#3\xint:
+{%
+ \xint_gob_til_zero #1\XINT_fgcdof_next 0%
+ \expandafter\XINT_fgcdof_loop_b\romannumeral0\xintmod{#3}{#1#2}\xint:#1#2\xint:
+}%
+\def\XINT_fgcdof_next 0%
+ \expandafter\XINT_fgcdof_loop_b\romannumeral0\xintmod#1#2\xint:#3\xint:#4%
+{%
+ \expandafter\XINT_fgcdof_loop_a\romannumeral0\xintiiabs#4\xint:#1\xint:
+}%
+\def\xintLCMof {\romannumeral0\xintlcmof}%
+\def\xintlcmof #1{\expandafter\XINT_flcmof\romannumeral`&&@#1^}%
+\def\XINT_LCMof{\romannumeral0\XINT_flcmof}%
+\def\XINT_flcmof #1%
+{%
+ \xint_gob_til_^ #1\XINT_flcmof_empty ^%
+ \expandafter\XINT_flcmof_loop\romannumeral0\xintiiabs\xintRaw{#1}\xint:
+}%
+\def\XINT_flcmof_empty ^#1\xint:{ 0/1[0]}%
+\def\XINT_flcmof_loop #1%
+{%
+ \xint_gob_til_zero #1\XINT_flcmof_zero 0%
+ \expandafter\XINT_flcmof_d\romannumeral0\XINT_inv #1%
+}%
+\def\XINT_flcmof_zero #1^{ 0/1[0]}%
+\def\XINT_flcmof_d #1\xint:#2%
+{%
+ \expandafter\XINT_flcmof_loop_a\romannumeral0\xintiiabs#2\xint:#1\xint:
+}%
+\def\XINT_flcmof_loop_a #1#2\xint:%
+{%
+ \xint_gob_til_^ #1\XINT_flcmof_end ^%
+ \xint_gob_til_zero #1\XINT_flcmof_zero 0%
+ \expandafter\XINT_flcmof_loop_b\romannumeral0\expandafter\XINT_inv
+ \romannumeral0\xintraw{#1#2}\xint:
+}%
+\def\XINT_flcmof_end ^#1\xint:#2\xint:{\XINT_inv #2}%
+\def\XINT_flcmof_loop_b #1#2\xint:#3\xint:
+{%
+ \xint_gob_til_zero #1\XINT_flcmof_next 0%
+ \expandafter\XINT_flcmof_loop_b\romannumeral0\xintmod{#3}{#1#2}\xint:#1#2\xint:
+}%
+\def\XINT_flcmof_next 0%
+ \expandafter\XINT_flcmof_loop_b\romannumeral0\xintmod#1#2\xint:#3\xint:#4%
+{%
+ \expandafter\XINT_flcmof_loop_a\romannumeral0\xintiiabs#4\xint:#1\xint:
+}%
\mathchardef\XINTdigits 16
\def\xintDigits #1=%
{\afterassignment \xint_gobble_i \mathchardef\XINTdigits=}%
@@ -3278,7 +3401,7 @@
{\romannumeral0\XINTinfloat[#1]{#3}}%
{#1}%
}%
-\def\XINT_infloatdivmod #1#2#3{ #1,\XINTinFloat[#3]{#2}}%
+\def\XINT_infloatdivmod #1#2#3{\expanded{{#1}{\XINTinFloat[#3]{#2}}}}%
\def\xintifFloatInt {\romannumeral0\xintiffloatint}%
\def\xintiffloatint #1{\expandafter\XINT_iffloatint
\romannumeral0\xintrez{\XINTinFloat[\XINTdigits]{#1}}}%
@@ -3291,6 +3414,11 @@
\def\xintFloatIsInt {\romannumeral0\xintfloatisint}%
\def\xintfloatisint #1{\expandafter\XINT_iffloatint
\romannumeral0\xintrez{\XINTinFloat[\XINTdigits]{#1}}10}%
+\def\XINTinFloatdigits {\XINTinFloat [\XINTdigits]}%
+\def\XINTinFloatSdigits {\XINTinFloatS [\XINTdigits]}%
+\def\XINTinFloatSqrtdigits {\XINTinFloatSqrt[\XINTdigits]}%
+\def\XINTinFloatFacdigits {\XINTinFloatFac [\XINTdigits]}%
+\def\XINTFloatiLogTendigits{\XINTFloatiLogTen[\XINTdigits]}%
\def\XINTinRandomFloatS{\romannumeral0\XINTinrandomfloatS}%
\def\XINTinRandomFloatSdigits{\XINTinRandomFloatS[\XINTdigits]}%
\def\XINTinrandomfloatS[#1]%
@@ -3363,6 +3491,10 @@
\def\XINTinFloatLog#1{\XINTinFloatMul{\PoorManLogBaseTen{#1}}{23025850923[-10]}}%
\def\xintExp#1{\PoorManPowerOfTen{\xintMul{#1}{434294481903[-12]}}}%
\def\XINTinFloatExp#1{\PoorManPowerOfTen{\XINTinFloatMul{#1}{434294481903[-12]}}}%
+\let\XINTinFloatMaxof\XINT_Maxof
+\let\XINTinFloatMinof\XINT_Minof
+\let\XINTinFloatSum\XINT_Sum
+\let\XINTinFloatPrd\XINT_Prd
\XINT_restorecatcodes_endinput%
\endinput
%%
diff --git a/Master/texmf-dist/tex/generic/xint/xintgcd.sty b/Master/texmf-dist/tex/generic/xint/xintgcd.sty
index 473e4520af2..6c558ccc31c 100644
--- a/Master/texmf-dist/tex/generic/xint/xintgcd.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintgcd.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintgcd: Euclidean algorithm with xint package
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -36,9 +36,10 @@
\catcode45=12 % -
\catcode46=12 % .
\catcode58=12 % :
- \let\z\endgroup
+ \def\z{\endgroup}%
\expandafter\let\expandafter\x\csname ver@xintgcd.sty\endcsname
- \expandafter\let\expandafter\w\csname ver@xintcore.sty\endcsname
+ \expandafter\let\expandafter\w\csname ver@xint.sty\endcsname
+ \expandafter\let\expandafter\t\csname ver@xinttools.sty\endcsname
\expandafter
\ifx\csname PackageInfo\endcsname\relax
\def\y#1#2{\immediate\write-1{Package #1 Info: #2.}}%
@@ -51,15 +52,21 @@
\aftergroup\endinput
\else
\ifx\x\relax % plain-TeX, first loading of xintgcd.sty
- \ifx\w\relax % but xintcore.sty not yet loaded.
- \def\z{\endgroup\input xintcore.sty\relax}%
+ \ifx\w\relax % but xint.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter{\z\input xint.sty\relax}%
+ \fi
+ \ifx\t\relax % but xinttools.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter{\z\input xinttools.sty\relax}%
\fi
\else
\def\empty {}%
\ifx\x\empty % LaTeX, first loading,
% variable is initialized, but \ProvidesPackage not yet seen
- \ifx\w\relax % xintcore.sty not yet loaded.
- \def\z{\endgroup\RequirePackage{xintcore}}%
+ \ifx\w\relax % xint.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter{\z\RequirePackage{xint}}%
+ \fi
+ \ifx\t\relax % xinttools.sty not yet loaded.
+ \expandafter\def\expandafter\z\expandafter{\z\RequirePackage{xinttools}}%
\fi
\else
\aftergroup\endinput % xintgcd already loaded.
@@ -70,66 +77,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintgcd}%
- [2019/09/10 v1.3f Euclide algorithm with xint package (JFB)]%
-\def\xintGCD {\romannumeral0\xintgcd }%
-\def\xintgcd #1#2{\xintiigcd {\xintNum{#1}}{\xintNum{#2}}}%
-\def\xintiiGCD {\romannumeral0\xintiigcd }%
-\def\xintiigcd #1{\expandafter\XINT_iigcd\romannumeral0\xintiiabs#1\xint:}%
-\def\XINT_iigcd #1#2\xint:#3%
-{%
- \expandafter\XINT_gcd_fork\expandafter#1%
- \romannumeral0\xintiiabs#3\xint:#1#2\xint:
-}%
-\def\XINT_gcd_fork #1#2%
-{%
- \xint_UDzerofork
- #1\XINT_gcd_Aiszero
- #2\XINT_gcd_Biszero
- 0\XINT_gcd_loop
- \krof
- #2%
-}%
-\def\XINT_gcd_AisZero #1\xint:#2\xint:{ #1}%
-\def\XINT_gcd_BisZero #1\xint:#2\xint:{ #2}%
-\def\XINT_gcd_loop #1\xint:#2\xint:
-{%
- \expandafter\expandafter\expandafter\XINT_gcd_CheckRem
- \expandafter\xint_secondoftwo
- \romannumeral0\XINT_div_prepare {#1}{#2}\xint:#1\xint:
-}%
-\def\XINT_gcd_CheckRem #1%
-{%
- \xint_gob_til_zero #1\XINT_gcd_end0\XINT_gcd_loop #1%
-}%
-\def\XINT_gcd_end0\XINT_gcd_loop #1\xint:#2\xint:{ #2}%
-\def\xintLCM {\romannumeral0\xintlcm}%
-\def\xintlcm #1#2{\xintiilcm{\xintNum{#1}}{\xintNum{#2}}}%
-\def\xintiiLCM {\romannumeral0\xintiilcm}%
-\def\xintiilcm #1{\expandafter\XINT_iilcm\romannumeral0\xintiiabs#1\xint:}%
-\def\XINT_iilcm #1#2\xint:#3%
-{%
- \expandafter\XINT_lcm_fork\expandafter#1%
- \romannumeral0\xintiiabs#3\xint:#1#2\xint:
-}%
-\def\XINT_lcm_fork #1#2%
-{%
- \xint_UDzerofork
- #1\XINT_lcm_iszero
- #2\XINT_lcm_iszero
- 0\XINT_lcm_notzero
- \krof
- #2%
-}%
-\def\XINT_lcm_iszero #1\xint:#2\xint:{ 0}%
-\def\XINT_lcm_notzero #1\xint:#2\xint:
-{%
- \expandafter\XINT_lcm_end\romannumeral0%
- \expandafter\expandafter\expandafter\XINT_gcd_CheckRem
- \expandafter\xint_secondoftwo
- \romannumeral0\XINT_div_prepare {#1}{#2}\xint:#1\xint:
- \xint:#1\xint:#2\xint:
-}%
-\def\XINT_lcm_end #1\xint:#2\xint:#3\xint:{\xintiimul {#2}{\xintiiQuo{#3}{#1}}}%
+ [2020/01/31 v1.4 Euclide algorithm with xint package (JFB)]%
\def\xintBezout {\romannumeral0\xintbezout }%
\def\xintbezout #1%
{%
@@ -373,20 +321,6 @@
\xint:
}%
\def\XINT_bezalg_end_a #1#2#3#4{{#1}{#3}{0}{1}{#2}{#4}{1}{0}}%
-\def\xintGCDof {\romannumeral0\xintgcdof }%
-\def\xintgcdof #1{\expandafter\XINT_gcdof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_gcdof_a #1{\expandafter\XINT_gcdof_b\romannumeral`&&@#1!}%
-\def\XINT_gcdof_b #1!#2{\expandafter\XINT_gcdof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_gcdof_c #1{\xint_gob_til_xint: #1\XINT_gcdof_e\xint:\XINT_gcdof_d #1}%
-\def\XINT_gcdof_d #1!{\expandafter\XINT_gcdof_b\romannumeral0\xintgcd {#1}}%
-\def\XINT_gcdof_e #1!#2!{ #2}%
-\def\xintLCMof {\romannumeral0\xintlcmof }%
-\def\xintlcmof #1{\expandafter\XINT_lcmof_a\romannumeral`&&@#1\xint:}%
-\def\XINT_lcmof_a #1{\expandafter\XINT_lcmof_b\romannumeral`&&@#1!}%
-\def\XINT_lcmof_b #1!#2{\expandafter\XINT_lcmof_c\romannumeral`&&@#2!{#1}!}%
-\def\XINT_lcmof_c #1{\xint_gob_til_xint: #1\XINT_lcmof_e\xint:\XINT_lcmof_d #1}%
-\def\XINT_lcmof_d #1!{\expandafter\XINT_lcmof_b\romannumeral0\xintlcm {#1}}%
-\def\XINT_lcmof_e #1!#2!{ #2}%
\def\xintTypesetEuclideAlgorithm {%
\unless\ifdefined\xintAssignArray
\errmessage
diff --git a/Master/texmf-dist/tex/generic/xint/xintkernel.sty b/Master/texmf-dist/tex/generic/xint/xintkernel.sty
index 3fdf7040f4e..9d1680fdd7b 100644
--- a/Master/texmf-dist/tex/generic/xint/xintkernel.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintkernel.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintkernel: Paraphernalia for the xint packages
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -136,6 +136,7 @@
\catcode126=3 % ~ MATH
\catcode59=12 % ;
\catcode0=12 % for \romannumeral`&&@ trick
+ \catcode1=3 % for ultra-safe s^^c3^^a9parateur &&A
}%
\XINT_setcatcodes
}%
@@ -156,7 +157,7 @@
\fi
\XINT_providespackage
\ProvidesPackage {xintkernel}%
- [2019/09/10 v1.3f Paraphernalia for the xint packages (JFB)]%
+ [2020/01/31 v1.4 Paraphernalia for the xint packages (JFB)]%
\chardef\xint_c_ 0
\chardef\xint_c_i 1
\chardef\xint_c_ii 2
@@ -172,6 +173,7 @@
\chardef\xint_c_xiv 14
\chardef\xint_c_xvi 16
\chardef\xint_c_xviii 18
+\chardef\xint_c_xx 20
\chardef\xint_c_xxii 22
\chardef\xint_c_ii^v 32
\chardef\xint_c_ii^vi 64
@@ -190,23 +192,26 @@
\fi
\def\XINT_tmpa { }%
\ifx\XINT_tmpa\space\else
- \immediate\write-1{Package xintkernel Warning: ATTENTION!}%
+ \immediate\write-1{Package xintkernel Warning:}%
\immediate\write-1{\string\space\XINT_tmpa macro does not have its normal
- meaning.}%
- \immediate\write-1{\XINT_tmpa\XINT_tmpa\XINT_tmpa\XINT_tmpa
- All kinds of catastrophes will ensue!!!!}%
+ meaning from Plain or LaTeX, but:}%
+ \immediate\write-1{\meaning\space}%
+ \let\space\XINT_tmpa
+ \immediate\write-1{\space\space\space\space
+ % an exclam might let Emacs/AUCTeX think it is an error message, afair
+ Forcing \string\space\space to be the usual one.}%
\fi
-\def\XINT_tmpb {}%
-\ifx\XINT_tmpb\empty\else
- \immediate\write-1{Package xintkernel Warning: ATTENTION!}%
- \immediate\write-1{\string\empty\XINT_tmpa macro does not have its normal
- meaning.}%
- \immediate\write-1{\XINT_tmpa\XINT_tmpa\XINT_tmpa\XINT_tmpa
- All kinds of catastrophes will ensue!!!!}%
+\def\XINT_tmpa {}%
+\ifx\XINT_tmpa\empty\else
+ \immediate\write-1{Package xintkernel Warning:}%
+ \immediate\write-1{\string\empty\space macro does not have its normal
+ meaning from Plain or LaTeX, but:}%
+ \immediate\write-1{\meaning\empty}%
+ \let\empty\XINT_tmpa
+ \immediate\write-1{\space\space\space\space
+ Forcing \string\empty\space to be the usual one.}%
\fi
-\let\XINT_tmpa\relax \let\XINT_tmpb\relax
-\ifdefined\space\else\def\space { }\fi
-\ifdefined\empty\else\def\empty {}\fi
+\let\XINT_tmpa\relax
\let\xint_gobble_\empty
\long\def\xint_gobble_i #1{}%
\long\def\xint_gobble_ii #1#2{}%
@@ -254,6 +259,7 @@
\long\def\xint_UDsignsfork #1--#2#3\krof {#2}%
\let\xint:\char
\long\def\xint_gob_til_xint:#1\xint:{}%
+\long\def\xint_gob_til_^#1^{}%
\def\xint_bracedstopper{\xint:}%
\long\def\xint_gob_til_exclam #1!{}%
\long\def\xint_gob_til_sc #1;{}%
@@ -296,7 +302,8 @@
\expandafter#1\xint_gob_til_xint: ##1%
}}\XINT_rord_cleanup { }%
\def\xintLength {\romannumeral0\xintlength }%
-\def\xintlength #1{\long\def\xintlength ##1%
+\def\xintlength #1{%
+\long\def\xintlength ##1%
{%
\expandafter#1\the\numexpr\XINT_length_loop
##1\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
@@ -337,6 +344,37 @@
\long\def\XINT_last_loop_endf #1#2#3#4#5#6#7\xint_bye{ #6}%
\long\def\XINT_last_loop_endg #1#2#3#4#5#6#7#8\xint_bye{ #7}%
\long\def\XINT_last_loop_endh #1#2#3#4#5#6#7#8#9\xint_bye{ #8}%
+\def\xintFirstItem {\romannumeral0\xintfirstitem }%
+\long\def\xintfirstitem #1{\XINT_firstitem #1{\xint:\XINT_firstitem_end}\xint_bye}%
+\long\def\XINT_firstitem #1#2\xint_bye{\xint_gob_til_xint: #1\xint:\space #1}%
+\def\XINT_firstitem_end\xint:{ }%
+\def\xintLastOne {\romannumeral0\xintlastone }%
+\long\def\xintlastone #1%
+{%
+ \XINT_lastone_loop {}.#1%
+ {\xint:\XINT_lastone_loop_enda}{\xint:\XINT_lastone_loop_endb}%
+ {\xint:\XINT_lastone_loop_endc}{\xint:\XINT_lastone_loop_endd}%
+ {\xint:\XINT_lastone_loop_ende}{\xint:\XINT_lastone_loop_endf}%
+ {\xint:\XINT_lastone_loop_endg}{\xint:\XINT_lastone_loop_endh}\xint_bye
+}%
+\long\def\XINT_lastone_loop #1.#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9%
+ {#8}{#7}{#6}{#5}{#4}{#3}{#2}{#1}\xint:
+ \XINT_lastone_loop {{#9}}.%
+}%
+\long\def\XINT_lastone_loop_enda #1#2\xint_bye{{#1}}%
+\long\def\XINT_lastone_loop_endb #1#2#3\xint_bye{{#2}}%
+\long\def\XINT_lastone_loop_endc #1#2#3#4\xint_bye{{#3}}%
+\long\def\XINT_lastone_loop_endd #1#2#3#4#5\xint_bye{{#4}}%
+\long\def\XINT_lastone_loop_ende #1#2#3#4#5#6\xint_bye{{#5}}%
+\long\def\XINT_lastone_loop_endf #1#2#3#4#5#6#7\xint_bye{{#6}}%
+\long\def\XINT_lastone_loop_endg #1#2#3#4#5#6#7#8\xint_bye{{#7}}%
+\long\def\XINT_lastone_loop_endh #1#2#3#4#5#6#7#8#9\xint_bye{ #8}%
+\def\xintFirstOne {\romannumeral0\xintfirstone }%
+\long\def\xintfirstone #1{\XINT_firstone #1{\xint:\XINT_firstone_empty}\xint:}%
+\long\def\XINT_firstone #1#2\xint:{\xint_gob_til_xint: #1\xint:{#1}}%
+\def\XINT_firstone_empty\xint:#1{ }%
\def\xintLengthUpTo {\romannumeral0\xintlengthupto}%
\long\def\xintlengthupto #1#2%
{%
@@ -370,6 +408,7 @@
-{ #1#2}%
\krof
}%
+\def\xintReplicate{\romannumeral\xintreplicate}%
\def\xintreplicate#1%
{\expandafter\XINT_replicate\the\numexpr#1\endcsname}%
\def\XINT_replicate #1{\xint_UDsignfork
@@ -420,6 +459,7 @@
{\xint_c_ #1#1#1#1#1#1#1#1}%
\long\expandafter\def\csname XINT_rep_f9\endcsname #1%
{\xint_c_ #1#1#1#1#1#1#1#1#1}%
+\def\xintGobble{\romannumeral\xintgobble}%
\def\xintgobble #1%
{\csname xint_c_\expandafter\XINT_gobble_a\the\numexpr#1.0}%
\def\XINT_gobble #1.{\csname xint_c_\XINT_gobble_a #1.0}%
@@ -579,8 +619,8 @@
\XINT_expandableerror_continue\xint_firstofone{#2#1##1#1}}%
\def\XINT_expandableerror_continue ##1#1##2#1{##1}%
}%
-\begingroup\lccode`$ 32 \catcode`/ 11 \catcode`! 11 \catcode32 11 % $
-\lowercase{\endgroup\XINT_expandableerror$\ ! /\let\ ! /\xint_undefined}% $
+\begingroup\lccode`$ 32 \catcode`/ 11 % $
+\lowercase{\endgroup\XINT_expandableerror$\xint/\let\xint/\xint_undefined}% $
\XINT_restorecatcodes_endinput%
\endinput
%%
diff --git a/Master/texmf-dist/tex/generic/xint/xintlog.sty b/Master/texmf-dist/tex/generic/xint/xintlog.sty
index b93e1c2bb05..974e5e8c668 100644
--- a/Master/texmf-dist/tex/generic/xint/xintlog.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintlog.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintlog: Logarithms and exponentials for xintexpr
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -74,7 +74,7 @@
\xintexprSafeCatcodes\catcode`_ 11
\XINT_providespackage
\ProvidesPackage{xintlog}%
-[2019/09/10 v1.3f Logarithms and exponentials for xintexpr (JFB)]%
+[2020/01/31 v1.4 Logarithms and exponentials for xintexpr (JFB)]%
\ifdefined\RequirePackage
\RequirePackage{poormanlog}%
\else
@@ -83,96 +83,143 @@
\xintexprRestoreCatcodes\csname XINT_setcatcodes\endcsname\catcode`\! 11
\expandafter\def\csname XINT_expr_func_log10\endcsname#1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\PoorManLogBaseTen{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\PoorManLogBaseTen#3}}%
}%
\expandafter\let\csname XINT_flexpr_func_log10\expandafter\endcsname
\csname XINT_expr_func_log10\endcsname
\expandafter\def\csname XINT_expr_func_pow10\endcsname#1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\PoorManPowerOfTen{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\PoorManPowerOfTen#3}}%
}%
\expandafter\let\csname XINT_flexpr_func_pow10\expandafter\endcsname
\csname XINT_expr_func_pow10\endcsname
\def\XINT_expr_func_log #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintLog{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintLog#3}}%
}%
\def\XINT_flexpr_func_log #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\XINTinFloatLog{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatLog#3}}%
}%
\def\XINT_expr_func_exp #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintExp{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\xintExp#3}}%
}%
\def\XINT_flexpr_func_exp #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\XINTinFloatExp{\XINT_expr_unlock #3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one
+ {\romannumeral`&&@\XINTinFloatExp#3}}%
}%
\def\XINT_expr_func_pow #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \expandafter\XINT:NEhook:twosp
- \romannumeral`&&@\XINT_expr_unlock #3,!\PoorManPower
- \endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\PoorManPower#3}}%
}%
\let\XINT_flexpr_func_pow\XINT_expr_func_pow
\catcode`\* 11
-\def\poormanloghack**{%
-\def\XINT_expr_op_** ##1%
-{%
- \expandafter \XINT_expr_until_**_a
- \expandafter ##1\romannumeral`&&@\expandafter\XINT_expr_getnext
-}%
-\def\XINT_expr_until_**_a ##1{%
-\def\XINT_expr_until_**_a ####1####2%
+\def\poormanloghack**
{%
+ \def\XINT_tmpa ##1##2##3##4##5##6%
+ {%
+ \def ##3####1% \XINT_expr_op_<op>
+ {%
+ \expanded{\unexpanded{##4{####1}}\expandafter}%
+ \romannumeral`&&@\expandafter##2\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def##2####1% \XINT_expr_check-_<op>
+ {%
\xint_UDsignfork
- ####2{\expandafter \XINT_expr_until_**_a \expandafter ##1%
- \romannumeral`&&@##1}%
- -{\XINT_expr_until_**_b ####1####2}%
+ ####1{\expandafter##2\romannumeral`&&@##1}%
+ -{##5####1}%
\krof
-}}\expandafter\XINT_expr_until_**_a\csname XINT_expr_op_-ix\endcsname
-\def\XINT_expr_until_**_b ##1##2##3##4%
-{%
- \ifnum ##2>\XINT_expr_precedence_**
- \xint_afterfi
- {\expandafter \XINT_expr_until_**_a \expandafter ##1%
- \romannumeral`&&@\csname XINT_expr_op_##3\endcsname{##4}}%
+ }%
+ \def##5####1####2% \XINT_expr_checkp_<op>
+ {%
+ \ifnum ####1>\XINT_expr_precedence_**
+ \expandafter##5%
+ \romannumeral`&&@\csname XINT_##6_op_####2\expandafter\endcsname
\else
- \xint_afterfi
- {\expandafter ##2\expandafter ##3%
- \csname .=\XINT:NEhook:two
- \PoorManPower{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname
- }%
- \fi
-}%
-\let\XINT_flexpr_op_** \XINT_expr_op_**
-\let\XINT_flexpr_until_**_a\XINT_expr_until_**_a
-\let\XINT_flexpr_until_**_b\XINT_expr_until_**_b
+ \expandafter ####1\expandafter ####2%
+ \fi
+ }%
+ }%
+ \expandafter\XINT_tmpa
+ \csname XINT_expr_op_-ix\expandafter\endcsname
+ \csname XINT_expr_check-_**\endcsname
+ \XINT_expr_op_**
+ \XINT_expr_exec_**
+ \XINT_expr_checkp_** {expr}%
+ \expandafter\XINT_tmpa
+ \csname XINT_flexpr_op_-ix\expandafter\endcsname
+ \csname XINT_flexpr_check-_**\endcsname
+ \XINT_flexpr_op_**
+ \XINT_flexpr_exec_**
+ \XINT_flexpr_checkp_** {flexpr}%
+ \def\XINT_expr_exec_** ##1##2##3##4% \XINT_expr_exec_<op>
+ {%
+ \expandafter##2\expandafter##3\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\PoorManPower##1##4}}%
+ }%
+ \let\XINT_flexpr_exec_**\XINT_expr_exec_**
}%
-\def\poormanloghack^{%
-\def\XINT_expr_until_^_b ##1##2##3##4%
+\def\poormanloghack^
{%
- \ifnum ##2>\XINT_expr_precedence_^
- \xint_afterfi
- {\expandafter \XINT_expr_until_^_a \expandafter ##1%
- \romannumeral`&&@\csname XINT_expr_op_##3\endcsname {##4}}%
+ \def\XINT_tmpa ##1##2##3##4##5##6%
+ {%
+ \def ##3####1% \XINT_expr_op_<op>
+ {%
+ \expanded{\unexpanded{##4{####1}}\expandafter}%
+ \romannumeral`&&@\expandafter##2\romannumeral`&&@\XINT_expr_getnext
+ }%
+ \def##2####1% \XINT_expr_check-_<op>
+ {%
+ \xint_UDsignfork
+ ####1{\expandafter##2\romannumeral`&&@##1}%
+ -{##5####1}%
+ \krof
+ }%
+ \def##5####1####2% \XINT_expr_checkp_<op>
+ {%
+ \ifnum ####1>\XINT_expr_precedence_^
+ \expandafter##5%
+ \romannumeral`&&@\csname XINT_##6_op_####2\expandafter\endcsname
\else
- \xint_afterfi
- {\expandafter ##2\expandafter ##3%
- \csname .=\XINT:NEhook:two
- \PoorManPower{\XINT_expr_unlock ##1}{\XINT_expr_unlock ##4}\endcsname
- }%
- \fi
-}%
-\let\XINT_flexpr_until_^_b\XINT_expr_until_^_b
+ \expandafter ####1\expandafter ####2%
+ \fi
+ }%
+ }%
+ \expandafter\XINT_tmpa
+ \csname XINT_expr_op_-ix\expandafter\endcsname
+ \csname XINT_expr_check-_^\endcsname
+ \XINT_expr_op_^
+ \XINT_expr_exec_^
+ \XINT_expr_checkp_^ {expr}%
+ \expandafter\XINT_tmpa
+ \csname XINT_flexpr_op_-ix\expandafter\endcsname
+ \csname XINT_flexpr_check-_^\endcsname
+ \XINT_flexpr_op_^
+ \XINT_flexpr_exec_^
+ \XINT_flexpr_checkp_^ {flexpr}%
+ \def\XINT_expr_exec_^ ##1##2##3##4% \XINT_expr_exec_<op>
+ {%
+ \expandafter##2\expandafter##3\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:two
+ {\romannumeral`&&@\PoorManPower##1##4}}%
+ }%
+ \let\XINT_flexpr_exec_^\XINT_expr_exec_^
}%
\def\poormanloghack#1{\csname poormanloghack#1\endcsname}%
\endinput
diff --git a/Master/texmf-dist/tex/generic/xint/xintseries.sty b/Master/texmf-dist/tex/generic/xint/xintseries.sty
index f7f708c86db..7a0a22131a6 100644
--- a/Master/texmf-dist/tex/generic/xint/xintseries.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintseries.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xintseries: Expandable partial sums with xint package
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintseries}%
- [2019/09/10 v1.3f Expandable partial sums with xint package (JFB)]%
+ [2020/01/31 v1.4 Expandable partial sums with xint package (JFB)]%
\def\xintSeries {\romannumeral0\xintseries }%
\def\xintseries #1#2%
{%
diff --git a/Master/texmf-dist/tex/generic/xint/xinttools.sty b/Master/texmf-dist/tex/generic/xint/xinttools.sty
index a06a4db27d0..9a81fe3470a 100644
--- a/Master/texmf-dist/tex/generic/xint/xinttools.sty
+++ b/Master/texmf-dist/tex/generic/xint/xinttools.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xinttools: Expandable and non-expandable utilities
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xinttools}%
- [2019/09/10 v1.3f Expandable and non-expandable utilities (JFB)]%
+ [2020/01/31 v1.4 Expandable and non-expandable utilities (JFB)]%
\newtoks\XINT_toks
\xint_firstofone{\let\XINT_sptoken= } %<- space here!
\def\xintgodef {\global\xintodef }%
@@ -309,6 +309,49 @@
\long\def\XINT_nthelt_pos_done ##1##2\xint_bye{%
\xint_gob_til_xint:##1\expandafter#1\xint_gobble_ii\xint:#1##1}%
}\XINT_nthelt_pos_done{ }%
+\def\xintNthOnePy {\romannumeral0\xintnthonepy }%
+\def\xintNthOnePyNoExpand {\romannumeral0\xintnthonepynoexpand }%
+\long\def\xintnthonepy #1#2{\expandafter\XINT_nthonepy_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintnthonepynoexpand #1{\expandafter\XINT_nthonepy_a\the\numexpr #1.}%
+\def\XINT_nthonepy_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_nthonepy_neg
+ -{\XINT_nthonepy_nonneg #1}%
+ \krof
+}%
+\long\def\XINT_nthonepy_neg #1.#2%
+{%
+ \expandafter\XINT_nthonepy_neg_a\the\numexpr\xint_c_i+\XINT_length_loop
+ #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:
+ \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v
+ \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye
+ -#1.#2\xint_bye
+}%
+\def\XINT_nthonepy_neg_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-\xint_stop_afterbye
+ 0#1\xint_stop_afterbye
+ 0-{}%
+ \krof
+ \expandafter\XINT_nthonepy_neg_b
+ \romannumeral\expandafter\XINT_gobble\the\numexpr-\xint_c_i+#1%
+}%
+\long\def\XINT_nthonepy_neg_b #1#2\xint_bye{{#1}}%
+\long\def\XINT_nthonepy_nonneg #1.#2%
+{%
+ \expandafter\XINT_nthonepy_nonneg_done
+ \romannumeral0\expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint:\xint:\xint:\xint:\xint:%
+ \xint:\xint:\xint:\xint:\xint:%
+ \xint_bye
+}%
+\def\XINT_nthonepy_nonneg_done #1{%
+\long\def\XINT_nthonepy_nonneg_done ##1##2\xint_bye{%
+ \xint_gob_til_xint:##1\expandafter#1\xint_gobble_ii\xint:{##1}}%
+}\XINT_nthonepy_nonneg_done{ }%
\def\xintKeep {\romannumeral0\xintkeep }%
\def\xintKeepNoExpand {\romannumeral0\xintkeepnoexpand }%
\long\def\xintkeep #1#2{\expandafter\XINT_keep_a\the\numexpr #1\expandafter.%
@@ -535,6 +578,28 @@
\long\def\XINT_apply_loop_b #1#2{\XINT_apply_loop_a {#2{#1}}}%
\long\def\XINT_apply_end\xint_bye\expandafter\XINT_apply_loop_b
\expandafter #1#2#3{ #2}%
+\long\def\xintApply:x #1#2%
+{%
+ \XINT_apply:x_loop {#1}#2%
+ {\xint:\XINT_apply:x_loop_enda}{\xint:\XINT_apply:x_loop_endb}%
+ {\xint:\XINT_apply:x_loop_endc}{\xint:\XINT_apply:x_loop_endd}%
+ {\xint:\XINT_apply:x_loop_ende}{\xint:\XINT_apply:x_loop_endf}%
+ {\xint:\XINT_apply:x_loop_endg}{\xint:\XINT_apply:x_loop_endh}\xint_bye
+}%
+\long\def\XINT_apply:x_loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\xint:
+ {#1{#2}}{#1{#3}}{#1{#4}}{#1{#5}}{#1{#6}}{#1{#7}}{#1{#8}}{#1{#9}}%
+ \XINT_apply:x_loop {#1}%
+}%
+\long\def\XINT_apply:x_loop_endh\xint: #1\xint_bye{}%
+\long\def\XINT_apply:x_loop_endg\xint: #1#2\xint_bye{{#1}}%
+\long\def\XINT_apply:x_loop_endf\xint: #1#2#3\xint_bye{{#1}{#2}}%
+\long\def\XINT_apply:x_loop_ende\xint: #1#2#3#4\xint_bye{{#1}{#2}{#3}}%
+\long\def\XINT_apply:x_loop_endd\xint: #1#2#3#4#5\xint_bye{{#1}{#2}{#3}{#4}}%
+\long\def\XINT_apply:x_loop_endc\xint: #1#2#3#4#5#6\xint_bye{{#1}{#2}{#3}{#4}{#5}}%
+\long\def\XINT_apply:x_loop_endb\xint: #1#2#3#4#5#6#7\xint_bye{{#1}{#2}{#3}{#4}{#5}{#6}}%
+\long\def\XINT_apply:x_loop_enda\xint: #1#2#3#4#5#6#7#8\xint_bye{{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
\def\xintApplyUnbraced {\romannumeral0\xintapplyunbraced }%
\def\xintApplyUnbracedNoExpand {\romannumeral0\xintapplyunbracednoexpand }%
\long\def\xintapplyunbraced #1#2%
@@ -554,6 +619,56 @@
\long\def\XINT_applyunbr_loop_b #1#2{\XINT_applyunbr_loop_a {#2#1}}%
\long\def\XINT_applyunbr_end\xint_bye\expandafter\XINT_applyunbr_loop_b
\expandafter #1#2#3{ #2}%
+\long\def\xintApplyUnbraced:x #1#2%
+{%
+ \XINT_applyunbraced:x_loop {#1}#2%
+ {\xint:\XINT_applyunbraced:x_loop_enda}{\xint:\XINT_applyunbraced:x_loop_endb}%
+ {\xint:\XINT_applyunbraced:x_loop_endc}{\xint:\XINT_applyunbraced:x_loop_endd}%
+ {\xint:\XINT_applyunbraced:x_loop_ende}{\xint:\XINT_applyunbraced:x_loop_endf}%
+ {\xint:\XINT_applyunbraced:x_loop_endg}{\xint:\XINT_applyunbraced:x_loop_endh}\xint_bye
+}%
+\long\def\XINT_applyunbraced:x_loop #1#2#3#4#5#6#7#8#9%
+{%
+ \xint_gob_til_xint: #9\xint:
+ #1{#2}%
+ \empty#1{#3}%
+ \empty#1{#4}%
+ \empty#1{#5}%
+ \empty#1{#6}%
+ \empty#1{#7}%
+ \empty#1{#8}%
+ \empty#1{#9}%
+ \XINT_applyunbraced:x_loop {#1}%
+}%
+\long\def\XINT_applyunbraced:x_loop_endh\xint: #1\xint_bye{}%
+\long\def\XINT_applyunbraced:x_loop_endg\xint: #1\empty#2\xint_bye{#1}%
+\long\def\XINT_applyunbraced:x_loop_endf\xint: #1\empty
+ #2\empty#3\xint_bye{#1#2}%
+\long\def\XINT_applyunbraced:x_loop_ende\xint: #1\empty
+ #2\empty
+ #3\empty#4\xint_bye{#1#2#3}%
+\long\def\XINT_applyunbraced:x_loop_endd\xint: #1\empty
+ #2\empty
+ #3\empty
+ #4\empty#5\xint_bye{#1#2#3#4}%
+\long\def\XINT_applyunbraced:x_loop_endc\xint: #1\empty
+ #2\empty
+ #3\empty
+ #4\empty
+ #5\empty#6\xint_bye{#1#2#3#4#5}%
+\long\def\XINT_applyunbraced:x_loop_endb\xint: #1\empty
+ #2\empty
+ #3\empty
+ #4\empty
+ #5\empty
+ #6\empty#7\xint_bye{#1#2#3#4#5#6}%
+\long\def\XINT_applyunbraced:x_loop_enda\xint: #1\empty
+ #2\empty
+ #3\empty
+ #4\empty
+ #5\empty
+ #6\empty
+ #7\empty#8\xint_bye{#1#2#3#4#5#6#7}%
\def\xintSeq {\romannumeral0\xintseq }%
\def\xintseq #1{\XINT_seq_chkopt #1\xint_bye }%
\def\XINT_seq_chkopt #1%
@@ -1148,8 +1263,6 @@
}%
}%
\let\xintDigitsOf\xintAssignArray
-\def\xintExpandArgs#1#2{\csname #1\expandafter\endcsname
- \romannumeral0\xintapply\xint_firstofone{#2}}%
\def\xintLength:f:csv {\romannumeral0\xintlength:f:csv}%
\def\xintlength:f:csv #1%
{\long\def\xintlength:f:csv ##1{%
@@ -1470,8 +1583,50 @@
{#8}{#7}{#6}{#5}{#4}{#3}{#2}{#1}\xint:
\XINT_last:f:csv_loop {#9}.%
}%
+\def\xintKeep:x:csv #1#2%
+{%
+ \expandafter\xint_gobble_i
+ \romannumeral0\expandafter\XINT_keep:x:csv_pos
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+}%
+\def\XINT_keep:x:csv_pos #1.#2%
+{%
+ \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.%
+ #2\xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,%
+ \xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,\xint_bye
+}%
+\def\XINT_keep:x:csv_loop #1%
+{%
+ \xint_gob_til_minus#1\XINT_keep:x:csv_finish-%
+ \XINT_keep:x:csv_loop_pickeight #1%
+}%
+\def\XINT_keep:x:csv_loop_pickeight #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ ,#2,#3,#4,#5,#6,#7,#8,#9%
+ \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.%
+}%
+\def\XINT_keep:x:csv_finish-\XINT_keep:x:csv_loop_pickeight -#1.%
+{%
+ \csname XINT_keep:x:csv_finish#1\endcsname
+}%
+\expandafter\def\csname XINT_keep:x:csv_finish1\endcsname
+ #1,#2,#3,#4,#5,#6,#7,{,#1,#2,#3,#4,#5,#6,#7\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish2\endcsname
+ #1,#2,#3,#4,#5,#6,{,#1,#2,#3,#4,#5,#6\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish3\endcsname
+ #1,#2,#3,#4,#5,{,#1,#2,#3,#4,#5\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish4\endcsname
+ #1,#2,#3,#4,{,#1,#2,#3,#4\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish5\endcsname
+ #1,#2,#3,{,#1,#2,#3\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish6\endcsname
+ #1,#2,{,#1,#2\xint_Bye}%
+\expandafter\def\csname XINT_keep:x:csv_finish7\endcsname
+ #1,{,#1\xint_Bye}%
+\expandafter\let\csname XINT_keep:x:csv_finish8\endcsname\xint_Bye
\let\xintCSVLength \xintLength:f:csv
\let\xintCSVKeep \xintKeep:f:csv
+\let\xintCSVKeepx \xintKeep:x:csv
\let\xintCSVTrim \xintTrim:f:csv
\let\xintCSVNthEltPy \xintNthEltPy:f:csv
\let\xintCSVReverse \xintReverse:f:csv
diff --git a/Master/texmf-dist/tex/generic/xint/xinttrig.sty b/Master/texmf-dist/tex/generic/xint/xinttrig.sty
index c25ebaeb452..a8ab5b69ad2 100644
--- a/Master/texmf-dist/tex/generic/xint/xinttrig.sty
+++ b/Master/texmf-dist/tex/generic/xint/xinttrig.sty
@@ -21,8 +21,8 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.3f 2019/09/10
-%% Copyright (C) 2013-2019 by Jean-Francois Burnol
+%% The xint bundle 1.4 2020/01/31
+%% Copyright (C) 2013-2020 by Jean-Francois Burnol
%% xinttrig: Trigonometry for the xintexpr package
%% ---------------------------------------------------------------
\begingroup\catcode61\catcode48\catcode32=10\relax%
@@ -68,10 +68,10 @@
\expandafter\xint_secondoftwo
\fi
{\immediate\write-1{Reloading xinttrig library using Digits=\xinttheDigits.}}%
-{\expandafter\gdef\csname xintlibver@trig\endcsname{2019/09/10 v1.3f}%
+{\expandafter\gdef\csname xintlibver@trig\endcsname{2020/01/31 v1.4}%
\XINT_providespackage
\ProvidesPackage{xinttrig}%
-[2019/09/10 v1.3f Trigonometrical functions for xintexpr (JFB)]%
+[2020/01/31 v1.4 Trigonometrical functions for xintexpr (JFB)]%
}%
\xintFor* #1 in {iDTVtuwxyzX}\do{\xintensuredummy{#1}}%
\def\xintreloadxinttrig
@@ -92,8 +92,10 @@
\xintdeffloatvar oneRadian := 0 +
57.2957795130823208767981548141051703324054724665643215491602;% 180/Pi
\xintdeffloatvar invfact\xintListWithSep{, invfact}{\xintSeq{2}{44}}%
- := seq(0+x, x=\xintexpr rseq(1/2{;}@/i, i=3..44)\relax);% need to hide inner ;
-\xintdeffloatefunc sin_aux(X) := 1 - X(invfact3 - X(invfact5
+ := \xintfloatexpr [\XINTdigits] % force float rounding after exact evaluations
+ \xintexpr rseq(1/2{;}@/i, i=3..44)\relax % need to hide inner ; from \xintdeffloatvar
+ \relax;%
+\xintdeffloatfunc sin_aux(X) := 1 - X(invfact3 - X(invfact5
\ifnum\XINTdigits>4
- X(invfact7
\ifnum\XINTdigits>6
@@ -133,7 +135,7 @@
\ifnum\XINTdigits>59
- X(invfact43
)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi)\fi));%
-\xintdeffloatefunc cos_aux(X) := 1 - X(invfact2 - X(invfact4
+\xintdeffloatfunc cos_aux(X) := 1 - X(invfact2 - X(invfact4
\ifnum\XINTdigits>3
- X(invfact6
\ifnum\XINTdigits>5
@@ -179,8 +181,8 @@
\csname XINT_flexpr_func_sin_aux\endcsname
\expandafter\let\csname XINT_expr_func_cos_aux\expandafter\endcsname
\csname XINT_flexpr_func_cos_aux\endcsname
-\xintdeffloatefunc sin_(x) := x * sin_aux(sqr(x));%
-\xintdeffloatefunc cos_(x) := cos_aux(sqr(x));%
+\xintdeffloatfunc sin_(x) := x * sin_aux(sqr(x));%
+\xintdeffloatfunc cos_(x) := cos_aux(sqr(x));%
\def\XINT_mod_ccclx_i #1.% input <k>.<N>. k is a non-negative exponent
{%
\expandafter\XINT_mod_ccclx_e\the\numexpr
@@ -200,9 +202,10 @@
\def\XINT_mod_ccclx_z#1.#2.{#2-360*#1.}%
\def\XINT_flexpr_func_sind_ #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintSind{\XINT_expr_unlock#3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one{\romannumeral`&&@\xintSind#3}}%
}%
+\def\XINT_expr_unlock{\expandafter\xint_firstofone\romannumeral`&&@}%
\def\xintSind#1{\romannumeral`&&@\expandafter\xintsind
\romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
\def\xintsind #1[#2#3]%
@@ -235,8 +238,8 @@
\def\XINT_sind_A#1{%
\def\XINT_sind_A##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_sind_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -244,13 +247,13 @@
\def\XINT_tmpa#1{%
\def\XINT_sind_B_n-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_sind_B_p##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -258,13 +261,13 @@
\def\XINT_tmpa#1{%
\def\XINT_sind_C_n-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_sind_C_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -272,31 +275,31 @@
\def\XINT_tmpa#1{%
\def\XINT_sind_D_n-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_sind_D_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
\def\XINT_sind_E#1{%
\def\XINT_sind_E-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
}\expandafter
\XINT_sind_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
\def\XINT_flexpr_func_cosd_ #1#2#3%
{%
- \expandafter #1\expandafter #2\csname.=%
- \XINT:NEhook:one\xintCosd{\XINT_expr_unlock#3}\endcsname
+ \expandafter #1\expandafter #2\expandafter{%
+ \romannumeral`&&@\XINT:NEhook:f:one:from:one{\romannumeral`&&@\xintCosd#3}}%
}%
\def\xintCosd#1{\romannumeral`&&@\expandafter\xintcosd
- \romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
+ \romannumeral0\XINTinfloatS[\XINTdigits]{#1}}%
\def\xintcosd #1[#2#3]%
{%
\xint_UDsignfork
@@ -327,8 +330,8 @@
\def\XINT_cosd_A#1{%
\def\XINT_cosd_A##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_cosd_A\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -336,13 +339,13 @@
\def\XINT_tmpa#1{%
\def\XINT_cosd_B_n-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_cosd_B_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -350,13 +353,13 @@
\def\XINT_tmpa#1{%
\def\XINT_cosd_C_n-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_cosd_C_p##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
@@ -364,54 +367,88 @@
\def\XINT_tmpa#1{%
\def\XINT_cosd_D_n-##1.##2.%
{%
- \xintiiopp\expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \xintiiopp\XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
\def\XINT_cosd_D_p##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_sin_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_sin_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{##1.##2}#1}}%
}%
}\expandafter
\XINT_tmpa\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
\def\XINT_cosd_E#1{%
\def\XINT_cosd_E-##1.##2.%
{%
- \expandafter\XINT_flexpr_userefunc_cos_\expandafter
- {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}{#1}}}%
+ \XINT_expr_unlock\expandafter\XINT_flexpr_userfunc_cos_\expandafter
+ {\romannumeral0\XINTinfloat[\XINTdigits]{\xintMul{\xintSub{##1[0]}{.##2}}#1}}%
}%
}\expandafter
\XINT_cosd_E\expandafter{\romannumeral`&&@\xintthebarefloateval oneDegree\relax}%
-\xintdeffloatefunc sind(x) := ifsgn(x, if(x>=-45, sin_(x*oneDegree), -sind_(-x)),
- 0,
- if(x<=45, sin_(x*oneDegree), sind_(x)));%
-\xintdeffloatefunc cosd(x) := ifsgn(x, if(x>=-45, cos_(x*oneDegree), cosd_(-x)),
- 1,
- if(x<=45, cos_(x*oneDegree), cosd_(x)));%
-\xintdeffloatefunc sin(x):= if(abs(x)<0.79, sin_(x),%
- ifsgn(x, -sind_(-x*oneRadian),
- 0,
- sind_(x*oneRadian))
- );%
-\xintdeffloatefunc cos(x):= if(abs(x)<0.79, cos_(x), cosd_(abs(x*oneRadian)));%
-\xintdeffloatefunc sinc(x):=
- if(abs(x)<0.79, sin_aux(sqr(x)), sind_(abs(x)*oneRadian)/abs(x));%
-\xintdeffloatefunc tand(x):= sind(x)/cosd(x);%
-\xintdeffloatefunc cotd(x):= cosd(x)/sind(x);%
-\xintdeffloatefunc tan(x) := ifsgn(x, if(x>-0.79, sin(x)/cos(x), -cotd(90+x*oneRadian)),
- 0,
- if(x<0.79, sin(x)/cos(x), cotd(90-x*oneRadian))
- );%
-\xintdeffloatefunc cot(x) := if(abs(x)<0.79, cos(x)/sin(x),
- ifsgn(x, -tand(90+x*oneRadian),
- 0,
- tand(90-x*oneRadian))
- );%
-\xintdeffloatefunc sec(x) := inv(cos(x));%
-\xintdeffloatefunc csc(x) := inv(sin(x));%
-\xintdeffloatefunc secd(x):= inv(cosd(x));%
-\xintdeffloatefunc cscd(x):= inv(sind(x));%
-\xintdeffloatefunc asin_aux(X) := 1
+\xintdeffloatfunc sind(x) := (x)??
+ {(x>=-45)?
+ {sin_(x*oneDegree)}
+ {-sind_(-x)}
+ }
+ {0}
+ {(x<=45)?
+ {sin_(x*oneDegree)}
+ {sind_(x)}
+ }
+ ;%
+\xintdeffloatfunc cosd(x) := (x)??
+ {(x>=-45)?
+ {cos_(x*oneDegree)}
+ {cosd_(-x)}
+ }
+ {1}
+ {(x<=45)?
+ {cos_(x*oneDegree)}
+ {cosd_(x)}
+ }
+ ;%
+\xintdeffloatfunc sin(x):= (abs(x)<0.79)?
+ {sin_(x)}
+ {(x)??
+ {-sind_(-x*oneRadian)}
+ {0}
+ {sind_(x*oneRadian)}
+ }
+ ;%
+\xintdeffloatfunc cos(x):= (abs(x)<0.79)?
+ {cos_(x)}
+ {cosd_(abs(x*oneRadian))}
+ ;%
+\xintdeffloatfunc sinc(x):= (abs(x)<0.79) ?
+ {sin_aux(sqr(x))}
+ {sind_(abs(x)*oneRadian)/abs(x)}
+ ;%
+\xintdeffloatfunc tand(x):= sind(x)/cosd(x);%
+\xintdeffloatfunc cotd(x):= cosd(x)/sind(x);%
+\xintdeffloatfunc tan(x) := (x)??
+ {(x>-0.79)?
+ {sin(x)/cos(x)}
+ {-cotd(90+x*oneRadian)
+ }
+ }
+ {0}
+ {(x<0.79)?
+ {sin(x)/cos(x)}
+ {cotd(90-x*oneRadian)}
+ }
+ ;%
+\xintdeffloatfunc cot(x) := (abs(x)<0.79)?
+ {cos(x)/sin(x)}
+ {(x)??
+ {-tand(90+x*oneRadian)}
+ {0}
+ {tand(90-x*oneRadian)}
+ };%
+\xintdeffloatfunc sec(x) := inv(cos(x));%
+\xintdeffloatfunc csc(x) := inv(sin(x));%
+\xintdeffloatfunc secd(x):= inv(cosd(x));%
+\xintdeffloatfunc cscd(x):= inv(sind(x));%
+\xintdeffloatfunc asin_aux(X) := 1
\ifnum\XINTdigits>3 % actually 4 would achieve 1ulp in place of <0.5ulp
+ X(1/6
\ifnum\XINTdigits>9
@@ -425,57 +462,105 @@
\ifnum\XINTdigits>46
+ X(231/13312
)\fi)\fi)\fi)\fi)\fi)\fi;%
-\xintdeffloatefunc asin_o(D, T) := T + D*asin_aux(sqr(D));%
-\xintdeffloatefunc asin_n(V, T, t, u) :=% V is square of T
+\xintdeffloatfunc asin_o(D, T) := T + D*asin_aux(sqr(D));%
+\xintdeffloatfunc asin_n(V, T, t, u) :=% V is square of T
asin_o (\xintexpr t*cos_aux(V) - u*T*sin_aux(V)\relax, T);%
-\xintdeffloatefunc asin_m(T, t, u) := asin_n(sqr(T), T, t, u);%
-\xintdeffloatefunc asin_l(t, u) := asin_m(t*asin_aux(sqr(t)), t, u);%
-\xintdeffloatefunc asin_a(t, u) :=
- if(t<u, asin_l(t, u), Piover2 - asin_l(u, t));%
-\xintdeffloatefunc asind_a(t, u):=
- if(t<u, asin_l(t, u) * oneRadian, 90 - asin_l(u, t) * oneRadian);%
-\xintdeffloatefunc asin(t) := ifsgn(t, -asin_a(-t, sqrt(1-sqr(t))),
- 0,
- asin_a(t, sqrt(1-sqr(t))));%
-\xintdeffloatefunc asind(t) := ifsgn(t, -asind_a(-t, sqrt(1-sqr(t))),
- 0,
- asind_a(t, sqrt(1-sqr(t))));%
-\xintdeffloatefunc acos(t) := Piover2 - asin(t);%
-\xintdeffloatefunc acosd(t):= 90 - asind(t);%
-\xintdeffloatefunc atan_b(t, w, z):=%
- 0.5 * if(w< 0, Pi - asin_a(2z * t, -w*z), asin_a(2z * t, w*z));%
-\xintdeffloatefunc atan_a(t, T) := atan_b(t, 1-T, inv(1+T));%
-\xintdeffloatefunc atan(t):= ifsgn(t,-atan_a(-t, sqr(t)), 0, atan_a(t, sqr(t)));%
-\xintdeffloatefunc atand_b(t, w, z) :=
- 0.5 * if(w< 0, 180 - asind_a(2z * t, -w*z), asind_a(2z * t, w*z));%
-\xintdeffloatefunc atand_a(t, T) := atand_b(t, 1-T, inv(1+T));%
-\xintdeffloatefunc atand(t):= ifsgn(t,-atand_a(-t, sqr(t)), 0, atand_a(t, sqr(t)));%
-\xintdeffloatefunc Arg(x, y):=
- if(y>x,
- if(y>-x, Piover2 - atan(x/y),
- if(y<0, -Pi + atan(y/x), Pi + atan(y/x))),
- if(y>-x, atan(y/x), -Piover2 + atan(x/-y))
- );%
-\xintdeffloatefunc atan2(y,x) := Arg(x, y);%
-\xintdeffloatefunc Argd(x, y):=
- if(y>x,
- if(y>-x, 90 - atand(x/y),
- if(y<0, -180 + atand(y/x), 180 + atand(y/x))),
- if(y>-x, atand(y/x), -90 + atand(x/-y))
- );%
-\xintdeffloatefunc atan2d(y,x) := Argd(x, y);%
-\xintdeffloatefunc pArg(x, y):=
- if(y>x,
- if(y>-x, Piover2 - atan(x/y), Pi + atan(y/x)),
- if(y>-x, if(y<0, twoPi + atan(y/x), atan(y/x)),
- threePiover2 + atan(x/-y))
- );%
-\xintdeffloatefunc pArgd(x, y):=
- if(y>x,
- if(y>-x, 90 - atan(x/y)*oneRadian, 180 + atan(y/x)*oneRadian),
- if(y>-x, if(y<0, 360 + atan(y/x)*oneRadian, atan(y/x)*oneRadian),
- 270 + atan(x/-y)*oneRadian)
- );%
+\xintdeffloatfunc asin_m(T, t, u) := asin_n(sqr(T), T, t, u);%
+\xintdeffloatfunc asin_l(t, u) := asin_m(t*asin_aux(sqr(t)), t, u);%
+\xintdeffloatfunc asin_a(t, u) := (t<u)?
+ {asin_l(t, u)}
+ {Piover2 - asin_l(u, t)}
+ ;%
+\xintdeffloatfunc asind_a(t, u):= (t<u)?
+ {asin_l(t, u) * oneRadian}
+ {90 - asin_l(u, t) * oneRadian}
+ ;%
+\xintdeffloatfunc asin(t) := (t)??
+ {-asin_a(-t, sqrt_(1-sqr(t)))}
+ {0}
+ {asin_a(t, sqrt_(1-sqr(t)))}
+ ;%
+\xintdeffloatfunc asind(t) := (t)??
+ {-asind_a(-t, sqrt_(1-sqr(t)))}
+ {0}
+ {asind_a(t, sqrt_(1-sqr(t)))}
+ ;%
+\xintdeffloatfunc acos(t) := Piover2 - asin(t);%
+\xintdeffloatfunc acosd(t):= 90 - asind(t);%
+\xintdeffloatfunc atan_b(t, w, z):= 0.5 * (w< 0)?
+ {Pi - asin_a(2z * t, -w*z)}
+ {asin_a(2z * t, w*z)}
+ ;%
+\xintdeffloatfunc atan_a(t, T) := atan_b(t, 1-T, inv(1+T));%
+\xintdeffloatfunc atan(t):= (t)??
+ {-atan_a(-t, sqr(t))}
+ {0}
+ {atan_a(t, sqr(t))}
+ ;%
+\xintdeffloatfunc atand_b(t, w, z) := 0.5 * (w< 0)?
+ {180 - asind_a(2z * t, -w*z)}
+ {asind_a(2z * t, w*z)}
+ ;%
+\xintdeffloatfunc atand_a(t, T) := atand_b(t, 1-T, inv(1+T));%
+\xintdeffloatfunc atand(t) := (t)??
+ {-atand_a(-t, sqr(t))}
+ {0}
+ {atand_a(t, sqr(t))}
+ ;%
+\xintdeffloatfunc Arg(x, y):= (y>x)?
+ {(y>-x)?
+ {Piover2 - atan(x/y)}
+ {(y<0)?
+ {-Pi + atan(y/x)}
+ {Pi + atan(y/x)}
+ }
+ }
+ {(y>-x)?
+ {atan(y/x)}
+ {-Piover2 + atan(x/-y)}
+ }
+ ;%
+\xintdeffloatfunc atan2(y,x) := Arg(x, y);%
+\xintdeffloatfunc Argd(x, y):= (y>x)?
+ {(y>-x)?
+ {90 - atand(x/y)}
+ {(y<0)?
+ {-180 + atand(y/x)}
+ {180 + atand(y/x)}
+ }
+ }
+ {(y>-x)?
+ {atand(y/x)}
+ {-90 + atand(x/-y)}
+ }
+ ;%
+\xintdeffloatfunc atan2d(y,x) := Argd(x, y);%
+\xintdeffloatfunc pArg(x, y):= (y>x)?
+ {(y>-x)?
+ {Piover2 - atan(x/y)}
+ {Pi + atan(y/x)}
+ }
+ {(y>-x)?
+ {(y<0)?
+ {twoPi + atan(y/x)}
+ {atan(y/x)}
+ }
+ {threePiover2 + atan(x/-y)}
+ }
+ ;%
+\xintdeffloatfunc pArgd(x, y):=(y>x)?
+ {(y>-x)?
+ {90 - atan(x/y)*oneRadian}
+ {180 + atan(y/x)*oneRadian}
+ }
+ {(y>-x)?
+ {(y<0)?
+ {360 + atan(y/x)*oneRadian}
+ {atan(y/x)*oneRadian}
+ }
+ {270 + atan(x/-y)*oneRadian}
+ }
+ ;%
\expandafter\let\csname XINT_flexpr_func_tg\expandafter\endcsname
\csname XINT_flexpr_func_tan\endcsname
\expandafter\let\csname XINT_flexpr_func_cotg\expandafter\endcsname
@@ -483,18 +568,18 @@
\xintFor #1 in {sin, cos, tan, sec, csc, cot,
asin, acos, atan}\do
{%
- \xintdefefunc #1(x) := \xintfloatexpr #1(sfloat(x))\relax;%
- \xintdefefunc #1d(x):= \xintfloatexpr #1d(sfloat(x))\relax;%
+ \xintdeffunc #1(x) := \xintfloatexpr #1(sfloat(x))\relax;%
+ \xintdeffunc #1d(x):= \xintfloatexpr #1d(sfloat(x))\relax;%
}%
\xintFor #1 in {Arg, pArg, atan2}\do
{%
- \xintdefefunc #1(x, y) := \xintfloatexpr #1(sfloat(x), sfloat(y))\relax;%
- \xintdefefunc #1d(x, y):= \xintfloatexpr #1d(sfloat(x), sfloat(y))\relax;%
+ \xintdeffunc #1(x, y) := \xintfloatexpr #1(sfloat(x), sfloat(y))\relax;%
+ \xintdeffunc #1d(x, y):= \xintfloatexpr #1d(sfloat(x), sfloat(y))\relax;%
}%
-\xintdefefunc tg(x) := \xintfloatexpr tg(sfloat(x))\relax;%
-\xintdefefunc cotg(x):= \xintfloatexpr cotg(sfloat(x))\relax;%
-\xintdefefunc sinc(x):= \xintfloatexpr sinc(sfloat(x))\relax;%
-\xintFor* #1 in {iDTVtuwxyzX}\do{\xintrestorelettervar{#1}}%
+\xintdeffunc tg(x) := \xintfloatexpr tg(sfloat(x))\relax;%
+\xintdeffunc cotg(x):= \xintfloatexpr cotg(sfloat(x))\relax;%
+\xintdeffunc sinc(x):= \xintfloatexpr sinc(sfloat(x))\relax;%
+\xintFor* #1 in {iDTVtuwxyzX}\do{\xintrestorevariable{#1}}%
\endinput
%%
%% End of file `xinttrig.sty'.