summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xinttools.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xinttools.sty')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xinttools.sty664
1 files changed, 458 insertions, 206 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xinttools.sty b/Master/texmf-dist/tex/generic/xint/xinttools.sty
index 8fb291a28cd..0a21ba1e579 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.2f 2016/03/12
+%% The xint bundle 1.2g 2016/03/19
%% 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/03/12 1.2f Expandable and non-expandable utilities (JFB)]%
+ [2016/03/19 1.2g Expandable and non-expandable utilities (JFB)]%
\newtoks\XINT_toks
\xint_firstofone{\let\XINT_sptoken= } %<- space here!
\def\xintgodef {\global\xintodef }%
@@ -231,58 +231,58 @@
\long\def\XINT_lws_end\xint_bye\XINT_lws_loop_b #1#2#3{ #1}%
\def\xintNthElt {\romannumeral0\xintnthelt }%
\def\xintNthEltNoExpand {\romannumeral0\xintntheltnoexpand }%
-\def\xintnthelt #1#2%
-{%
- \expandafter\XINT_nthelt_a\the\numexpr #1\expandafter.%
- \expandafter{\romannumeral`&&@#2}%
-}%
-\def\xintntheltnoexpand #1%
-{%
- \expandafter\XINT_nthelt_a\the\numexpr #1.%
-}%
-\def\XINT_nthelt_a #1#2.%
+\long\def\xintnthelt #1#2{\expandafter\XINT_nthelt_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintntheltnoexpand #1{\expandafter\XINT_nthelt_a\the\numexpr #1.}%
+\def\XINT_nthelt_a #1%
{%
\xint_UDzerominusfork
- #1-{\XINT_nthelt_bzero}%
- 0#1{\XINT_nthelt_bneg {#2}}%
- 0-{\XINT_nthelt_bpos {#1#2}}%
+ #1-{\XINT_nthelt_zero }%
+ 0#1{\XINT_nthelt_neg }%
+ 0-{\XINT_nthelt_pos #1}%
\krof
}%
-\long\def\XINT_nthelt_bzero #1%
+\def\XINT_nthelt_zero .{\xintlength }%
+\long\def\XINT_nthelt_neg #1.#2%
{%
- \XINT_length_loop 0.#1\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \expandafter\XINT_nthelt_neg_a\the\numexpr
+ \XINT_length_loop
+ 0.#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye +\xint_c_i -#1.%
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
}%
-\long\def\XINT_nthelt_bneg #1#2%
+\def\XINT_nthelt_neg_a #1%
{%
- \expandafter\XINT_nthelt_loop_a\expandafter {\the\numexpr #1\expandafter}%
- \romannumeral0\xintrevwithbracesnoexpand {#2}%
- \xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \xint_UDzerominusfork
+ #1-{\XINT_nthelt_none }%
+ 0#1{\XINT_nthelt_none }%
+ 0-{\XINT_nthelt_loop_a #1}%
+ \krof
}%
-\long\def\XINT_nthelt_bpos #1#2%
+\long\def\XINT_nthelt_none #1\xint_bye{ }%
+\long\def\XINT_nthelt_pos #1.#2%
{%
- \XINT_nthelt_loop_a {#1}#2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \XINT_nthelt_loop_a #1.%
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_nthelt_loop_a #1%
+\def\XINT_nthelt_loop_a #1.%
{%
\ifnum #1>\xint_c_viii
\expandafter\XINT_nthelt_loop_b
\else
- \XINT_nthelt_getit
- \fi
- {#1}%
+ \expandafter\XINT_nthelt_getit
+ \fi #1.%
}%
-\long\def\XINT_nthelt_loop_b #1#2#3#4#5#6#7#8#9%
+\long\def\XINT_nthelt_loop_b #1.#2#3#4#5#6#7#8#9%
{%
- \xint_gob_til_xint_relax #9\XINT_nthelt_silentend\xint_relax
- \expandafter\XINT_nthelt_loop_a\expandafter{\the\numexpr #1-\xint_c_viii}%
+ \xint_gob_til_xint_relax #9\XINT_nthelt_none\xint_relax
+ \expandafter\XINT_nthelt_loop_a\the\numexpr #1-\xint_c_viii.%
}%
-\def\XINT_nthelt_silentend #1\xint_bye { }%
-\def\XINT_nthelt_getit\fi #1%
+\def\XINT_nthelt_getit #1.%
{%
- \fi\expandafter\expandafter\expandafter\XINT_nthelt_finish
+ \expandafter\expandafter\expandafter\XINT_nthelt_finish
\csname xint_gobble_\romannumeral\numexpr#1-\xint_c_i\endcsname
}%
\long\edef\XINT_nthelt_finish #1#2\xint_bye
@@ -290,58 +290,60 @@
\noexpand\xint_gobble_ii\xint_relax\space #1}%
\def\xintKeep {\romannumeral0\xintkeep }%
\def\xintKeepNoExpand {\romannumeral0\xintkeepnoexpand }%
-\def\xintkeep #1#2%
-{%
- \expandafter\XINT_keep_a\the\numexpr #1\expandafter.%
- \expandafter{\romannumeral`&&@#2}%
-}%
-\def\xintkeepnoexpand #1%
-{%
- \expandafter\XINT_keep_a\the\numexpr #1.%
-}%
-\def\XINT_keep_a #1#2.%
+\long\def\xintkeep #1#2{\expandafter\XINT_keep_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintkeepnoexpand #1{\expandafter\XINT_keep_a\the\numexpr #1.}%
+\def\XINT_keep_a #1%
{%
\xint_UDzerominusfork
- #1-{\expandafter\space\xint_gobble_i }%
- 0#1{\XINT_keep_bneg_a {#2}}%
- 0-{\XINT_keep_bpos {#1#2}}%
+ #1-{\XINT_keep_keepnone }%
+ 0#1{\XINT_keep_neg }%
+ 0-{\XINT_keep_pos #1}%
\krof
}%
-\long\def\XINT_keep_bneg_a #1#2%
+\long\def\XINT_keep_keepnone .#1{ }%
+\long\def\XINT_keep_neg #1.#2%
{%
- \expandafter\XINT_keep_bneg_b \the\numexpr \xintLength{#2}-#1.{#2}%
+ \expandafter\XINT_keep_neg_a\the\numexpr
+ \XINT_length_loop
+ 0.#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye -#1.%
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_keep_bneg_b #1#2.%
+\def\XINT_keep_neg_a #1%
{%
\xint_UDzerominusfork
- #1-{\xint_firstofone_thenstop }%
- 0#1{\xint_firstofone_thenstop }%
- 0-{\XINT_trim_bpos {#1#2}}%
+ #1-{\XINT_keep_keepall }%
+ 0#1{\XINT_keep_keepall }%
+ 0-{\XINT_trim_loop_a #1}%
\krof
}%
-\long\def\XINT_keep_bpos #1#2%
+\def\XINT_keep_keepall #1.{\XINT_keep_keepall_a \space}%
+\def\XINT_keep_keepall_a #1\xint_relax #2\xint_bye {#1}%
+\long\def\XINT_keep_pos #1.#2%
{%
- \XINT_keep_loop_a {#1}{}#2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_bye
+ \XINT_keep_loop_a #1.%
+ {}#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_keep_loop_a #1%
+\def\XINT_keep_loop_a #1.%
{%
\ifnum #1>\xint_c_vi
\expandafter\XINT_keep_loop_b
\else
- \XINT_keep_finish
+ \expandafter\XINT_keep_finish
\fi
- {#1}%
+ #1.%
}%
-\long\def\XINT_keep_loop_b #1#2#3#4#5#6#7#8#9%
+\long\def\XINT_keep_loop_b #1.#2#3#4#5#6#7#8#9%
{%
\xint_gob_til_xint_relax #9\XINT_keep_enda\xint_relax
- \expandafter\XINT_keep_loop_c\expandafter{\the\numexpr #1-\xint_c_vii}%
+ \expandafter\XINT_keep_loop_c\the\numexpr #1-\xint_c_vii.%
{{#3}{#4}{#5}{#6}{#7}{#8}{#9}}{#2}%
}%
-\long\def\XINT_keep_loop_c #1#2#3{\XINT_keep_loop_a {#1}{#3#2}}%
-\long\def\XINT_keep_enda\xint_relax
- \expandafter\XINT_keep_loop_c\expandafter #1#2#3#4\xint_bye
+\long\def\XINT_keep_loop_c #1.#2#3{\XINT_keep_loop_a #1.{#3#2}}%
+\long\def\XINT_keep_enda #1.#2#3#4\xint_bye
{%
\XINT_keep_endb #4\W\W\W\W\W\W\Z #2{#3}%
}%
@@ -357,205 +359,198 @@
\W\XINT_keep_endc_vi\Z
}%
\long\def\XINT_keep_endc_ #1\Z #2#3#4#5#6#7#8#9{ #9}%
-\long\def\XINT_keep_endc_i #1\Z #2#3#4#5#6#7#8#9{ #9{#2}}%
-\long\def\XINT_keep_endc_ii #1\Z #2#3#4#5#6#7#8#9{ #9{#2}{#3}}%
-\long\def\XINT_keep_endc_iii #1\Z #2#3#4#5#6#7#8#9{ #9{#2}{#3}{#4}}%
-\long\def\XINT_keep_endc_iv #1\Z #2#3#4#5#6#7#8#9{ #9{#2}{#3}{#4}{#5}}%
-\long\def\XINT_keep_endc_v #1\Z #2#3#4#5#6#7#8#9{ #9{#2}{#3}{#4}{#5}{#6}}%
-\long\def\XINT_keep_endc_vi\Z #1#2#3#4#5#6#7#8{ #8{#1}{#2}{#3}{#4}{#5}{#6}}%
-\long\def\XINT_keep_finish\fi #1#2#3#4#5#6#7#8#9\xint_bye
-{%
- \fi\XINT_keep_finish_loop_a {#1}{}{#3}{#4}{#5}{#6}{#7}{#8}\Z {#2}%
-}%
-\def\XINT_keep_finish_loop_a #1%
-{%
- \xint_gob_til_zero #1\XINT_keep_finish_z0%
- \expandafter\XINT_keep_finish_loop_b\expandafter {\the\numexpr #1-\xint_c_i}%
-}%
-\long\def\XINT_keep_finish_z0%
- \expandafter\XINT_keep_finish_loop_b\expandafter #1#2#3\Z #4{ #4#2}%
-\long\def\XINT_keep_finish_loop_b #1#2#3%
-{%
- \xint_gob_til_xint_relax #3\XINT_keep_finish_exit\xint_relax
- \XINT_keep_finish_loop_c {#1}{#2}{#3}%
-}%
-\long\def\XINT_keep_finish_exit\xint_relax
- \XINT_keep_finish_loop_c #1#2#3\Z #4{ #4#2}%
-\long\def\XINT_keep_finish_loop_c #1#2#3%
- {\XINT_keep_finish_loop_a {#1}{#2{#3}}}%
+\long\def\XINT_keep_endc_i #1\Z #2#3#4#5#6#7#8#9{#9{#2}}%
+\long\def\XINT_keep_endc_ii #1\Z #2#3#4#5#6#7#8#9{#9{#2}{#3}}%
+\long\def\XINT_keep_endc_iii #1\Z #2#3#4#5#6#7#8#9{#9{#2}{#3}{#4}}%
+\long\def\XINT_keep_endc_iv #1\Z #2#3#4#5#6#7#8#9{#9{#2}{#3}{#4}{#5}}%
+\long\def\XINT_keep_endc_v #1\Z #2#3#4#5#6#7#8#9{#9{#2}{#3}{#4}{#5}{#6}}%
+\long\def\XINT_keep_endc_vi\Z #1#2#3#4#5#6#7#8{#8{#1}{#2}{#3}{#4}{#5}{#6}}%
+\long\def\XINT_keep_finish #1.#2#3#4#5#6#7#8#9\xint_bye
+{%
+ \XINT_keep_finish_a #1.%
+ #3\xint_c_ #4\xint_c_i #5\xint_c_ii #6\xint_c_iii #7\xint_c_iv
+ #8\xint_c_v\xint_relax\xint_c_vi\xint_bye
+ {#3}{#4}{#5}{#6}{#7}{#8}\xint_bye {#2}%
+}%
+\long\def\XINT_keep_finish_a #1.#2\xint_relax #3#4\xint_bye
+{%
+ \csname XINT_keep_finish_b\romannumeral\ifnum#1>#3#3\else#1\fi\endcsname
+}%
+\long\def\XINT_keep_finish_b #1\xint_bye #2{ #2}%
+\long\def\XINT_keep_finish_bi #1#2\xint_bye #3{#3{#1}}%
+\long\def\XINT_keep_finish_bii #1#2#3\xint_bye #4{#4{#1}{#2}}%
+\long\def\XINT_keep_finish_biii#1#2#3#4\xint_bye #5{#5{#1}{#2}{#3}}%
+\long\def\XINT_keep_finish_biv #1#2#3#4#5\xint_bye #6{#6{#1}{#2}{#3}{#4}}%
+\long\def\XINT_keep_finish_bv #1#2#3#4#5#6\xint_bye #7{#7{#1}{#2}{#3}{#4}{#5}}%
+\long\def\XINT_keep_finish_bvi #1\xint_bye #2{#2#1}%
\def\xintKeepUnbraced {\romannumeral0\xintkeepunbraced }%
\def\xintKeepUnbracedNoExpand {\romannumeral0\xintkeepunbracednoexpand }%
-\def\xintkeepunbraced #1#2%
-{%
- \expandafter\XINT_keepunbraced_a\the\numexpr #1\expandafter.%
- \expandafter{\romannumeral`&&@#2}%
-}%
-\def\xintkeepnoexpand #1%
-{%
- \expandafter\XINT_keepunbraced_a\the\numexpr #1.%
-}%
-\def\XINT_keepunbraced_a #1#2.%
+\long\def\xintkeepunbraced #1#2%
+ {\expandafter\XINT_keepunbr_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xintkeepunbracednoexpand #1%
+ {\expandafter\XINT_keepunbr_a\the\numexpr #1.}%
+\def\XINT_keepunbr_a #1%
{%
\xint_UDzerominusfork
- #1-{\expandafter\space\xint_gobble_i }%
- 0#1{\XINT_keep_bneg_a {#2}}%
- 0-{\XINT_keepunbraced_bpos {#1#2}}%
+ #1-{\XINT_keep_keepnone }%
+ 0#1{\XINT_keep_neg }%
+ 0-{\XINT_keepunbr_pos #1}%
\krof
}%
-\long\def\XINT_keepunbraced_bpos #1#2%
+\long\def\XINT_keepunbr_pos #1.#2%
{%
- \XINT_keepunbraced_loop_a {#1}{}#2%
- \xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_bye
+ \XINT_keepunbr_loop_a #1.%
+ {}#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_keepunbraced_loop_a #1%
+\def\XINT_keepunbr_loop_a #1.%
{%
\ifnum #1>\xint_c_vi
- \expandafter\XINT_keepunbraced_loop_b
+ \expandafter\XINT_keepunbr_loop_b
\else
- \XINT_keepunbraced_finish
+ \expandafter\XINT_keepunbr_finish
\fi
- {#1}%
+ #1.%
}%
-\long\def\XINT_keepunbraced_loop_b #1#2#3#4#5#6#7#8#9%
+\long\def\XINT_keepunbr_loop_b #1.#2#3#4#5#6#7#8#9%
{%
- \xint_gob_til_xint_relax #9\XINT_keepunbraced_enda\xint_relax
- \expandafter\XINT_keepunbraced_loop_c\expandafter
- {\the\numexpr #1-\xint_c_vii}{#3}{#4}{#5}{#6}{#7}{#8}{#9}.{#2}%
+ \xint_gob_til_xint_relax #9\XINT_keepunbr_enda\xint_relax
+ \expandafter\XINT_keepunbr_loop_c\the\numexpr #1-\xint_c_vii.%
+ {#3}{#4}{#5}{#6}{#7}{#8}{#9}.{#2}%
}%
-\long\def\XINT_keepunbraced_loop_c #1#2#3#4#5#6#7#8.#9%
- {\XINT_keepunbraced_loop_a {#1}{#9#2#3#4#5#6#7#8}}%
-\long\def\XINT_keepunbraced_enda\xint_relax
- \expandafter\XINT_keepunbraced_loop_c\expandafter #1#2.#3#4\xint_bye
+\long\def\XINT_keepunbr_loop_c #1.#2#3#4#5#6#7#8.#9%
+ {\XINT_keepunbr_loop_a #1.{#9#2#3#4#5#6#7#8}}%
+\long\def\XINT_keepunbr_enda #1.#2.#3#4\xint_bye
{%
- \XINT_keepunbraced_endb #4\W\W\W\W\W\W\Z #2{#3}%
+ \XINT_keepunbr_endb #4\W\W\W\W\W\W\Z #2{#3}%
}%
-\def\XINT_keepunbraced_endb #1#2#3#4#5#6#7\Z
+\def\XINT_keepunbr_endb #1#2#3#4#5#6#7\Z
{%
\xint_gob_til_W
- #1\XINT_keepunbraced_endc_
- #2\XINT_keepunbraced_endc_i
- #3\XINT_keepunbraced_endc_ii
- #4\XINT_keepunbraced_endc_iii
- #5\XINT_keepunbraced_endc_iv
- #6\XINT_keepunbraced_endc_v
- \W\XINT_keepunbraced_endc_vi\Z
-}%
-\long\def\XINT_keepunbraced_endc_ #1\Z #2#3#4#5#6#7#8#9{ #9}%
-\long\def\XINT_keepunbraced_endc_i #1\Z #2#3#4#5#6#7#8#9{ #9#2}%
-\long\def\XINT_keepunbraced_endc_ii #1\Z #2#3#4#5#6#7#8#9{ #9#2#3}%
-\long\def\XINT_keepunbraced_endc_iii #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4}%
-\long\def\XINT_keepunbraced_endc_iv #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4#5}%
-\long\def\XINT_keepunbraced_endc_v #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4#5#6}%
-\long\def\XINT_keepunbraced_endc_vi\Z #1#2#3#4#5#6#7#8{ #8#1#2#3#4#5#6}%
-\long\def\XINT_keepunbraced_finish\fi #1#2#3#4#5#6#7#8#9\xint_bye
-{%
- \fi\XINT_keepunbraced_finish_loop_a {#1}{}{#3}{#4}{#5}{#6}{#7}{#8}\Z {#2}%
-}%
-\def\XINT_keepunbraced_finish_loop_a #1%
-{%
- \xint_gob_til_zero #1\XINT_keepunbraced_finish_z0%
- \expandafter\XINT_keepunbraced_finish_loop_b\expandafter
- {\the\numexpr #1-\xint_c_i}%
-}%
-\long\def\XINT_keepunbraced_finish_z0%
- \expandafter\XINT_keepunbraced_finish_loop_b\expandafter #1#2#3\Z #4{ #4#2}%
-\long\def\XINT_keepunbraced_finish_loop_b #1#2#3%
-{%
- \xint_gob_til_xint_relax #3\XINT_keepunbraced_finish_exit\xint_relax
- \XINT_keepunbraced_finish_loop_c {#1}{#2}{#3}%
-}%
-\long\def\XINT_keepunbraced_finish_exit\xint_relax
- \XINT_keepunbraced_finish_loop_c #1#2#3\Z #4{ #4#2}%
-\long\def\XINT_keepunbraced_finish_loop_c #1#2#3%
- {\XINT_keepunbraced_finish_loop_a {#1}{#2#3}}%
+ #1\XINT_keepunbr_endc_
+ #2\XINT_keepunbr_endc_i
+ #3\XINT_keepunbr_endc_ii
+ #4\XINT_keepunbr_endc_iii
+ #5\XINT_keepunbr_endc_iv
+ #6\XINT_keepunbr_endc_v
+ \W\XINT_keepunbr_endc_vi\Z
+}%
+\long\def\XINT_keepunbr_endc_ #1\Z #2#3#4#5#6#7#8#9{ #9}%
+\long\def\XINT_keepunbr_endc_i #1\Z #2#3#4#5#6#7#8#9{ #9#2}%
+\long\def\XINT_keepunbr_endc_ii #1\Z #2#3#4#5#6#7#8#9{ #9#2#3}%
+\long\def\XINT_keepunbr_endc_iii #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4}%
+\long\def\XINT_keepunbr_endc_iv #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4#5}%
+\long\def\XINT_keepunbr_endc_v #1\Z #2#3#4#5#6#7#8#9{ #9#2#3#4#5#6}%
+\long\def\XINT_keepunbr_endc_vi\Z #1#2#3#4#5#6#7#8{ #8#1#2#3#4#5#6}%
+\long\def\XINT_keepunbr_finish #1.#2#3#4#5#6#7#8#9\xint_bye
+{%
+ \XINT_keepunbr_finish_a #1.%
+ #3\xint_c_ #4\xint_c_i #5\xint_c_ii #6\xint_c_iii #7\xint_c_iv
+ #8\xint_c_v\xint_relax\xint_c_vi\xint_bye
+ {#3}{#4}{#5}{#6}{#7}{#8}\xint_bye {#2}%
+}%
+\long\def\XINT_keepunbr_finish_a #1.#2\xint_relax #3#4\xint_bye
+{%
+ \csname XINT_keepunbr_finish_b\romannumeral\ifnum#1>#3#3\else#1\fi\endcsname
+}%
+\long\def\XINT_keepunbr_finish_b #1\xint_bye #2{ #2}%
+\long\def\XINT_keepunbr_finish_bi #1#2\xint_bye #3{ #3#1}%
+\long\def\XINT_keepunbr_finish_bii #1#2#3\xint_bye #4{ #4#1#2}%
+\long\def\XINT_keepunbr_finish_biii#1#2#3#4\xint_bye #5{ #5#1#2#3}%
+\long\def\XINT_keepunbr_finish_biv #1#2#3#4#5\xint_bye #6{ #6#1#2#3#4}%
+\long\def\XINT_keepunbr_finish_bv #1#2#3#4#5#6\xint_bye #7{ #7#1#2#3#4#5}%
+\long\def\XINT_keepunbr_finish_bvi #1#2#3#4#5#6\xint_bye #7{ #7#1#2#3#4#5#6}%
\def\xintTrim {\romannumeral0\xinttrim }%
\def\xintTrimNoExpand {\romannumeral0\xinttrimnoexpand }%
-\def\xinttrim #1#2%
-{%
- \expandafter\XINT_trim_a\the\numexpr #1\expandafter.%
- \expandafter{\romannumeral`&&@#2}%
-}%
-\def\xinttrimnoexpand #1%
-{%
- \expandafter\XINT_trim_a\the\numexpr #1.%
-}%
-\def\XINT_trim_a #1#2.%
+\long\def\xinttrim #1#2{\expandafter\XINT_trim_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
+\def\xinttrimnoexpand #1{\expandafter\XINT_trim_a\the\numexpr #1.}%
+\def\XINT_trim_a #1%
{%
\xint_UDzerominusfork
- #1-{\xint_firstofone_thenstop }%
- 0#1{\XINT_trim_bneg_a {#2}}%
- 0-{\XINT_trim_bpos {#1#2}}%
+ #1-{\XINT_trim_trimnone }%
+ 0#1{\XINT_trim_neg }%
+ 0-{\XINT_trim_pos #1}%
\krof
}%
-\long\def\XINT_trim_bneg_a #1#2%
+\long\def\XINT_trim_trimnone .#1{ #1}%
+\long\def\XINT_trim_neg #1.#2%
{%
- \expandafter\XINT_trim_bneg_b \the\numexpr \xintLength{#2}-#1.{#2}%
+ \expandafter\XINT_trim_neg_a\the\numexpr
+ \XINT_length_loop
+ 0.#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye -#1.%
+ {}#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_trim_bneg_b #1#2.%
+\def\XINT_trim_neg_a #1%
{%
\xint_UDzerominusfork
- #1-{\expandafter\space\xint_gobble_i }%
- 0#1{\expandafter\space\xint_gobble_i }%
- 0-{\XINT_keep_bpos {#1#2}}%
+ #1-{\XINT_trim_trimall }%
+ 0#1{\XINT_trim_trimall }%
+ 0-{\XINT_keep_loop_a #1}%
\krof
}%
-\long\def\XINT_trim_bpos #1#2%
+\long\def\XINT_trim_trimall #1\xint_bye { }%
+\long\def\XINT_trim_pos #1.#2%
{%
- \XINT_trim_loop_a {#1}#2\xint_relax\xint_relax\xint_relax\xint_relax
- \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
+ \XINT_trim_loop_a #1.%
+ #2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_trim_loop_a #1%
+\def\XINT_trim_loop_a #1.%
{%
\ifnum #1>\xint_c_vii
\expandafter\XINT_trim_loop_b
\else
- \XINT_trim_finish
+ \expandafter\XINT_trim_finish
\fi
- {#1}%
+ #1.%
}%
-\long\def\XINT_trim_loop_b #1#2#3#4#5#6#7#8#9%
+\long\def\XINT_trim_loop_b #1.#2#3#4#5#6#7#8#9%
{%
\xint_gob_til_xint_relax #9\XINT_trim_silentend\xint_relax
- \expandafter\XINT_trim_loop_a\expandafter{\the\numexpr #1-\xint_c_viii}%
+ \expandafter\XINT_trim_loop_a\the\numexpr #1-\xint_c_viii.%
}%
\def\XINT_trim_silentend #1\xint_bye { }%
-\def\XINT_trim_finish\fi #1%
+\def\XINT_trim_finish #1.%
{%
- \fi\expandafter\expandafter\expandafter\XINT_trim_finish_a
+ \expandafter\expandafter\expandafter\XINT_trim_finish_a
\expandafter\expandafter\expandafter\space % avoids brace removal
\csname xint_gobble_\romannumeral\numexpr#1\endcsname
}%
\long\def\XINT_trim_finish_a #1\xint_relax #2\xint_bye {#1}%
\def\xintTrimUnbraced {\romannumeral0\xinttrimunbraced }%
\def\xintTrimUnbracedNoExpand {\romannumeral0\xinttrimunbracednoexpand }%
-\def\xinttrimunbraced #1#2%
-{%
- \expandafter\XINT_trimunbraced_a\the\numexpr #1\expandafter.%
- \expandafter{\romannumeral`&&@#2}%
-}%
+\long\def\xinttrimunbraced #1#2%
+ {\expandafter\XINT_trimunbr_a\the\numexpr #1\expandafter.%
+ \expandafter{\romannumeral`&&@#2}}%
\def\xinttrimunbracednoexpand #1%
-{%
- \expandafter\XINT_trimunbraced_a\the\numexpr #1.%
-}%
-\def\XINT_trimunbraced_a #1#2.%
+ {\expandafter\XINT_trimunbr_a\the\numexpr #1.}%
+\def\XINT_trimunbr_a #1%
{%
\xint_UDzerominusfork
- #1-{\xint_firstofone_thenstop }%
- 0#1{\XINT_trimunbraced_bneg_a {#2}}%
- 0-{\XINT_trim_bpos {#1#2}}%
+ #1-{\XINT_trim_trimnone }%
+ 0#1{\XINT_trimunbr_neg }%
+ 0-{\XINT_trim_pos #1}%
\krof
}%
-\long\def\XINT_trimunbraced_bneg_a #1#2%
+\long\def\XINT_trimunbr_neg #1.#2%
{%
- \expandafter\XINT_trimunbraced_bneg_b \the\numexpr \xintLength{#2}-#1.{#2}%
+ \expandafter\XINT_trimunbr_neg_a\the\numexpr
+ \XINT_length_loop
+ 0.#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_relax\xint_bye -#1.%
+ {}#2\xint_relax\xint_relax\xint_relax\xint_relax
+ \xint_relax\xint_relax\xint_relax\xint_bye
}%
-\def\XINT_trimunbraced_bneg_b #1#2.%
+\def\XINT_trimunbr_neg_a #1%
{%
\xint_UDzerominusfork
- #1-{\expandafter\space\xint_gobble_i }%
- 0#1{\expandafter\space\xint_gobble_i }%
- 0-{\XINT_keepunbraced_bpos {#1#2}}%
+ #1-{\XINT_trim_trimall }%
+ 0#1{\XINT_trim_trimall }%
+ 0-{\XINT_keepunbr_loop_a #1}%
\krof
}%
\def\xintApply {\romannumeral0\xintapply }%
@@ -1183,6 +1178,263 @@
}%
}%
\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.%
+ \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
+}%
+\def\XINT_trim:f:csv_zero .#1\xint_relax #2\xint_bye{ #1}%
+\def\XINT_trim:f:csv_neg #1.#2\xint_relax%
+{%
+ \expandafter\XINT_trim:f:csv_neg_b
+ \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.#2\xint_relax
+}%
+\def\XINT_trim:f:csv_neg_b #1%
+{%
+ \xint_UDzerominusfork
+ #1-{\expandafter\space\xint_bye }%
+ 0#1{\expandafter\space\xint_bye }%
+ 0-{\XINT_keep:f:csv_pos #1}%
+ \krof
+}%
+\def\XINT_trim:f:csv_loop_a #1.%
+{%
+ \ifnum #1>\xint_c_vii
+ \expandafter\XINT_trim:f:csv_loop_b
+ \else
+ \expandafter\XINT_trim:f:csv_finish
+ \fi
+ #1.%
+}%
+\def\XINT_trim:f:csv_loop_b #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \xint_gob_til_xint_relax #9\XINT_trim:f:csv_silentend\xint_relax
+ \expandafter\XINT_trim:f:csv_loop_a\the\numexpr #1-\xint_c_viii.%
+}%
+\def\XINT_trim:f:csv_silentend #1\xint_bye { }%
+\def\XINT_trim:f:csv_finish #1.%
+{%
+ \expandafter\XINT_trim:f:csv_finish_a
+ \romannumeral`&&@\csname xint_gobble:csv_\romannumeral\numexpr#1\endcsname
+}%
+\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%
+{%
+ \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
+}%
+\def\XINT_keep:f:csv_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-{\XINT_keep:f:csv_zero }%
+ 0#1{\XINT_keep:f:csv_neg }%
+ 0-{\XINT_keep:f:csv_pos #1}%
+ \krof
+}%
+\def\XINT_keep:f:csv_zero .#1\xint_bye{ }%
+\def\XINT_keep:f:csv_neg #1.#2\xint_relax%
+{%
+ \expandafter\XINT_keep:f:csv_neg_b
+ \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.#2\xint_relax
+}%
+\def\XINT_keep:f:csv_neg_b #1%
+{%
+ \xint_UDzerominusfork
+ #1-{\XINT_keep:f:csv_all }%
+ 0#1{\XINT_keep:f:csv_all }%
+ 0-{\XINT_trim:f:csv_loop_a #1}%
+ \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.%
+{%
+ \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_UDsignfork
+ #1{\XINT_nthelt:f:csv_neg }%
+ -{\XINT_nthelt:f:csv_pos #1}%
+ \krof
+}%
+\long\def\XINT_nthelt:f:csv_neg #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
+}%
+\def\XINT_nthelt:f:csv_neg_a #1%
+{%
+ \xint_UDzerominusfork
+ #1-{\XINT_nthelt:f:csv_none }%
+ 0#1{\XINT_nthelt:f:csv_none }%
+ 0-{\XINT_nthelt:f:csv_loop_a #1}%
+ \krof
+}%
+\def\XINT_nthelt:f:csv_none #1\xint_bye { }%
+\long\def\XINT_nthelt:f:csv_pos #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
+}%
+\def\XINT_nthelt:f:csv_loop_a #1.%
+{%
+ \ifnum #1>\xint_c_viii
+ \expandafter\XINT_nthelt:f:csv_loop_b
+ \else
+ \expandafter\XINT_nthelt:f:csv_getit
+ \fi #1.%
+}%
+\long\def\XINT_nthelt:f:csv_loop_b #1.#2,#3,#4,#5,#6,#7,#8,#9,%
+{%
+ \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.%
+}%
+\def\XINT_nthelt:f:csv_getit #1.%
+{%
+ \expandafter\XINT_nthelt:f:csv_finish
+ \romannumeral`&&@\csname xint_gobble:csv_\romannumeral
+ \numexpr#1-\xint_c_i\endcsname
+}%
+\def\XINT_nthelt:f:csv_finish #1,#2\xint_bye
+{%
+ \XINT_nthelt:f:csv_finishb #1\xint_relax\xint_bye
+}%
+\def\XINT_nthelt:f:csv_finishb #1\xint_relax #2\xint_bye { #1}%
+\def\xintReverse:f:csv {\romannumeral0\xintreverse:f:csv }%
+\def\xintreverse:f:csv #1%
+{%
+ \expandafter\XINT_reverse:f:csv_loop
+ \expandafter{\expandafter}\romannumeral`&&@#1,%
+ \xint_relax,%
+ \xint_bye,\xint_bye,\xint_bye,\xint_bye,%
+ \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,%
+{%
+ \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
+{%
+ \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
+\let\xintCSVKeep \xintKeep: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