You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
356 lines
8.0 KiB
356 lines
8.0 KiB
%%
|
|
%% This is file `datenumber.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% The original source files were:
|
|
%%
|
|
%% datenumber.dtx (with options: `datenumber')
|
|
%%
|
|
%% This file is part of the `datenumber' package,
|
|
%%
|
|
%% Copyright (C) 2001 J"org-Michael Schr"oder.
|
|
%%
|
|
%% IMPORTANT NOTICE:
|
|
%%
|
|
%% This program may be distributed and/or modified under the
|
|
%% conditions of the LaTeX Project Public License, either version 1.2
|
|
%% of this license or (at your option) any later version.
|
|
%% The latest version of this license is in
|
|
%% http://www.latex-project.org/lppl.txt
|
|
%% and version 1.2 or later is part of all distributions of LaTeX
|
|
%% version 1999/12/01 or later.
|
|
%%
|
|
%% This program consists of all files listed in README.txt.
|
|
%%
|
|
%% For error reports, or offers to help make this a more powerful
|
|
%% tool, please contact me on schrj020@mail.uni-mainz.de
|
|
%%
|
|
\def\fileversion{v0.02}
|
|
\def\filedate{2001/08/06}
|
|
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{datenumber}[\filedate \fileversion]
|
|
|
|
\DeclareOption{english}{\input datenumberenglish.ldf}
|
|
\DeclareOption{USenglish}{\input datenumberUSenglish.ldf}
|
|
\DeclareOption{french}{\input datenumberfrench.ldf}
|
|
\DeclareOption{italian}{\input datenumberitalian.ldf}
|
|
\DeclareOption{spanish}{\input datenumberspanish.ldf}
|
|
\DeclareOption{german}{\input datenumbergerman.ldf}
|
|
\DeclareOption{ngerman}{\input datenumbergerman.ldf}
|
|
\input datenumberUSenglish.ldf
|
|
\ProcessOptions
|
|
\newcounter{@dayscnt}
|
|
\newcounter{@startyear}
|
|
|
|
\def\setstartyear#1{%
|
|
\ifnum#1<1
|
|
\errmessage{Package datenumber: startyear < 1}%
|
|
\fi
|
|
\setcounter{@startyear}{#1}%
|
|
\setdatetoday
|
|
}
|
|
|
|
\def\thestartyear{\the@startyear}
|
|
|
|
\def\setmydatenumber#1#2#3#4{%
|
|
\ifvaliddate{#2}{#3}{#4}%
|
|
\else
|
|
\errmessage{\@errmessage}%
|
|
\fi
|
|
\ifnum\the@startyear<1
|
|
\errmessage{Package datenumber: startyear < 1}%
|
|
\fi
|
|
\ifnum#2<\the@startyear
|
|
\errmessage{Package datenumber: datenumber < startyear (#2 < \the@startyear)}%
|
|
\fi
|
|
\setcounter{@dayscnt}{0}%
|
|
\ifnum#2>\the@startyear
|
|
\relax\@yearloop{#2}%
|
|
\fi
|
|
\addtocounter{@dayscnt}{%
|
|
\ifcase #3%
|
|
\or 0\or 31\or 59
|
|
\or 90\or 120\or 151
|
|
\or 181\or 212\or 243
|
|
\or 273\or 304\or 334
|
|
\fi
|
|
}%
|
|
\ifleapyear{#2}%
|
|
\ifnum#3>2
|
|
\addtocounter{@dayscnt}{1}%
|
|
\fi
|
|
\fi
|
|
\ifnum#2=1582
|
|
\ifnum#3>10
|
|
\addtocounter{@dayscnt}{-10}%
|
|
\fi
|
|
\ifnum#3=10
|
|
\ifnum#4>14
|
|
\addtocounter{@dayscnt}{-10}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\addtocounter{@dayscnt}{#4}%
|
|
\setcounter{#1}{\the@dayscnt}%
|
|
}
|
|
|
|
\def\setmydatebynumber#1#2#3#4{%
|
|
\ifnum\the@startyear<1
|
|
\errmessage{Package datenumber: startyear < 1}%
|
|
\fi
|
|
\ifnum#1<1
|
|
\errmessage{Package datenumber: datenumber < 1}%
|
|
\fi
|
|
\setcounter{#2}{\the@startyear}%
|
|
\setcounter{@dayscnt}{1}%
|
|
\loop
|
|
\ifleapyear{\thedateyear}%
|
|
\@tempcnta=366
|
|
\else
|
|
\@tempcnta=365
|
|
\fi
|
|
\ifnum\thedateyear=1582
|
|
\@tempcnta=355
|
|
\fi
|
|
\addtocounter{@dayscnt}{\the\@tempcnta}%
|
|
\ifnum\the@dayscnt<#1\addtocounter{dateyear}{1}%
|
|
\repeat
|
|
\addtocounter{@dayscnt}{-\the\@tempcnta}%
|
|
%
|
|
\setcounter{#3}{1}%
|
|
\setcounter{#4}{1}%
|
|
\setmydatenumber{@dayscnt}{\value{#2}}{\value{#3}}{\value{#4}}%
|
|
\ifnum#1>\the@dayscnt\relax
|
|
\loop
|
|
\mynextdate{#2}{#3}{#4}%
|
|
\addtocounter{@dayscnt}{1}%
|
|
\ifnum\the@dayscnt<#1\relax
|
|
\repeat
|
|
\setmydatenumber{@dayscnt}{\value{#2}}{\value{#3}}{\value{#4}}%
|
|
\fi
|
|
}
|
|
|
|
\def\mynextdate#1#2#3{%
|
|
\ifvaliddate{\value{#1}}{\value{#2}}{\value{#3}}%
|
|
\else
|
|
\errmessage{\@errmessage}%
|
|
\fi
|
|
\addtocounter{#3}{1}%
|
|
\ifleapyear{\value{#1}}%
|
|
\@tempcnta=29
|
|
\else
|
|
\@tempcnta=28
|
|
\fi
|
|
\ifnum\value{#3}>%
|
|
\ifcase\value{#2}\or31\or\@tempcnta\or31\or30\or31\or30%
|
|
\or31\or31\or30\or31\or30\else31%
|
|
\fi\relax
|
|
\setcounter{#3}{1}%
|
|
\addtocounter{#2}{1}%
|
|
\ifnum\value{#2}>12
|
|
\setcounter{#2}{1}%
|
|
\addtocounter{#1}{1}%
|
|
\fi
|
|
\fi
|
|
\ifnum\value{#1}=1582
|
|
\ifnum\value{#2}=10
|
|
\ifnum\value{#3}=5
|
|
\setcounter{#3}{15}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}
|
|
|
|
\def\myprevdate#1#2#3{%
|
|
\ifvaliddate{\value{#1}}{\value{#2}}{\value{#3}}%
|
|
\else
|
|
\errmessage{\@errmessage}%
|
|
\fi
|
|
\addtocounter{#3}{-1}%
|
|
\ifleapyear{\value{#1}}%
|
|
\@tempcnta=29
|
|
\else
|
|
\@tempcnta=28
|
|
\fi
|
|
\ifnum\value{#3}=0
|
|
\addtocounter{#2}{-1}%
|
|
\ifnum\value{#2}=0
|
|
\addtocounter{#1}{-1}%
|
|
\setcounter{#2}{12}%
|
|
\fi
|
|
\setcounter{#3}{%
|
|
\ifcase\value{#2}\or 31\or\the\@tempcnta\or 31\or 30\or 31\or 30
|
|
\or 31\or 31\or 30\or 31\or 30\else 31
|
|
\fi
|
|
}%
|
|
\fi
|
|
\ifnum\value{#1}=1582
|
|
\ifnum\value{#2}=10
|
|
\ifnum\value{#3}=14
|
|
\setcounter{#3}{4}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
}
|
|
|
|
|
|
\newcounter{datenumber}
|
|
\newcounter{dateyear}
|
|
\newcounter{datemonth}
|
|
\newcounter{dateday}
|
|
\newcounter{datedayname}
|
|
|
|
\def\setdatenumber#1#2#3{%
|
|
\setmydatenumber{datenumber}{#1}{#2}{#3}%
|
|
\setcounter{dateyear}{#1}%
|
|
\setcounter{datemonth}{#2}%
|
|
\setcounter{dateday}{#3}%
|
|
\setdaynamebynumber{\thedatenumber}%
|
|
\setmonthname{\thedatemonth}%
|
|
}
|
|
|
|
\def\setdatebynumber#1{%
|
|
\setmydatebynumber{#1}{dateyear}{datemonth}{dateday}%
|
|
\setcounter{datenumber}{#1}%
|
|
\setdaynamebynumber{\thedatenumber}%
|
|
\setmonthname{\thedatemonth}%
|
|
}
|
|
|
|
\def\nextdate{%
|
|
\mynextdate{dateyear}{datemonth}{dateday}%
|
|
\setdate{\thedateyear}{\thedatemonth}{\thedateday}%
|
|
}
|
|
|
|
\def\prevdate{%
|
|
\myprevdate{dateyear}{datemonth}{dateday}%
|
|
\setdate{\thedateyear}{\thedatemonth}{\thedateday}%
|
|
}
|
|
|
|
\def\setdate#1#2#3{%#1 year, #2 month, #3 day
|
|
\setdatenumber{#1}{#2}{#3}%
|
|
}
|
|
|
|
\def\setdatetoday{%
|
|
\setdatenumber{\the\year}{\the\month}{\the\day}%
|
|
}
|
|
|
|
|
|
\def\setmonthname#1{%
|
|
\def\datemonthname{\@monthname{#1}}%
|
|
}
|
|
|
|
|
|
\def\setdayname#1{%
|
|
\def\datedayname{\@dayname{#1}}%
|
|
}
|
|
|
|
\def\setdaynamebynumber#1{%
|
|
\@tempcnta=#1\relax
|
|
\ifnum\the@startyear=1800\advance \@tempcnta by 1\fi
|
|
\ifnum\the@startyear=1900\advance \@tempcnta by 6\fi
|
|
\ifnum\the@startyear=2000\advance \@tempcnta by 4\fi
|
|
\@modulo{\the\@tempcnta}{7}%
|
|
\setcounter{datedayname}{\the\@den}%
|
|
\addtocounter{datedayname}{1}%
|
|
\setdayname{\thedatedayname}%
|
|
}
|
|
|
|
\def\datedate{\@datedate}%
|
|
|
|
\def\dateselectlanguage#1{%
|
|
\csname @datelanguage#1\endcsname
|
|
\setdayname{\thedatedayname}%
|
|
\setmonthname{\thedatemonth}%
|
|
}
|
|
|
|
\def\ifleapyear#1{%#1 year
|
|
\ifnum#1>1500
|
|
\@modulo{#1}{100}%
|
|
\ifnum\@den=0
|
|
\@modulo{#1}{400}%
|
|
\else
|
|
\@modulo{#1}{4}%
|
|
\fi
|
|
\else
|
|
\@modulo{#1}{4}%
|
|
\fi
|
|
\ifnum\@den=0
|
|
}
|
|
|
|
\def\ifvaliddate#1#2#3{%
|
|
\ifleapyear{#1}%
|
|
\@tempcnta=29
|
|
\else
|
|
\@tempcnta=28
|
|
\fi
|
|
\gdef\@errmessage{}%
|
|
\ifnum#1<1
|
|
\gdef\@errmessage{Package datenumber: %
|
|
invalid date: year < 1, #1/#2/#3}%
|
|
\fi%
|
|
\ifnum#2<1
|
|
\gdef\@errmessage{Package datenumber: %
|
|
invalid date: month < 1, #1/#2/#3}%
|
|
\fi%
|
|
\ifnum#2>12
|
|
\gdef\@errmessage{Package datenumber: %
|
|
invalid date: month > 12, #1/#2/#3}%
|
|
\fi%
|
|
\ifnum#3<1
|
|
\gdef\@errmessage{Package datenumber: %
|
|
invalid date: day < 1, #1/#2/#3}%
|
|
\fi%
|
|
\@tempcntb=
|
|
\ifcase#2 31\or 31\or\the\@tempcnta\or 31\or 30\or 31\or 30
|
|
\or 31\or 31\or 30\or 31\or 30\else 31
|
|
\fi\relax
|
|
\ifnum#3>\@tempcntb
|
|
\gdef\@errmessage{Package datenumber: %
|
|
invalid date: day > \the\@tempcntb, #1/#2/#3}%
|
|
\fi%
|
|
\ifnum#1=1582
|
|
\ifnum#2=10
|
|
\ifnum#3>4
|
|
\ifnum#3<15
|
|
\gdef\@errmessage{Package datenumber: %
|
|
invalid date: #1/#2/#3}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\ifx\@errmessage\empty
|
|
}
|
|
|
|
\def\@yearloop#1{%
|
|
\@tempcnta=\the@startyear%
|
|
\loop
|
|
\ifleapyear{\@tempcnta}%
|
|
\addtocounter{@dayscnt}{366}%
|
|
\else
|
|
\addtocounter{@dayscnt}{365}%
|
|
\fi
|
|
\ifnum\@tempcnta=1582
|
|
\addtocounter{@dayscnt}{-10}%
|
|
\fi
|
|
\advance \@tempcnta by 1
|
|
\ifnum\@tempcnta=#1\else
|
|
\repeat
|
|
}
|
|
|
|
\newcount\@nom\newcount\@den
|
|
|
|
\def\@modulo#1#2{%
|
|
\@nom=#1\relax
|
|
\@den=#2\relax
|
|
\divide\@nom by \@den%
|
|
\multiply\@nom by \@den%
|
|
\@den=#1%
|
|
\advance\@den by -\@nom%
|
|
}
|
|
|
|
\setstartyear{1800}
|
|
|
|
\endinput
|
|
%%
|
|
%% End of file `datenumber.sty'.
|