summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/datatool/datatool.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-07-23 21:55:18 +0000
committerKarl Berry <karl@freefriends.org>2012-07-23 21:55:18 +0000
commitd5ef93ccfdd8ddb5ee3d5a41434e0aec04df8fa0 (patch)
tree0bfa67f70ec53a66e165994e6bfc17b52ff92130 /Master/texmf-dist/tex/latex/datatool/datatool.sty
parent44928b3e4ed601cdf5afd19c5abb613fe3e8b4a0 (diff)
datatool 2.10 (23jul12)
git-svn-id: svn://tug.org/texlive/trunk@27115 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/datatool/datatool.sty')
-rw-r--r--Master/texmf-dist/tex/latex/datatool/datatool.sty2674
1 files changed, 421 insertions, 2253 deletions
diff --git a/Master/texmf-dist/tex/latex/datatool/datatool.sty b/Master/texmf-dist/tex/latex/datatool/datatool.sty
index 8306dba927c..103f7daa59a 100644
--- a/Master/texmf-dist/tex/latex/datatool/datatool.sty
+++ b/Master/texmf-dist/tex/latex/datatool/datatool.sty
@@ -7,7 +7,7 @@
%% datatool.dtx (with options: `datatool.sty,package')
%%
%% datatool.dtx
-%% Copyright 2009 Nicola Talbot
+%% Copyright 2012 Nicola Talbot
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -21,7 +21,7 @@
%%
%% The Current Maintainer of this work is Nicola Talbot.
%%
-%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool.sty, datapie.sty, dataplot.sty, databar.sty, databib.sty, databib.bst, person.sty.
+%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst.
%%
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -38,29 +38,23 @@
%% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}
-%% load student information from file "students.csv"
-%% Iterate through the student database:
-%% Define "anon":
-%% Do the letter:
-%% Undefine "anon":
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{datatool}[2009/11/15 v2.03 (NLCT)]
+\ProvidesPackage{datatool}[2012/07/18 v2.10 (NLCT)]
\RequirePackage{xkeyval}
\RequirePackage{ifthen}
\RequirePackage{xfor}
-\RequirePackage{fp}
\RequirePackage{substr}
\RequirePackage{etex}
\newcommand*{\@dtl@separator}{,}
\newcommand*{\DTLsetseparator}[1]{%
-\renewcommand*{\@dtl@separator}{#1}%
-\@dtl@construct@lopoffs
+ \renewcommand*{\@dtl@separator}{#1}%
+ \@dtl@construct@lopoffs
}
\begingroup
-\catcode`\ 12
+\catcode`\^^I12
\gdef\DTLsettabseparator{%
- \catcode`\ 12
- \DTLsetseparator{ }%
+ \catcode`\^^I12
+ \DTLsetseparator{^^I}%
}
\endgroup
\begingroup
@@ -68,1300 +62,61 @@
\gdef\@dtl@delimiter{"}
\endgroup
\newcommand*\DTLsetdelimiter[1]{%
-\renewcommand*{\@dtl@delimiter}{#1}%
-\@dtl@construct@lopoffs}
+ \renewcommand*{\@dtl@delimiter}{#1}%
+ \@dtl@construct@lopoffs
+}
\edef\@dtl@construct@lopoff#1#2{%
-\noexpand\long\noexpand\def\noexpand\@dtl@lopoff#1##1##2\noexpand
-\to##3##4{%
-\noexpand\ifx#2##1\noexpand\relax
-\noexpand\@dtl@qlopoff#1##1##2\noexpand\to##3##4\relax
-\noexpand\else
-\noexpand\@dtl@lop@ff#1##1##2\noexpand\to##3##4\relax
-\noexpand\fi
-}}
+ \noexpand\long
+ \noexpand\def\noexpand\@dtl@lopoff#1##1##2\noexpand\to##3##4{%
+ \noexpand\ifx#2##1\noexpand\relax
+ \noexpand\@dtl@qlopoff#1##1##2\noexpand\to##3##4\relax
+ \noexpand\else
+ \noexpand\@dtl@lop@ff#1##1##2\noexpand\to##3##4\relax
+ \noexpand\fi
+ }%
+}
\edef\@dtl@construct@qlopoff#1#2{%
-\noexpand\long\noexpand\def\noexpand\@dtl@qlopoff#1#2##1#2#1##2\noexpand
-\to##3##4{%
-\noexpand\def##4{##1}\noexpand\def##3{#1##2}%
-}}
+ \noexpand\long
+ \noexpand\def\noexpand\@dtl@qlopoff#1#2##1#2#1##2\noexpand\to##3##4{%
+ \noexpand\def##4{##1}%
+ \noexpand\DTLsubstituteall{##4}{#2#2}{#2}%
+ \noexpand\edef\noexpand\@dtl@dosubs{%
+ \noexpand\noexpand\noexpand\DTLsubstituteall{\noexpand\noexpand##4}%
+ {\noexpand\expandafter\noexpand\noexpand\noexpand\csname#2\noexpand\endcsname#2}%
+ {\noexpand\expandafter\noexpand\noexpand\noexpand\csname#2\noexpand\endcsname}%
+ }%
+ \noexpand\@dtl@dosubs
+ \noexpand\def##3{#1##2}%
+ }%
+}
\edef\@dtl@construct@lop@ff#1{%
-\noexpand\long\noexpand\def\noexpand\@dtl@lop@ff#1##1#1##2\noexpand
-\to##3##4{%
-\noexpand\def##4{##1}\noexpand\def##3{#1##2}%
-}}
-\newcommand{\@dtl@construct@lopoffs}{%
-\edef\@dtl@chars{{\@dtl@separator}{\@dtl@delimiter}}%
-\expandafter\@dtl@construct@lopoff\@dtl@chars
-\expandafter\@dtl@construct@qlopoff\@dtl@chars
-\expandafter\@dtl@construct@lop@ff\expandafter{\@dtl@separator}%
-}
-\newcommand*{\@dtl@decimal}{.}
-\newcommand*{\@dtl@numbergroupchar}{,}
-\newcommand*{\DTLsetnumberchars}[2]{%
-\renewcommand*{\@dtl@numbergroupchar}{#1}%
-\renewcommand*{\@dtl@decimal}{#2}%
-\@dtl@construct@getnums
-\@dtl@construct@stripnumgrpchar{#1}}
-\edef\@dtl@construct@getintfrac#1{%
-\noexpand\def\noexpand\@dtl@getintfrac##1#1##2\noexpand\relax{%
-\noexpand\@dtl@get@intpart{##1}%
-\noexpand\def\noexpand\@dtl@fracpart{##2}%
-\noexpand\ifx\noexpand\@empty\noexpand\@dtl@fracpart
- \noexpand\def\noexpand\@dtl@fracpart{0}%
-\noexpand\else
- \noexpand\@dtl@getfracpart##2\noexpand\relax
- \noexpand\@dtl@choptrailingzeroes{\noexpand\@dtl@fracpart}%
-\noexpand\fi
-}%
-\noexpand\def\noexpand\@dtl@getfracpart##1#1\noexpand\relax{%
-\noexpand\def\noexpand\@dtl@fracpart{##1}%
-}%
-\noexpand\def\noexpand\DTLconverttodecimal##1##2{%
-\noexpand\dtl@ifsingle{##1}%
-{\noexpand\expandafter\noexpand\toks@\noexpand\expandafter{##1}%
-\noexpand\edef\noexpand\@dtl@tmp{\noexpand\the\noexpand\toks@}}%
-{\noexpand\def\noexpand\@dtl@tmp{##1}}%
- \noexpand\@dtl@standardize@currency\noexpand\@dtl@tmp
- \noexpand\ifx\noexpand\@dtl@org@currency\noexpand\@empty
- \noexpand\else
- \noexpand\let\noexpand\@dtl@currency\noexpand\@dtl@org@currency
- \noexpand\fi
-\noexpand\expandafter
-\noexpand\@dtl@getintfrac\noexpand\@dtl@tmp#1\noexpand\relax
-\noexpand\edef##2{\noexpand\@dtl@intpart.\noexpand\@dtl@fracpart}}%
-}
-\newcommand*{\@dtl@construct@getnums}{%
-\expandafter\@dtl@construct@getintfrac\expandafter{\@dtl@decimal}}
-\newcommand*{\@dtl@get@intpart}[1]{%
-\@dtl@tmpcount=1\relax
-\def\@dtl@intpart{#1}%
-\ifx\@dtl@intpart\@empty
- \def\@dtl@intpart{0}%
-\else
- \def\@dtl@intpart{}%
- \@dtl@get@int@part#1.\relax%
-\fi
-\ifnum\@dtl@tmpcount<0\relax
- \edef\@dtl@intpart{-\@dtl@intpart}%
-\fi
-\@dtl@strip@numgrpchar{\@dtl@intpart}%
-}
-\def\@dtl@get@int@part#1#2\relax{%
-\def\@dtl@argi{#1}%
-\def\@dtl@argii{#2}%
-\ifx\protect#1\relax%
- \let\@dtl@get@nextintpart=\@dtl@get@int@part
-\else
- \expandafter\ifx\@dtl@argi\$%
- \let\@dtl@get@nextintpart=\@dtl@get@int@part
- \else
- \ifx-#1%
- \multiply\@dtl@tmpcount by -1\relax
- \let\@dtl@get@nextintpart=\@dtl@get@int@part
- \else
- \if\@dtl@argi+%
- \let\@dtl@get@nextintpart=\@dtl@get@int@part
- \else
- \def\@dtl@intpart{#1}%
- \ifx.\@dtl@argii
- \let\@dtl@get@nextintpart=\@gobble
- \else
- \let\@dtl@get@nextintpart=\@dtl@get@next@intpart
- \fi
- \fi
- \fi
- \fi
-\fi
-\@dtl@get@nextintpart#2\relax
+ \noexpand\long
+ \noexpand\def\noexpand\@dtl@lop@ff#1##1#1##2\noexpand\to##3##4{%
+ \noexpand\def##4{##1}%
+ \noexpand\def##3{#1##2}%
+ }%
}
-\def\@dtl@get@next@intpart#1.\relax{%
-\edef\@dtl@intpart{\@dtl@intpart#1}%
+\newcommand{\@dtl@construct@lopoffs}{%
+ \edef\@dtl@chars{{\@dtl@separator}{\@dtl@delimiter}}%
+ \expandafter\@dtl@construct@lopoff\@dtl@chars
+ \expandafter\@dtl@construct@qlopoff\@dtl@chars
+ \expandafter\@dtl@construct@lop@ff\expandafter{\@dtl@separator}%
}
-\newcommand*{\@dtl@choptrailingzeroes}[1]{%
-\def\@dtl@tmpcpz{}%
-\expandafter\@dtl@chop@trailingzeroes#1\@nil%
-\let#1=\@dtl@tmpcpz
+\define@key{datatool.sty}{separator}{%
+ \DTLsetseparator{#1}%
}
-\def\@dtl@chop@trailingzeroes#1#2\@nil{%
-\FPifeq{#2}{0}%
- \edef\@dtl@tmpcpz{\@dtl@tmpcpz#1}%
- \let\@dtl@chopzeroesnext=\@dtl@gobbletonil
-\else
- \edef\@dtl@tmpcpz{\@dtl@tmpcpz#1}%
- \let\@dtl@chopzeroesnext=\@dtl@chop@trailingzeroes
-\fi
-\@dtl@chopzeroesnext#2\@nil
-}
-\def\@dtl@gobbletonil#1\@nil{}
-\newcommand*{\dtl@truncatedecimal}[1]{%
-\expandafter\@dtl@truncatedecimal#1.\@nil#1}
-\def\@dtl@truncatedecimal#1.#2\@nil#3{%
-\def#3{#1}}
-\newcommand*{\@dtl@strip@numgrpchar}[1]{%
-\def\@dtl@stripped{}%
-\edef\@dtl@do@stripnumgrpchar{%
-\noexpand\@@dtl@strip@numgrpchar#1\@dtl@numbergroupchar
-\noexpand\relax}%
-\@dtl@do@stripnumgrpchar
-\let#1=\@dtl@stripped
-}
-\edef\@dtl@construct@stripnumgrpchar#1{%
-\noexpand\def\noexpand\@@dtl@strip@numgrpchar##1#1##2\noexpand\relax{%
-\noexpand\expandafter\noexpand\toks@\noexpand\expandafter
-{\noexpand\@dtl@stripped}%
-\noexpand\edef\noexpand\@dtl@stripped{\noexpand\the\noexpand\toks@
-##1}%
-\noexpand\def\noexpand\@dtl@tmp{##2}%
-\noexpand\ifx\noexpand\@dtl@tmp\noexpand\@empty
- \noexpand\let\noexpand\@dtl@next=\noexpand\relax
-\noexpand\else
- \noexpand\let\noexpand\@dtl@next=\noexpand\@@dtl@strip@numgrpchar
-\noexpand\fi
-\noexpand\@dtl@next##2\noexpand\relax
-}%
+\define@key{datatool.sty}{delimiter}{%
+ \DTLsetdelimiter{#1}%
}
-\newcommand*{\DTLdecimaltolocale}[2]{%
-\edef\@dtl@tmpdtl{#1}%
-\expandafter\@dtl@decimaltolocale\@dtl@tmpdtl.\relax
-\FPifeq{\@dtl@fracpart}{0}%
- \edef#2{\@dtl@intpart}%
-\else
- \edef#2{\@dtl@intpart\@dtl@decimal\@dtl@fracpart}%
-\fi
-}
-\def\@dtl@decimaltolocale#1.#2\relax{%
-\@dtl@decimaltolocaleint{#1}%
-\def\@dtl@fracpart{#2}%
-\ifx\@dtl@fracpart\@empty
- \def\@dtl@fracpart{0}%
-\else
- \@dtl@decimaltolocalefrac#2\relax
-\fi
-}
-\def\@dtl@decimaltolocaleint#1{%
-\@dtl@tmpcount=0\relax
-\@dtl@countdigits#1.\relax
-\@dtl@numgrpsepcount=\@dtl@tmpcount\relax
-\divide\@dtl@numgrpsepcount by 3\relax
-\multiply\@dtl@numgrpsepcount by 3\relax
-\advance\@dtl@numgrpsepcount by -\@dtl@tmpcount\relax
-\ifnum\@dtl@numgrpsepcount<0\relax
- \advance\@dtl@numgrpsepcount by 3\relax
-\fi
-\def\@dtl@intpart{}%
-\@dtl@decimal@to@localeint#1.\relax
-}
-\def\@dtl@countdigits#1#2\relax{%
-\advance\@dtl@tmpcount by 1\relax
-\ifx.#2\relax
- \let\@dtl@countnext=\@gobble
-\else
- \let\@dtl@countnext=\@dtl@countdigits
-\fi
-\@dtl@countnext#2\relax
-}
-\def\@dtl@decimal@to@localeint#1#2\relax{%
-\advance\@dtl@numgrpsepcount by 1\relax
-\ifx.#2\relax
- \edef\@dtl@intpart{\@dtl@intpart#1}%
- \let\@dtl@localeintnext=\@gobble
-\else
- \ifnum\@dtl@numgrpsepcount=3\relax
- \edef\@dtl@intpart{\@dtl@intpart#1\@dtl@numbergroupchar}%
- \@dtl@numgrpsepcount=0\relax
- \else
- \ifnum\@dtl@numgrpsepcount>3\relax
- \@dtl@numgrpsepcount=0\relax
- \fi
- \edef\@dtl@intpart{\@dtl@intpart#1}%
- \fi
- \let\@dtl@localeintnext=\@dtl@decimal@to@localeint
-\fi
-\@dtl@localeintnext#2\relax
-}
-\def\@dtl@decimaltolocalefrac#1.\relax{%
-\def\@dtl@fracpart{#1}%
-\@dtl@choptrailingzeroes{\@dtl@fracpart}%
-}
-\newcommand*{\DTLdecimaltocurrency}[2]{%
-\edef\@dtl@tmpdtl{#1}%
-\expandafter\@dtl@decimaltolocale\@dtl@tmpdtl.\relax
-\dtl@truncatedecimal\@dtl@tmpdtl
-\@dtl@tmpcount=\@dtl@tmpdtl\relax
-\expandafter\@dtl@toks\expandafter{\@dtl@currency}%
-\FPifeq{\@dtl@fracpart}{0}%
- \ifnum\@dtl@tmpcount<0\relax
- \@dtl@tmpcount = -\@dtl@tmpcount\relax
- \edef#2{-\the\@dtl@toks\the\@dtl@tmpcount\@dtl@decimal00}%
- \else
- \edef#2{\the\@dtl@toks\@dtl@intpart\@dtl@decimal00}%
- \fi
-\else
- \ifnum\@dtl@tmpcount<0\relax
- \@dtl@tmpcount = -\@dtl@tmpcount\relax
- \ifnum\@dtl@fracpart<10\relax
- \edef#2{-\the\@dtl@toks\number\@dtl@tmpcount
- \@dtl@decimal\@dtl@fracpart0}%
- \else
- \edef#2{-\the\@dtl@toks\number\@dtl@tmpcount
- \@dtl@decimal\@dtl@fracpart}%
- \fi
- \else
- \ifnum\@dtl@fracpart<10\relax
- \edef#2{\the\@dtl@toks\@dtl@intpart\@dtl@decimal\@dtl@fracpart0}%
- \else
- \edef#2{\the\@dtl@toks\@dtl@intpart\@dtl@decimal\@dtl@fracpart}%
- \fi
- \fi
-\fi
+\define@boolkey{datatool.sty}[dtl]{verbose}[true]{}
+\define@choicekey{datatool.sty}{math}[\val\nr]{fp,pgfmath}{%
+ \renewcommand*\@dtl@mathprocessor{#1}%
}
-\@dtl@construct@lopoffs
-\@dtl@construct@getnums
-\expandafter\@dtl@construct@stripnumgrpchar\expandafter
-{\@dtl@numbergroupchar}
-\define@key{datatool.sty}{separator}{%
-\DTLsetseparator{#1}}
-\define@key{datatool.sty}{delimiter}{%
-\DTLsetdelimiter{#1}}
-\define@boolkey{datatool.sty}[dtl]{verbose}[true]{%
-\ifdtlverbose \FPmessagestrue\else \FPmessagesfalse\fi}
-\newcommand*{\dtl@message}[1]{%
-\ifdtlverbose\typeout{#1}\fi}
+\newcommand*{\@dtl@mathprocessor}{fp}
\ProcessOptionsX
+\@dtl@construct@lopoffs
+\RequirePackage{datatool-base}
\DeclareRobustCommand\DTLpar{\@par}
-\newcount\@dtl@datatype
-\newcount\@dtl@tmpcount
-\newlength\dtl@tmplength
-\newcount\@dtl@numgrpsepcount
-\newcommand{\@dtl@checknumerical}[1]{%
-\@dtl@numgrpsepfalse
-\def\@dtl@tmp{#1}%
-\ifx\@empty#1\@empty
- \@dtl@datatype=0\relax
-\else
- \dtl@ifsingle{#1}%
- {\expandafter\toks@\expandafter{#1}%
- \edef\@dtl@tmp{\the\toks@}}%
- {\def\@dtl@tmp{#1}}%
- \@dtl@tmpcount=0\relax
- \@dtl@datatype=0\relax
- \@dtl@numgrpsepcount=2\relax
- \@dtl@standardize@currency\@dtl@tmp
- \ifx\@dtl@org@currency\@empty
- \else
- \let\@dtl@currency\@dtl@org@currency
- \fi
- \expandafter\@dtl@checknumericalstart\@dtl@tmp\@nil\@nil
-\fi
-\ifnum\@dtl@numgrpsepcount>-1\relax
- \if@dtl@numgrpsep
- \ifnum\@dtl@numgrpsepcount=3\relax
- \else
- \@dtl@datatype=0\relax
- \fi
- \fi
-\fi
-}
-\def\@dtl@checknumericalstart#1#2\@nil\@nil{%
-\ifx#1\protect
- \@dtl@checknumericalstart#2\@nil\@nil\relax
-\else
- \ifx-#1\relax
- \def\@dtl@tmp{#2}%
- \ifx\@empty\@dtl@tmp
- \@dtl@datatype=0\relax
- \else
- \ifnum\@dtl@datatype=0\relax
- \@dtl@datatype=1\relax
- \fi
- \@dtl@checknumericalstart#2\@nil\@nil\relax
- \fi
- \else
- \ifx+#1\relax
- \def\@dtl@tmp{#2}%
- \ifx\@empty\@dtl@tmp
- \@dtl@datatype=0\relax
- \else
- \ifnum\@dtl@datatype=0\relax
- \@dtl@datatype=1\relax
- \fi
- \@dtl@checknumericalstart#2\@nil\@nil\relax
- \fi
- \else
- \def\@dtl@tmp{#1}%
- \ifx#1\$\relax
- \@dtl@datatype=3\relax
- \@dtl@checknumericalstart#2\@nil\@nil\relax
- \else
- \ifx\@empty\@dtl@tmp
- \@dtl@datatype=0\relax
- \else
- \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]{%
-\ifx0#1\relax
- #2%
-\else
- \ifx1#1\relax
- #2%
- \else
- \ifx2#1\relax
- #2%
- \else
- \ifx3#1\relax
- #2%
- \else
- \ifx4#1\relax
- #2%
- \else
- \ifx5#1\relax
- #2%
- \else
- \ifx6#1\relax
- #2%
- \else
- \ifx7#1\relax
- #2%
- \else
- \ifx8#1\relax
- #2%
- \else
- \ifx9#1\relax
- #2%
- \else
- \expandafter\ifx\@dtl@decimal#1\relax
- #2%
- \else
- #3%
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
-\fi
-}
-\def\@dtl@checknumericalloop#1#2\@nil{%
-\def\@dtl@tmp{#1}%
-\ifx\@nnil\@dtl@tmp\relax
- \let\@dtl@chcknumnext=\@dtl@checknumericalnoop%
-\else
- \@dtl@ifDigitOrDecimalSep{#1}{%
- \let\@dtl@chcknumnext=\@dtl@checknumericalloop%
- \expandafter\ifx\@dtl@decimal#1\relax
- \if@dtl@numgrpsep
- \ifnum\@dtl@numgrpsepcount=3\relax
- \@dtl@numgrpsepcount=-1\relax
- \else
- \@dtl@datatype=0\relax
- \let\@dtl@chcknumnext=\@dtl@checknumericalnoop
- \fi
- \else
- \@dtl@numgrpsepcount=-1\relax
- \fi
- \else
- \ifnum\@dtl@numgrpsepcount=-1\relax
- \else
- \advance\@dtl@numgrpsepcount by 1\relax
- \fi
- \fi
-}{%
-\ifx\@dtl@numbergroupchar\@dtl@tmp\relax
- \@dtl@numgrpseptrue
- \ifnum\@dtl@numgrpsepcount<3\relax
- \@dtl@datatype=0\relax
- \let\@dtl@chcknumnext=\@dtl@checknumericalnoop
- \else
- \@dtl@numgrpsepcount=0\relax
- \fi
-\else
- \@dtl@datatype=0\relax
- \let\@dtl@chcknumnext=\@dtl@checknumericalnoop
-\fi
-}%
- \ifx\@dtl@decimal\@dtl@tmp\relax
- \ifnum\@dtl@datatype<3\relax
- \@dtl@datatype=2\relax
- \fi
- \advance\@dtl@tmpcount by 1\relax
- \ifnum\@dtl@tmpcount>1\relax
- \@dtl@datatype=0\relax
- \let\@dtl@chcknumnext=\@dtl@checknumericalnoop%
- \fi
- \fi
-\fi
-\@dtl@chcknumnext#2\@nil
-}
-\def\@dtl@checknumericalnoop#1\@nil#2{}
-\newcommand{\DTLifnumerical}[3]{%
-\@dtl@checknumerical{#1}%
-\ifnum\@dtl@datatype=0\relax#3\else#2\fi
-}
-\newcommand{\DTLifreal}[3]{%
-\@dtl@checknumerical{#1}%
-\ifnum\@dtl@datatype=2\relax #2\else #3\fi
-}
-\newcommand{\DTLifint}[3]{%
-\@dtl@checknumerical{#1}%
-\ifnum\@dtl@datatype=1\relax #2\else #3\fi
-}
-\newcommand{\DTLifstring}[3]{%
-\@dtl@checknumerical{#1}%
-\ifnum\@dtl@datatype=0\relax #2\else #3\fi
-}
-\newcommand{\DTLifcurrency}[3]{%
-\@dtl@checknumerical{#1}%
-\ifnum\@dtl@datatype=3\relax #2\else #3\fi
-}
-\newcommand*{\DTLifcurrencyunit}[4]{%
-\@dtl@checknumerical{#1}%
-\ifnum\@dtl@datatype=3\relax
- \ifthenelse{\equal{\@dtl@org@currency}{#2}}{#3}{#4}%
-\else
- #4%
-\fi
-}
-\newcommand{\DTLifcasedatatype}[5]{%
-\@dtl@checknumerical{#1}%
-\ifcase\@dtl@datatype
- #2% string
-\or
- #3% integer
-\or
- #4% number
-\or
- #5% currency
-\fi
-}
-\newcommand*{\dtl@testbothnumerical}[2]{%
-\dtl@ifsingle{#1}{%
- \edef\@dtl@tmp{#1}}{%
- \def\@dtl@tmp{#1}}%
-\expandafter\@dtl@checknumerical\expandafter{\@dtl@tmp}%
-\edef\@dtl@firsttype{\number\@dtl@datatype}%
-\dtl@ifsingle{#2}{%
- \edef\@dtl@tmp{#2}}{%
- \def\@dtl@tmp{#2}}%
-\expandafter\@dtl@checknumerical\expandafter{\@dtl@tmp}%
-\multiply\@dtl@datatype by \@dtl@firsttype\relax
-\ifnum\@dtl@datatype>0\relax
- \@dtl@conditiontrue
-\else
- \@dtl@conditionfalse
-\fi
-}
-\newcommand*{\DTLifnumlt}[4]{%
- \DTLconverttodecimal{#1}{\@dtl@numi}%
- \DTLconverttodecimal{#2}{\@dtl@numii}%
- \FPiflt{\@dtl@numi}{\@dtl@numii}%
- #3%
- \else
- #4%
- \fi
-}
-\newcommand*{\dtlcompare}[3]{%
-\dtl@subnobrsp{#2}{\@dtl@argA}%
-\dtl@subnobrsp{#3}{\@dtl@argB}%
-\ifx\@dtl@argA\@empty
- \ifx\@dtl@argB\@empty
- #1=0\relax
- \else
- #1=-1\relax
- \fi
-\else
- \ifx\@dtl@argB\@empty
- #1=1\relax
- \else
- \DTLsubstituteall{\@dtl@argA}{ }{\space }%
- \DTLsubstituteall{\@dtl@argB}{ }{\space }%
- \expandafter\dtl@getfirst\@dtl@argA\end
- \let\dtl@firstA=\dtl@first
- \let\dtl@restA=\dtl@rest
- \expandafter\dtl@getfirst\@dtl@argB\end
- \let\dtl@firstB=\dtl@first
- \let\dtl@restB=\dtl@rest
- \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}{%
- \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}{%
- \expandafter\dtl@setcharcode\expandafter{\dtl@firstA}{\dtl@codeA}%
- \expandafter\dtl@setcharcode\expandafter{\dtl@firstB}{\dtl@codeB}%
- \ifnum\dtl@codeA=-1\relax
- \ifnum\dtl@codeB=-1\relax
- \protected@edef\dtl@donext{%
- \noexpand\dtlcompare{\noexpand#1}{\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \protected@edef\dtl@donext{%
- \noexpand\dtlcompare
- {\noexpand#1}{\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- \fi
- \else
- \ifnum\dtl@codeB=-1\relax
- \protected@edef\dtl@donext{%
- \noexpand\dtlcompare
- {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \ifnum\dtl@codeA<\dtl@codeB
- #1=-1\relax
- \else
- \ifnum\dtl@codeA>\dtl@codeB
- #1=1\relax
- \else
- \ifx\dtl@restA\@empty
- \ifx\dtl@restB\@empty
- #1=0\relax
- \else
- #1=-1\relax
- \fi
- \else
- \ifx\restB\@empty
- #1=1\relax
- \else
- \protected@edef\dtl@donext{%
- \noexpand\dtlcompare
- {\noexpand#1}{\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- }{%
- \protected@edef\dtl@donext{%
- \noexpand\dtlcompare
- {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- }}{%
- \protected@edef\dtl@donext{%
- \noexpand\dtlcompare
- {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- }%
- \fi
-\fi
-}
-\def\dtl@getfirst#1#2\end{%
-\def\dtl@first{#1}%
-\ifx\dtl@first\@empty
- \def\dtl@rest{#2}%
-\else
- \dtl@ifsingle{#1}{\def\dtl@rest{#2}}{\dtl@getfirst#1#2\end}%
-\fi
-}
-\newcount\dtl@codeA
-\newcount\dtl@codeB
-\newcommand*{\dtl@setcharcode}[2]{%
-\def\@dtl@tmp{#1}%
-\ifx\@dtl@tmp\@empty
- #2=-1\relax
-\else
- \ifx#1\space\relax
- #2=`\ \relax
- \else
- \ifx#1~\relax
- #2=`\ \relax
- \else
- \ifcat\noexpand#1\relax%
- #2=-1\relax
- \else
- #2=`#1\relax
- \fi
- \fi
- \fi
-\fi
-}
-\newcommand*{\dtl@setlccharcode}[2]{%
-\def\@dtl@tmp{#1}%
-\ifx\@dtl@tmp\@empty
- #2=-1\relax
-\else
- \ifx#1\space\relax
- #2=`\ \relax
- \else
- \ifx#1~\relax
- #2=`\ \relax
- \else
- \ifcat\noexpand#1\relax%
- #2=-1\relax
- \else
- #2=\lccode`#1\relax
- \fi
- \fi
- \fi
-\fi
-}
-\newcommand*{\dtlicompare}[3]{%
-\dtl@subnobrsp{#2}{\@dtl@argA}%
-\dtl@subnobrsp{#3}{\@dtl@argB}%
-\ifx\@dtl@argA\@empty
- \ifx\@dtl@argB\@empty
- #1=0\relax
- \else
- #1=-1\relax
- \fi
-\else
- \ifx\@dtl@argB\@empty
- #1=1\relax
- \else
- \DTLsubstituteall{\@dtl@argA}{ }{\space }%
- \DTLsubstituteall{\@dtl@argB}{ }{\space }%
- \expandafter\dtl@getfirst\@dtl@argA\end
- \let\dtl@firstA=\dtl@first
- \let\dtl@restA=\dtl@rest
- \expandafter\dtl@getfirst\@dtl@argB\end
- \let\dtl@firstB=\dtl@first
- \let\dtl@restB=\dtl@rest
- \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}{%
- \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}{%
- \expandafter\dtl@setlccharcode\expandafter{\dtl@firstA}{\dtl@codeA}%
- \expandafter\dtl@setlccharcode\expandafter{\dtl@firstB}{\dtl@codeB}%
- \ifnum\dtl@codeA=-1\relax
- \ifnum\dtl@codeB=-1\relax
- \protected@edef\dtl@donext{%
- \noexpand\dtlicompare{\noexpand#1}{\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \protected@edef\dtl@donext{%
- \noexpand\dtlicompare
- {\noexpand#1}{\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- \fi
- \else
- \ifnum\dtl@codeB=-1\relax
- \protected@edef\dtl@donext{%
- \noexpand\dtlicompare
- {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \ifnum\dtl@codeA<\dtl@codeB
- #1=-1\relax
- \else
- \ifnum\dtl@codeA>\dtl@codeB
- #1=1\relax
- \else
- \ifx\dtl@restA\@empty
- \ifx\dtl@restB\@empty
- #1=0\relax
- \else
- #1=-1\relax
- \fi
- \else
- \ifx\restB\@empty
- #1=1\relax
- \else
- \protected@edef\dtl@donext{%
- \noexpand\dtlicompare
- {\noexpand#1}{\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \fi
- \fi
- \fi
- \fi
- \fi
- \fi
- }{%
- \protected@edef\dtl@donext{%
- \noexpand\dtlicompare
- {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- }}{%
- \protected@edef\dtl@donext{%
- \noexpand\dtlicompare
- {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- }%
- \fi
-\fi
-}
-\newcommand*{\DTLifstringlt}{\@ifstar\@sDTLifstringlt\@DTLifstringlt}
-\newcommand*{\@DTLifstringlt}[4]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\ifnum\@dtl@tmpcount<0\relax
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\@sDTLifstringlt}[4]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\ifnum\@dtl@tmpcount<0\relax
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\DTLiflt}{\@ifstar\@sDTLiflt\@DTLiflt}
-\newcommand*{\@DTLiflt}[4]{%
-\dtl@testbothnumerical{#1}{#2}%
-\if@dtl@condition
- \DTLifnumlt{#1}{#2}{#3}{#4}%
-\else
- \@DTLifstringlt{#1}{#2}{#3}{#4}%
-\fi
-}
-\newcommand*{\@sDTLiflt}[4]{%
-\dtl@testbothnumerical{#1}{#2}%
-\if@dtl@condition
- \DTLifnumlt{#1}{#2}{#3}{#4}%
-\else
- \@sDTLifstringlt{#1}{#2}{#3}{#4}%
-\fi
-}
-\newcommand*{\DTLifnumgt}[4]{%
- \DTLconverttodecimal{#1}{\@dtl@numi}%
- \DTLconverttodecimal{#2}{\@dtl@numii}%
- \FPifgt{\@dtl@numi}{\@dtl@numii}%
- #3%
- \else
- #4%
- \fi
-}
-\newcommand*{\DTLifstringgt}{\@ifstar\@sDTLifstringgt\@DTLifstringgt}
-\newcommand*{\@DTLifstringgt}[4]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\ifnum\@dtl@tmpcount>0\relax
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\@sDTLifstringgt}[4]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\ifnum\@dtl@tmpcount>0\relax
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\DTLifgt}{\@ifstar\@sDTLifgt\@DTLifgt}
-\newcommand*{\@DTLifgt}[4]{%
-\dtl@testbothnumerical{#1}{#2}%
-\if@dtl@condition
- \DTLifnumgt{#1}{#2}{#3}{#4}%
-\else
- \@DTLifstringgt{#1}{#2}{#3}{#4}%
-\fi
-}
-\newcommand*{\@sDTLifgt}[4]{%
-\dtl@testbothnumerical{#1}{#2}%
-\if@dtl@condition
- \DTLifnumgt{#1}{#2}{#3}{#4}%
-\else
- \@sDTLifstringgt{#1}{#2}{#3}{#4}%
-\fi
-}
-\newcommand*{\DTLifnumeq}[4]{%
- \DTLconverttodecimal{#1}{\@dtl@numi}%
- \DTLconverttodecimal{#2}{\@dtl@numii}%
- \FPifeq{\@dtl@numi}{\@dtl@numii}%
- #3%
- \else
- #4%
- \fi
-}
-\newcommand*{\DTLifstringeq}{\@ifstar\@sDTLifstringeq\@DTLifstringeq}
-\newcommand*{\@DTLifstringeq}[4]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\ifnum\@dtl@tmpcount=0\relax
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\@sDTLifstringeq}[4]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\ifnum\@dtl@tmpcount=0\relax
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\DTLifeq}{\@ifstar\@sDTLifeq\@DTLifeq}
-\newcommand*{\@DTLifeq}[4]{%
-\dtl@testbothnumerical{#1}{#2}%
-\if@dtl@condition
- \DTLifnumeq{#1}{#2}{#3}{#4}%
-\else
- \@DTLifstringeq{#1}{#2}{#3}{#4}%
-\fi
-}
-\newcommand*{\@sDTLifeq}[4]{%
-\dtl@testbothnumerical{#1}{#2}%
-\if@dtl@condition
- \DTLifnumeq{#1}{#2}{#3}{#4}%
-\else
- \@sDTLifstringeq{#1}{#2}{#3}{#4}%
-\fi
-}
-\newcommand*{\DTLifSubString}[4]{%
-\protected@edef\@dtl@tmp{\noexpand\dtl@testifsubstring
-{#1}{#2}}%
-\@dtl@tmp
-\if@dtl@condition
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\dtl@testifsubstring}[2]{%
-\dtl@subnobrsp{#1}{\@dtl@argA}%
-\dtl@subnobrsp{#2}{\@dtl@argB}%
-\ifx\@dtl@argB\@empty
- \@dtl@conditiontrue
-\else
- \ifx\@dtl@argA\@empty
- \@dtl@conditionfalse
- \else
- \dtl@teststartswith{#1}{#2}%
- \if@dtl@condition
- \else
- \DTLsubstituteall{\@dtl@argA}{ }{\space }%
- \expandafter\dtl@getfirst\@dtl@argA\end
- \expandafter\dtl@ifsingle\expandafter{\dtl@first}{%
- \expandafter\dtl@testifsubstring\expandafter{\dtl@rest}{#2}%
- }{%
- \protected@edef\@dtl@donext{\noexpand\dtl@testifsubstring
- {\dtl@first\dtl@rest}{\@dtl@argB}}%
- \@dtl@donext
- }%
- \fi
- \fi
-\fi
-}
-\newcommand*{\DTLifStartsWith}[4]{%
-\@dtl@conditionfalse
-\protected@edef\@dtl@tmp{\noexpand\dtl@teststartswith{#1}{#2}}%
-\@dtl@tmp
-\if@dtl@condition
- #3%
-\else
- #4%
-\fi
-}
-\newcommand*{\dtl@teststartswith}[2]{%
-\dtl@subnobrsp{#1}{\@dtl@argA}%
-\dtl@subnobrsp{#2}{\@dtl@argB}%
-\ifx\@dtl@argA\@empty
- \ifx\@dtl@argB\@empty
- \@dtl@conditiontrue
- \else
- \@dtl@conditionfalse
- \fi
-\else
- \ifx\@dtl@argB\@empty
- \@dtl@conditiontrue
- \else
- \DTLsubstituteall{\@dtl@argA}{ }{\space }%
- \DTLsubstituteall{\@dtl@argB}{ }{\space }%
- \expandafter\dtl@getfirst\@dtl@argA\end
- \let\dtl@firstA=\dtl@first
- \let\dtl@restA=\dtl@rest
- \expandafter\dtl@getfirst\@dtl@argB\end
- \let\dtl@firstB=\dtl@first
- \let\dtl@restB=\dtl@rest
- \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}{%
- \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}{%
- \expandafter\dtl@setcharcode\expandafter{\dtl@firstA}{\dtl@codeA}%
- \expandafter\dtl@setcharcode\expandafter{\dtl@firstB}{\dtl@codeB}%
- \ifnum\dtl@codeA=-1\relax
- \ifnum\dtl@codeB=-1\relax
- \protected@edef\dtl@donext{%
- \noexpand\dtl@teststartswith{\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \protected@edef\dtl@donext{%
- \noexpand\dtl@teststartswith
- {\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- \fi
- \else
- \ifnum\dtl@codeB=-1\relax
- \protected@edef\dtl@donext{%
- \noexpand\dtl@teststartswith
- {\dtl@firstA\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \ifnum\dtl@codeA=\dtl@codeB
- \protected@edef\dtl@donext{%
- \noexpand\dtl@teststartswith{\dtl@restA}{\dtl@restB}}%
- \dtl@donext
- \else
- \@dtl@conditionfalse
- \fi
- \fi
- \fi
- }{%
- \protected@edef\dtl@donext{%
- \noexpand\dtl@teststartswith
- {\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}%
- \dtl@donext
- }}{%
- \protected@edef\dtl@donext{%
- \noexpand\dtl@teststartswith
- {\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}%
- }%
- \fi
-\fi
-}
-\newcommand*{\DTLifnumclosedbetween}[5]{%
-\DTLconverttodecimal{#1}{\@dtl@numi}%
-\DTLconverttodecimal{#2}{\@dtl@numii}%
-\DTLconverttodecimal{#3}{\@dtl@numiii}%
-\DTLifFPclosedbetween{\@dtl@numi}{\@dtl@numii}{\@dtl@numiii}{#4}{#5}%
-}
-\newcommand*{\DTLifstringclosedbetween}{%
-\@ifstar\@sDTLifstringclosedbetween\@DTLifstringclosedbetween}
-\newcommand*{\@DTLifstringclosedbetween}[5]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\let\@dtl@dovalue\relax
-\ifnum\@dtl@tmpcount<0\relax
- \def\@dtl@dovalue{#5}%
-\fi
-\ifx\@dtl@dovalue\relax
- \protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#3}}%
- \@dtl@tmpcmp
- \ifnum\@dtl@tmpcount>0\relax
- \def\@dtl@dovalue{#5}%
- \else
- \def\@dtl@dovalue{#4}%
- \fi
-\fi
-\@dtl@dovalue
-}
-\newcommand*{\@sDTLifstringclosedbetween}[5]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\let\@dtl@dovalue\relax
-\ifnum\@dtl@tmpcount<0\relax
- \def\@dtl@dovalue{#5}%
-\fi
-\ifx\@dtl@dovalue\relax
- \protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#3}}%
- \@dtl@tmpcmp
- \ifnum\@dtl@tmpcount>0\relax
- \def\@dtl@dovalue{#5}%
- \else
- \def\@dtl@dovalue{#4}%
- \fi
-\fi
-\@dtl@dovalue
-}
-\newcommand*{\DTLifclosedbetween}{%
-\@ifstar\@sDTLifclosedbetween\@DTLifclosedbetween}
-\newcommand*{\@DTLifclosedbetween}[5]{%
-\dtl@testbothnumerical{#2}{#3}%
-\if@dtl@condition
- \dtl@ifsingle{#1}{%
- \edef\@dtl@tmp{#1}}{%
- \def\@dtl@tmp{#1}}%
- \expandafter\@dtl@checknumerical\expandafter{\@dtl@tmp}%
- \ifnum\@dtl@datatype>0\relax
- \DTLifnumclosedbetween{#1}{#2}{#3}{#4}{#5}%
- \else
- \@DTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
- \fi
-\else
- \@DTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
-\fi
-}
-\newcommand*{\@sDTLifclosedbetween}[5]{%
-\dtl@testbothnumerical{#2}{#3}%
-\if@dtl@condition
- \dtl@ifsingle{#1}{%
- \edef\@dtl@tmp{#1}}{%
- \def\@dtl@tmp{#1}}%
- \expandafter\@dtl@checknumerical\expandafter{\@dtl@tmp}%
- \ifnum\@dtl@datatype>0\relax
- \DTLifnumclosedbetween{#1}{#2}{#3}{#4}{#5}%
- \else
- \@sDTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
- \fi
-\else
- \@sDTLifstringclosedbetween{#1}{#2}{#3}{#4}{#5}%
-\fi
-}
-\newcommand*{\DTLifnumopenbetween}[5]{%
-\DTLconverttodecimal{#1}{\@dtl@numi}%
-\DTLconverttodecimal{#2}{\@dtl@numii}%
-\DTLconverttodecimal{#3}{\@dtl@numiii}%
-\DTLifFPopenbetween{\@dtl@numi}{\@dtl@numii}{\@dtl@numiii}{#4}{#5}%
-}
-\newcommand*{\DTLifstringopenbetween}{%
-\@ifstar\@sDTLifstringopenbetween\@DTLifstringopenbetween}
-\newcommand*{\@DTLifstringopenbetween}[5]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\let\@dtl@dovalue\relax
-\ifnum\@dtl@tmpcount>0\relax
-\else
- \def\@dtl@dovalue{#5}%
-\fi
-\ifx\@dtl@dovalue\relax
- \protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlcompare{\noexpand\@dtl@tmpcount}{#1}{#3}}%
- \@dtl@tmpcmp
- \ifnum\@dtl@tmpcount<0\relax
- \def\@dtl@dovalue{#4}%
- \else
- \def\@dtl@dovalue{#5}%
- \fi
-\fi
-\@dtl@dovalue
-}
-\newcommand*{\@sDTLifstringopenbetween}[5]{%
-\protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#2}}%
-\@dtl@tmpcmp
-\let\@dtl@dovalue\relax
-\ifnum\@dtl@tmpcount>0\relax
-\else
- \def\@dtl@dovalue{#5}%
-\fi
-\ifx\@dtl@dovalue\relax
- \protected@edef\@dtl@tmpcmp{%
- \noexpand\dtlicompare{\noexpand\@dtl@tmpcount}{#1}{#3}}%
- \@dtl@tmpcmp
- \ifnum\@dtl@tmpcount<0\relax
- \def\@dtl@dovalue{#4}%
- \else
- \def\@dtl@dovalue{#5}%
- \fi
-\fi
-\@dtl@dovalue
-}
-\newcommand*{\DTLifopenbetween}{%
-\@ifstar\@sDTLifopenbetween\@DTLifopenbetween}
-\newcommand*{\@DTLifopenbetween}[5]{%
-\dtl@testbothnumerical{#2}{#3}%
-\if@dtl@condition
- \dtl@ifsingle{#1}{%
- \edef\@dtl@tmp{#1}}{%
- \def\@dtl@tmp{#1}}%
- \expandafter\@dtl@checknumerical\expandafter{\@dtl@tmp}%
- \ifnum\@dtl@datatype>0\relax
- \DTLifnumopenbetween{#1}{#2}{#3}{#4}{#5}%
- \else
- \@DTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
- \fi
-\else
- \@DTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
-\fi
-}
-\newcommand*{\@sDTLifopenbetween}[5]{%
-\dtl@testbothnumerical{#2}{#3}%
-\if@dtl@condition
- \dtl@ifsingle{#1}{%
- \edef\@dtl@tmp{#1}}{%
- \def\@dtl@tmp{#1}}%
- \expandafter\@dtl@checknumerical\expandafter{\@dtl@tmp}%
- \ifnum\@dtl@datatype>0\relax
- \DTLifnumopenbetween{#1}{#2}{#3}{#4}{#5}%
- \else
- \@sDTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
- \fi
-\else
- \@sDTLifstringopenbetween{#1}{#2}{#3}{#4}{#5}%
-\fi
-}
-\newcommand*{\DTLifFPopenbetween}[5]{%
- \let\@dtl@dovalue\relax
- \FPifgt{#1}{#2}%
- \else
- \def\@dtl@dovalue{#5}%
- \fi
- \FPiflt{#1}{#3}%
- \ifx\@dtl@dovalue\relax
- \def\@dtl@dovalue{#4}%
- \fi
- \else
- \def\@dtl@dovalue{#5}%
- \fi
-\@dtl@dovalue
-}
-\newcommand*{\DTLifFPclosedbetween}[5]{%
- \let\@dtl@dovalue\relax
- \FPifgt{#1}{#3}%
- \def\@dtl@dovalue{#5}%
- \fi
- \FPiflt{#1}{#2}%
- \ifx\@dtl@dovalue\relax
- \def\@dtl@dovalue{#5}%
- \fi
- \else
- \def\@dtl@dovalue{#4}%
- \fi
-\@dtl@dovalue
-}
-\newcommand{\DTLiffirstrow}[2]{%
- \PackageError{datatool}{\string\DTLiffirstrow\space can only
- be used inside \string\DTLforeach}{}%
-}
-\newcommand{\DTLiflastrow}[2]{%
- \PackageError{datatool}{\string\DTLiflastrow\space can only
- be used inside \string\DTLforeach}{}%
-}
-\newcommand{\DTLifoddrow}[2]{%
- \PackageError{datatool}{\string\DTLifoddrow\space can only
- be used inside \string\DTLforeach}{}%
-}
-\newif\if@dtl@condition
-\newcommand*{\dtl@testlt}[2]{%
-\DTLiflt{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLislt}[2]{%
-\TE@throw\noexpand\dtl@testlt{#1}{#2}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testiclt}[2]{%
-\@sDTLiflt{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisilt}[2]{%
-\TE@throw\noexpand\dtl@testiclt{#1}{#2}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testgt}[2]{%
-\DTLifgt{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisgt}[2]{%
-\TE@throw\noexpand\dtl@testgt{#1}{#2}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testicgt}[2]{%
-\@sDTLifgt{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisigt}[2]{%
-\TE@throw\noexpand\dtl@testicgt{#1}{#2}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testeq}[2]{%
-\DTLifeq{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLiseq}[2]{%
-\TE@throw\noexpand\dtl@testeq{#1}{#2}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testiceq}[2]{%
-\@sDTLifeq{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisieq}[2]{%
-\TE@throw\noexpand\dtl@testiceq{#1}{#2}\noexpand\if@dtl@condition}
-\newcommand*{\DTLisSubString}[2]{%
-\TE@throw\noexpand\dtl@testifsubstring{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\DTLisPrefix}[2]{%
-\TE@throw\noexpand\dtl@teststartswith{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testclosedbetween}[3]{%
-\DTLifclosedbetween{#1}{#2}{#3}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisclosedbetween}[3]{%
-\TE@throw\noexpand\dtl@testclosedbetween{#1}{#2}{#3}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testiclosedbetween}[3]{%
-\@sDTLifclosedbetween{#1}{#2}{#3}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisiclosedbetween}[3]{%
-\TE@throw\noexpand\dtl@testiclosedbetween{#1}{#2}{#3}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testopenbetween}[3]{%
-\DTLifopenbetween{#1}{#2}{#3}{\@dtl@conditiontrue
-}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisopenbetween}[3]{%
-\TE@throw\noexpand\dtl@testopenbetween{#1}{#2}{#3}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testiopenbetween}[3]{%
-\@sDTLifopenbetween{#1}{#2}{#3}{\@dtl@conditiontrue
-}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisiopenbetween}[3]{%
-\TE@throw\noexpand\dtl@testiopenbetween{#1}{#2}{#3}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPclosedbetween}[3]{%
-\DTLifFPclosedbetween{#1}{#2}{#3}%
-{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisFPclosedbetween}[3]{%
-\TE@throw\noexpand\dtl@testFPclosedbetween{#1}{#2}{#3}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPopenbetween}[3]{%
-\DTLifFPopenbetween{#1}{#2}{#3}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisFPopenbetween}[3]{%
-\TE@throw\noexpand\dtl@testFPopenbetween{#1}{#2}{#3}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPislt}[2]{%
-\FPiflt{#1}{#2}\@dtl@conditiontrue\else\@dtl@conditionfalse\fi}
-\newcommand*{\DTLisFPlt}[2]{%
-\TE@throw\noexpand\dtl@testFPislt{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPisgt}[2]{%
-\FPifgt{#1}{#2}\@dtl@conditiontrue\else\@dtl@conditionfalse\fi}
-\newcommand*{\DTLisFPgt}[2]{%
-\TE@throw\noexpand\dtl@testFPisgt{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPiseq}[2]{%
-\FPifeq{#1}{#2}\@dtl@conditiontrue\else\@dtl@conditionfalse\fi}
-\newcommand*{\DTLisFPeq}[2]{%
-\TE@throw\noexpand\dtl@testFPiseq{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPislteq}[2]{%
-\FPiflt{#1}{#2}\@dtl@conditiontrue\else\@dtl@conditionfalse\fi
-\if@dtl@condition
-\else
- \dtl@testFPiseq{#1}{#2}%
-\fi
-}
-\newcommand*{\DTLisFPlteq}[2]{%
-\TE@throw\noexpand\dtl@testFPislteq{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testFPisgteq}[2]{%
-\FPifgt{#1}{#2}\@dtl@conditiontrue\else\@dtl@conditionfalse\fi
-\if@dtl@condition
-\else
- \dtl@testFPiseq{#1}{#2}%
-\fi
-}
-\newcommand*{\DTLisFPgteq}[2]{%
-\TE@throw\noexpand\dtl@testFPisgteq{#1}{#2}%
-\noexpand\if@dtl@condition}
-\newcommand*{\dtl@teststring}[1]{%
-\DTLifstring{#1}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisstring}[1]{%
-\TE@throw\noexpand\dtl@teststring{#1}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testnumerical}[1]{%
-\DTLifnumerical{#1}{\@dtl@conditiontrue}{\@dtl@conditionfalse}%
-}
-\newcommand*{\DTLisnumerical}[1]{%
-\TE@throw\noexpand\dtl@testnumerical{#1}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testint}[1]{%
-\DTLifint{#1}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisint}[1]{%
-\TE@throw\noexpand\dtl@testint{#1}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testreal}[1]{%
-\DTLifreal{#1}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLisreal}[1]{%
-\TE@throw\noexpand\dtl@testreal{#1}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testcurrency}[1]{%
-\DTLifcurrency{#1}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLiscurrency}[1]{%
-\TE@throw\noexpand\dtl@testcurrency{#1}\noexpand\if@dtl@condition}
-\newcommand*{\dtl@testcurrencyunit}[2]{%
-\DTLifcurrencyunit{#1}{#2}{\@dtl@conditiontrue}{\@dtl@conditionfalse}}
-\newcommand*{\DTLiscurrencyunit}[2]{%
-\TE@throw\noexpand\dtl@testcurrencyunit{#1}{#2}%
-\noexpand\if@dtl@condition}
\newcommand*{\DTLnewdb}[1]{%
\DTLifdbexists{#1}%
{%
@@ -1410,9 +165,11 @@
}%
}
\newcommand*{\DTLrowcount}[1]{%
-\expandafter\number\csname dtlrows@#1\endcsname}
+ \expandafter\number\csname dtlrows@#1\endcsname
+}
\newcommand*{\DTLcolumncount}[1]{%
-\expandafter\number\csname dtlcols@#1\endcsname}
+ \expandafter\number\csname dtlcols@#1\endcsname
+}
\newcommand{\DTLifdbempty}[3]{%
\DTLifdbexists{#1}%
{\@DTLifdbempty{#1}{#2}{#3}}%
@@ -1531,10 +288,10 @@
\db@col@id@w #3\db@col@id@end@% index
\db@plist@elt@end@% end of block
##5\q@nil{\def#1{##2}}%
- \edef\@dtl@tmp{\expandafter\the\csname dtldb@#2\endcsname}%
- \expandafter\@dtl@getkeyforcolumn\@dtl@tmp
+ \edef\@dtl@tmp{\expandafter\the\csname dtlkeys@#2\endcsname}%
+ \expandafter\@dtl@get@keyforcolumn\@dtl@tmp
\db@plist@elt@w% start of block
- \db@col@id@w #3\db@col@id@end@ index
+ \db@col@id@w #3\db@col@id@end@ %index
\db@key@id@w \@nil\db@key@id@end@% key
\db@type@id@w \db@type@id@end@% data type
\db@header@id@w \db@header@id@end@% header
@@ -1617,14 +374,17 @@
{\noexpand\@dtl@after}{\the\csname dtlkeys@#1\endcsname}%
{\number\dtlcolumnnum}}
\@dtl@dogetprops
- \def\@dtl@tmp{#3}%
- \ifx\@dtl@tmp\@empty
- \else
+ \ifstrempty{#3}%
+ {%
+ }%
+ {%
\let\@dtl@oldtype\@dtl@type
\@dtl@checknumerical{#3}%
- \ifx\@dtl@type\@empty
+ \ifdefempty{\@dtl@type}%
+ {%
\edef\@dtl@type{\number\@dtl@datatype}%
- \else
+ }%
+ {%
\ifcase\@dtl@datatype % string
\def\@dtl@type{0}%
\or % int
@@ -1637,7 +397,7 @@
\def\@dtl@type{3}%
\fi
\fi
- \fi
+ }%
\ifx\@dtl@oldtype\@dtl@type
\else
\toks@gconcat@middle@cx{dtlkeys@#1}%
@@ -1657,7 +417,7 @@
}%
{\@dtl@after}%
\fi
- \fi
+ }%
}%
{%
\expandafter\global\expandafter\advance
@@ -1665,13 +425,14 @@
\dtlcolumnnum=\csname dtlcols@#1\endcsname\relax
\expandafter\xdef\csname dtl@ci@#1@#2\endcsname{%
\number\dtlcolumnnum}%
- \def\@dtl@tmp{#3}%
- \ifx\@dtl@tmp\@empty
+ \ifstrempty{#2}%
+ {%
\edef\@dtl@type{}% don't know data type yet
- \else
+ }%
+ {%
\@dtl@checknumerical{#3}%
\edef\@dtl@type{\number\@dtl@datatype}%
- \fi
+ }%
\toks@gput@right@cx{dtlkeys@#1}%
{%
\noexpand\db@plist@elt@w
@@ -1792,6 +553,12 @@
}
\newcommand{\DTLifdbexists}[3]{%
\@ifundefined{dtldb@#1}{#3}{#2}}
+\newcommand*{\DTLassign}[3]{%
+ {%
+ \dtlgetrow{#1}{#2}%
+ \@dtl@assign{#3}{#1}%
+ }%
+}
\newcommand*{\@dtl@assign}[2]{%
\@dtl@assigncmd#1,\@nil\@@{#2}%
}
@@ -1896,6 +663,8 @@
\newtoks\dtlbeforerow
\newtoks\dtlafterrow
\newcommand*{\dtlgetrow}[2]{%
+ \dtlrownum=#2\relax
+ \edef\dtldbname{#1}%
\expandafter\toks@\expandafter=\csname dtldb@#1\endcsname
\edef\@dtl@dogetrow{\noexpand\@dtlgetrow{\the\toks@}{\number#2}}%
\@dtl@dogetrow
@@ -1911,6 +680,86 @@
\q@nil{\dtlbeforerow={##1}\dtlcurrentrow={##2}\dtlafterrow={##3}}%
\@dtl@getrow#1\q@nil
}
+\newcommand*{\dtlrecombine}{%
+ \toks@gconcat@middle@cx{dtldb@\dtldbname}%
+ {\dtlbeforerow}%
+ {%
+ \noexpand\db@row@elt@w
+ \noexpand\db@row@id@w
+ \number\dtlrownum
+ \noexpand\db@row@id@end@
+ \the\dtlcurrentrow
+ \noexpand\db@row@id@w
+ \number\dtlrownum
+ \noexpand\db@row@id@end@
+ \noexpand\db@row@elt@end@
+ }%
+ {\dtlafterrow}%
+}
+\newcommand{\dtlrecombineomitcurrent}{%
+ \dtl@decrementrows{\dtlafterrow}{\dtlrownum}
+ \csname dtldb@\dtldbname\endcsname=\dtlbeforerow
+ \toks@gput@right@cx{dtldb@\dtldbname}{\the\dtlafterrow}%
+ \dtl@message{Removed row \number\dtlrownum\space in database
+ `\dtldbname'}%
+}
+\newcommand*{\dtlsplitrow}[4]{%
+ \def\@dtlsplitrow##1%before stuff
+ \db@col@id@w #2\db@col@id@end@% column id
+ ##2% unwanted stuff
+ \db@col@id@w #2\db@col@id@end@% column id
+ ##3% after stuff
+ \q@nil{\def#3{##1}\def#4{##3}}%
+ \@dtlsplitrow#1\q@nil
+}
+\newcommand*{\dtlreplaceentryincurrentrow}[2]{%
+ \edef\@dtl@do@splitrow{\noexpand\dtlsplitrow
+ {\the\dtlcurrentrow}%
+ {\number#2}%
+ {\noexpand\@dtl@before@cs}%
+ {\noexpand\@dtl@after@cs}}%
+ \@dtl@do@splitrow
+ \toks@{#1}%
+ \edef\@dtl@stuff{%
+ \expandonce\@dtl@before@cs
+ \noexpand\db@col@id@w \number#2\noexpand
+ \noexpand\db@col@id@end@% column id
+ \noexpand\db@col@elt@w
+ \the\toks@
+ \noexpand\db@col@elt@end@
+ \noexpand\db@col@id@w \number#2\noexpand
+ \noexpand\db@col@id@end@% column id
+ \expandonce\@dtl@after@cs
+ }%
+ \expandafter\dtlcurrentrow\expandafter{\@dtl@stuff}%
+ \@sdtlgetkeyforcolumn{\@dtl@key}{\dtldbname}{#2}%
+ \@dtl@updatekeys{\dtldbname}{\@dtl@key}{#1}%
+ \dtl@message{Updated \@dtl@key\space -> #1\space in database
+ `\dtldbname'}%
+}
+\newcommand*{\dtlremoveentryincurrentrow}[1]{%
+ \edef\@dtl@do@splitrow{\noexpand\dtlsplitrow
+ {\the\dtlcurrentrow}%
+ {\number#1}%
+ {\noexpand\@dtl@before@cs}%
+ {\noexpand\@dtl@after@cs}}%
+ \@dtl@do@splitrow
+ \edef\@dtl@stuff{%
+ \expandonce\@dtl@before@cs
+ \expandonce\@dtl@after@cs
+ }%
+ \expandafter\dtlcurrentrow\expandafter{\@dtl@stuff}%
+ \dtl@message{Removed entry from column \number#1\space\space in database
+ `\dtldbname'}%
+}
+\newcommand*{\dtlswapentriesincurrentrow}[2]{%
+ \dtlgetentryfromcurrentrow{\@dtl@entryI}{#1}%
+ \dtlgetentryfromcurrentrow{\@dtl@entryII}{#2}%
+ \expandafter\dtlreplaceentryincurrentrow\expandafter
+ {\@dtl@entryII}{#1}%
+ \expandafter\dtlreplaceentryincurrentrow\expandafter
+ {\@dtl@entryI}{#2}%
+}
\newcommand*{\dtlgetentryfromcurrentrow}[2]{%
\dtlgetentryfromrow{#1}{#2}{\dtlcurrentrow}%
}
@@ -1932,6 +781,36 @@
\db@col@id@w #2\db@col@id@end@%
\q@nil
}
+\newcommand*{\dtlappendentrytocurrentrow}[2]{%
+ \@dtl@updatekeys{\dtldbname}{#1}{#2}%
+ \expandafter\dtlcolumnnum\expandafter
+ =\dtlcolumnindex{\dtldbname}{#1}\relax
+ \edef\dtl@dogetentry{\noexpand\dtlgetentryfromcurrentrow
+ {\noexpand\dtl@entry}{\number\dtlcolumnnum}%
+ }%
+ \dtl@dogetentry
+ \ifx\dtl@entry\dtlnovalue
+ \protected@edef\@dtl@tmp{#2}%
+ \expandafter\@dtl@toks\expandafter{\@dtl@tmp}%
+ \toks@gput@right@cx{dtlcurrentrow}%
+ {%
+ \noexpand\db@col@id@w
+ \number\dtlcolumnnum
+ \noexpand\db@col@id@end@
+ \noexpand\db@col@elt@w
+ \the\@dtl@toks
+ \noexpand\db@col@elt@end@
+ \noexpand\db@col@id@w
+ \number\dtlcolumnnum
+ \noexpand\db@col@id@end@
+ }%
+ \dtl@message{Appended #1\space -> #2\space to database
+ `\dtldbname'}%
+ \else
+ \PackageError{datatool}{Can't append entry to row:
+ there is already an entry for key `#1' in this row}{}%
+ \fi
+}
\newcommand*{\DTLgetvalue}[4]{%
\edef\dtl@dogetvalue{\noexpand\dtl@getvalue{\noexpand#1}{#2}%
{\number#3}{\number#4}}%
@@ -1976,63 +855,6 @@
\fi
}
-\newcommand*{\dtlbreak}{%
- \PackageError{datatool}{Can't break out of anything}{}%
-}
-\long\def\dtlforint#1=#2\to#3\step#4\do#5{%
- \let\@dtl@orgbreak\dtlbreak
- \def\@dtl@endloophook{}%
- \def\dtlbreak{\def\@dtl@endloophook{#1=#3}}%
- #1=#2\relax
- \ifnum#4<0\relax
- \whiledo{\(#1>#3\)\TE@or\(#1=#3\)}%
- {%
- #5%
- \@dtl@endloophook
- \advance#1 by #4\relax
- }%
- \else
- \whiledo{\(#1<#3\)\TE@or\(#1=#3\)}%
- {%
- #5%
- \@dtl@endloophook
- \advance#1 by #4\relax
- }%
- \fi
- \let\dtlbreak\@dtl@orgbreak
-}
-\newcount\@dtl@foreach@level
-\long\def\dtlgforint#1=#2\to#3\step#4\do#5{%
- \global#1=#2\relax
- \global\advance\@dtl@foreach@level by 1\relax
- \expandafter\global\expandafter
- \let\csname @dtl@endhook@\the\@dtl@foreach@level\endcsname
- \relax
- \expandafter\global\expandafter
- \let\csname @dtl@break@\the\@dtl@foreach@level\endcsname
- \dtlbreak
- \gdef\dtlbreak{\expandafter
- \gdef\csname @dtl@endhook@\the\@dtl@foreach@level\endcsname{%
- #1=#3}}%
- \ifnum#4<0\relax
- \whiledo{\(#1>#3\)\TE@or\(#1=#3\)}%
- {%
- #5%
- \csname @dtl@endhook@\the\@dtl@foreach@level\endcsname
- \global\advance#1 by #4\relax
- }%
- \else
- \whiledo{\(#1<#3\)\TE@or\(#1=#3\)}%
- {%
- #5%
- \csname @dtl@endhook@\the\@dtl@foreach@level\endcsname
- \global\advance#1 by #4\relax
- }%
- \fi
- \expandafter\global\expandafter\let\expandafter\dtlbreak
- \csname @dtl@break@\the\@dtl@foreach@level\endcsname
- \global\advance\@dtl@foreach@level by -1\relax
-}
\long\def\@dtlforeachrow(#1,#2)\in#3\do#4{%
\edef\dtl@tmp{\expandafter\the\csname dtldb@#3\endcsname}%
\expandafter\@dtl@foreachrow\dtl@tmp
@@ -2240,6 +1062,24 @@
\csname c@DTLrow\romannumeral\@dtl@tmpcount\endcsname}%
\fi
\fi}
+\newenvironment{DTLenvforeach}[3][\boolean{true}]%
+{%
+ \def\@dtlenvforeach@args{[#1]{#2}{#3}}%
+ \long@collect@body\@do@dtlenvforeach
+}%
+{}
+\newcommand{\@do@dtlenvforeach}[1]{%
+ \expandafter\@DTLforeach\@dtlenvforeach@args{#1}%
+}
+\newenvironment{DTLenvforeach*}[3][\boolean{true}]%
+{%
+ \def\s@dtlenvforeach@args{[#1]{#2}{#3}}%
+ \long@collect@body\@do@sdtlenvforeach
+}%
+{}
+\newcommand{\@do@sdtlenvforeach}[1]{%
+ \expandafter\@sDTLforeach\s@dtlenvforeach@args{#1}%
+}
\newcommand*{\DTLforeach}{\@ifstar\@sDTLforeach\@DTLforeach}
\newcommand{\@DTLforeach}[4][\boolean{true}]{%
\DTLifdbexists{#2}%
@@ -2725,6 +1565,18 @@
}%
\fi
}
+\newcommand{\DTLiffirstrow}[2]{%
+ \PackageError{datatool}{\string\DTLiffirstrow\space can only
+ be used inside \string\DTLforeach}{}%
+}
+\newcommand{\DTLiflastrow}[2]{%
+ \PackageError{datatool}{\string\DTLiflastrow\space can only
+ be used inside \string\DTLforeach}{}%
+}
+\newcommand{\DTLifoddrow}[2]{%
+ \PackageError{datatool}{\string\DTLifoddrow\space can only
+ be used inside \string\DTLforeach}{}%
+}
\newcommand*{\dtlbetweencols}{}
\newcommand*{\dtlbeforecols}{}
\newcommand*{\dtlaftercols}{}
@@ -2738,9 +1590,11 @@
\else
\protected@edef#1{#1\dtlbetweencols}%
\fi
- \ifx\@empty#2\@empty
+ \ifstrempty{#2}%
+ {%
\protected@edef#1{#1c}%
- \else
+ }%
+ {%
\ifcase#2\relax
\protected@edef#1{#1\dtlstringalign}%
\or
@@ -2753,7 +1607,7 @@
\protected@edef#1{#1c}%
\PackageError{datatool}{Unknown data type `#2'}{}%
\fi
- \fi
+ }%
\ifnum#3=#4\relax
\protected@edef#1{#1\dtlaftercols}%
\fi
@@ -2768,49 +1622,64 @@
\newcommand*{\dtldisplayafterhead}{}
\newcommand*{\dtldisplaystartrow}{}
-\newcommand*{\DTLdisplaydb}[1]{%
+\newcommand*{\DTLdisplaydb}[2][]{%
\def\@dtl@doamp{\gdef\@dtl@doamp{&}}
\def\@dtl@resetdoamp{\gdef\@dtl@doamp{\gdef\@dtl@doamp{&}}}
\edef\@dtl@maxcols{\expandafter\number
- \csname dtlcols@#1\endcsname}%
+ \csname dtlcols@#2\endcsname}%
+ \DTLnumitemsinlist{#1}{\@dtl@tmp}%
+ \dtlsub{\@dtl@maxcols}{\@dtl@maxcols}{\@dtl@tmp}%
+ \dtlclip{\@dtl@maxcols}{\@dtl@maxcols}%
\def\@dtl@tabargs{}%
\dtlforeachkey(\@dtl@key,\@dtl@idx,\@dtl@type,\@dtl@head)%
- \in{#1}\do
+ \in{#2}\do
{%
- \dtladdalign\@dtl@tabargs\@dtl@type\@dtl@idx\@dtl@maxcols
+ \expandafter\DTLifinlist\expandafter{\@dtl@key}{#1}%
+ {}%
+ {%
+ \dtladdalign\@dtl@tabargs\@dtl@type\@dtl@idx\@dtl@maxcols
+ }
}%
\edef\@dtl@dobegintab{\noexpand\begin{tabular}{\@dtl@tabargs}}%
\@dtl@dobegintab
\dtldisplaystarttab
\@dtl@resetdoamp
\dtlforeachkey(\@dtl@key,\@dtl@idx,\@dtl@type,\@dtl@head)%
- \in{#1}\do
+ \in{#2}\do
{%
- \@dtl@doamp
- \dtlheaderformat{\@dtl@head}%
+ \expandafter\DTLifinlist\expandafter{\@dtl@key}{#1}%
+ {}%
+ {%
+ \@dtl@doamp
+ \dtlheaderformat{\@dtl@head}%
+ }%
}%
\\%
\dtldisplayafterhead
\@dtl@resetdoamp
- \DTLforeach*{#1}{}{%
+ \@sDTLforeach{#2}{}{%
\DTLiffirstrow{}{\\\dtldisplaystartrow}%
\@dtl@resetdoamp
\DTLforeachkeyinrow{\@dtl@val}%
{%
- \global\let\@dtl@val\@dtl@val
- \@dtl@doamp
- \@dtl@datatype=0\dtltype\relax
- \ifcase\@dtl@datatype
- \dtlstringformat\@dtl@val
- \or
- \dtlintformat\@dtl@val
- \or
- \dtlrealformat\@dtl@val
- \or
- \dtlcurrencyformat\@dtl@val
- \else
- \@dtl@val
- \fi
+ \expandafter\DTLifinlist\expandafter{\dtlkey}{#1}%
+ {}%
+ {%
+ \global\let\@dtl@val\@dtl@val
+ \@dtl@doamp
+ \@dtl@datatype=0\dtltype\relax
+ \ifcase\@dtl@datatype
+ \dtlstringformat\@dtl@val
+ \or
+ \dtlintformat\@dtl@val
+ \or
+ \dtlrealformat\@dtl@val
+ \or
+ \dtlcurrencyformat\@dtl@val
+ \else
+ \@dtl@val
+ \fi
+ }%
}%
}%
\dtldisplayendtab
@@ -2822,6 +1691,7 @@
\define@key{displaylong}{label}{\def\@dtl@label{#1}}
\define@key{displaylong}{foot}{\def\@dtl@foot{#1}}
\define@key{displaylong}{lastfoot}{\def\@dtl@lastfoot{#1}}
+\define@key{displaylong}{omit}{\def\@dtl@omitlist{#1}}
\newcommand*{\@dtl@resetdostartrow}{%
\gdef\@dtl@dostartrow{%
\gdef\@dtl@dostartrow{\\\dtldisplaystartrow}}%
@@ -2833,17 +1703,25 @@
\def\@dtl@shortcap{\@dtl@cap}%
\def\@dtl@foot{\@nil}%
\def\@dtl@lastfoot{\@nil}%
+ \def\@dtl@omitlist{}%
\setkeys{displaylong}{#1}%
\def\@dtl@doamp{\gdef\@dtl@doamp{&}}
\def\@dtl@resetdoamp{\gdef\@dtl@doamp{\gdef\@dtl@doamp{&}}}
\@dtl@resetdostartrow
\edef\@dtl@maxcols{\expandafter\number
\csname dtlcols@#2\endcsname}%
+ \DTLnumitemsinlist{\@dtl@omitlist}{\@dtl@tmp}%
+ \dtlsub{\@dtl@maxcols}{\@dtl@maxcols}{\@dtl@tmp}%
+ \dtlclip{\@dtl@maxcols}{\@dtl@maxcols}%
\def\@dtl@tabargs{}%
\dtlforeachkey(\@dtl@key,\@dtl@idx,\@dtl@type,\@dtl@head)%
\in{#2}\do
{%
- \dtladdalign\@dtl@tabargs\@dtl@type\@dtl@idx\@dtl@maxcols
+ \expandafter\DTLifinlist\expandafter{\@dtl@key}{\@dtl@omitlist}%
+ {}%
+ {%
+ \dtladdalign\@dtl@tabargs\@dtl@type\@dtl@idx\@dtl@maxcols
+ }%
}%
\edef\@dtl@dobegintab{\noexpand\begin{longtable}{\@dtl@tabargs}}%
\@dtl@dobegintab
@@ -2860,7 +1738,13 @@
\@dtl@resetdoamp
\dtlforeachkey(\@dtl@key,\@dtl@idx,\@dtl@type,\@dtl@head)%
\in{#2}\do
- {\@dtl@doamp{\dtlheaderformat{\@dtl@head}}}%
+ {%
+ \expandafter\DTLifinlist\expandafter{\@dtl@key}{\@dtl@omitlist}%
+ {}%
+ {%
+ \@dtl@doamp{\dtlheaderformat{\@dtl@head}}%
+ }%
+ }%
\@dtl@resetdoamp
\@dtl@resetdostartrow
\endhead\dtldisplayafterhead
@@ -2874,7 +1758,13 @@
\@dtl@resetdoamp
\dtlforeachkey(\@dtl@key,\@dtl@idx,\@dtl@type,\@dtl@head)%
\in{#2}\do
- {\@dtl@doamp{\dtlheaderformat{\@dtl@head}}}%
+ {%
+ \expandafter\DTLifinlist\expandafter{\@dtl@key}{\@dtl@omitlist}%
+ {}%
+ {%
+ \@dtl@doamp{\dtlheaderformat{\@dtl@head}}%
+ }%
+ }%
\@dtl@resetdoamp
\@dtl@resetdostartrow
\endfirsthead
@@ -2887,28 +1777,38 @@
\@dtl@resetdoamp
\dtlforeachkey(\@dtl@key,\@dtl@idx,\@dtl@type,\@dtl@head)%
\in{#2}\do
- {\@dtl@doamp{\dtlheaderformat{\@dtl@head}}}%
+ {%
+ \expandafter\DTLifinlist\expandafter{\@dtl@key}{\@dtl@omitlist}%
+ {}%
+ {%
+ \@dtl@doamp{\dtlheaderformat{\@dtl@head}}%
+ }%
+ }%
\@dtl@resetdoamp
\@dtl@resetdostartrow
\endhead\dtldisplayafterhead
\fi
- \DTLforeach*{#2}{}{%
+ \@sDTLforeach{#2}{}{%
\@dtl@dostartrow
\@dtl@resetdoamp
\DTLforeachkeyinrow{\@dtl@val}%
{%
\global\let\@dtl@val\@dtl@val
- \@dtl@doamp
- \@dtl@datatype=0\dtltype\relax
- \ifcase\@dtl@datatype
- \dtlstringformat\@dtl@val
- \or
- \dtlintformat\@dtl@val
- \or
- \dtlrealformat\@dtl@val
- \or
- \dtlcurrencyformat\@dtl@val
- \fi
+ \expandafter\DTLifinlist\expandafter{\dtlkey}{\@dtl@omitlist}%
+ {}%
+ {%
+ \@dtl@doamp
+ \@dtl@datatype=0\dtltype\relax
+ \ifcase\@dtl@datatype
+ \dtlstringformat\@dtl@val
+ \or
+ \dtlintformat\@dtl@val
+ \or
+ \dtlrealformat\@dtl@val
+ \or
+ \dtlcurrencyformat\@dtl@val
+ \fi
+ }%
}%
}%
\dtldisplayendtab
@@ -3116,7 +2016,6 @@
}%
}%
\ifnum\@dtl@elements=0\relax
- \PackageError{datatool}{Unable to evaluate mean: no data}{}%
\else
\edef\@dtl@n{\number\@dtl@elements}%
\DTLdiv{#4}{#4}{\@dtl@n}%
@@ -3249,11 +2148,13 @@
\dtlgetentryfromrow{\DTLthisval}{\@dtl@col}{\dtlcurrentrow}%
\expandafter\ifthenelse\expandafter{\@dtl@cond}%
{%
- \ifx#4\@empty
+ \ifstrempty{#4}%
+ {%
\let#4\DTLthisval
- \else
+ }%
+ {%
\DTLmin{#4}{#4}{\DTLthisval}%
- \fi
+ }%
}{}%
}%
}%
@@ -3267,11 +2168,13 @@
{%
\@sdtlforcolumn{\DTLthisval}{#1}{#2}%
{%
- \ifx#3\@empty
+ \ifdefempty{#3}%
+ {%
\let#3\DTLthisval
- \else
+ }%
+ {%
\DTLmin{#3}{#3}{\DTLthisval}%
- \fi
+ }%
}%
}%
{%
@@ -3301,11 +2204,13 @@
\dtlgetentryfromrow{\DTLthisval}{\@dtl@col}{\dtlcurrentrow}%
\expandafter\ifthenelse\expandafter{\@dtl@cond}%
{%
- \ifx#4\@empty
+ \ifdefempty{#4}%
+ {%
\let#4\DTLthisval
- \else
+ }%
+ {%
\DTLmax{#4}{#4}{\DTLthisval}%
- \fi
+ }%
}{}%
}%
}%
@@ -3319,11 +2224,13 @@
{%
\@sdtlforcolumn{\DTLthisval}{#1}{#2}%
{%
- \ifx#3\@empty
+ \ifdefempty{#3}%
+ {%
\let#3\DTLthisval
- \else
+ }%
+ {%
\DTLmax{#3}{#3}{\DTLthisval}%
- \fi
+ }%
}%
}%
{%
@@ -3343,18 +2250,18 @@
\let#8=\relax
\@for\dtl@thisdb:=#2\do{%
\@sDTLforeach[#1]{\dtl@thisdb}{\DTLthisX=#3,\DTLthisY=#4}{%
- \DTLconverttodecimal{\DTLthisX}{\dtl@decx}%
- \DTLconverttodecimal{\DTLthisY}{\dtl@decy}%
+ \expandafter\DTLconverttodecimal\expandafter{\DTLthisX}{\dtl@decx}%
+ \expandafter\DTLconverttodecimal\expandafter{\DTLthisY}{\dtl@decy}%
\ifx#5\relax
\let#5=\dtl@decx
\let#6=\dtl@decy
\let#7=\dtl@decx
\let#8=\dtl@decy
\else
- \FPmin{#5}{#5}{\dtl@decx}%
- \FPmin{#6}{#6}{\dtl@decy}%
- \FPmax{#7}{#7}{\dtl@decx}%
- \FPmax{#8}{#8}{\dtl@decy}%
+ \dtlmin{#5}{#5}{\dtl@decx}%
+ \dtlmin{#6}{#6}{\dtl@decy}%
+ \dtlmax{#7}{#7}{\dtl@decx}%
+ \dtlmax{#8}{#8}{\dtl@decy}%
\fi
}%
}%
@@ -3385,15 +2292,6 @@
}%
}%
}
-\newcommand*{\dtlsplitrow}[4]{%
- \def\@dtlsplitrow##1%before stuff
- \db@col@id@w #2\db@col@id@end@% column id
- ##2% unwanted stuff
- \db@col@id@w #2\db@col@id@end@% column id
- ##3% after stuff
- \q@nil{\def#3{##1}\def#4{##3}}%
- \@dtlsplitrow#1\q@nil
-}
\newtoks\@dtl@list
\newcommand*{\DTLsort}{\@ifstar\@sDTLsort\@DTLsort}
\newcommand{\@DTLsort}[3][]{%
@@ -3551,9 +2449,11 @@
\def\@dtl@getsortdirection#1=#2\relax{%
\def\@dtl@key{#1}%
\def\@dtl@sortdirection{#2}%
- \ifx\@dtl@sortdirection\@empty
+ \ifdefempty{\@dtl@sortdirection}%
+ {%
\def\@dtl@sortdirection{-1}%
- \else
+ }%
+ {%
\@dtl@get@sortdirection#2%
\def\@dtl@dir{ascending}%
\ifx\@dtl@sortdirection\@dtl@dir
@@ -3569,12 +2469,11 @@
\def\@dtl@sortdirection{-1}
\fi
\fi
- \fi
+ }%
}
\def\@dtl@get@sortdirection#1={\def\@dtl@sortdirection{#1}}
\newtoks\@dtl@toksA
\newtoks\@dtl@toksB
-\newtoks\@dtl@toks
\newcommand{\dtl@compare}[3]{%
\dtl@compare@{#1}{#1}{#2}{#3}%
}
@@ -3633,24 +2532,28 @@
{%
\IfSubStringInString{\@dtl@separator}{\@dtl@key}%
{%
- \ifx\@dtl@header\@empty
+ \ifdefempty{\@dtl@header}%
+ {%
\protected@edef\@dtl@header{%
\@dtl@delimiter\@dtl@key\@dtl@delimiter}%
- \else
+ }%
+ {%
\toks@=\expandafter{\@dtl@header}%
\protected@edef\@dtl@header{%
\the\toks@\@dtl@separator
\@dtl@delimiter\@dtl@key\@dtl@delimiter}%
- \fi
+ }%
}%
{%
- \ifx\@dtl@header\@empty
+ \ifdefempty{\@dtl@header}%
+ {%
\protected@edef\@dtl@header{\@dtl@key}%
- \else
+ }%
+ {%
\toks@=\expandafter{\@dtl@header}%
\protected@edef\@dtl@header{\the\toks@
\@dtl@separator\@dtl@key}%
- \fi
+ }%
}%
}%
\protected@write\@dtl@write{}{\@dtl@header}%
@@ -3661,23 +2564,27 @@
{%
\IfSubStringInString{\@dtl@separator}{\@dtl@val}%
{%
- \ifx\@dtl@row\@empty
+ \ifdefempty{\@dtl@row}%
+ {%
\protected@edef\@dtl@row{%
\@dtl@delimiter\@dtl@val\@dtl@delimiter}%
- \else
+ }%
+ {%
\toks@=\expandafter{\@dtl@row}%
\protected@edef\@dtl@row{\the\toks@\@dtl@separator
\@dtl@delimiter\@dtl@val\@dtl@delimiter}%
- \fi
+ }%
}%
{%
- \ifx\@dtl@row\@empty
+ \ifdefempty{\@dtl@row}%
+ {%
\protected@edef\@dtl@row{\@dtl@val}%
- \else
+ }%
+ {%
\toks@=\expandafter{\@dtl@row}%
\protected@edef\@dtl@row{\the\toks@\@dtl@separator
\@dtl@val}%
- \fi
+ }%
}%
}%
\protected@write\@dtl@write{}{\@dtl@row}%
@@ -3719,7 +2626,6 @@
database}{}%
}%
}
-\newcommand{\@longempty}{}
\newread\@dtl@read
\newcount\dtl@entrycr
\define@boolkey{loaddb}[dtl]{noheader}[true]{}
@@ -3744,17 +2650,23 @@
\the\toks@}%
}%
}
+\newcount{\dtl@omitlines}
+\define@key{loaddb}{omitlines}{\dtl@omitlines=#1\relax}
\newcommand*{\dtldefaultkey}{Column}
\newcommand*{\@dtl@readline}[2]{%
\read#1 to #2%
- \dtl@trim#2%
+ \ifdefempty{#2}%
+ {%
+ }%
+ {%
+ \dtl@trim#2%
+ }
}
\newcommand*{\@dtl@readrawline}[2]{%
\@dtl@rawread#1 to #2%
\dtl@trim#2%
\dtl@domappings\@dtl@line
}
-
\newcommand*{\DTLloaddb}{%
\let\@dtl@doreadline\@dtl@readline
\@dtlloaddb
@@ -3767,6 +2679,11 @@
\setkeys{loaddb}{#1}%
\openin\@dtl@read=#3%
\dtl@message{Reading `#3'}%
+ \loop
+ \ifnum \dtl@omitlines > \z@
+ \advance\dtl@omitlines by \m@ne
+ \read\@dtl@read to \@dtl@line
+ \repeat
\DTLnewdb{#2}%
\ifeof\@dtl@read
\PackageWarning{datatool}{File `#3' has no data}%
@@ -3778,9 +2695,12 @@
\ifeof\@dtl@read
\else
\@dtl@doreadline\@dtl@read\@dtl@line
- \ifx\@dtl@line\@longempty
+ \ifdefempty{\@dtl@line}%
+ {%
\@dtl@conditiontrue
- \fi
+ }%
+ {%
+ }%
\fi
\if@dtl@condition
\repeat
@@ -3790,6 +2710,11 @@
\loop
\expandafter\@dtl@lopoff\@dtl@lin@\to\@dtl@lin@\@dtl@key
\advance\dtl@entrycr by 1\relax
+ \ifdefempty{\@dtl@key}%
+ {%
+ \edef\@dtl@key{\dtldefaultkey\number\dtl@entrycr}%
+ }%
+ {}%
\expandafter\@dtl@toks\expandafter{\@dtl@key}%
\@ifundefined{@dtl@inky@\romannumeral\dtl@entrycr}%
{%
@@ -3824,8 +2749,10 @@
\@dtl@conditiontrue
\loop
\@dtl@doreadline\@dtl@read\@dtl@line
- \ifx\@dtl@line\@longempty
- \else
+ \ifdefempty{\@dtl@line}%
+ {%
+ }%
+ {%
\@sDTLnewrow{#2}%
\expandafter\@dtl@toks\expandafter{\@dtl@line}%
\edef\@dtl@lin@{\@dtl@separator\the\@dtl@toks
@@ -3860,7 +2787,7 @@
\if@dtl@condition
\repeat
}%
- \fi
+ }%
\ifeof\@dtl@read \@dtl@conditionfalse\fi
\if@dtl@condition
\repeat
@@ -3889,17 +2816,23 @@
}%
}
\newcommand{\dtl@trim}[1]{%
-\def\@dtl@trmstr{}%
-\expandafter\@dtl@starttrim#1\@nil%
-\let#1=\@dtl@trmstr
+ \def\@dtl@trmstr{}%
+ \expandafter\@dtl@starttrim#1\@nil
+ \let#1=\@dtl@trmstr
}
\long\def\@dtl@starttrim#1#2{%
-\ifx\par#1%
- \def\@dtl@dotrim{\@dtl@trim{} #2}%
-\else
- \def\@dtl@dotrim{\@dtl@trim#1#2}%
-\fi
-\@dtl@dotrim%
+ \def\@dtl@tmpB{#2}%
+ \ifx\par#1%
+ \def\@dtl@dotrim{\@dtl@trim{} #2}%
+ \else
+ \ifx\@dtl@tmpB\@nnil
+ \def\@dtl@dotrim{}%
+ \def\@dtl@trmstr{#1}%
+ \else
+ \def\@dtl@dotrim{\@dtl@trim#1#2}%
+ \fi
+ \fi
+ \@dtl@dotrim
}
\long\def\@dtl@trim#1 \@nil{\long\def\@dtl@trmstr{#1}}
\newcommand*\DTLloadrawdb{%
@@ -3956,793 +2889,28 @@
>%
\endgroup
\newcommand*{\DTLrawmap}[2]{%
-\expandafter\@dtl@toks\expandafter{\@dtl@rawmappings}%
-\ifx\@dtl@rawmappings\@empty
- \def\@dtl@rawmappings{{#1}{#2}}%
-\else
- \def\@dtl@tmp{{#1}{#2}}
- \protected@edef\@dtl@rawmappings{\the\@dtl@toks,\@dtl@tmp}
-\fi
+ \expandafter\@dtl@toks\expandafter{\@dtl@rawmappings}%
+ \ifdefempty{\@dtl@rawmappings}%
+ {%
+ \def\@dtl@rawmappings{{#1}{#2}}%
+ }%
+ {%
+ \def\@dtl@tmp{{#1}{#2}}
+ \protected@edef\@dtl@rawmappings{\the\@dtl@toks,\@dtl@tmp}
+ }%
}
\newcommand*{\@dtl@rawmappings}{}
\newcommand*{\dtl@domappings}[1]{%
-\@for\@dtl@map:=\@dtl@rawmappings\do{%
- \expandafter\DTLsubstitute\expandafter#1\@dtl@map
-}}
-\newcommand*{\DTLifinlist}[4]{%
- \def\@dtl@doifinlist##1,#1,##2\end@dtl@doifinlist{%
- \def\@before{##1}%
- \def\@after{##2}%
+ \@for\@dtl@map:=\@dtl@rawmappings\do{%
+ \expandafter\DTLsubstituteall\expandafter#1\@dtl@map
}%
- \expandafter\@dtl@doifinlist\expandafter,#2,#1,\@nil
- \end@dtl@doifinlist
- \ifx\@after\@nnil
- #4%
- \else
- #3%
- \fi
-}
-\newcommand*{\dtl@choplast}[3]{%
-\let#2\@empty
-\let#3\@empty
-\@for\@dtl@element:=#1\do{%
-\ifx#3\@empty
-\else
- \ifx#2\@empty
- \expandafter\toks@\expandafter{#3}%
- \edef#2{{\the\toks@}}%
- \else
- \expandafter\toks@\expandafter{#3}%
- \expandafter\@dtl@toks\expandafter{#2}%
- \edef#2{\the\@dtl@toks,{\the\toks@}}%
- \fi
-\fi
-\let#3=\@dtl@element%
-}%
-}
-\newcommand*{\dtl@chopfirst}[3]{%
-\let#2=\@empty
-\let#3=\@empty
-\@for\@dtl@element:=#1\do{%
- \let#2=\@dtl@element
- \@endfortrue
-}%
-\if@endfor
- \let#3=\@forremainder
-\fi
-\@endforfalse
-}
-\newcommand{\dtl@sortlist}[2]{%
-\def\@dtl@sortedlist{}%
-\@for\@dtl@currentrow:=#1\do{%
-\expandafter\dtl@insertinto\expandafter
- {\@dtl@currentrow}{\@dtl@sortedlist}{#2}%
-\@endforfalse}%
-\let#1=\@dtl@sortedlist
-}
-\newcommand{\dtl@insertinto}[3]{%
-\def\@dtl@newsortedlist{}%
-\@dtl@insertdonefalse
-\@for\dtl@srtelement:=#2\do{%
-\if@dtl@insertdone
- \expandafter\toks@\expandafter{\dtl@srtelement}%
- \edef\@dtl@newstuff{{\the\toks@}}%
-\else
- \expandafter#3\expandafter{\dtl@srtelement}{#1}%
- \ifnum\dtl@sortresult<0\relax
- \expandafter\toks@\expandafter{\dtl@srtelement}%
- \@dtl@toks{#1}%
- \edef\@dtl@newstuff{{\the\@dtl@toks},{\the\toks@}}%
- \@dtl@insertdonetrue
- \else
- \expandafter\toks@\expandafter{\dtl@srtelement}%
- \edef\@dtl@newstuff{{\the\toks@}}%
- \fi
-\fi
-\ifx\@dtl@newsortedlist\@empty
- \expandafter\toks@\expandafter{\@dtl@newstuff}%
- \edef\@dtl@newsortedlist{\the\toks@}%
-\else
- \expandafter\toks@\expandafter{\@dtl@newsortedlist}%
- \expandafter\@dtl@toks\expandafter{\@dtl@newstuff}%
- \edef\@dtl@newsortedlist{\the\toks@,\the\@dtl@toks}%
-\fi
-\@endforfalse
-}%
- \ifx\@dtl@newsortedlist\@empty
- \@dtl@toks{#1}%
- \edef\@dtl@newsortedlist{{\the\@dtl@toks}}%
- \else
- \if@dtl@insertdone
- \else
- \expandafter\toks@\expandafter{\@dtl@newsortedlist}%
- \@dtl@toks{#1}%
- \edef\@dtl@newsortedlist{\the\toks@,{\the\@dtl@toks}}%
- \fi
- \fi
-\global\let#2=\@dtl@newsortedlist
-}
-\newif\if@dtl@insertdone
-\newcount\dtl@sortresult
-\newcommand{\toks@gput@right@cx}[2]{%
- \def\@toks@name{#1}%
- \edef\@dtl@stuff{#2}%
- \global\csname\@toks@name\endcsname\expandafter
- \expandafter\expandafter{\expandafter\the
- \csname\expandafter\@toks@name\expandafter\endcsname\@dtl@stuff}%
-}
-\newcommand{\toks@gconcat@middle@cx}[4]{%
- \def\@toks@name{#1}%
- \edef\@dtl@stuff{#3}%
- \global\csname\@toks@name\endcsname\expandafter\expandafter
- \expandafter\expandafter\expandafter
- \expandafter\expandafter{\expandafter\expandafter\expandafter
- \the\expandafter\expandafter\expandafter#2%
- \expandafter\@dtl@stuff\the#4}%
-}
-\newcommand*{\DTLadd}[3]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\DTLconverttodecimal{#3}{\@dtl@numii}%
-\FPadd{\@dtl@tmp}{\@dtl@numi}{\@dtl@numii}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgadd}[3]{%
-\DTLadd{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLaddall}[2]{%
-\def\@dtl@sum{0}%
-\@for\dtl@thisval:=#2\do{%
- \DTLconverttodecimal{\dtl@thisval}{\@dtl@num}%
- \FPadd{\@dtl@sum}{\@dtl@sum}{\@dtl@num}%
-}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@sum}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@sum}{#1}%
-\fi
-}
-\newcommand*{\DTLgaddall}[2]{%
-\DTLaddall{\@dtl@tmpi}{#2}%
-\global\let#1=\@dtl@tmpi
-}
-\newcommand*{\DTLsub}[3]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\DTLconverttodecimal{#3}{\@dtl@numii}%
-\FPsub{\@dtl@tmp}{\@dtl@numi}{\@dtl@numii}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgsub}[3]{%
-\DTLsub{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLmul}[3]{%
-\let\@dtl@thisreplaced=\@empty
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\ifx\@dtl@replaced\@empty
-\else
- \let\@dtl@thisreplaced=\@dtl@replaced
-\fi
-\DTLconverttodecimal{#3}{\@dtl@numii}%
-\ifx\@dtl@replaced\@empty
-\else
- \let\@dtl@thisreplaced=\@dtl@replaced
-\fi
-\FPmul{\@dtl@tmp}{\@dtl@numi}{\@dtl@numii}%
-\ifx\@dtl@thisreplaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgmul}[3]{%
-\DTLmul{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLdiv}[3]{%
-\let\@dtl@thisreplaced=\@empty
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\ifx\@dtl@replaced\@empty
-\else
- \let\@dtl@thisreplaced=\@dtl@replaced
-\fi
-\DTLconverttodecimal{#3}{\@dtl@numii}%
-\FPdiv{\@dtl@tmp}{\@dtl@numi}{\@dtl@numii}%
-\ifx\@dtl@thisreplaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \ifx\@dtl@thisreplaced\@dtl@replaced
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
- \else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
- \fi
-\fi
-}
-\newcommand*{\DTLgdiv}[3]{%
-\DTLdiv{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLabs}[2]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\FPabs{\@dtl@tmp}{\@dtl@numi}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgabs}[2]{%
-\DTLabs{\@dtl@tmpii}{#2}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLneg}[2]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\FPneg{\@dtl@tmp}{\@dtl@numi}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgneg}[2]{%
-\DTLneg{\@dtl@tmpii}{#2}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLsqrt}[2]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\FProot{\@dtl@tmpi}{\@dtl@numi}{2}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmpi}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmpi}{#1}%
-\fi
-}
-\newcommand*{\DTLgsqrt}[2]{%
-\DTLsqrt{\@dtl@tmpii}{#2}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLmin}[3]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\DTLconverttodecimal{#3}{\@dtl@numii}%
-\FPiflt{\@dtl@numi}{\@dtl@numii}%
- \dtl@ifsingle{#2}{%
- \let#1=#2}{%
- \def#1{#2}}%
-\else
- \dtl@ifsingle{#3}{%
- \let#1=#3}{%
- \def#1{#3}}%
-\fi
-}
-\newcommand*{\DTLgmin}[3]{%
-\DTLmin{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLminall}[2]{%
-\let\@dtl@min=\@empty
-\@for\dtl@thisval:=#2\do{%
- \DTLconverttodecimal{\dtl@thisval}{\@dtl@num}%
- \ifx\@dtl@min\@empty
- \let\@dtl@min=\@dtl@num
- \else
- \FPmin{\@dtl@min}{\@dtl@min}{\@dtl@num}%
- \fi
-}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@min}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@min}{#1}%
-\fi
-}
-\newcommand*{\DTLgminall}[2]{%
-\DTLminall{\@dtl@tmpi}{#2}%
-\global\let#1=\@dtl@tmpi
-}
-\newcommand*{\DTLmax}[3]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\DTLconverttodecimal{#3}{\@dtl@numii}%
-\FPmax{\@dtl@tmp}{\@dtl@numi}{\@dtl@numii}%
-\FPifgt{\@dtl@numi}{\@dtl@numii}%
- \dtl@ifsingle{#2}{%
- \let#1=#2}{%
- \def#1{#2}}%
-\else
- \dtl@ifsingle{#3}{%
- \let#1=#3}{%
- \def#1{#3}}%
-\fi
-}
-\newcommand*{\DTLgmax}[3]{%
-\DTLmax{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLmaxall}[2]{%
-\let\@dtl@max=\@empty
-\@for\dtl@thisval:=#2\do{%
- \DTLconverttodecimal{\dtl@thisval}{\@dtl@num}%
- \ifx\@dtl@max\@empty
- \let\@dtl@max\@dtl@num
- \else
- \FPmax{\@dtl@max}{\@dtl@max}{\@dtl@num}%
- \fi
-}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@max}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@max}{#1}%
-\fi
-}
-\newcommand*{\DTLgmaxall}[2]{%
-\DTLmaxall{\@dtl@tmpi}{#2}%
-\global\let#1=\@dtl@tmpi
-}
-\newcommand*{\DTLmeanforall}[2]{%
-\def\@dtl@mean{0}%
-\def\@dtl@n{0}%
-\@for\dtl@thisval:=#2\do{%
- \DTLconverttodecimal{\dtl@thisval}{\@dtl@num}%
- \FPadd{\@dtl@mean}{\@dtl@mean}{\@dtl@num}%
- \FPadd{\@dtl@n}{\@dtl@n}{1}%
-}%
-\FPdiv{\@dtl@mean}{\@dtl@mean}{\@dtl@n}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@mean}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@mean}{#1}%
-\fi
-}
-\newcommand*{\DTLgmeanforall}[2]{%
-\DTLmeanforall{\@dtl@tmpi}{#2}%
-\global\let#1=\@dtl@tmpi
-}
-\newcommand*{\DTLvarianceforall}[2]{%
-\def\@dtl@mean{0}%
-\def\@dtl@n{0}%
-\let\@dtl@decvals=\@empty
-\@for\dtl@thisval:=#2\do{%
- \DTLconverttodecimal{\dtl@thisval}{\@dtl@num}%
- \ifx\@dtl@decvals\@empty
- \let\@dtl@decvals=\@dtl@num
- \else
- \expandafter\toks@\expandafter{\@dtl@decvals}%
- \edef\@dtl@decvals{\the\toks@,\@dtl@num}%
- \fi
- \FPadd{\@dtl@mean}{\@dtl@mean}{\@dtl@num}%
- \FPadd{\@dtl@n}{\@dtl@n}{1}%
-}%
-\FPdiv{\@dtl@mean}{\@dtl@mean}{\@dtl@n}%
-\def\@dtl@var{0}%
-\@for\@dtl@num:=\@dtl@decvals\do{%
- \FPsub{\@dtl@diff}{\@dtl@num}{\@dtl@mean}%
- \FPmul{\@dtl@diff}{\@dtl@diff}{\@dtl@diff}%
- \FPadd{\@dtl@var}{\@dtl@var}{\@dtl@diff}%
-}%
-\FPdiv{\@dtl@var}{\@dtl@var}{\@dtl@n}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@var}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@var}{#1}%
-\fi
-}
-\newcommand*{\DTLgvarianceforall}[2]{%
-\DTLvarianceforall{\@dtl@tmpi}{#2}%
-\global\let#1=\@dtl@tmpi
-}
-\newcommand*{\DTLsdforall}[2]{%
-\def\@dtl@mean{0}%
-\def\@dtl@n{0}%
-\let\@dtl@decvals=\@empty
-\@for\dtl@thisval:=#2\do{%
- \DTLconverttodecimal{\dtl@thisval}{\@dtl@num}%
- \ifx\@dtl@decvals\@empty
- \let\@dtl@decvals=\@dtl@num
- \else
- \expandafter\toks@\expandafter{\@dtl@decvals}%
- \edef\@dtl@decvals{\the\toks@,\@dtl@num}%
- \fi
- \FPadd{\@dtl@mean}{\@dtl@mean}{\@dtl@num}%
- \FPadd{\@dtl@n}{\@dtl@n}{1}%
-}%
-\FPdiv{\@dtl@mean}{\@dtl@mean}{\@dtl@n}%
-\def\@dtl@sd{0}%
-\@for\@dtl@num:=\@dtl@decvals\do{%
- \FPsub{\@dtl@diff}{\@dtl@num}{\@dtl@mean}%
- \FPmul{\@dtl@diff}{\@dtl@diff}{\@dtl@diff}%
- \FPadd{\@dtl@sd}{\@dtl@sd}{\@dtl@diff}%
-}%
-\FPdiv{\@dtl@sd}{\@dtl@sd}{\@dtl@n}%
-\FProot{\@dtl@sd}{\@dtl@sd}{2}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@sd}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@sd}{#1}%
-\fi
-}
-\newcommand*{\DTLgsdforall}[2]{%
-\DTLsdforall{\@dtl@tmpi}{#2}%
-\global\let#1=\@dtl@tmpi
-}
-\newcommand*{\DTLround}[3]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\FPround{\@dtl@tmp}{\@dtl@numi}{#3}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLground}[3]{%
-\DTLround{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLtrunc}[3]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\FPtrunc{\@dtl@tmp}{\@dtl@numi}{#3}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgtrunc}[3]{%
-\DTLtrunc{\@dtl@tmpii}{#2}{#3}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*{\DTLclip}[2]{%
-\DTLconverttodecimal{#2}{\@dtl@numi}%
-\FPclip{\@dtl@tmp}{\@dtl@numi}%
-\ifx\@dtl@replaced\@empty
- \DTLdecimaltolocale{\@dtl@tmp}{#1}%
-\else
- \DTLdecimaltocurrency{\@dtl@tmp}{#1}%
-\fi
-}
-\newcommand*{\DTLgclip}[3]{%
-\DTLclip{\@dtl@tmpii}{#2}%
-\global\let#1=\@dtl@tmpii
-}
-\newcommand*\DTLinitials[1]{%
-\def\dtl@initialscmd{}%
-\dtl@subnobrsp{#1}{\dtl@string}%
-\DTLsubstituteall{\dtl@string}{~}{ }%
-\DTLsubstituteall{\dtl@string}{\ }{ }%
-\DTLsubstituteall{\dtl@string}{\space}{ }%
-\expandafter\dtl@initials\dtl@string{} \@nil%
-\dtl@initialscmd}%
-\edef\dtl@construct@subnobrsp{%
-\noexpand\def\noexpand\@dtl@subnobrsp##1\noexpand\protect
-\expandafter\noexpand\csname nobreakspace \endcsname ##2{%
-\noexpand\toks@{##1}%
-\noexpand\expandafter\noexpand\@dtl@toks\noexpand\expandafter{%
-\noexpand\@dtl@string}%
-\noexpand\edef\noexpand\@dtl@string{\noexpand\the\noexpand\@dtl@toks
-\noexpand\the\noexpand\toks@}%
-\noexpand\def\noexpand\@dtl@tmp{##2}%
-\noexpand\ifx\noexpand\@dtl@tmp\noexpand\@nnil
- \noexpand\let\noexpand\@dtl@subnobrspnext=\noexpand\relax
-\noexpand\else
- \noexpand\toks@{ }%
- \noexpand\expandafter\noexpand\@dtl@toks\noexpand\expandafter{%
- \noexpand\@dtl@string}%
- \noexpand\edef\noexpand\@dtl@string{\noexpand\the\noexpand\@dtl@toks
- \noexpand\the\noexpand\toks@}%
- \noexpand\let\noexpand\@dtl@subnobrspnext=\noexpand\@dtl@subnobrsp
-\noexpand\fi
-\noexpand\@dtl@subnobrspnext
-}%
-\noexpand\def\noexpand\dtl@subnobrsp##1##2{%
-\noexpand\def\noexpand\@dtl@string{}%
-\noexpand\@dtl@subnobrsp ##1\noexpand\protect\expandafter\noexpand
-\csname nobreakspace \endcsname \noexpand\@nil
-\noexpand\let##2=\noexpand\@dtl@string
-}}
-\dtl@construct@subnobrsp
-\newcommand*{\DTLstoreinitials}[2]{%
-\def\dtl@initialscmd{}%
-\dtl@subnobrsp{#1}{\dtl@string}%
-\DTLsubstituteall{\dtl@string}{~}{ }%
-\DTLsubstituteall{\dtl@string}{\ }{ }%
-\DTLsubstituteall{\dtl@string}{\space}{ }%
-\expandafter\dtl@initials\dtl@string{} \@nil
-\let#2=\dtl@initialscmd
-}
-\def\dtl@initials#1#2 #3{%
-\dtl@ifsingle{#1}{%
-\ifcat\noexpand#1\relax\relax
- \def\@dtl@donextinitials{\@dtl@initials#2 {#3}}%
-\else
- \def\@dtl@donextinitials{\@dtl@initials#1#2 {#3}}%
-\fi
-}{%
- \def\@dtl@donextinitials{\@dtl@initials{#1}#2 {#3}}%
-}%
-\@dtl@donextinitials
-}
-\def\@dtl@initials#1#2 #3{%
-\dtl@initialshyphen#2-{}\dtl@endhyp
-\expandafter\@dtl@toks\expandafter{\dtl@initialscmd}%
-\toks@{#1}%
-\ifx\dtl@inithyphen\@empty
-\else
- \edef\dtl@initialscmd{\the\@dtl@toks\the\toks@}%
- \expandafter\@dtl@toks\expandafter{\dtl@initialscmd}%
- \expandafter\toks@\expandafter{\dtl@inithyphen}%
-\fi
-\def\dtl@tmp{#3}%
-\ifx\@nnil\dtl@tmp
- \edef\dtl@initialscmd{\the\@dtl@toks\the\toks@\DTLafterinitials}%
- \let\dtl@initialsnext=\@gobble
-\else
- \edef\dtl@initialscmd{\the\@dtl@toks\the\toks@\DTLbetweeninitials}%
- \let\dtl@initialsnext=\dtl@initials
-\fi
-\dtl@initialsnext{#3}}
-\def\dtl@initialshyphen#1-#2#3\dtl@endhyp{%
-\def\dtl@inithyphen{#2}%
-\ifx\dtl@inithyphen\@empty
-\else
- \edef\dtl@inithyphen{%
- \DTLafterinitialbeforehyphen\DTLinitialhyphen#2}%
-\fi
-}
-\newcommand*{\DTLafterinitials}{.}
-\newcommand*{\DTLbetweeninitials}{.}
-\newcommand*{\DTLafterinitialbeforehyphen}{.}
-\newcommand*{\DTLinitialhyphen}{-}
-\newcommand*{\DTLifAllUpperCase}[3]{%
-\protected@edef\dtl@tuc{#1}%
-\expandafter\dtl@testifuppercase\dtl@tuc\@nil\relax
-\if@dtl@condition#2\else#3\fi
-}
-\def\dtl@testifuppercase#1#2{%
-\def\dtl@argi{#1}%
-\def\dtl@argii{#2}%
-\def\dtl@tc@rest{}%
-\ifx\dtl@argi\@nnil
- \let\dtl@testifuppernext=\@nnil
-\else
- \ifx#1\protect
- \let\dtl@testifuppernext=\dtl@testifuppercase
- \else
- \ifx\uppercase#1\relax
- \@dtl@conditiontrue
- \def\dtl@tc@rest{}%
- \let\dtl@testifuppernext=\relax
- \else
- \edef\dtl@tc@arg{\string#1}%
- \expandafter\dtl@test@ifuppercase\dtl@tc@arg\end
- \ifx\dtl@argii\@nnil
- \let\dtl@testifuppernext=\@dtl@gobbletonil
- \fi
- \fi
- \fi
-\fi
-\ifx\dtl@testifuppernext\relax
- \edef\dtl@dotestifuppernext{%
- \noexpand\dtl@testifuppercase}%
-\else
- \ifx\dtl@testifuppernext\@nnil
- \edef\dtl@dotestifuppernext{#2}%
- \else
- \expandafter\toks@\expandafter{\dtl@tc@rest}%
- \@dtl@toks{#2}%
- \edef\dtl@dotestifuppernext{%
- \noexpand\dtl@testifuppernext\the\toks@\the\@dtl@toks}%
- \fi
-\fi
-\dtl@dotestifuppernext
-}
-\def\dtl@test@ifuppercase#1#2\end{%
-\def\dtl@tc@rest{#2}%
-\IfSubStringInString{\string\MakeUppercase}{#1#2}{%
- \@dtl@conditiontrue
- \def\dtl@tc@rest{}%
- \let\dtl@testifuppernext=\relax
-}{%
- \IfSubStringInString{\string\MakeTextUppercase}{#1#2}{%
- \@dtl@conditiontrue
- \def\dtl@tc@rest{}%
- \let\dtl@testifuppernext=\relax
- }{%
- \edef\dtl@uccode{\the\uccode`#1}%
- \edef\dtl@code{\number`#1}%
- \ifnum\dtl@code=\dtl@uccode\relax
- \@dtl@conditiontrue
- \let\dtl@testifuppernext=\dtl@testifuppercase
- \else
- \ifnum\dtl@uccode=0\relax
- \@dtl@conditiontrue
- \let\dtl@testifuppernext=\dtl@testifuppercase
- \else
- \@dtl@conditionfalse
- \let\dtl@testifuppernext=\@dtl@gobbletonil
- \fi
- \fi
-}}}
-\newcommand*{\DTLifAllLowerCase}[3]{%
-\protected@edef\dtl@tlc{#1}%
-\expandafter\dtl@testiflowercase\dtl@tlc\@nil\relax
-\if@dtl@condition#2\else#3\fi
-}
-\def\dtl@testiflowercase#1#2{%
-\def\dtl@argi{#1}%
-\def\dtl@argii{#2}%
-\ifx\dtl@argi\@nnil
- \let\dtl@testiflowernext=\@nnil
-\else
- \ifx#1\protect
- \let\dtl@testiflowernext=\dtl@testiflowercase
- \else
- \ifx\lowercase#1\relax
- \@dtl@conditiontrue
- \def\dtl@tc@rest{}%
- \let\dtl@testiflowernext=\relax
- \else
- \edef\dtl@tc@arg{\string#1}%
- \expandafter\dtl@test@iflowercase\dtl@tc@arg\end
- \ifx\dtl@argii\@nnil
- \let\dtl@testiflowernext=\@dtl@gobbletonil
- \fi
- \fi
- \fi
-\fi
-\ifx\dtl@testiflowernext\relax
- \edef\dtl@dotestiflowernext{%
- \noexpand\dtl@testiflowercase}%
-\else
- \ifx\dtl@testiflowernext\@nnil
- \edef\dtl@dotestiflowernext{#2}%
- \else
- \expandafter\toks@\expandafter{\dtl@tc@rest}%
- \@dtl@toks{#2}%
- \edef\dtl@dotestiflowernext{%
- \noexpand\dtl@testiflowernext\the\toks@\the\@dtl@toks}%
- \fi
-\fi
-\dtl@dotestiflowernext
-}
-\def\dtl@test@iflowercase#1#2\end{%
-\def\dtl@tc@rest{#2}%
-\IfSubStringInString{\string\MakeLowercase}{#1#2}{%
- \@dtl@conditiontrue
- \def\dtl@tc@rest{}%
- \let\dtl@testiflowernext=\relax
-}{%
- \IfSubStringInString{\string\MakeTextLowercase}{#1#2}{%
- \@dtl@conditiontrue
- \def\dtl@tc@rest{}%
- \let\dtl@testiflowernext=\relax
- }{%
- \edef\dtl@lccode{\the\lccode`#1}%
- \edef\dtl@code{\number`#1}%
- \ifnum\dtl@code=\dtl@lccode\relax
- \@dtl@conditiontrue
- \let\dtl@testiflowernext=\dtl@testiflowercase
- \else
- \ifnum\dtl@lccode=0\relax
- \@dtl@conditiontrue
- \let\dtl@testiflowernext=\dtl@testiflowercase
- \else
- \@dtl@conditionfalse
- \let\dtl@testiflowernext=\@dtl@gobbletonil
- \fi
- \fi
-}}}
-\newcommand{\DTLsubstitute}[3]{%
-\expandafter\DTLsplitstring\expandafter
- {#1}{#2}{\@dtl@beforepart}{\@dtl@afterpart}%
-\ifx\@dtl@replaced\@empty
-\else
- \def#1{}%
- \expandafter\@dtl@toks\expandafter{\@dtl@beforepart}%
- \expandafter\toks@\expandafter{#1}%
- \protected@edef#1{\the\toks@\the\@dtl@toks#3}%
- \expandafter\@dtl@toks\expandafter{\@dtl@afterpart}%
- \expandafter\toks@\expandafter{#1}%
- \edef#1{\the\toks@\the\@dtl@toks}%
-\fi
-}
-\newcommand*{\DTLsplitstring}[4]{%
-\def\dtl@splitstr##1#2##2\@nil{%
-\def#3{##1}%
-\def#4{##2}%
-\ifx#4\@empty
- \let\@dtl@replaced=\@empty
-\else
- \def\@dtl@replaced{#2}%
- \dtl@split@str##2\@nil
-\fi
-}%
-\def\dtl@split@str##1#2\@nil{%
-\def#4{##1}}%
-\dtl@splitstr#1#2\@nil
-}
-\newcommand{\DTLsubstituteall}[3]{%
-\def\@dtl@splitsubstr{}%
-\let\@dtl@afterpart=#1\relax
-\@dtl@dosubstitute{#2}{#3}%
-\expandafter\toks@\expandafter{\@dtl@splitsubstr}%
-\expandafter\@dtl@toks\expandafter{\@dtl@afterpart}%
-\edef#1{\the\toks@\the\@dtl@toks}%
-}
-\def\@dtl@dosubstitute#1#2{%
-\expandafter\DTLsplitstring\expandafter
- {\@dtl@afterpart}{#1}{\@dtl@beforepart}{\@dtl@afterpart}%
-\expandafter\toks@\expandafter{\@dtl@splitsubstr}%
-\expandafter\@dtl@toks\expandafter{\@dtl@beforepart}%
-\edef\@dtl@splitsubstr{\the\toks@\the\@dtl@toks}%
-\ifx\@dtl@replaced\@empty
- \let\@dtl@dosubstnext=\@dtl@dosubstitutenoop
-\else
- \expandafter\toks@\expandafter{\@dtl@splitsubstr}%
- \@dtl@toks{#2}%
- \edef\@dtl@splitsubstr{\the\toks@\the\@dtl@toks}%
- \let\@dtl@dosubstnext=\@dtl@dosubstitute
-\fi
-\@dtl@dosubstnext{#1}{#2}%
-}
-\def\@dtl@dosubstitutenoop#1#2{}
-\newcommand*{\@dtl@currencies}{\$,\pounds}
-\newcommand*{\DTLnewcurrencysymbol}[1]{%
-\expandafter\toks@\expandafter{\@dtl@currencies}%
-\@dtl@toks{#1}%
-\edef\@dtl@currencies{\the\@dtl@toks,\the\toks@}%
-}
-\AtBeginDocument{%
-\@ifundefined{texteuro}{}{\DTLnewcurrencysymbol{\texteuro}}%
-\@ifundefined{textdollar}{}{\DTLnewcurrencysymbol{\textdollar}}%
-\@ifundefined{textstirling}{}{\DTLnewcurrencysymbol{\textstirling}}%
-\@ifundefined{textyen}{}{\DTLnewcurrencysymbol{\textyen}}%
-\@ifundefined{textwon}{}{\DTLnewcurrencysymbol{\textwon}}%
-\@ifundefined{textcurrency}{}{\DTLnewcurrencysymbol{\textcurrency}}%
-\@ifundefined{euro}{}{\DTLnewcurrencysymbol{\euro}}%
-\@ifundefined{yen}{}{\DTLnewcurrencysymbol{\yen}}%
-}
-\newcommand{\@dtl@standardize@currency}[1]{%
-\def\@dtl@org@currency{}%
-\@for\@dtl@thiscurrency:=\@dtl@currencies\do{%
- \expandafter\toks@\expandafter{\@dtl@thiscurrency}%
- \edef\@dtl@dosubs{\noexpand\DTLsubstitute{\noexpand#1}%
- {\the\toks@}{\noexpand\$}}%
- \@dtl@dosubs
- \ifx\@dtl@replaced\@empty
- \else
- \let\@dtl@org@currency=\@dtl@replaced
- \@endfortrue
- \fi
-}%
-\@endforfalse}
-\newcommand*{\@dtl@currency}{\$}
-\newcommand*{\DTLsetdefaultcurrency}[1]{%
-\renewcommand*{\@dtl@currency}{#1}}
-\newcommand{\dtl@ifsingle}[3]{%
-\def\@dtl@arg{#1}%
-\ifx\@dtl@arg\@empty
- #3%
-\else
- \@dtl@ifsingle#1\@nil{#2}{#3}%
-\fi
-}
-\def\@dtl@ifsingle#1#2\@nil#3#4{%
-\def\dtl@sg@arg{#2}%
-\ifx\dtl@sg@arg\@empty
- #3%
-\else
- #4%
-\fi
}
\newcommand*{\dtlshowdb}[1]{%
-\expandafter\showthe\csname dtldb@#1\endcsname}
+ \expandafter\showthe\csname dtldb@#1\endcsname
+}
\newcommand*{\dtlshowdbkeys}[1]{%
-\expandafter\showthe\csname dtlkeys@#1\endcsname}
+ \expandafter\showthe\csname dtlkeys@#1\endcsname
+}
\newcommand*{\dtlshowtype}[2]{%
\DTLgetdatatype{\@dtl@type}{#1}{#2}\show\@dtl@type
}