diff options
author | Karl Berry <karl@freefriends.org> | 2016-03-19 22:13:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-03-19 22:13:18 +0000 |
commit | ff3c0e83bcf8933daf4eebaf87613022ca946b6a (patch) | |
tree | c004090697462976dff59f90084c8012f970a0c6 /Master/texmf-dist/tex/generic/xint/xinttools.sty | |
parent | 4f476d8d94c0d15e98b145f8674621c8b309fe39 (diff) |
xint (19mar16)
git-svn-id: svn://tug.org/texlive/trunk@40077 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xinttools.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xinttools.sty | 664 |
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 |