% Author: Alexey B. Shipunov (plantago@herba.msu.ru)

\ProvidesPackage{numerus}%
        [2008/02/07 v1.2 Spell numbers in Russian words]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                      %
% ���������: \propis[��������������_��������]{<�����>}                 %
%            \Propis[��������������_��������]{<�����>}                 %
%            \PROpis[��������������_��������]{<�����>}                 %
%                                                                      %
% ��������������_��������: k (�� ���������, ��������������             %
%                             ������������)                            %
%                          z (���������� ������������ �������� ����    %
%                             � ������������ ������)                   %
%                          m (���������� ������������ �������� ����    %
%                             � ������������ ������)                   %
%                                                                      %
% <�����>: ����� < 999 ��� ���������� ������������ � < 999999 ���      %
%          ��������������, ��� �������, ����������� �����������        %
%          ��������                                                    %
%                                                                      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                      %
% ������� ������: \propis{99} ���� `��������� ������'                  %
%                                                                      %
% ������� ������: �������                                              %
% \renewcommand*{\thechapter}{\PROpis[z]{\c@chapter}},                 %
% ����� (���� \c@chapter=99) \textsl{\uppercase{�����} \thechapter}    %
% ���� ����� `����� ��������� �������' ��������� �������               %
%                                                                      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newif\ifKol@
\newif\ifPor@Zen
\newcount\Vrem@A

% ��� ����� ��������� (`��������� ������')
\newcommand*{\propis}[2][k]{%
        \let\V@\relax
        \Delat@Propis{#1}{#2}}

% ������ ����� ������� (`��������� ������')
\newcommand*{\Propis}[2][k]{%
        \let\V@\Perv@B
        \let\B@=B%
        \Delat@Propis{#1}{#2}}

\def\Verh@#1{\uppercase{#1}}
\def\Perv@B#1{\if B\B@ \Verh@ #1\else
        #1\fi
        \let\B@\relax}

% ��� ����� ������� (`��������� ������') ---
% \uppercase{\propis{...}} �� ��������
\newcommand*{\PROpis}[2][k]{%
        \let\V@\uppercase
        \Delat@Propis{#1}{#2}}

% �������� �������
\def\Delat@Propis#1#2{{%
        \if k#1\Kol@true\else
        \if z#1\Por@Zentrue\else
        \if m#1\relax\else
        \Oshibka@Arg
\fi\fi\fi\Test@Propis{#2}}}

% �������� ������ � ������������
\def\Test@Propis#1{%
        \ifnum #1<0\Oshibka@Otr\else
        \ifnum #1<10\Delat@Ed#1\else
        \ifnum #1<20\expandafter\expandafter\expandafter
                \Nadz@\expandafter\number#1\else
        \ifnum #1<100\expandafter\expandafter\expandafter
                \Delat@Des\expandafter\number#1\else
        \ifnum #1<1000\expandafter\expandafter\expandafter
                \Delat@Sot\expandafter\number#1\else
        \ifnum #1<1000000\ifKol@\Vrem@A#1\advance\Vrem@A1000000
                        \expandafter\expandafter\expandafter
                        \Delat@Tys\expandafter\number\Vrem@A\else
                \Oshibka@Tys\fi\else
                \Oshibka@Mill
\fi\fi\fi\fi\fi\fi}

% ������
\def\Oshibka@Arg{\PackageWarning{numeral}{%
`propis' got wrong mandatory argument!^^J%
Command did not executed}}

\def\Oshibka@Otr{\PackageWarning{numeral}{%
`propis' got argument < 0!^^J%
Command did not executed}}

\def\Oshibka@Tys{\PackageWarning{numeral}{%
Ordinal numerals > 999 not supported :(^^J%
Command did not executed}}

\def\������@Mill{\PackageWarning{numeral}{%
`propis' got argument > 999 999!^^J%
Command did not executed}}

% ������� (0...10)
\def\Delat@Ed#1{\ifKol@\Kol@Ed#1\else
        \Por@Ed#1\fi}

\def\Kol@Ed#1{\ifcase#1\V@{����}\or\V@{����}\or\V@{���}\or
\V@{���}\or\V@{������}\or\V@{����}\or\V@{�����}\or\V@{����}\or
\V@{������}\or\V@{������}\or\V@{������}\fi}

\def\Por@Ed#1{\ifcase#1\V@{�����}\or\V@{����}\or\V@{����}\or
\V@{����}\or\V@{�������}\or\V@{���}\or\V@{����}\or\V@{�����}\or
\V@{�����}\or\V@{�����}\or\V@{�����}\fi\Ok@Ed#1}

\def\Ok@Ed#1{\ifKol@\relax\else
        \ifPor@Zen\ifcase#1\V@{��}\or\V@{��}\or\V@{��}\or
        \V@{��}\else\V@{��}\fi\else
                \ifcase#1\V@{��}\or\V@{��}\or\V@{��}\or
                \V@{��}\or\V@{��}%
                        \or\V@{��}\or\V@{��}\or\V@{��}\or
                        \V@{��}\or\V@{��}%
