summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-12-23 23:05:36 +0000
committerKarl Berry <karl@freefriends.org>2016-12-23 23:05:36 +0000
commit356fa8c73e53d0d1f2b0e438ed71be0c92c4aaaf (patch)
tree8216d7ba46ae1725d1ca3202b53d27f31d48a8c9 /Master/texmf-dist/tex/generic/xint
parent53a12757d6cc681bfd39c6bb93db49b2c21ee97b (diff)
xint (23dec16)
git-svn-id: svn://tug.org/texlive/trunk@42782 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xint.sty16
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintbinhex.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintcfrac.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintcore.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintexpr.sty170
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintfrac.sty41
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintgcd.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintkernel.sty57
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintseries.sty4
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttools.sty532
10 files changed, 491 insertions, 345 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xint.sty b/Master/texmf-dist/tex/generic/xint/xint.sty
index 289b233b71f..f462fd3c81b 100644
--- a/Master/texmf-dist/tex/generic/xint/xint.sty
+++ b/Master/texmf-dist/tex/generic/xint/xint.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xint: Expandable operations on big integers
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty (loaded by xintcore.sty)
\XINT_providespackage
\ProvidesPackage{xint}%
- [2016/12/13 1.2i Expandable operations on big integers (JFB)]%
+ [2016/12/22 1.2j 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}%
@@ -113,13 +113,13 @@
\expandafter\XINT_len_fork
\romannumeral0\xintnum{#1}\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye\relax
+ \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\relax
}%
\edef\XINT_len_fork #1%
{%
\noexpand\expandafter\space
- \unexpanded{\the\numexpr\xint_c_ix\expandafter
+ \unexpanded{\the\numexpr\expandafter
\XINT_length_loop\xint_UDsignfork#1{}-{#1}\krof}%
}%
\def\xintBool #1{\romannumeral`&&@%
@@ -1089,11 +1089,11 @@
\def\XINT_split_fromright #1.#2\xint_bye
{%
\expandafter\XINT_split_fromright_a
- \the\numexpr#1-\numexpr\xint_c_ix\XINT_length_loop
+ \the\numexpr#1-\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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
.#2\xint_bye
}%
\def\XINT_split_fromright_a #1%
diff --git a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
index f8b3d282ccb..b804b8707a2 100644
--- a/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintbinhex.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintbinhex: Expandable binary and hexadecimal conversions
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintbinhex}%
- [2016/12/13 1.2i Expandable binary and hexadecimal conversions (JFB)]%
+ [2016/12/22 1.2j 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
\newcount\xint_c_x^v \xint_c_x^v 100000
diff --git a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
index aa022f79274..97ad2f88153 100644
--- a/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintcfrac.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintcfrac: Expandable continued fractions with xint package
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintcfrac}%
- [2016/12/13 1.2i Expandable continued fractions with xint package (JFB)]%
+ [2016/12/22 1.2j 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 6278dcb1173..e9f2062a267 100644
--- a/Master/texmf-dist/tex/generic/xint/xintcore.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintcore.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintcore: Expandable arithmetic on big integers
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintcore}%
- [2016/12/13 1.2i Expandable arithmetic on big integers (JFB)]%
+ [2016/12/22 1.2j Expandable arithmetic on big integers (JFB)]%
\ifdefined\m@ne\let\xint_c_mone\m@ne
\else\csname newcount\endcsname\xint_c_mone \xint_c_mone -1 \fi
\newcount\xint_c_x^viii \xint_c_x^viii 100000000
diff --git a/Master/texmf-dist/tex/generic/xint/xintexpr.sty b/Master/texmf-dist/tex/generic/xint/xintexpr.sty
index a2be2aecb18..f53aa7b1e4e 100644
--- a/Master/texmf-dist/tex/generic/xint/xintexpr.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintexpr.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintexpr: Expandable expression parser
%% ---------------------------------------------------------------
@@ -81,7 +81,7 @@
\XINTsetupcatcodes%
\XINT_providespackage
\ProvidesPackage{xintexpr}%
- [2016/12/13 1.2i Expandable expression parser (JFB)]%
+ [2016/12/22 1.2j Expandable expression parser (JFB)]%
\catcode`! 11
\def\xint_gob_til_! #1!{}% catcode 11 ! default in xintexpr.sty code.
\edef\XINT_expr_lockscan#1!% not used for decimal numbers in xintexpr 1.2
@@ -915,9 +915,9 @@
\else
\xint_afterfi
{\expandafter ##2\expandafter ##3\csname
- .=\expandafter\xintListSel:f:csv
- \romannumeral`&&@\XINT_expr_unlock ##4;%
- \XINT_expr_unlock ##1;\endcsname % unlock for \xintNewExpr
+ .=\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
}%
\fi
}%
@@ -950,9 +950,8 @@
\else
\xint_afterfi
{\expandafter ##2\expandafter ##3\csname
- .=:\xintiiifSgn{\XINT_expr_unlock ##1}NPP.%
- \xintiiifSgn{\XINT_expr_unlock ##4}NPP.%
- \xintNum{\XINT_expr_unlock ##1};\xintNum{\XINT_expr_unlock ##4}\endcsname
+ .=:\xintNum{\XINT_expr_unlock ##1};\xintNum{\XINT_expr_unlock ##4}%
+ \endcsname
}%
\fi
}%
@@ -968,8 +967,11 @@
}%
\catcode`[ 11 \catcode`] 11
\let\XINT_expr_precedence_:] \xint_c_iii
-\def\XINT_expr_op_:] #1{\expandafter\xint_c_i\expandafter )%
- \csname .=]\xintiiifSgn{\XINT_expr_unlock #1}npp\XINT_expr_unlock #1\endcsname }%
+\def\XINT_expr_op_:] #1%
+{%
+ \expandafter\xint_c_i\expandafter )%
+ \csname .=]\xintNum{\XINT_expr_unlock #1}\endcsname
+}%
\let\XINT_flexpr_op_:] \XINT_expr_op_:]
\let\XINT_iiexpr_op_:] \XINT_expr_op_:]
\let\XINT_expr_precedence_][: \xint_c_iii
@@ -978,31 +980,139 @@
\let\XINT_flexpr_op_][: \XINT_expr_op_][:
\let\XINT_iiexpr_op_][: \XINT_expr_op_][:
\catcode`[ 12 \catcode`] 12
-\def\xintListSel:f:csv #1{%
+\def\xintListSel:f:csv #1%
+{%
\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}%
}%
-\def\XINT_listsel:_s #1{\if p#1\expandafter\XINT_listsel:_trim\else
- \expandafter\XINT_listsel:_keep\fi }%
-\def\XINT_listsel:_: #1.#2.{\csname XINT_listsel:_#1#2\endcsname }%
-\def\XINT_listsel:_trim #1;#2;{\xintTrim:f:csv {\xintNum{#1}}{#2}}%
-\def\XINT_listsel:_keep #1;#2;{\xintKeep:f:csv {\xintNum{#1}}{#2}}%
-\def\XINT_listsel:_nth#1;#2;{\xintNthEltPy:f:csv {\xintNum{#1}}{#2}}%
-\def\XINT_listsel:_PP #1;#2;#3;%
- {\xintTrim:f:csv {\xintNum{#1}}{\xintKeep:f:csv {\xintNum{#2}}{#3}}}%
-\def\XINT_listsel:_NN #1;#2;#3;%
- {\xintTrim:f:csv {\xintNum{#2}}{\xintKeep:f:csv {\xintNum{#1}}{#3}}}%
-\def\XINT_listsel:_NP #1;#2;#3;{\expandafter\XINT_listsel:_NP_a
+\def\XINT_listsel:_nth #1;#2;{\xintNthEltPy:f:csv {\xintNum{#1}}{#2}}%
+\def\XINT_listsel:_s #1#2;#3;%
+{%
+ \if-#1\expandafter\xintKeep:f:csv\else\expandafter\xintTrim:f:csv\fi
+ {#1#2}{#3}%
+}%
+\def\XINT_listsel:_: #1;#2;%
+{%
+ \expandafter\XINT_listsel:_:a
+ \the\numexpr #1\expandafter;\the\numexpr #2\expandafter;\romannumeral`&&@%
+}%
+\def\XINT_listsel:_:a #1#2;#3#4;%
+{%
+ \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_listsel:_P:P #1;#2;#3;%
+{%
+ \unless\ifnum #1<#2 \xint_afterfi{\expandafter\space\xint_gobble_iii}\fi
+ \xintKeep:f:csv{#2-#1}{\xintTrim:f:csv{#1}{#3}}%
+}%
+\def\XINT_listsel:_N:N #1;#2;#3;%
+{%
+ \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;%
+}%
+\def\XINT_listsel:_N:N_abort #1;#2;#3;{ }%
+\def\XINT_listsel:_N:N_a #1;#2;#3;%
+{%
+ \xintKeep:f:csv{#2}{\xintTrim:f:csv{\ifnum#1<\xint_c_\xint_c_\else#1\fi}{#3}}%
+}%
+\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:_NP_a #1#2;%
- {\if -#1\expandafter\XINT_listsel:_OP\fi\XINT_listsel:_PP #1#2;}%
-\def\XINT_listsel:_OP\XINT_listsel:_PP #1;{\XINT_listsel:_PP 0;}%
-\def\XINT_listsel:_PN #1;#2;#3;{\expandafter\XINT_listsel:_PN_a
+\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\xintListSel:x:csv #1%
+{%
+ \if ]\noexpand#1\xint_dothis\XINT_listsel:_s\fi
+ \if :\noexpand#1\xint_dothis\XINT_listxsel:_:\fi
+ \xint_orthat {\XINT_listsel:_nth #1}%
+}%
+\def\XINT_listxsel:_: #1#2;#3#4;%
+{%
+ \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;%
+}%
+\def\XINT_listxsel:_P:P #1;#2;#3;%
+{%
+ \unless\ifnum #1<#2 \expandafter\xint_gobble_iii\fi
+ \xintKeep:x:csv{#2-#1}{\xintTrim:f:csv{#1}{#3}}%
+}%
+\def\XINT_listxsel:_N:N #1;#2;#3;%
+{%
+ \expandafter\XINT_listxsel:_N:N_a
+ \the\numexpr #2-#1\expandafter;\the\numexpr#1+\xintLength:f:csv{#3};#3;%
+}%
+\def\XINT_listxsel:_N:N_a #1;#2;#3;%
+{%
+ \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}}%
+}%
+\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_listsel:_PN_a #1#2;#3;%
- {\if -#1\expandafter\XINT_listsel:_PO\fi\XINT_listsel:_PP #3;#1#2;}%
-\def\XINT_listsel:_PO\XINT_listsel:_PP #1;#2;{\XINT_listsel:_PP #1;0;}%
+\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\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
\def\xintSeq::csv {\romannumeral0\xintseq::csv }%
\def\xintseq::csv #1#2%
{%
@@ -2537,7 +2647,7 @@
}%
\toks0 \expandafter{\the\toks0
\def\xintReverse:f:csv {~xintReverse:f:csv }%
- \def\xintListSel:f:csv {~xintListSel:f:csv }%
+ \def\xintListSel:x:csv {~xintListSel:f:csv }%
}%
\odef\XINT_expr_redefinemacros {\the\toks0}% Not \edef ! (subtle)
\def\XINT_expr_redefineprints
diff --git a/Master/texmf-dist/tex/generic/xint/xintfrac.sty b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
index 496dbca7b9c..7228abe0198 100644
--- a/Master/texmf-dist/tex/generic/xint/xintfrac.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintfrac.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintfrac: Expandable operations on fractions
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintfrac}%
- [2016/12/13 1.2i Expandable operations on fractions (JFB)]%
+ [2016/12/22 1.2j Expandable operations on fractions (JFB)]%
\def\XINT_cntSgnFork #1%
{%
\ifcase #1\expandafter\xint_secondofthree
@@ -86,12 +86,11 @@
\def\XINT_flen #1#2#3%
{%
\expandafter\space
- \the\numexpr \XINT_abs#1+\xint_c_viii
- \XINT_length_loop
+ \the\numexpr \XINT_abs#1+\XINT_length_loop
#2#3\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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-\xint_c_i
\relax
}%
\def\XINT_outfrac #1#2#3%
@@ -186,11 +185,11 @@
\def\XINT_frac_gen_Bd #1.#2e#3e#4\XINT_Z
{%
\expandafter\XINT_frac_gen_C\the\numexpr #3-%
- \numexpr\xint_c_ix\XINT_length_loop
+ \numexpr\XINT_length_loop
#1\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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
~#2#1!%
}%
\def\XINT_frac_gen_C #1!#2.#3%
@@ -215,11 +214,11 @@
\def\XINT_frac_gen_Cc #1.#2~#3!#4e#5e#6\XINT_T
{%
\expandafter\XINT_frac_gen_F\the\numexpr #5-#2-%
- \numexpr\xint_c_ix\XINT_length_loop
+ \numexpr\XINT_length_loop
#1\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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
\relax\expandafter~\romannumeral0\XINT_num_loop
#3\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\Z
@@ -772,11 +771,11 @@
{%
\expandafter\XINT_trunc_sp_Cc
\romannumeral0\expandafter\XINT_split_fromright_a
- \the\numexpr#3-\numexpr\xint_c_ix\XINT_length_loop
+ \the\numexpr#3-\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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
.#2\xint_bye2345678\xint_bye..#1%
}%
\def\XINT_trunc_sp_Cc #1%
@@ -1792,11 +1791,11 @@
\def\XINT_float_Sb #1#2\Z #3#4%
{%
\expandafter\XINT_float_T
- \the\numexpr\xint_c_ix\XINT_length_loop
+ \the\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye-#4.%
+ \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-#4.%
{#2}#1{#3}{#4}%
}%
\def\XINT_float_T #1.%
@@ -1916,11 +1915,11 @@
\def\XINT_infloat_Sb #1#2\Z #3#4%
{%
\expandafter\XINT_infloat_T
- \the\numexpr\xint_c_ix\XINT_length_loop
+ \the\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye-#4.%
+ \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-#4.%
{#2}#1{#3}%
}%
\def\XINT_infloat_T #1.%
diff --git a/Master/texmf-dist/tex/generic/xint/xintgcd.sty b/Master/texmf-dist/tex/generic/xint/xintgcd.sty
index 8dceec9e843..4073ffd4660 100644
--- a/Master/texmf-dist/tex/generic/xint/xintgcd.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintgcd.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintgcd: Euclidean algorithm with xint package
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintgcd}%
- [2016/12/13 1.2i Euclide algorithm with xint package (JFB)]%
+ [2016/12/22 1.2j Euclide algorithm with xint package (JFB)]%
\def\xintGCD {\romannumeral0\xintgcd }%
\def\xintgcd #1%
{%
diff --git a/Master/texmf-dist/tex/generic/xint/xintkernel.sty b/Master/texmf-dist/tex/generic/xint/xintkernel.sty
index b887988dcb5..5e430f90f7d 100644
--- a/Master/texmf-dist/tex/generic/xint/xintkernel.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintkernel.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintkernel: Paraphernalia for the xint packages
%% ---------------------------------------------------------------
@@ -156,7 +156,7 @@
\fi
\XINT_providespackage
\ProvidesPackage {xintkernel}%
- [2016/12/13 1.2i Paraphernalia for the xint packages (JFB)]%
+ [2016/12/22 1.2j Paraphernalia for the xint packages (JFB)]%
\chardef\xint_c_ 0
\chardef\xint_c_i 1
\chardef\xint_c_ii 2
@@ -279,22 +279,22 @@
\long\edef\xintlength #1%
{%
\noexpand\expandafter\space
- \noexpand\the\numexpr\xint_c_ix\noexpand\XINT_length_loop
+ \noexpand\the\numexpr\noexpand\XINT_length_loop
#1\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\noexpand\xint_bye
+ \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_\noexpand\xint_bye
\relax
}%
\long\def\XINT_length_loop #1#2#3#4#5#6#7#8#9%
{%
\xint_gob_til_xint_relax #9\XINT_length_finish_a\xint_relax
- +\xint_c_ix\XINT_length_loop
+ \xint_c_ix+\XINT_length_loop
}%
-\def\XINT_length_finish_a\xint_relax+\xint_c_ix\XINT_length_loop
+\def\XINT_length_finish_a\xint_relax\xint_c_ix+\XINT_length_loop
#1#2#3#4#5#6#7#8#9%
{%
- -#9\xint_bye
+ #9\xint_bye
}%
\def\xintLastItem {\romannumeral0\xintlastitem }%
\long\def\xintlastitem #1%
@@ -324,38 +324,35 @@
{%
\expandafter\XINT_lengthupto_loop
\the\numexpr#1.#2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \xint_relax\xint_relax\xint_relax\xint_relax
+ \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.%
}%
-\def\XINT_lengthupto_loop #1%
+\def\XINT_lengthupto_loop_a #1%
{%
- \xint_UDsignfork #1\XINT_lengthupto_gt-{\XINT_lengthupto_loop_a#1}\krof
+ \xint_UDsignfork
+ #1\XINT_lengthupto_gt
+ -\XINT_lengthupto_loop
+ \krof #1%
}%
-\long\def\XINT_lengthupto_gt #1\xint_bye{-0}%
-\long\def\XINT_lengthupto_loop_a #1.#2#3#4#5#6#7#8#9%
+\long\def\XINT_lengthupto_gt #1\xint_bye.{-0}%
+\long\def\XINT_lengthupto_loop #1.#2#3#4#5#6#7#8#9%
{%
\xint_gob_til_xint_relax #9\XINT_lengthupto_finish_a\xint_relax
- \expandafter\XINT_lengthupto_loop\the\numexpr #1-\xint_c_viii.%
+ \expandafter\XINT_lengthupto_loop_a\the\numexpr #1-\xint_c_viii.%
}%
-\def\XINT_lengthupto_finish_a\xint_relax\expandafter\XINT_lengthupto_loop
- \the\numexpr #1-\xint_c_viii.#2\xint_bye
+\def\XINT_lengthupto_finish_a\xint_relax\expandafter\XINT_lengthupto_loop_a
+ \the\numexpr #1-\xint_c_viii.#2#3#4#5#6#7#8#9%
{%
- \XINT_lengthupto_finish_b #2\W\W\W\W\W\W\W\Z {#1}%
+ \expandafter\XINT_lengthupto_finish_b\the\numexpr #1-#9\xint_bye
}%
-\def\XINT_lengthupto_finish_b #1#2#3#4#5#6#7#8\Z
+\def\XINT_lengthupto_finish_b #1#2.%
{%
- \xint_gob_til_W
- #1\XINT_lengthupto_finish_c \xint_c_
- #2\XINT_lengthupto_finish_c \xint_c_i
- #3\XINT_lengthupto_finish_c \xint_c_ii
- #4\XINT_lengthupto_finish_c \xint_c_iii
- #5\XINT_lengthupto_finish_c \xint_c_iv
- #6\XINT_lengthupto_finish_c \xint_c_v
- #7\XINT_lengthupto_finish_c \xint_c_vi
- \W\XINT_lengthupto_finish_c \xint_c_vii\Z
+ \xint_UDsignfork
+ #1{-0}%
+ -{ #1#2}%
+ \krof
}%
-\def\XINT_lengthupto_finish_c #1#2\Z #3%
- {\ifnum #1>#3 \xint_dothis{-0}\fi
- \xint_orthat{\expandafter\space\the\numexpr#3-#1\relax}}%
\def\xintreplicate#1%
{\expandafter\XINT_replicate\the\numexpr#1\endcsname}%
\def\XINT_replicate #1{\xint_UDsignfork
diff --git a/Master/texmf-dist/tex/generic/xint/xintseries.sty b/Master/texmf-dist/tex/generic/xint/xintseries.sty
index 6d34c12d2eb..870ff7767de 100644
--- a/Master/texmf-dist/tex/generic/xint/xintseries.sty
+++ b/Master/texmf-dist/tex/generic/xint/xintseries.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xintseries: Expandable partial sums with xint package
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xintseries}%
- [2016/12/13 1.2i Expandable partial sums with xint package (JFB)]%
+ [2016/12/22 1.2j 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 1b33f23c4a5..cd5269ac268 100644
--- a/Master/texmf-dist/tex/generic/xint/xinttools.sty
+++ b/Master/texmf-dist/tex/generic/xint/xinttools.sty
@@ -21,7 +21,7 @@
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%% ---------------------------------------------------------------
-%% The xint bundle 1.2i 2016/12/13
+%% The xint bundle 1.2j 2016/12/22
%% Copyright (C) 2013-2016 by Jean-Francois Burnol
%% xinttools: Expandable and non-expandable utilities
%% ---------------------------------------------------------------
@@ -70,7 +70,7 @@
\XINTsetupcatcodes% defined in xintkernel.sty
\XINT_providespackage
\ProvidesPackage{xinttools}%
- [2016/12/13 1.2i Expandable and non-expandable utilities (JFB)]%
+ [2016/12/22 1.2j Expandable and non-expandable utilities (JFB)]%
\newtoks\XINT_toks
\xint_firstofone{\let\XINT_sptoken= } %<- space here!
\def\xintgodef {\global\xintodef }%
@@ -242,21 +242,21 @@
0-{\XINT_nthelt_pos #1}%
\krof
}%
-\def\XINT_nthelt_zero .{\xintlength }%
+\def\XINT_nthelt_zero #1.{\xintlength }%
\long\def\XINT_nthelt_neg #1.#2%
{%
- \expandafter\XINT_nthelt_neg_a\the\numexpr\xint_c_x\XINT_length_loop
+ \expandafter\XINT_nthelt_neg_a\the\numexpr\xint_c_i+\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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_nthelt_neg_a #1%
{%
\xint_UDzerominusfork
- #1-\xint_byeandstop
- 0#1\xint_byeandstop
+ #1-\xint_bye_thenstop
+ 0#1\xint_bye_thenstop
0-{}%
\krof
\expandafter\XINT_nthelt_neg_b
@@ -265,30 +265,16 @@
\long\def\XINT_nthelt_neg_b #1#2\xint_bye{ #1}%
\long\def\XINT_nthelt_pos #1.#2%
{%
- \expandafter\XINT_nthelt_loop\the\numexpr\xint_c_ix-#1.%
- #2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
-}%
-\def\XINT_nthelt_loop #1%
-{%
- \xint_UDsignfork
- #1\XINT_nthelt_loop_a
- -{\XINT_nthelt_getit #1}%
- \krof
-}%
-\long\def\XINT_nthelt_loop_a #1.#2#3#4#5#6#7#8#9%
-{%
- \xint_gob_til_xint_relax #9\xint_byeandstop\xint_relax
- \expandafter\XINT_nthelt_loop\the\numexpr\xint_c_viii-#1.%
-}%
-\def\XINT_nthelt_getit #1.%
-{%
- \expandafter\expandafter\expandafter\XINT_nthelt_finish
- \csname xint_gobble_\romannumeral\numexpr\xint_c_viii-#1\endcsname
+ \expandafter\XINT_nthelt_pos_done
+ \romannumeral0\expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_x.%
+ #2\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_bye
}%
-\long\edef\XINT_nthelt_finish #1#2\xint_bye
- {\noexpand\xint_gob_til_xint_relax #1\noexpand\expandafter\space
- \noexpand\xint_gobble_ii\xint_relax\space #1}%
+\def\XINT_nthelt_pos_done #1{%
+\long\def\XINT_nthelt_pos_done ##1##2\xint_bye{%
+ \xint_gob_til_xint_relax##1\expandafter#1\xint_gobble_ii\xint_relax#1##1}%
+}\XINT_nthelt_pos_done{ }%
\def\xintKeep {\romannumeral0\xintkeep }%
\def\xintKeepNoExpand {\romannumeral0\xintkeepnoexpand }%
\long\def\xintkeep #1#2{\expandafter\XINT_keep_a\the\numexpr #1\expandafter.%
@@ -306,11 +292,11 @@
\long\def\XINT_keep_neg #1.#2%
{%
\expandafter\XINT_keep_neg_a\the\numexpr
- #1-\numexpr\xint_c_ix\XINT_length_loop
+ #1-\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye.#2%
+ \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.#2%
}%
\def\XINT_keep_neg_a #1%
{%
@@ -325,7 +311,9 @@
\expandafter\XINT_keep_loop
\the\numexpr#1-\XINT_lengthupto_loop
#1.#2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \xint_relax\xint_relax\xint_relax\xint_relax
+ \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.%
-\xint_c_viii.{}#2\xint_bye%
}%
\def\XINT_keep_loop #1#2.%
@@ -375,7 +363,9 @@
\expandafter\XINT_keepunbr_loop
\the\numexpr#1-\XINT_lengthupto_loop
#1.#2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \xint_relax\xint_relax\xint_relax\xint_relax
+ \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.%
-\xint_c_viii.{}#2\xint_bye%
}%
\def\XINT_keepunbr_loop #1#2.%
@@ -422,11 +412,11 @@
\long\def\XINT_trim_neg #1.#2%
{%
\expandafter\XINT_trim_neg_a\the\numexpr
- #1-\numexpr\xint_c_ix\XINT_length_loop
+ #1-\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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
.{}#2\xint_bye
}%
\def\XINT_trim_neg_a #1%
@@ -439,29 +429,30 @@
\edef\XINT_trim_trimall {\noexpand\expandafter\space\noexpand\xint_bye}%
\long\def\XINT_trim_pos #1.#2%
{%
- \expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_viii.%
- #2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \expandafter\XINT_trim_pos_done\expandafter\space
+ \romannumeral0\expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_bye
}%
-\def\XINT_trim_loop #1%
+\def\XINT_trim_loop #1#2.%
{%
- \xint_UDsignfork
- #1\XINT_trim_finish
- -\XINT_trim_loop_a
- \krof #1%
+ \xint_gob_til_minus#1\XINT_trim_finish-%
+ \expandafter\XINT_trim_loop\the\numexpr#1#2\XINT_trim_loop_trimnine
}%
-\long\def\XINT_trim_loop_a #1.#2#3#4#5#6#7#8#9%
+\long\def\XINT_trim_loop_trimnine #1#2#3#4#5#6#7#8#9%
{%
- \xint_gob_til_xint_relax #9\xint_bye_thenstop\xint_relax
- \expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_viii.%
+ \xint_gob_til_xint_relax #9\XINT_trim_toofew\xint_relax-\xint_c_ix.%
}%
-\def\XINT_trim_finish -#1.%
+\def\XINT_trim_toofew\xint_relax{*\xint_c_}%
+\def\XINT_trim_finish#1{%
+\def\XINT_trim_finish-%
+ \expandafter\XINT_trim_loop\the\numexpr-##1\XINT_trim_loop_trimnine
{%
- \expandafter\expandafter\expandafter\XINT_trim_finish_a
- \expandafter\expandafter\expandafter\space
- \csname xint_gobble_\romannumeral\numexpr\xint_c_viii-#1\endcsname
-}%
-\long\def\XINT_trim_finish_a #1\xint_relax #2\xint_bye {#1}%
+ \expandafter\expandafter\expandafter#1%
+ \csname xint_gobble_\romannumeral\numexpr\xint_c_ix-##1\endcsname
+}}\XINT_trim_finish{ }%
+\long\def\XINT_trim_pos_done #1\xint_relax #2\xint_bye {#1}%
\def\xintTrimUnbraced {\romannumeral0\xinttrimunbraced }%
\def\xintTrimUnbracedNoExpand {\romannumeral0\xinttrimunbracednoexpand }%
\long\def\xinttrimunbraced #1#2%
@@ -480,11 +471,11 @@
\long\def\XINT_trimunbr_neg #1.#2%
{%
\expandafter\XINT_trimunbr_neg_a\the\numexpr
- #1-\numexpr\xint_c_ix\XINT_length_loop
+ #1-\numexpr\XINT_length_loop
#2\xint_relax\xint_relax\xint_relax\xint_relax
\xint_relax\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_c_i\xint_c_ii\xint_c_iii\xint_c_iv
- \xint_c_v\xint_c_vi\xint_c_vii\xint_c_viii\xint_c_ix\xint_bye
+ \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
.{}#2\xint_bye
}%
\def\XINT_trimunbr_neg_a #1%
@@ -1120,200 +1111,286 @@
}%
}%
\let\xintDigitsOf\xintAssignArray
-\def\xintTrim:f:csv {\romannumeral0\xinttrim:f:csv }%
-\def\xinttrim:f:csv #1#2%
-{%
- \expandafter\XINT_trim:f:csv_a\the\numexpr #1\expandafter.%
+\def\xintLength:f:csv {\romannumeral0\xintlength:f:csv}%
+\def\xintlength:f:csv #1%
+{\long\def\xintlength:f:csv ##1{%
+ \expandafter#1\the\numexpr\expandafter\XINT_length:f:csv_a
+ \romannumeral`&&@##1\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_c_ix,\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_bye
+ \relax
+}}\xintlength:f:csv { }%
+\long\def\XINT_length:f:csv_a #1%
+{%
+ \xint_gob_til_xint_relax #1\xint_c_\xint_bye\xint_relax
+ \XINT_length:f:csv_loop #1%
+}%
+\long\def\XINT_length:f:csv_loop #1,#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint_relax #9\XINT_length:f:csv_finish\xint_relax
+ \xint_c_ix+\XINT_length:f:csv_loop
+}%
+\def\XINT_length:f:csv_finish\xint_relax\xint_c_ix+\XINT_length:f:csv_loop
+ #1,#2,#3,#4,#5,#6,#7,#8,#9,{#9\xint_bye}%
+\def\xintLengthUpTo:f:csv {\romannumeral0\xintlengthupto:f:csv}%
+\long\def\xintlengthupto:f:csv #1#2%
+{%
+ \expandafter\XINT_lengthupto:f:csv_a
+ \the\numexpr#1\expandafter.%
\romannumeral`&&@#2\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
-}%
-\def\XINT_trim:f:csv_a #1%
-{%
- \xint_UDzerominusfork
- #1-{\XINT_trim:f:csv_zero }%
- 0#1{\XINT_trim:f:csv_neg }%
- 0-{\XINT_trim:f:csv_loop_a #1}%
- \krof
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \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_bye.%
}%
-\def\XINT_trim:f:csv_zero .#1\xint_relax #2\xint_bye{ #1}%
-\def\XINT_trim:f:csv_neg #1.#2\xint_relax%
+\long\def\XINT_lengthupto:f:csv_a #1.#2%
{%
- \expandafter\XINT_trim:f:csv_neg_b
- \the\numexpr\XINT_length:f:csv_a #2%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
- -#1.#2\xint_relax
+ \xint_gob_til_xint_relax #2\XINT_lengthupto:f:csv_empty\xint_relax
+ \XINT_lengthupto:f:csv_loop_b #1.#2%
}%
-\def\XINT_trim:f:csv_neg_b #1%
+\def\XINT_lengthupto:f:csv_empty\xint_relax
+ \XINT_lengthupto:f:csv_loop_b #1.#2\xint_bye.{ #1}%
+\def\XINT_lengthupto:f:csv_loop_a #1%
{%
- \xint_UDzerominusfork
- #1-{\expandafter\space\xint_bye }%
- 0#1{\expandafter\space\xint_bye }%
- 0-{\XINT_keep:f:csv_pos #1}%
- \krof
+ \xint_UDsignfork
+ #1\XINT_lengthupto:f:csv_gt
+ -\XINT_lengthupto:f:csv_loop_b
+ \krof #1%
}%
-\def\XINT_trim:f:csv_loop_a #1.%
+\long\def\XINT_lengthupto:f:csv_gt #1\xint_bye.{-0}%
+\long\def\XINT_lengthupto:f:csv_loop_b #1.#2,#3,#4,#5,#6,#7,#8,#9,%
{%
- \ifnum #1>\xint_c_vii
- \expandafter\XINT_trim:f:csv_loop_b
- \else
- \expandafter\XINT_trim:f:csv_finish
- \fi
- #1.%
+ \xint_gob_til_xint_relax #9\XINT_lengthupto:f:csv_finish_a\xint_relax
+ \expandafter\XINT_lengthupto:f:csv_loop_a\the\numexpr #1-\xint_c_viii.%
}%
-\def\XINT_trim:f:csv_loop_b #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+\def\XINT_lengthupto:f:csv_finish_a\xint_relax
+ \expandafter\XINT_lengthupto:f:csv_loop_a
+ \the\numexpr #1-\xint_c_viii.#2,#3,#4,#5,#6,#7,#8,#9,%
{%
- \xint_gob_til_xint_relax #9\xint_bye_thenstop\xint_relax
- \expandafter\XINT_trim:f:csv_loop_a\the\numexpr #1-\xint_c_viii.%
+ \expandafter\XINT_lengthupto:f:csv_finish_b\the\numexpr #1-#9\xint_bye
}%
-\def\XINT_trim:f:csv_finish #1.%
+\def\XINT_lengthupto:f:csv_finish_b #1#2.%
{%
- \expandafter\XINT_trim:f:csv_finish_a
- \romannumeral`&&@\csname xint_gobble:csv_\romannumeral#1\endcsname
+ \xint_UDsignfork
+ #1{-0}%
+ -{ #1#2}%
+ \krof
}%
-\def\xint_gobble:csv_ {}%
-\def\xint_gobble:csv_i #1,{}%
-\def\xint_gobble:csv_ii #1,#2,{}%
-\def\xint_gobble:csv_iii #1,#2,#3,{}%
-\def\xint_gobble:csv_iv #1,#2,#3,#4,{}%
-\def\xint_gobble:csv_v #1,#2,#3,#4,#5,{}%
-\def\xint_gobble:csv_vi #1,#2,#3,#4,#5,#6,{}%
-\def\xint_gobble:csv_vii #1,#2,#3,#4,#5,#6,#7,{}%
-\def\XINT_trim:f:csv_finish_a #1\xint_relax #2\xint_bye { #1}%
\def\xintKeep:f:csv {\romannumeral0\xintkeep:f:csv }%
-\def\xintkeep:f:csv #1#2%
+\long\def\xintkeep:f:csv #1#2%
{%
- \expandafter\XINT_keep:f:csv_a\the\numexpr #1\expandafter.%
- \romannumeral`&&@#2\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
+ \expandafter\xint_gobble_thenstop
+ \romannumeral0\expandafter\XINT_keep:f:csv_a
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
}%
\def\XINT_keep:f:csv_a #1%
{%
\xint_UDzerominusfork
- #1-\xint_bye_thenstop
+ #1-\XINT_keep:f:csv_keepnone
0#1\XINT_keep:f:csv_neg
0-{\XINT_keep:f:csv_pos #1}%
\krof
}%
-\def\XINT_keep:f:csv_neg #1.#2\xint_relax%
+\long\def\XINT_keep:f:csv_keepnone .#1{,}%
+\long\def\XINT_keep:f:csv_neg #1.#2%
{%
- \expandafter\XINT_keep:f:csv_neg_b
- \the\numexpr\XINT_length:f:csv_a #2%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
- -#1.#2\xint_relax
+ \expandafter\XINT_keep:f:csv_neg_done\expandafter,%
+ \romannumeral0%
+ \expandafter\XINT_keep:f:csv_neg_a\the\numexpr
+ #1-\numexpr\XINT_length:f:csv_a
+ #2\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_c_ix,\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_bye
+ .#2\xint_bye
}%
-\def\XINT_keep:f:csv_neg_b #1%
+\def\XINT_keep:f:csv_neg_a #1%
{%
- \xint_UDzerominusfork
- #1-{\XINT_keep:f:csv_all }%
- 0#1{\XINT_keep:f:csv_all }%
- 0-{\XINT_trim:f:csv_loop_a #1}%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keep:f:csv_trimloop\the\numexpr-\xint_c_ix+}%
+ -\XINT_keep:f:csv_keepall
\krof
}%
-\def\XINT_keep:f:csv_all #1.#2\xint_relax #3\xint_bye { #2}%
-\def\XINT_keep:f:csv_pos #1.{\expandafter\xint_gobble_thenstop
- \romannumeral`&&@\XINT_keep:f:csv_loop_a #1.{}}%
-\def\XINT_keep:f:csv_loop_a #1.%
+\def\XINT_keep:f:csv_keepall #1.{ }%
+\long\def\XINT_keep:f:csv_neg_done #1\xint_bye{#1}%
+\def\XINT_keep:f:csv_trimloop #1#2.%
{%
- \ifnum #1>\xint_c_vi
- \expandafter\XINT_keep:f:csv_loop_b
- \else
- \expandafter\XINT_keep:f:csv_finish
- \fi
- #1.%
-}%
-\def\XINT_keep:f:csv_loop_b #1.#2#3,#4,#5,#6,#7,#8,#9,%
-{%
- \xint_gob_til_xint_relax #9\XINT_keep:f:csv_enda\xint_relax
- \expandafter\XINT_keep:f:csv_loop_c\the\numexpr #1-\xint_c_vii.%
- {,#3,#4,#5,#6,#7,#8,#9}{#2}%
-}%
-\def\XINT_keep:f:csv_loop_c #1.#2#3{\XINT_keep:f:csv_loop_a #1.{#3#2}}%
-\def\XINT_keep:f:csv_enda #1.#2#3#4\xint_bye
-{%
- \XINT_keep:f:csv_endb #2\xint_bye {#3}%
-}%
-\def\XINT_keep:f:csv_endb #1\xint_relax #2\xint_bye #3{ #3#1}%
-\def\XINT_keep:f:csv_finish #1.#2#3,#4,#5,#6,#7,#8,#9\xint_bye
-{%
- \csname XINT_keep:f:csv_finish_\romannumeral#1\endcsname
- ,#3,#4,#5,#6,#7,#8,\Z {#2}%
-}%
-\def\XINT_keep:f:csv_finish_ #1\Z #2{#2}%
-\def\XINT_keep:f:csv_finish_i ,#1,#2\Z
- {\XINT_keep:f:csv_finish_f ,#1\xint_relax\Z}%
-\def\XINT_keep:f:csv_finish_ii ,#1,#2,#3\Z
- {\XINT_keep:f:csv_finish_f ,#1,#2\xint_relax\Z}%
-\def\XINT_keep:f:csv_finish_iii ,#1,#2,#3,#4\Z
- {\XINT_keep:f:csv_finish_f ,#1,#2,#3\xint_relax\Z}%
-\def\XINT_keep:f:csv_finish_iv ,#1,#2,#3,#4,#5\Z
- {\XINT_keep:f:csv_finish_f ,#1,#2,#3,#4\xint_relax\Z}%
-\def\XINT_keep:f:csv_finish_v ,#1,#2,#3,#4,#5,#6\Z
- {\XINT_keep:f:csv_finish_f ,#1,#2,#3,#4,#5\xint_relax\Z}%
-\def\XINT_keep:f:csv_finish_vi ,#1,#2,#3,#4,#5,#6,#7\Z
- {\XINT_keep:f:csv_finish_f ,#1,#2,#3,#4,#5,#6\xint_relax\Z}%
-\def\XINT_keep:f:csv_finish_f #1\xint_relax #2\Z #3{#3#1}%
-\def\xintNthEltPy:f:csv {\romannumeral0\xintntheltpy:f:csv }%
-\def\xintntheltpy:f:csv #1{\expandafter\XINT_ntheltpy:f:csv\the\numexpr #1.}%
-\def\XINT_ntheltpy:f:csv #1%
+ \xint_gob_til_minus#1\XINT_keep:f:csv_trimloop_finish-%
+ \expandafter\XINT_keep:f:csv_trimloop
+ \the\numexpr#1#2-\xint_c_ix\expandafter.\XINT_keep:f:csv_trimloop_trimnine
+}%
+\long\def\XINT_keep:f:csv_trimloop_trimnine #1,#2,#3,#4,#5,#6,#7,#8,#9,{}%
+\def\XINT_keep:f:csv_trimloop_finish-%
+ \expandafter\XINT_keep:f:csv_trimloop
+ \the\numexpr-#1-\xint_c_ix\expandafter.\XINT_keep:f:csv_trimloop_trimnine
+ {\csname XINT_trim:f:csv_finish#1\endcsname}%
+\long\def\XINT_keep:f:csv_pos #1.#2%
+{%
+ \expandafter\XINT_keep:f:csv_pos_fork
+ \romannumeral0\XINT_lengthupto:f:csv_a
+ #1.#2\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \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_bye.%
+ .#1.{}#2\xint_bye%
+}%
+\def\XINT_keep:f:csv_pos_fork #1#2.%
{%
\xint_UDsignfork
- #1{\XINT_nthelt:f:csv_neg }%
- -{\XINT_nthelt:f:csv_pos #1}%
+ #1{\expandafter\XINT_keep:f:csv_loop\the\numexpr-\xint_c_viii+}%
+ -\XINT_keep:f:csv_pos_keepall
\krof
}%
-\long\def\XINT_nthelt:f:csv_neg #1.#2%
+\long\def\XINT_keep:f:csv_pos_keepall #1.#2#3\xint_bye{,#3}%
+\def\XINT_keep:f:csv_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_keep:f:csv_loop_end-%
+ \expandafter\XINT_keep:f:csv_loop
+ \the\numexpr#1#2-\xint_c_viii\expandafter.\XINT_keep:f:csv_loop_pickeight
+}%
+\long\def\XINT_keep:f:csv_loop_pickeight
+ #1#2,#3,#4,#5,#6,#7,#8,#9,{{#1,#2,#3,#4,#5,#6,#7,#8,#9}}%
+\def\XINT_keep:f:csv_loop_end-\expandafter\XINT_keep:f:csv_loop
+ \the\numexpr-#1-\xint_c_viii\expandafter.\XINT_keep:f:csv_loop_pickeight
+ {\csname XINT_keep:f:csv_end#1\endcsname}%
+\long\expandafter\def\csname XINT_keep:f:csv_end1\endcsname
+ #1#2,#3,#4,#5,#6,#7,#8,#9\xint_bye {#1,#2,#3,#4,#5,#6,#7,#8}%
+\long\expandafter\def\csname XINT_keep:f:csv_end2\endcsname
+ #1#2,#3,#4,#5,#6,#7,#8\xint_bye {#1,#2,#3,#4,#5,#6,#7}%
+\long\expandafter\def\csname XINT_keep:f:csv_end3\endcsname
+ #1#2,#3,#4,#5,#6,#7\xint_bye {#1,#2,#3,#4,#5,#6}%
+\long\expandafter\def\csname XINT_keep:f:csv_end4\endcsname
+ #1#2,#3,#4,#5,#6\xint_bye {#1,#2,#3,#4,#5}%
+\long\expandafter\def\csname XINT_keep:f:csv_end5\endcsname
+ #1#2,#3,#4,#5\xint_bye {#1,#2,#3,#4}%
+\long\expandafter\def\csname XINT_keep:f:csv_end6\endcsname
+ #1#2,#3,#4\xint_bye {#1,#2,#3}%
+\long\expandafter\def\csname XINT_keep:f:csv_end7\endcsname
+ #1#2,#3\xint_bye {#1,#2}%
+\long\expandafter\def\csname XINT_keep:f:csv_end8\endcsname
+ #1#2\xint_bye {#1}%
+\def\xintTrim:f:csv {\romannumeral0\xinttrim:f:csv }%
+\long\def\xinttrim:f:csv #1#2%
{%
- \expandafter\XINT_nthelt:f:csv_neg_a
- \the\numexpr\expandafter\XINT_length:f:csv_a\romannumeral`&&@#2%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
- -#1+\xint_c_i\expandafter.\romannumeral`&&@#2%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
+ \expandafter\xint_gobble_thenstop
+ \romannumeral0\expandafter\XINT_trim:f:csv_a
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
}%
-\def\XINT_nthelt:f:csv_neg_a #1%
+\def\XINT_trim:f:csv_a #1%
{%
\xint_UDzerominusfork
- #1-\xint_bye_thenstop
- 0#1\xint_bye_thenstop
- 0-{\XINT_nthelt:f:csv_loop_a #1}%
+ #1-\XINT_trim:f:csv_trimnone
+ 0#1\XINT_trim:f:csv_neg
+ 0-{\XINT_trim:f:csv_pos #1}%
\krof
}%
-\long\def\XINT_nthelt:f:csv_pos #1.#2%
+\long\def\XINT_trim:f:csv_trimnone .#1{,#1}%
+\long\def\XINT_trim:f:csv_neg #1.#2%
{%
- \expandafter\XINT_nthelt:f:csv_loop_a\the\numexpr #1+\xint_c_i\expandafter.%
- \romannumeral`&&@#2%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
+ \expandafter\XINT_trim:f:csv_neg_a\the\numexpr
+ #1-\numexpr\XINT_length:f:csv_a
+ #2\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_c_ix,\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_bye
+ .{}#2\xint_bye
}%
-\def\XINT_nthelt:f:csv_loop_a #1.%
+\def\XINT_trim:f:csv_neg_a #1%
{%
- \ifnum #1>\xint_c_viii
- \expandafter\XINT_nthelt:f:csv_loop_b
- \else
- \expandafter\XINT_nthelt:f:csv_getit
- \fi #1.%
+ \xint_UDsignfork
+ #1{\expandafter\XINT_keep:f:csv_loop\the\numexpr-\xint_c_viii+}%
+ -\XINT_trim:f:csv_trimall
+ \krof
}%
-\long\def\XINT_nthelt:f:csv_loop_b #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+\def\XINT_trim:f:csv_trimall {\expandafter,\xint_bye}%
+\long\def\XINT_trim:f:csv_pos #1.#2%
+{%
+ \expandafter\XINT_trim:f:csv_pos_done\expandafter,%
+ \romannumeral0%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax\xint_bye
+}%
+\def\XINT_trim:f:csv_loop #1#2.%
+{%
+ \xint_gob_til_minus#1\XINT_trim:f:csv_finish-%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr#1#2\XINT_trim:f:csv_loop_trimnine
+}%
+\long\def\XINT_trim:f:csv_loop_trimnine #1,#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint_relax #9\XINT_trim:f:csv_toofew\xint_relax-\xint_c_ix.%
+}%
+\def\XINT_trim:f:csv_toofew\xint_relax{*\xint_c_}%
+\def\XINT_trim:f:csv_finish-%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr-#1\XINT_trim:f:csv_loop_trimnine
+{%
+ \csname XINT_trim:f:csv_finish#1\endcsname
+}%
+\long\expandafter\def\csname XINT_trim:f:csv_finish1\endcsname
+ #1,#2,#3,#4,#5,#6,#7,#8,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish2\endcsname
+ #1,#2,#3,#4,#5,#6,#7,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish3\endcsname
+ #1,#2,#3,#4,#5,#6,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish4\endcsname
+ #1,#2,#3,#4,#5,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish5\endcsname
+ #1,#2,#3,#4,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish6\endcsname
+ #1,#2,#3,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish7\endcsname
+ #1,#2,{ }%
+\long\expandafter\def\csname XINT_trim:f:csv_finish8\endcsname
+ #1,{ }%
+\expandafter\let\csname XINT_trim:f:csv_finish9\endcsname\space
+\long\def\XINT_trim:f:csv_pos_done #1\xint_relax #2\xint_bye{#1}%
+\def\xintNthEltPy:f:csv {\romannumeral0\xintntheltpy:f:csv }%
+\long\def\xintntheltpy:f:csv #1#2%
{%
- \xint_gob_til_xint_relax #9\XINT_nthelt:f:csv_none\xint_relax
- \expandafter\XINT_nthelt:f:csv_loop_a\the\numexpr #1-\xint_c_viii.%
+ \expandafter\XINT_nthelt:f:csv_a
+ \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}%
+}%
+\def\XINT_nthelt:f:csv_a #1%
+{%
+ \xint_UDsignfork
+ #1\XINT_nthelt:f:csv_neg
+ -\XINT_nthelt:f:csv_pos
+ \krof #1%
}%
-\def\XINT_nthelt:f:csv_getit #1.%
+\long\def\XINT_nthelt:f:csv_neg -#1.#2%
{%
- \expandafter\XINT_nthelt:f:csv_finish
- \romannumeral`&&@\csname xint_gobble:csv_\romannumeral
- \numexpr#1-\xint_c_i\endcsname
+ \expandafter\XINT_nthelt:f:csv_neg_fork
+ \the\numexpr\XINT_length:f:csv_a
+ #2\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_c_ix,\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_bye
+ -#1.#2,\xint_bye
}%
-\def\XINT_nthelt:f:csv_finish #1,#2\xint_bye
+\def\XINT_nthelt:f:csv_neg_fork #1%
{%
- \XINT_nthelt:f:csv_finishb #1\xint_relax\xint_bye
+ \if#1-\expandafter\xint_bye_thenstop\fi
+ \expandafter\XINT_nthelt:f:csv_neg_done
+ \romannumeral0%
+ \expandafter\XINT_keep:f:csv_trimloop\the\numexpr-\xint_c_ix+#1%
}%
-\def\XINT_nthelt:f:csv_finishb #1\xint_relax #2\xint_bye { #1}%
+\long\def\XINT_nthelt:f:csv_neg_done#1,#2\xint_bye{ #1}%
+\long\def\XINT_nthelt:f:csv_pos #1.#2%
+{%
+ \expandafter\XINT_nthelt:f:csv_pos_done
+ \romannumeral0%
+ \expandafter\XINT_trim:f:csv_loop\the\numexpr#1-\xint_c_ix.%
+ #2\xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
+ \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
+}%
+\def\XINT_nthelt:f:csv_pos_done #1{%
+\long\def\XINT_nthelt:f:csv_pos_done ##1,##2\xint_bye{%
+ \xint_gob_til_xint_relax##1\XINT_nthelt:f:csv_pos_cleanup\xint_relax#1##1}%
+}\XINT_nthelt:f:csv_pos_done{ }%
+\xint_firstofone{\long\def\XINT_nthelt:f:csv_pos_cleanup\xint_relax} %
+ #1\xint_relax{ #1}%
\def\xintReverse:f:csv {\romannumeral0\xintreverse:f:csv }%
-\def\xintreverse:f:csv #1%
+\long\def\xintreverse:f:csv #1%
{%
\expandafter\XINT_reverse:f:csv_loop
\expandafter{\expandafter}\romannumeral`&&@#1,%
@@ -1322,58 +1399,21 @@
\xint_bye,\xint_bye,\xint_bye,\xint_bye,%
\xint_relax
}%
-\def\XINT_reverse:f:csv_loop #1#2,#3,#4,#5,#6,#7,#8,#9,%
+\long\def\XINT_reverse:f:csv_loop #1#2,#3,#4,#5,#6,#7,#8,#9,%
{%
\xint_bye #9\XINT_reverse:f:csv_cleanup\xint_bye
\XINT_reverse:f:csv_loop {,#9,#8,#7,#6,#5,#4,#3,#2#1}%
}%
-\def\XINT_reverse:f:csv_cleanup\xint_bye\XINT_reverse:f:csv_loop #1#2\xint_relax
+\long\def\XINT_reverse:f:csv_cleanup\xint_bye\XINT_reverse:f:csv_loop #1#2\xint_relax
{%
\XINT_reverse:f:csv_finish #1%
}%
-\def\XINT_reverse:f:csv_finish #1\xint_relax,{ }%
-\def\xintLength:f:csv {\romannumeral0\xintlength:f:csv }%
-\def\xintlength:f:csv #1%
-{%
- \expandafter\XINT_length:f:csv_a
- \romannumeral`&&@#1\xint_relax,\xint_relax,\xint_relax,\xint_relax,%
- \xint_relax,\xint_relax,\xint_relax,\xint_relax,\xint_bye
-}%
-\def\XINT_length:f:csv_a #1%
-{%
- \xint_gob_til_xint_relax #1\XINT_length:f:csv_empty\xint_relax
- \XINT_length:f:csv_loop 0.#1%
-}%
-\def\XINT_length:f:csv_empty #1\xint_bye { 0}%
-\def\XINT_length:f:csv_loop #1.#2,#3,#4,#5,#6,#7,#8,#9,%
-{%
- \xint_gob_til_xint_relax #9\XINT_length:f:csv_finish_a\xint_relax
- \expandafter\XINT_length:f:csv_loop\the\numexpr #1+\xint_c_viii.%
-}%
-\def\XINT_length:f:csv_finish_a\xint_relax
- \expandafter\XINT_length:f:csv_loop\the\numexpr #1+\xint_c_viii.#2\xint_bye
-{%
- \XINT_length:f:csv_finish_b #2\W,\W,\W,\W,\W,\W,\W,\Z {#1}%
-}%
-\def\XINT_length:f:csv_finish_b #1,#2,#3,#4,#5,#6,#7,#8\Z
-{%
- \xint_gob_til_W
- #1\XINT_length:f:csv_finish_c \xint_c_i
- #2\XINT_length:f:csv_finish_c \xint_c_ii
- #3\XINT_length:f:csv_finish_c \xint_c_iii
- #4\XINT_length:f:csv_finish_c \xint_c_iv
- #5\XINT_length:f:csv_finish_c \xint_c_v
- #6\XINT_length:f:csv_finish_c \xint_c_vi
- #7\XINT_length:f:csv_finish_c \xint_c_vii
- \W\XINT_length:f:csv_finish_c \xint_c_viii\Z
-}%
-\edef\XINT_length:f:csv_finish_c #1#2\Z #3%
- {\noexpand\expandafter\space\noexpand\the\numexpr #3+#1\relax}%
-\let\xintCSVTrim \xintTrim:f:csv
+\long\def\XINT_reverse:f:csv_finish #1\xint_relax,{ }%
+\let\xintCSVLength \xintLength:f:csv
\let\xintCSVKeep \xintKeep:f:csv
+\let\xintCSVTrim \xintTrim:f:csv
\let\xintCSVNthEltPy \xintNthEltPy:f:csv
\let\xintCSVReverse \xintReverse:f:csv
-\let\xintCSVLength \xintLength:f:csv
\let\XINT_tmpa\relax \let\XINT_tmpb\relax \let\XINT_tmpc\relax
\XINT_restorecatcodes_endinput%
\endinput