summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-09-25 22:58:08 +0000
committerKarl Berry <karl@freefriends.org>2012-09-25 22:58:08 +0000
commit5972810af729299af222498461a459998df88906 (patch)
treef32df205f6b61c129fda672be1edd763854cafc8 /Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty
parentd21e43ac989ba93e0f327fc32fd99f3b1c3f0c6e (diff)
fmtcount (25sep12)
git-svn-id: svn://tug.org/texlive/trunk@27805 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty')
-rw-r--r--Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty398
1 files changed, 398 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty b/Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty
new file mode 100644
index 00000000000..8cf850d3fc4
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/fmtcount/fcnumparser.sty
@@ -0,0 +1,398 @@
+%%
+%% This is file `fcnumparser.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fmtcount.dtx (with options: `fcnumparser.sty,package')
+%%
+%% fmtcount.dtx
+%% 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
+%% of this license of (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nicola Talbot.
+%%
+%% This work consists of the files fmtcount.dtx and fmtcount.ins and the derived files fcnumparser.sty, fcprefix.sty, fmtcount.sty, fc-american.def, fc-british.def, fc-english.def, fc-francais.def, fc-french.def, fc-frenchb.def, fc-german.def, fc-germanb.def, fc-italian.def, fc-ngerman.def, fc-ngermanb.def, fc-portuges.def, fc-spanish.def, fc-UKenglish.def, fc-USenglish.def.
+%%
+%% \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
+%% Lower-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
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%\subsection{Prefixes}
+%%\label{sec:latin-prefixes}
+%%
+%%\begin{definition}[\DescribeMacro{\latinnumeralstring}]
+%%\cs{latinnumeralstring}\marg{counter}\oarg{prefix options}
+%%\end{definition}
+%%
+%%\begin{definition}[\DescribeMacro{\latinnumeralstringnum}]
+%%\cs{latinnumeralstringnum}\marg{number}\oarg{prefix options}
+%%\end{definition}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{fcnumparser}
+\def\fc@counter@parser#1{%
+ \expandafter\fc@number@parser\expandafter{\the#1.}%
+}
+\newcount\fc@digit@counter
+
+\def\fc@end@{\fc@end}
+\def\fc@number@analysis#1\fc@nil{%
+ \def\@tempb##1.##2\fc@nil{\def\fc@integer@part{##1}\def\@tempa{##2}}%
+ \@tempb#1.\fc@end\fc@nil
+ \ifx\@tempa\fc@end@
+ \def\@tempb##1,##2\fc@nil{\def\fc@integer@part{##1}\def\@tempa{##2}}%
+ \@tempb#1,\fc@end\fc@nil
+ \ifx\@tempa\fc@end@
+ \def\fc@fractional@part{}%
+ \else
+ \def\@tempb##1,\fc@end{\def\fc@fractional@part{##1}}%
+ \expandafter\@tempb\@tempa
+ \fi
+ \else
+ \def\@tempb##1.\fc@end{\def\fc@fractional@part{##1}}%
+ \expandafter\@tempb\@tempa
+ \fi
+}
+\def\fc@number@parser#1{%
+ \let\@tempa\@empty
+ \def\@tempb##1##2\fc@nil{%
+ \def\@tempc{##1}%
+ \ifx\@tempc\space
+ \else
+ \expandafter\def\expandafter\@tempa\expandafter{\@tempa ##1}%
+ \fi
+ \def\@tempc{##2}%
+ \ifx\@tempc\@empty
+ \expandafter\@gobble
+ \else
+ \expandafter\@tempb
+ \fi
+ ##2\fc@nil
+ }%
+ \@tempb#1\fc@nil
+ \def\@tempb##1##2\fc@nil{\def\fc@sign{##1}\def\fc@number{##2}}%
+ \expandafter\@tempb\@tempa\fc@nil
+ \expandafter\if\fc@sign+%
+ \def\fc@sign@case{1}%
+ \else
+ \expandafter\if\fc@sign-%
+ \def\fc@sign@case{2}%
+ \else
+ \def\fc@sign{}%
+ \def\fc@sign@case{0}%
+ \let\fc@number\@tempa
+ \fi
+ \fi
+ \ifx\fc@number\@empty
+ \PackageError{fcnumparser}{Invalid number}{Number must contain at least one non blank
+ character after sign}%
+ \fi
+ \expandafter\fc@number@analysis\fc@number\fc@nil
+ \expandafter\fc@digit@counter\fc@unit@weight
+ \expandafter\fc@parse@integer@digits\fc@integer@part\fc@end\fc@nil
+ \fc@digit@counter -\fc@digit@counter
+ \advance\fc@digit@counter by \fc@unit@weight
+ \advance\fc@digit@counter by \fc@unit@weight
+ \advance\fc@digit@counter by -1 %
+ \edef\fc@max@weight{\the\fc@digit@counter}%
+ {%
+ \count0 \fc@unit@weight\relax
+ \count1 \fc@max@weight\relax
+ \advance\count0 by -\count1 %
+ \advance\count0 by -1 %
+ \def\@tempa##1{\def\@tempb{\def\@tempi{##1}}}%
+ \expandafter\@tempa\expandafter{\the\count0}%
+ \expandafter
+ }\@tempb
+ \expandafter\fc@digit@counter\fc@unit@weight
+ \def\@templ{%
+ \ifnum\fc@digit@counter>\fc@max@weight
+ \let\next\relax
+ \else
+ {%
+ \count0 \@tempi
+ \advance\count0 by \fc@digit@counter
+ \expandafter\def\expandafter\@tempd\expandafter{\csname fc@digit@\the\count0\endcsname}%
+ \expandafter\def\expandafter\@tempe\expandafter{\csname fc@digit@\the\fc@digit@counter\endcsname}%
+ \def\@tempa####1####2{\def\@tempb{\let####1####2}}%
+ \expandafter\expandafter\expandafter\@tempa\expandafter\@tempe\@tempd
+ \expandafter
+ }\@tempb
+ \advance\fc@digit@counter by 1 %
+ \fi
+ \next
+ }%
+ \let\next\@templ
+ \@templ
+ \expandafter\fc@digit@counter\fc@unit@weight
+ \expandafter\fc@parse@integer@digits\fc@fractional@part\fc@end\fc@nil
+ \edef\fc@min@weight{\the\fc@digit@counter}%
+}
+\@ifundefined{fc@parse@integer@digits}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of
+ macro `fc@parse@integer@digits'}}
+\def\fc@parse@integer@digits#1#2\fc@nil{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\fc@end@
+ \def\next##1\fc@nil{}%
+ \else
+ \let\next\fc@parse@integer@digits
+ \advance\fc@digit@counter by -1
+ \expandafter\def\csname fc@digit@\the\fc@digit@counter\endcsname{#1}%
+ \fi
+ \next#2\fc@nil
+}
+
+\newcommand*{\fc@unit@weight}{0}
+
+\@ifundefined{fc@read@unit}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of macro `fc@read@unit'}}
+\def\fc@read@unit#1#2{%
+ \ifnum#2>\fc@max@weight
+ #1=0\relax
+ \else
+ \ifnum#2<\fc@min@weight
+ #1=0\relax
+ \else
+ {%
+ \edef\@tempa{\number#2}%
+ \count0=\@tempa
+ \edef\@tempa{\csname fc@digit@\the\count0\endcsname}%
+ \def\@tempb##1{\def\@tempa{#1=##1\relax}}%
+ \expandafter\@tempb\expandafter{\@tempa}%
+ \expandafter
+ }\@tempa
+ \fi
+ \fi
+}
+\@ifundefined{fc@read@hundred}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of macro `fc@read@hundred'}}
+\def\fc@read@hundred#1#2{%
+ {%
+ \fc@read@unit{\count0}{#2}%
+ \def\@tempa##1{\fc@read@unit{\count1}{##1}}%
+ \count2=#2%
+ \advance\count2 by 1 %
+ \expandafter\@tempa{\the\count2}%
+ \multiply\count1 by 10 %
+ \advance\count1 by \count0 %
+ \def\@tempa##1{\def\@tempb{#1=##1\relax}}
+ \expandafter\@tempa\expandafter{\the\count1}%
+ \expandafter
+ }\@tempb
+}
+\@ifundefined{fc@read@thousand}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of macro
+ `fc@read@thousand'}}
+\def\fc@read@thousand#1#2{%
+ {%
+ \fc@read@unit{\count0}{#2}%
+ \def\@tempa##1{\fc@read@hundred{\count1}{##1}}%
+ \count2=#2%
+ \advance\count2 by 1 %
+ \expandafter\@tempa{\the\count2}%
+ \multiply\count1 by 10 %
+ \advance\count1 by \count0 %
+ \def\@tempa##1{\def\@tempb{#1=##1\relax}}
+ \expandafter\@tempa\expandafter{\the\count1}%
+ \expandafter
+ }\@tempb
+}
+\@ifundefined{fc@read@myriad}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of macro
+ `fc@read@myriad'}}
+\def\fc@read@myriad#1#2{%
+ {%
+ \fc@read@hundred{\count0}{#2}%
+ \def\@tempa##1{\fc@read@hundred{\count1}{##1}}%
+ \count2=#2
+ \advance\count2 by 2
+ \expandafter\@tempa{\the\count2}%
+ \multiply\count1 by 100 %
+ \advance\count1 by \count0 %
+ \def\@tempa##1{\def\@tempb{#1=##1\relax}}%
+ \expandafter\@tempa\expandafter{\the\count1}%
+ \expandafter
+ }\@tempb
+}
+\@ifundefined{fc@check@nonzeros}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of macro
+ `fc@check@nonzeros'}}
+\def\fc@check@nonzeros#1#2#3{%
+ {%
+ \edef\@@tempa{\number#1}%
+ \edef\@tempb{\number#2}%
+ \count0=\@@tempa
+ \count1=\@tempb\relax
+ \fc@@check@nonzeros@inner
+ \def\@tempd##1{\def\@tempa{\def#3{##1}}}%
+ \expandafter\@tempd\expandafter{\@tempc}%
+ \expandafter
+ }\@tempa
+}
+\def\fc@@check@nonzeros@inner{%
+ \ifnum\count0<\fc@min@weight
+ \count0=\fc@min@weight\relax
+ \fi
+ \ifnum\count1>\fc@max@weight\relax
+ \count1=\fc@max@weight
+ \fi
+ \count2\count0 %
+ \advance\count2 by 1 %
+ \ifnum\count0>\count1 %
+ \PackageError{fcnumparser}{Unexpected arguments}{Number in argument 2 of macro
+ `fc@check@nonzeros' must be at least equal to number in argument 1}%
+ \else
+ \fc@@check@nonzeros@inner@loopbody
+ \ifnum\@tempc>0 %
+ \ifnum\@tempc<9 %
+ \ifnum\count0>\count1 %
+ \else
+ \let\@tempd\@tempc
+ \fc@@check@nonzeros@inner@loopbody
+ \ifnum\@tempc=0 %
+ \let\@tempc\@tempd
+ \else
+ \def\@tempc{9}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\fc@@check@nonzeros@inner@loopbody{%
+ % \@tempc <- digit of weight \count0
+ \expandafter\let\expandafter\@tempc\csname fc@digit@\the\count0\endcsname
+ \advance\count0 by 1 %
+ \ifnum\@tempc=0 %
+ \ifnum\count0>\count1 %
+ \let\next\relax
+ \else
+ \let\next\fc@@check@nonzeros@inner@loopbody
+ \fi
+ \else
+ \ifnum\count0>\count2 %
+ \def\@tempc{9}%
+ \fi
+ \let\next\relax
+ \fi
+ \next
+}
+\@ifundefined{fc@intpart@find@last}{}{%
+ \PackageError{fcnumparser}{Duplicate definition}{Redefinition of macro
+ `fc@intpart@find@last'}}
+\def\fc@intpart@find@last#1{%
+ {%
+ \count0=\fc@unit@weight\space
+ \ifnum\count0<\fc@min@weight\space
+ \count0=\fc@min@weight\space
+ \fi
+ \def\@templ{%
+ \ifnum\csname fc@digit@\the\count0\endcsname=0 %
+ \advance\count0 by 1 %
+ \ifnum\count0>\fc@max@weight\space
+ \let\next\relax
+ \fi
+ \else
+ \let\next\relax
+ \fi
+ \next
+ }%
+ \let\next\@templ
+ \@templ
+ \toks0{#1}%
+ \edef\@tempa{\the\toks0=\the\count0}%
+ \expandafter
+ }\@tempa\space
+}
+\@ifundefined{fc@get@last@word}{}{\PackageError{fcnumparser}{Duplicate definition}{Redefinition
+ of macro `fc@get@last@word'}}%
+\def\fc@get@last@word#1#2#3{%
+ {%
+ \def\@tempa##1\fc@case##2\@nil\fc@end{%
+ \toks0{##1}%
+ \toks1{##2\fc@case}%
+ }%
+ \@tempa#1\fc@end
+ \def\@tempa##1\fc@case##2\fc@end{%
+ \toks2{##1}%
+ \def\@tempb{##2}%
+ \toks3{##2}%
+ }%
+ \toksdef\@tempt0 %
+ \def\@templ{%
+ \expandafter\@tempa\the\toks1 \fc@end
+ \ifx\@tempb\@empty
+ \let\next\relax
+ \else
+ \expandafter\expandafter\expandafter\@tempt
+ \expandafter\expandafter\expandafter{%
+ \expandafter\the\expandafter\@tempt
+ \expandafter\fc@case\the\toks2}%
+ \toks1\toks3 %
+ \fi
+ \next
+ }%
+ \let\next\@templ
+ \@templ
+ \edef\@tempa{\def\noexpand#2{\the\toks0}\def\noexpand#3{\the\toks2}}%
+ \expandafter
+ }\@tempa
+}
+\@ifundefined{fc@get@last@letter}{}{\PackageError{fcnumparser}{Duplicate definition}{Redefinition
+ of macro `fc@get@last@letter'}}%
+\def\fc@get@last@letter#1#2#3{%
+ {%
+ \toks1{#1}%
+ \toks0{}%
+ \toksdef\@tempt0 %
+ \def\@tempa##1##2\fc@nil{%
+ \toks2{##1}%
+ \toks3{##2}%
+ \def\@tempb{##2}%
+ }%
+ \def\@templ{%
+ \expandafter\@tempa\the\toks1 \fc@nil
+ \ifx\@tempb\@empty
+ \let\next\relax
+ \else
+ \expandafter\expandafter\expandafter\@tempt
+ \expandafter\expandafter\expandafter{%
+ \expandafter\the\expandafter\@tempt
+ \the\toks2}%
+ \toks1\toks3 %
+ \fi
+ \next
+ }%
+ \let\next\@templ
+ \next
+ \edef\@tempa{\def\noexpand#2{\the\toks0}\def\noexpand#3{\the\toks1}}%
+ \expandafter
+ }\@tempa
+}%
+\iffalse Local variables: \fi
+\iffalse mode: docTeX \fi
+\iffalse End: \fi
+\endinput
+%%
+%% End of file `fcnumparser.sty'.