diff options
author | Karl Berry <karl@freefriends.org> | 2012-07-23 21:55:18 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-07-23 21:55:18 +0000 |
commit | d5ef93ccfdd8ddb5ee3d5a41434e0aec04df8fa0 (patch) | |
tree | 0bfa67f70ec53a66e165994e6bfc17b52ff92130 /Master/texmf-dist/tex/latex/datatool/datatool.sty | |
parent | 44928b3e4ed601cdf5afd19c5abb613fe3e8b4a0 (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.sty | 2674 |
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 } |