diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xinttools.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xinttools.sty | 165 |
1 files changed, 160 insertions, 5 deletions
diff --git a/Master/texmf-dist/tex/generic/xint/xinttools.sty b/Master/texmf-dist/tex/generic/xint/xinttools.sty index a06a4db27d0..9a81fe3470a 100644 --- a/Master/texmf-dist/tex/generic/xint/xinttools.sty +++ b/Master/texmf-dist/tex/generic/xint/xinttools.sty @@ -21,8 +21,8 @@ %% same distribution. (The sources need not necessarily be %% in the same archive or directory.) %% --------------------------------------------------------------- -%% The xint bundle 1.3f 2019/09/10 -%% Copyright (C) 2013-2019 by Jean-Francois Burnol +%% The xint bundle 1.4 2020/01/31 +%% Copyright (C) 2013-2020 by Jean-Francois Burnol %% xinttools: Expandable and non-expandable utilities %% --------------------------------------------------------------- \begingroup\catcode61\catcode48\catcode32=10\relax% @@ -70,7 +70,7 @@ \XINTsetupcatcodes% defined in xintkernel.sty \XINT_providespackage \ProvidesPackage{xinttools}% - [2019/09/10 v1.3f Expandable and non-expandable utilities (JFB)]% + [2020/01/31 v1.4 Expandable and non-expandable utilities (JFB)]% \newtoks\XINT_toks \xint_firstofone{\let\XINT_sptoken= } %<- space here! \def\xintgodef {\global\xintodef }% @@ -309,6 +309,49 @@ \long\def\XINT_nthelt_pos_done ##1##2\xint_bye{% \xint_gob_til_xint:##1\expandafter#1\xint_gobble_ii\xint:#1##1}% }\XINT_nthelt_pos_done{ }% +\def\xintNthOnePy {\romannumeral0\xintnthonepy }% +\def\xintNthOnePyNoExpand {\romannumeral0\xintnthonepynoexpand }% +\long\def\xintnthonepy #1#2{\expandafter\XINT_nthonepy_a\the\numexpr #1\expandafter.% + \expandafter{\romannumeral`&&@#2}}% +\def\xintnthonepynoexpand #1{\expandafter\XINT_nthonepy_a\the\numexpr #1.}% +\def\XINT_nthonepy_a #1% +{% + \xint_UDsignfork + #1\XINT_nthonepy_neg + -{\XINT_nthonepy_nonneg #1}% + \krof +}% +\long\def\XINT_nthonepy_neg #1.#2% +{% + \expandafter\XINT_nthonepy_neg_a\the\numexpr\xint_c_i+\XINT_length_loop + #2\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint:\xint: + \xint_c_viii\xint_c_vii\xint_c_vi\xint_c_v + \xint_c_iv\xint_c_iii\xint_c_ii\xint_c_i\xint_c_\xint_bye + -#1.#2\xint_bye +}% +\def\XINT_nthonepy_neg_a #1% +{% + \xint_UDzerominusfork + #1-\xint_stop_afterbye + 0#1\xint_stop_afterbye + 0-{}% + \krof + \expandafter\XINT_nthonepy_neg_b + \romannumeral\expandafter\XINT_gobble\the\numexpr-\xint_c_i+#1% +}% +\long\def\XINT_nthonepy_neg_b #1#2\xint_bye{{#1}}% +\long\def\XINT_nthonepy_nonneg #1.#2% +{% + \expandafter\XINT_nthonepy_nonneg_done + \romannumeral0\expandafter\XINT_trim_loop\the\numexpr#1-\xint_c_ix.% + #2\xint:\xint:\xint:\xint:\xint:% + \xint:\xint:\xint:\xint:\xint:% + \xint_bye +}% +\def\XINT_nthonepy_nonneg_done #1{% +\long\def\XINT_nthonepy_nonneg_done ##1##2\xint_bye{% + \xint_gob_til_xint:##1\expandafter#1\xint_gobble_ii\xint:{##1}}% +}\XINT_nthonepy_nonneg_done{ }% \def\xintKeep {\romannumeral0\xintkeep }% \def\xintKeepNoExpand {\romannumeral0\xintkeepnoexpand }% \long\def\xintkeep #1#2{\expandafter\XINT_keep_a\the\numexpr #1\expandafter.% @@ -535,6 +578,28 @@ \long\def\XINT_apply_loop_b #1#2{\XINT_apply_loop_a {#2{#1}}}% \long\def\XINT_apply_end\xint_bye\expandafter\XINT_apply_loop_b \expandafter #1#2#3{ #2}% +\long\def\xintApply:x #1#2% +{% + \XINT_apply:x_loop {#1}#2% + {\xint:\XINT_apply:x_loop_enda}{\xint:\XINT_apply:x_loop_endb}% + {\xint:\XINT_apply:x_loop_endc}{\xint:\XINT_apply:x_loop_endd}% + {\xint:\XINT_apply:x_loop_ende}{\xint:\XINT_apply:x_loop_endf}% + {\xint:\XINT_apply:x_loop_endg}{\xint:\XINT_apply:x_loop_endh}\xint_bye +}% +\long\def\XINT_apply:x_loop #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_xint: #9\xint: + {#1{#2}}{#1{#3}}{#1{#4}}{#1{#5}}{#1{#6}}{#1{#7}}{#1{#8}}{#1{#9}}% + \XINT_apply:x_loop {#1}% +}% +\long\def\XINT_apply:x_loop_endh\xint: #1\xint_bye{}% +\long\def\XINT_apply:x_loop_endg\xint: #1#2\xint_bye{{#1}}% +\long\def\XINT_apply:x_loop_endf\xint: #1#2#3\xint_bye{{#1}{#2}}% +\long\def\XINT_apply:x_loop_ende\xint: #1#2#3#4\xint_bye{{#1}{#2}{#3}}% +\long\def\XINT_apply:x_loop_endd\xint: #1#2#3#4#5\xint_bye{{#1}{#2}{#3}{#4}}% +\long\def\XINT_apply:x_loop_endc\xint: #1#2#3#4#5#6\xint_bye{{#1}{#2}{#3}{#4}{#5}}% +\long\def\XINT_apply:x_loop_endb\xint: #1#2#3#4#5#6#7\xint_bye{{#1}{#2}{#3}{#4}{#5}{#6}}% +\long\def\XINT_apply:x_loop_enda\xint: #1#2#3#4#5#6#7#8\xint_bye{{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% \def\xintApplyUnbraced {\romannumeral0\xintapplyunbraced }% \def\xintApplyUnbracedNoExpand {\romannumeral0\xintapplyunbracednoexpand }% \long\def\xintapplyunbraced #1#2% @@ -554,6 +619,56 @@ \long\def\XINT_applyunbr_loop_b #1#2{\XINT_applyunbr_loop_a {#2#1}}% \long\def\XINT_applyunbr_end\xint_bye\expandafter\XINT_applyunbr_loop_b \expandafter #1#2#3{ #2}% +\long\def\xintApplyUnbraced:x #1#2% +{% + \XINT_applyunbraced:x_loop {#1}#2% + {\xint:\XINT_applyunbraced:x_loop_enda}{\xint:\XINT_applyunbraced:x_loop_endb}% + {\xint:\XINT_applyunbraced:x_loop_endc}{\xint:\XINT_applyunbraced:x_loop_endd}% + {\xint:\XINT_applyunbraced:x_loop_ende}{\xint:\XINT_applyunbraced:x_loop_endf}% + {\xint:\XINT_applyunbraced:x_loop_endg}{\xint:\XINT_applyunbraced:x_loop_endh}\xint_bye +}% +\long\def\XINT_applyunbraced:x_loop #1#2#3#4#5#6#7#8#9% +{% + \xint_gob_til_xint: #9\xint: + #1{#2}% + \empty#1{#3}% + \empty#1{#4}% + \empty#1{#5}% + \empty#1{#6}% + \empty#1{#7}% + \empty#1{#8}% + \empty#1{#9}% + \XINT_applyunbraced:x_loop {#1}% +}% +\long\def\XINT_applyunbraced:x_loop_endh\xint: #1\xint_bye{}% +\long\def\XINT_applyunbraced:x_loop_endg\xint: #1\empty#2\xint_bye{#1}% +\long\def\XINT_applyunbraced:x_loop_endf\xint: #1\empty + #2\empty#3\xint_bye{#1#2}% +\long\def\XINT_applyunbraced:x_loop_ende\xint: #1\empty + #2\empty + #3\empty#4\xint_bye{#1#2#3}% +\long\def\XINT_applyunbraced:x_loop_endd\xint: #1\empty + #2\empty + #3\empty + #4\empty#5\xint_bye{#1#2#3#4}% +\long\def\XINT_applyunbraced:x_loop_endc\xint: #1\empty + #2\empty + #3\empty + #4\empty + #5\empty#6\xint_bye{#1#2#3#4#5}% +\long\def\XINT_applyunbraced:x_loop_endb\xint: #1\empty + #2\empty + #3\empty + #4\empty + #5\empty + #6\empty#7\xint_bye{#1#2#3#4#5#6}% +\long\def\XINT_applyunbraced:x_loop_enda\xint: #1\empty + #2\empty + #3\empty + #4\empty + #5\empty + #6\empty + #7\empty#8\xint_bye{#1#2#3#4#5#6#7}% \def\xintSeq {\romannumeral0\xintseq }% \def\xintseq #1{\XINT_seq_chkopt #1\xint_bye }% \def\XINT_seq_chkopt #1% @@ -1148,8 +1263,6 @@ }% }% \let\xintDigitsOf\xintAssignArray -\def\xintExpandArgs#1#2{\csname #1\expandafter\endcsname - \romannumeral0\xintapply\xint_firstofone{#2}}% \def\xintLength:f:csv {\romannumeral0\xintlength:f:csv}% \def\xintlength:f:csv #1% {\long\def\xintlength:f:csv ##1{% @@ -1470,8 +1583,50 @@ {#8}{#7}{#6}{#5}{#4}{#3}{#2}{#1}\xint: \XINT_last:f:csv_loop {#9}.% }% +\def\xintKeep:x:csv #1#2% +{% + \expandafter\xint_gobble_i + \romannumeral0\expandafter\XINT_keep:x:csv_pos + \the\numexpr #1\expandafter.\expandafter{\romannumeral`&&@#2}% +}% +\def\XINT_keep:x:csv_pos #1.#2% +{% + \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.% + #2\xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,% + \xint_Bye,\xint_Bye,\xint_Bye,\xint_Bye,\xint_bye +}% +\def\XINT_keep:x:csv_loop #1% +{% + \xint_gob_til_minus#1\XINT_keep:x:csv_finish-% + \XINT_keep:x:csv_loop_pickeight #1% +}% +\def\XINT_keep:x:csv_loop_pickeight #1.#2,#3,#4,#5,#6,#7,#8,#9,% +{% + ,#2,#3,#4,#5,#6,#7,#8,#9% + \expandafter\XINT_keep:x:csv_loop\the\numexpr#1-\xint_c_viii.% +}% +\def\XINT_keep:x:csv_finish-\XINT_keep:x:csv_loop_pickeight -#1.% +{% + \csname XINT_keep:x:csv_finish#1\endcsname +}% +\expandafter\def\csname XINT_keep:x:csv_finish1\endcsname + #1,#2,#3,#4,#5,#6,#7,{,#1,#2,#3,#4,#5,#6,#7\xint_Bye}% +\expandafter\def\csname XINT_keep:x:csv_finish2\endcsname + #1,#2,#3,#4,#5,#6,{,#1,#2,#3,#4,#5,#6\xint_Bye}% +\expandafter\def\csname XINT_keep:x:csv_finish3\endcsname + #1,#2,#3,#4,#5,{,#1,#2,#3,#4,#5\xint_Bye}% +\expandafter\def\csname XINT_keep:x:csv_finish4\endcsname + #1,#2,#3,#4,{,#1,#2,#3,#4\xint_Bye}% +\expandafter\def\csname XINT_keep:x:csv_finish5\endcsname + #1,#2,#3,{,#1,#2,#3\xint_Bye}% +\expandafter\def\csname XINT_keep:x:csv_finish6\endcsname + #1,#2,{,#1,#2\xint_Bye}% +\expandafter\def\csname XINT_keep:x:csv_finish7\endcsname + #1,{,#1\xint_Bye}% +\expandafter\let\csname XINT_keep:x:csv_finish8\endcsname\xint_Bye \let\xintCSVLength \xintLength:f:csv \let\xintCSVKeep \xintKeep:f:csv +\let\xintCSVKeepx \xintKeep:x:csv \let\xintCSVTrim \xintTrim:f:csv \let\xintCSVNthEltPy \xintNthEltPy:f:csv \let\xintCSVReverse \xintReverse:f:csv |