diff options
author | Karl Berry <karl@freefriends.org> | 2006-12-31 23:32:12 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-12-31 23:32:12 +0000 |
commit | e7c5a338a8a39e0964862cc028a9cef4c7ccf6e8 (patch) | |
tree | 844a266171d3ccce462d151426611a2287ed2c98 /Master/texmf-dist/source/latex/coolstr | |
parent | 2935ee2140aaffed80b7fbf5d7650e0bcb065d99 (diff) |
coolstr update (31dec06)
git-svn-id: svn://tug.org/texlive/trunk@3073 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/coolstr')
-rw-r--r-- | Master/texmf-dist/source/latex/coolstr/coolstr.dtx | 451 |
1 files changed, 359 insertions, 92 deletions
diff --git a/Master/texmf-dist/source/latex/coolstr/coolstr.dtx b/Master/texmf-dist/source/latex/coolstr/coolstr.dtx index f2aec955401..cb3c9b895a6 100644 --- a/Master/texmf-dist/source/latex/coolstr/coolstr.dtx +++ b/Master/texmf-dist/source/latex/coolstr/coolstr.dtx @@ -2,7 +2,7 @@ % %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] %<package>\ProvidesPackage{coolstr} -%<package> [2006/09/17 v1.0 COntent Oriented LaTeX Strings] +%<package> [2006/12/30 v2.0a COntent Oriented LaTeX Strings] %<package>\RequirePackage{ifthen} %<package>\RequirePackage{amsmath} %<package>\RequirePackage{amssymb} @@ -21,10 +21,9 @@ %</driver> % \fi % -% \iffalse meta-comment -% remove this comment to get a checksum -% \CheckSum{0} -% \fi +% +% \CheckSum{218} +% % %% \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 @@ -43,6 +42,7 @@ %% Right brace \} Tilde \~} % % \changes{v1.0}{2006/09/17}{Initial Release} +% \changes{v2.0}{2006/12/29}{Added three new commands: \texttt{ifstrchareq}, \texttt{ifstrleneq}, \texttt{strlen}} % % \GetFileInfo{coolstr.sty} % @@ -97,6 +97,102 @@ % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\section{Test Cases} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \newboolean{t} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % +%\subsection{\texttt{$\backslash$isdecimal}} +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% \begin{tabular}{ll} +% |2.345| & \isdecimal{2.345}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |2.4.5| & \isdecimal{2.4.5}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |+-2.45| & \isdecimal{+-2.45}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |+2.345| & \isdecimal{+2.345}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |-2.345| & \isdecimal{-2.345}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |2.345-| & \isdecimal{2.345-}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |2.4+4.| & \isdecimal{2.4+4.5}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |+4.| & \isdecimal{+4.}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |4.| & \isdecimal{4.}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |+.7| & \isdecimal{+.7}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |.3| & \isdecimal{.3}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% |4| & \isdecimal{4}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} \\ +% & |\newcommand{\numberstore}{4.5}| \\ +% |\numberstore| & \newcommand{\numberstore}{4.5} \isdecimal{\numberstore}{t} \ifthenelse{ \boolean{t} }{is decimal}{not a decimal} +% \end{tabular} +% +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % +%\subsection{\texttt{$\backslash$isnumeric}} +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% \begin{tabular}{ll} +% |4.5| & \isnumeric{4.5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |4.5e5| & \isnumeric{4.5e5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |+4.5e5| & \isnumeric{+4.5e5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |4.5e+5| & \isnumeric{4.5e+5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |+4.5e+5| & \isnumeric{+4.5e+5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |4.5E5| & \isnumeric{4.5E5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |-4.5E5| & \isnumeric{-4.5E5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |4.5E-5| & \isnumeric{4.5E-5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |-4.5E-5| & \isnumeric{-4.5E-5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |4.5.E-5| & \isnumeric{4.5.E-5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |abcdefg| & \isnumeric{abcdefg}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} \\ +% |abcE-5| & \isnumeric{abcE-5}{t} \ifthenelse{ \boolean{t} }{is numeric}{not numeric} +% \end{tabular} +% +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % +%\subsection{\texttt{$\backslash$isint}} +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% \begin{tabular}{ll} +% |4| & \isint{4}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |+4| & \isint{+4}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |4.5| & \isint{4.5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |4.5e5| & \isint{4.5e5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |+4.5e5| & \isint{+4.5e5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |4.5e+5| & \isint{4.5e+5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |+4.5e+5| & \isint{+4.5e+5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |4.5E5| & \isint{4.5E5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |-4.5E5| & \isint{-4.5E5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |4.5E-5| & \isint{4.5E-5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |-4.5E-5| & \isint{-4.5E-5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |4.5.E-5| & \isint{4.5.E-5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |abcdefg| & \isint{abcdefg}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% |abcE-5| & \isint{abcE-5}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} \\ +% & |\renewcommand{\numberstore}{4}| \\ +% |\numberstore| & \newcommand{\numberstore}{4} \isdecimal{\numberstore}{t} \ifthenelse{ \boolean{t} }{is integer}{not integer} +% \end{tabular} +% +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\section{Acknowledgments} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Thanks to J.~J.~Weimer for the comments and aid in coding. +% +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\section{Implementation} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -116,6 +212,7 @@ % \begin{macrocode} \newcommand{\COOL@strEnd}{\%\%\%} \newcommand{\COOL@intEnd}{\%@\%@\%@} +\let\COOL@strStop=\relax % \end{macrocode} % % and may be changed by the following command (which utilizes the |\renewcommand|): @@ -141,11 +238,11 @@ % % \begin{macrocode} \def\COOL@strgobble[#1]#2#3{% -\ifthenelse{\equal{#3}{\COOL@strEnd}} +\ifthenelse{\equal{#3}{\COOL@strEnd}}% {% - \ifthenelse{\value{COOL@strpointer}=#1} + \ifthenelse{\value{COOL@strpointer}=#1}% {% - #2 + #2% }% % Else {% @@ -153,15 +250,15 @@ }% % Else {% - \ifthenelse{\value{COOL@strpointer}=#1} + \ifthenelse{\value{COOL@strpointer}=#1}% {% - #2 + #2% }% % Else {% }% \stepcounter{COOL@strpointer}% - \COOL@strgobble[#1]#3 + \COOL@strgobble[#1]#3% }% } % \end{macrocode} @@ -178,109 +275,263 @@ % % \end{macro} % -% This ``gobbler" is used to determine if the string contains numeric data. As it stands, not all numeric data is -% recognized +% +% \begin{macro}{\strlen} +% \changes{v2.0}{2006/12/29}{added to package} +% |\strlen|\marg{string} gives the length of the string. It is better to use |\strlenstore| to record the length +% +% |\strlen{abc}| \strlen{abc} +% +% \begin{macrocode} +\newcommand{\strlen}[1]{% +\strchar{#1}{0} +\arabic{COOL@strpointer}% +} +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\strlenstore} +% \changes{v2.0}{2006/12/29}{added to package} +% |\strlenstore|\marg{string}\marg{counter} stores the length of \meta{string} in \meta{counter} +% +% \begin{macrocode} +\newcommand{\strlenstore}[2]{% +\strchar{#1}{0}% +\setcounter{#2}{COOL@strpointer}% +} +% \end{macrocode} +% +% \end{macro} +% +% +% Define a new boolean for comparing characters +% +% \begin{macrocode} +\newboolean{COOL@charmatch} +% \end{macrocode} +% +% \begin{macro}{\COOL@strcomparegobble} +% This ``gobbler" does character comparison +% \changes{v2.0}{2006/12/29}{added to package for single character comparisons} % % \begin{macrocode} -\newboolean{COOL@firstdecimalfound} -\newboolean{COOL@seconddecimalfound} -\newboolean{COOL@efound} -\newboolean{COOL@digitfound} - -\def\COOL@numericgobbler#1#2{% -\ifthenelse{\equal{#2}{\COOL@strEnd}}% +\def\COOL@strcomparegobble[#1]<#2>#3#4{% +\ifthenelse{\equal{#4}{\COOL@strEnd}}% {% - \ifthenelse{`#1 < `0 \OR `#1 > `9}% + \ifthenelse{\value{COOL@strpointer}=#1 \AND \equal{#2}{#3} }% {% - Not Numeric% + \setboolean{COOL@charmatch}{true}% }% % Else {% - Is Numeric% }% }% % Else {% - \ifthenelse{ `#1 < `0 \OR `#1 > `9 }% + \ifthenelse{\value{COOL@strpointer}=#1 \AND \equal{#2}{#3} }% {% + \setboolean{COOL@charmatch}{true}% + }% + % Else + {% + }% + \stepcounter{COOL@strpointer}% + \COOL@strcomparegobble[#1]<#2>#4% + }% +} % \end{macrocode} -% at this point it can only be a decimal point or an 'e' if it is to remain numeric +% \end{macro} +% +% \begin{macro}{\ifstrchareq} +% |\ifstrchareq|\marg{string}\marg{char index}\marg{comparison char}\marg{do if true}\marg{do if false} +% \changes{v2.0}{2006/12/29}{added to package to do character comparing} +% % \begin{macrocode} - \ifthenelse{ `#1 = `. }% - {% - \ifthenelse{ \boolean{COOL@seconddecimalfound} }% - {% +\newcommand{\ifstrchareq}[5]{% +\setboolean{COOL@charmatch}{false}% +\setcounter{COOL@strpointer}{1}% +\COOL@strcomparegobble[#2]<#3>#1\COOL@strEnd\relax% +\ifthenelse{ \boolean{COOL@charmatch} }% + {% + #4% + }% +% Else + {% + #5% + }% +} % \end{macrocode} -% this is the THIRD decimal +% \end{macro} +% +% +% \begin{macro}{\ifstrleneq} +% |\ifstrleneq|\marg{string}\marg{number}\marg{do if true}\marg{do if false} +% +% \noindent |\ifstrleneq{abc}{3}{length is $3$}{length is not $3$}| \ifstrleneq{abc}{3}{length is $3$}{length is not $3$} +% +% \noindent |\ifstrleneq{abcde}{3}{length is $3$}{length is not $3$}| \ifstrleneq{abcde}{3}{length is $3$}{length is not $3$} +% +% \changes{v2.0}{2006/12/29}{added to package to do length comparison} +% % \begin{macrocode} - Not numeric% - }% - % else - {% - \ifthenelse{ \boolean{COOL@firstdecimalfound} }% - {% +\newcommand{\ifstrleneq}[4]{% +\strchar{#1}{0}% +\ifthenelse{ \value{COOL@strpointer} = #2 }% + {% + #3% + }% +% Else + {% + #4% + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\COOL@decimalgobbler} +% +% This ``gobbler" is used to determine if the submitted string is a rational number (satisfies $d_n d_{n-1} \cdots d_1 d_0 . d_{-1} d_{-2} \cdots d_{-m}$). The idea behind the macro is that it assumes the string is rational until it encounters a non-numeric object +% \changes{v2.0}{2006/12/29}{added this ``gobbler'' to complete \texttt{isnumeric}} +% +% \begin{macrocode} +\newboolean{COOL@decimalfound} +\newboolean{COOL@decimal} % \end{macrocode} -% this is the SECOND decimal +% +% |COOL@decimalfound| is a boolean indicating if the first decimal point is found +% +% |COOL@decimal| is the flag that tells if the string contains numeric data +% % \begin{macrocode} - \ifthenelse{ \boolean{COOL@efound} }% - {% - \setboolean{COOL@seconddecimalfound}{true}% - \COOL@numericgobbler#2% - }% - % else - {% - Not numeric% - }% - }% - % else - {% +\def\COOL@decimalgobbler#1#2\COOL@strEnd{% +\ifthenelse{\equal{#2}{\COOL@strStop}}% % \end{macrocode} -% this is the FIRST decimal +% this indicates we are at the end of the string. We only need to perform the check to see if the digit is a number or the first decimal point % \begin{macrocode} - \setboolean{COOL@firstdecimalfound}{true}% - \COOL@numericgobbler#2% - }% - }% + {% + \ifthenelse{`#1 < `0 \OR `#1 > `9}% + {% + \ifthenelse{ `#1 = `. \AND \NOT \value{COOL@strpointer} = 1 \AND \NOT \boolean{COOL@decimalfound} }% + {% }% - % else + % Else {% - \ifthenelse{ \(`#1 = `E\) \OR \(`#1 = `e\) }% - {% - \ifthenelse{ \boolean{COOL@efound} \OR \NOT \boolean{COOL@digitfound} }% - {% - Not numeric% - }% - % else - {% - \setboolean{COOL@efound}{true}% - \COOL@numericgobbler#2% - }% - }% - % else - {% - Not Numeric - }% + \setboolean{COOL@decimal}{false}% }% }% % Else {% - \setboolean{COOL@digitfound}{true}% - \COOL@numericgobbler#2% }% }% -} +% Else + {% + \ifthenelse{ `#1 < `0 \OR `#1 > `9 }% + {% % \end{macrocode} +% not at the end of a string, and have encountered a non-digit. If it is a number, then this non digit must be the first decimal point or it may be the first character and a $+$ or $-$ sign +% \begin{macrocode} + \ifthenelse{ `#1 = `. \AND \NOT \boolean{COOL@decimalfound} }% + {% + \setboolean{COOL@decimalfound}{true}% + }% + {\ifthenelse{ \(`#1 = `+ \OR `#1 = `-\) \AND \value{COOL@strpointer} = 1 }% + {% + }% + % Else + {% + \setboolean{COOL@decimal}{false}% + }}% + }% + % Else + {}% + \stepcounter{COOL@strpointer}% + \COOL@decimalgobbler#2\COOL@strEnd% + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\isdecimal} +% |isdecimal|\marg{string}\marg{boolean} +% \changes{v2.0}{2006/12/29}{added} +% +% \begin{macrocode} +\newcommand{\isdecimal}[2]{% +\setcounter{COOL@strpointer}{1}% +\setboolean{COOL@decimalfound}{false}% +\setboolean{COOL@decimal}{true}% +\expandafter\COOL@decimalgobbler#1\COOL@strStop\COOL@strEnd% +\ifthenelse{ \boolean{COOL@decimal} }% + {% + \setboolean{#2}{true}% + }% +% Else + {% + \setboolean{#2}{false}% + }% +}% +% \end{macrocode} +% \end{macro} % % \begin{macro}{\isnumeric} -% |\isnumeric|\marg{string} returns some text stating whether or not \meta{string} contains numeric data. +% |\isnumeric|\marg{string}\marg{boolean} stores |true| in \meta{boolean} if \meta{string} is numeric +% \changes{v2.0}{2006/12/29}{added extra mandatory argument for storing return boolean} % % \begin{macrocode} -\newcommand{\isnumeric}[1]{% -\setboolean{COOL@firstdecimalfound}{false}% -\setboolean{COOL@seconddecimalfound}{false}% -\setboolean{COOL@efound}{false}% -\setboolean{COOL@digitfound}{false}% -\COOL@numericgobbler#1\COOL@strEnd% +\newboolean{COOL@numeric}% +\def\COOL@eparser#1e#2\COOL@strEnd{% +\xdef\COOL@num@magnitude{#1}% +\xdef\COOL@num@exponent{#2}% +} +\def\COOL@ecorrector#1e\COOL@strStop{% +\xdef\COOL@num@exponent{#1}% +} +\def\COOL@Eparser#1E#2\COOL@strEnd{% +\xdef\COOL@num@magnitude{#1}% +\xdef\COOL@num@exponent{#2}% +} +\def\COOL@Ecorrector#1E\COOL@strStop{% +\xdef\COOL@num@exponent{#1}% +} +\newcommand{\isnumeric}[2]{% +\COOL@eparser#1e\COOL@strStop\COOL@strEnd% +\ifthenelse{ \equal{\COOL@num@exponent}{\COOL@strStop} }% + {% + \COOL@Eparser#1E\COOL@strStop\COOL@strEnd% + \ifthenelse{ \equal{\COOL@num@exponent}{\COOL@strStop} }% + {% + \gdef\COOL@num@exponent{0}% + }% + % Else + {% + \expandafter\COOL@Ecorrector\COOL@num@exponent% + }% + } +% Else + {% + \expandafter\COOL@ecorrector\COOL@num@exponent% + }% +\isdecimal{\COOL@num@magnitude}{COOL@numeric}% +\ifthenelse{ \boolean{COOL@numeric} }% + {% + \isdecimal{\COOL@num@exponent}{COOL@numeric}% + \ifthenelse{ \boolean{COOL@numeric} }% + {% + \setboolean{#2}{true}% + }% + % Else + {% + \setboolean{#2}{false}% + }% + }% +% Else + {% + \setboolean{#2}{false}% + }% } % \end{macrocode} % @@ -290,10 +541,9 @@ % needed % % \begin{macrocode} -\let\COOL@strStop=\relax \newboolean{COOL@isint} \def\COOL@intgobbler#1#2\COOL@strEnd{% -\ifcat#11 +\ifcat#11% \ifthenelse{\equal{#2}{\COOL@strStop}}% {% \ifthenelse{`#1 < `0 \OR `#1 > `9}% @@ -302,33 +552,50 @@ }% % Else {% - \setboolean{COOL@isint}{true}% }% }% % Else {% \ifthenelse{ `#1 < `0 \OR `#1 > `9 }% {% - \setboolean{COOL@isint}{false}% + \ifthenelse{ `#1 = `+ \OR `#1 = `- \AND \value{COOL@strpointer} = 1 }% + {}% + % Else + {% + \setboolean{COOL@isint}{false}% + }% }% % Else {% - \setboolean{COOL@digitfound}{true}% - \COOL@intgobbler#2\COOL@strEnd% }% + \stepcounter{COOL@strpointer}% + \COOL@intgobbler#2\COOL@strEnd% }% -\else +\else% \setboolean{COOL@isint}{false}% -\fi +\fi% } % \end{macrocode} % % \begin{macro}{\isint} -% |\isint|\marg{string} doesn't actually return anything, but sets the boolean |COOL@isint| to true or false -% depending on whether or not \meta{string} contains an integer +% \changes{v2.0}{2006/12/29}{added extra mandatory argument for storing return boolean} +% \changes{v2.0a}{2006/12/30}{modified internals slightly to work with \textsf{cool} package} +% |\isint|\marg{string}\marg{boolean} sets the \meta{boolean} to |true| if \meta{string} is an integer or |false| otherwise % % \begin{macrocode} -\newcommand{\isint}[1]{\COOL@intgobbler#1\COOL@strStop\COOL@strEnd} +\newcommand{\isint}[2]{% +\setcounter{COOL@strpointer}{1}% +\setboolean{COOL@isint}{true}% +\COOL@intgobbler#1\COOL@strStop\COOL@strEnd% +\ifthenelse{ \boolean{COOL@isint} }% + {% + \setboolean{#2}{true}% + }% +% Else + {% + \setboolean{#2}{false}% + }% +} % \end{macrocode} % % \end{macro} |