summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/datatool/datatool-base.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/datatool/datatool-base.sty')
-rw-r--r--Master/texmf-dist/tex/latex/datatool/datatool-base.sty126
1 files changed, 97 insertions, 29 deletions
diff --git a/Master/texmf-dist/tex/latex/datatool/datatool-base.sty b/Master/texmf-dist/tex/latex/datatool/datatool-base.sty
index 3ac36bf6f15..34109c37115 100644
--- a/Master/texmf-dist/tex/latex/datatool/datatool-base.sty
+++ b/Master/texmf-dist/tex/latex/datatool/datatool-base.sty
@@ -39,7 +39,7 @@
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{datatool-base}[2018/04/16 v2.30 (NLCT)]
+\ProvidesPackage{datatool-base}[2018/12/07 v2.31 (NLCT)]
\RequirePackage{etoolbox}
\RequirePackage{amsmath}
\RequirePackage{xkeyval}
@@ -180,12 +180,62 @@
#3%
\fi
}
-\newcommand*{\DTLnumitemsinlist}[2]{%
+\newif\ifDTLlistskipempty
+\DTLlistskipemptytrue
+\newrobustcmd{\DTLlistelement}[2]{%
+ \begingroup
+ \@dtl@tmpcount=0\relax
+ \@for\@dtl@element:=#1\do{%
+ \ifDTLlistskipempty
+ \ifdefempty{\@dtl@element}%
+ {}%
+ {%
+ \advance\@dtl@tmpcount by 1\relax%
+ \ifnum\@dtl@tmpcount=#2 \@dtl@element\@endfortrue\fi
+ }%
+ \else
+ \advance\@dtl@tmpcount by 1\relax%
+ \ifnum\@dtl@tmpcount=#2 \@dtl@element\@endfortrue\fi
+ \fi
+ }%
+ \if@endfor \else\@dtl@listelement@outofrange{#2}\fi
+ \endgroup
+}
+\newrobustcmd{\DTLfetchlistelement}[3]{%
+ \begingroup
+ \@dtl@tmpcount=0\relax
+ \@for\@dtl@element:=#1\do{%
+ \ifDTLlistskipempty
+ \ifdefempty{\@dtl@element}%
+ {}%
+ {%
+ \advance\@dtl@tmpcount by 1\relax%
+ \ifnum\@dtl@tmpcount=#2 \@endfortrue\fi
+ }%
+ \else
+ \advance\@dtl@tmpcount by 1\relax%
+ \ifnum\@dtl@tmpcount=#2 \@endfortrue\fi
+ \fi
+ }%
+ \if@endfor \else\def\@dtl@element{\@dtl@listelement@outofrange{#2}}\fi
+ \edef\x{%
+ \endgroup
+ \noexpand\def\noexpand#3{\expandonce\@dtl@element}%
+ }\x
+}
+\newcommand{\@dtl@listelement@outofrange}[1]{%
+ \PackageWarning{datatool-base}{List index `\number#1' out of range}%
+}
+\newrobustcmd{\DTLnumitemsinlist}[2]{%
\@dtl@tmpcount=0\relax
\@for\@dtl@element:=#1\do{%
- \ifdefempty{\@dtl@element}%
- {}%
- {\advance\@dtl@tmpcount by 1\relax}%
+ \ifDTLlistskipempty
+ \ifdefempty{\@dtl@element}%
+ {}%
+ {\advance\@dtl@tmpcount by 1\relax}%
+ \else
+ \advance\@dtl@tmpcount by 1\relax
+ \fi
}%
\edef#2{\number\@dtl@tmpcount}%
}
@@ -393,7 +443,13 @@
\def\@dtl@formatlist@prelastitem{}%
\def\@dtl@formatlist@prelastitemsep{}%
\@for\@dtl@formatlist@item:=#1\do{%
- \expandafter\@dtl@formatlist@handler\expandafter{\@dtl@formatlist@item}%
+ \ifDTLlistskipempty
+ \ifdefempty{\@dtl@formatlist@item}%
+ {}%
+ {\expandafter\@dtl@formatlist@handler\expandafter{\@dtl@formatlist@item}}%
+ \else
+ \expandafter\@dtl@formatlist@handler\expandafter{\@dtl@formatlist@item}%
+ \fi
}%
\@dtl@formatlist@prelastitem\@dtl@formatlist@lastitem
}
@@ -1448,24 +1504,16 @@
\fi
\fi
}
+\newcommand*{\@dtl@protect}{\protect}
+\newcommand*{\@dtl@minus}{-}
+\newcommand*{\@dtl@plus}{+}
+\newcommand*{\@dtl@dollar}{\$}
\def\@dtl@checknumericalstart#1#2\@nil\@nil{%
-\ifx#1\protect\relax
- \@dtl@checknumericalstart#2\@nil\@nil\relax
-\else
- \ifx-#1\relax
- \def\@dtl@tmp{#2}%
- \ifdefempty{\@dtl@tmp}%
- {%
- \@dtl@datatype=0\relax
- }%
- {%
- \ifnum\@dtl@datatype=0\relax
- \@dtl@datatype=1\relax
- \fi
- \@dtl@checknumericalstart#2\@nil\@nil\relax
- }%
+ \def\@dtl@tmp{#1}%
+ \ifx\@dtl@tmp\@dtl@protect
+ \@dtl@checknumericalstart#2\@nil\@nil\relax
\else
- \ifx+#1\relax
+ \ifx\@dtl@tmp\@dtl@minus
\def\@dtl@tmp{#2}%
\ifdefempty{\@dtl@tmp}%
{%
@@ -1478,11 +1526,8 @@
\@dtl@checknumericalstart#2\@nil\@nil\relax
}%
\else
- \def\@dtl@tmp{#1}%
- \ifx#1\$\relax
- \@dtl@datatype=3\relax
- \@dtl@checknumericalstart#2\@nil\@nil\relax
- \else
+ \ifx\@dtl@tmp\@dtl@plus
+ \def\@dtl@tmp{#2}%
\ifdefempty{\@dtl@tmp}%
{%
\@dtl@datatype=0\relax
@@ -1491,12 +1536,35 @@
\ifnum\@dtl@datatype=0\relax
\@dtl@datatype=1\relax
\fi
- \@dtl@checknumericalloop#1#2\@nil\@nil\relax
+ \@dtl@checknumericalstart#2\@nil\@nil\relax
}%
+ \else
+ \def\@dtl@tmp{#1}%
+ \ifx\@dtl@tmp\@dtl@dollar
+ \def\@dtl@tmp{#2}%
+ \ifdefempty{\@dtl@tmp}%
+ {%
+ \@dtl@datatype=0\relax
+ }%
+ {%
+ \@dtl@datatype=3\relax
+ \@dtl@checknumericalstart#2\@nil\@nil\relax
+ }%
+ \else
+ \ifdefempty{\@dtl@tmp}%
+ {%
+ \@dtl@datatype=0\relax
+ }%
+ {%
+ \ifnum\@dtl@datatype=0\relax
+ \@dtl@datatype=1\relax
+ \fi
+ \@dtl@checknumericalloop#1#2\@nil\@nil\relax
+ }%
+ \fi
\fi
\fi
\fi
-\fi
}
\newif\if@dtl@numgrpsep
\newcommand*{\@dtl@ifDigitOrDecimalSep}[3]{%