diff options
author | Karl Berry <karl@freefriends.org> | 2016-12-23 23:05:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-12-23 23:05:36 +0000 |
commit | 356fa8c73e53d0d1f2b0e438ed71be0c92c4aaaf (patch) | |
tree | 8216d7ba46ae1725d1ca3202b53d27f31d48a8c9 /Master/texmf-dist/tex/generic/xint | |
parent | 53a12757d6cc681bfd39c6bb93db49b2c21ee97b (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.sty | 16 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintbinhex.sty | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintcfrac.sty | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintcore.sty | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintexpr.sty | 170 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintfrac.sty | 41 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintgcd.sty | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintkernel.sty | 57 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintseries.sty | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xinttools.sty | 532 |
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 |