\fi\fi\fi}

% �� 10 �� 19
\def\Nadz@#1#2{\ifcase#2\V@{�����}\or\V@{����������}\or
\V@{���������}\or\V@{���������}\or\V@{�����������}\or
\V@{���������}\or\V@{����������}\or\V@{���������}\or
\V@{�����������}\or\V@{�����������}\fi\Ok@Nadz}

\def\Ok@Nadz{\ifKol@\V@{�}\else
        \ifPor@Zen\V@{��}\else\V@{��}%
\fi\fi}

% 20--99
\def\Delat@Des#1#2{\ifKol@\Kol@Des#1%
        \ifnum #2=0\relax\else
                \ \Kol@Ed#2\fi\else
        \ifnum #2=0\Por@Des#1\else
                \Kol@Des#1\ \Por@Ed#2%
\fi\fi}

\def\Kol@Des#1{\ifcase#1\or\or\V@{��������}\or\V@{��������}\or
\V@{�����}\or\V@{���������}\or\V@{����������}\or
\V@{���������}\or\V@{�����������}\or\V@{���������}\fi}

\def\Por@Des#1{\ifcase#1\or\or\V@{�������}\or\V@{�������}\or
\V@{�������}\or\V@{���������}\or\V@{����������}\or
\V@{���������}\or\V@{�����������}\or\V@{��������}\fi\Ok@Des#1}

\def\Ok@Des#1{\ifKol@\relax\else
        \ifPor@Zen\V@{��}\else
                \ifcase#1\or\or\V@{��}\or\V@{��}\or\V@{��}\else
                \V@{��}\fi
\fi\fi}

% 100--999
\def\Delat@Sot#1#2#3{%
\ifnum #2=0%
        \ifnum #3=0%
                \ifKol@\Kol@Sot#1\else\Por@Sot#1\fi\else
        \Kol@Sot#1\ \Delat@Ed#3\fi\else
\Delat@���@Sot#1#2#3\fi}

\def\Delat@���@Sot#1#2#3{\Kol@Sot#1\ \ifnum#2=1\Nadz@#2#3\else
        \Delat@Des#2#3\fi}

\def\Kol@Sot#1{\ifcase#1\or\V@{���}\or\V@{������}\or
\V@{������}\or\V@{���������}\or\V@{�������}\or\V@{��������}\or
\V@{�������}\or\V@{���������}\or\V@{���������}\fi}

\def\Por@Sot#1{\ifcase#1\or\V@{���}\or\V@{�������}\or
\V@{�������}\or\V@{����������}\or\V@{�������}\or\V@{��������}\or
\V@{�������}\or\V@{���������}\or\V@{���������}\fi\Ok@Nadz}

% 1000--999999 (������ ��� �������������� ������������)
\def\Delat@Tys1#1#2#3#4#5#6{%
        \Delat@P@Tys{#1}{#2}{#3}%
\Delat@V@Tys{#4}{#5}{#6}}

% ������ ��� �����
\def\Delat@P@Tys#1#2#3{%
\ifnum #1=0%
        \ifnum #2=0%
                \ifnum #3=1\V@{������}\else
                        \ifnum #3=2\V@{��� ������}\else
        \Delat@Ed#3\ \V@{�����}%
\ifcase#3\or\or\or\V@{�}\or\V@{�}\else\relax\fi\fi\fi\else
        \ifnum #2=1\Nadz@#2#3\ \V@{�����}\else
                \ifnum #3=1\Delat@Des{#2}{0}\V@{���� ������}\else
                        \ifnum #3=2\Delat@Des{#2}{0}\V@{��� ������}\else
        \Delat@Des#2#3\ \V@{�����}%
\ifcase#3\or\or\or\V@{�}\or\V@{�}\else\relax\fi\fi\fi\fi\fi\else
                \ifnum #3=1\Delat@Sot{#1}{#2}{0}\V@{���� ������}\else
                        \ifnum #3=2\Delat@Sot{#1}{#2}{0}\V@{��� ������}\else
\Delat@Sot#1#2#3\ \V@{�����}\ifnum #2=1\relax\else
\ifcase#3\or\or\or\V@{�}\or\V@{�}\else\relax\fi\fi\fi\fi\fi}

% ������ ��� �����
\def\Delat@V@Tys#1#2#3{%
\ifnum #1=0%
        \ifnum #2=0%
                \ifnum #3=0\relax\else
                \ \Delat@Ed#3\fi\else
        \ifnum #2=1\ \Nadz@#2#3\else
        \ \Delat@Des#2#3\fi\fi\else
\ \Delat@Sot#1#2#3\fi}

\endinput