summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/xint/xintexpr.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/xint/xintexpr.sty')
-rw-r--r--Master/texmf-dist/tex/generic/xint/xintexpr.sty170
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