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.sty165
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