diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintexpr.sty')
-rw-r--r-- | Master/texmf-dist/tex/generic/xint/xintexpr.sty | 170 |
1 files changed, 140 insertions, 30 deletions
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 |