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.
203 lines
6.7 KiB
203 lines
6.7 KiB
\ProvidesPackage{farsical}
|
|
[2019/12/12 v0.2 %
|
|
Farsi (jalali) calendar]
|
|
\ifluatex\RequirePackage{luabidi}\else\RequirePackage{bidi}\fi
|
|
\RequirePackage{calc,arabicnumbers}
|
|
|
|
%TODO - rewrite completely using calc
|
|
%% - use Reingold & Dershowitz ME
|
|
%%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%%% Modified from Arabiftoday.sty which is part of the Arabi package:
|
|
%%% Copyright (C) 2006 Youssef Jabri
|
|
%%% itself a modification of the code in the FarsiTeX system:
|
|
%%% Copyright (C) 1996 Hassan Abolhassani
|
|
%%% Copyright (C) 1996-2001 Roozbeh Pournader <roozbeh@sharif.edu>
|
|
%%% Copyright (C) 2000-2001 Behdad Esfahbod <behdad@bamdad.org>
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
\newif\ifJALALI@leap \newif\ifJALALI@kabiseh
|
|
\newcount\JALALI@i \newcount\JALALI@y \newcount\JALALI@m \newcount\JALALI@d
|
|
\newcount\JALALI@latini \newcount\JALALI@farsii
|
|
\newcount\JALALI@latinii \newcount\JALALI@farsiii
|
|
\newcount\JALALI@latiniii \newcount\JALALI@farsiiii
|
|
\newcount\JALALI@latiniv \newcount\JALALI@farsiiv
|
|
\newcount\JALALI@latinv \newcount\JALALI@farsiv
|
|
\newcount\JALALI@latinvi \newcount\JALALI@farsivi
|
|
\newcount\JALALI@latinvii \newcount\JALALI@farsivii
|
|
\newcount\JALALI@latinviii \newcount\JALALI@farsiviii
|
|
\newcount\JALALI@latinix \newcount\JALALI@farsiix
|
|
\newcount\JALALI@latinx \newcount\JALALI@farsix
|
|
\newcount\JALALI@latinxi \newcount\JALALI@farsixi
|
|
\newcount\JALALI@latinxii \newcount\JALALI@farsixii
|
|
\newcount\JALALI@farsixiii
|
|
|
|
\newcount\JALALI@temp
|
|
\newcount\JALALI@temptwo
|
|
\newcount\JALALI@tempthree
|
|
\newcount\JALALI@yModHundred
|
|
\newcount\JALALI@thirtytwo
|
|
\newcount\JALALI@dn
|
|
\newcount\JALALI@sn
|
|
\newcount\JALALI@mminusone
|
|
|
|
% \ftoday renamed to \Jalalitoday - FC
|
|
\def\Jalalitoday{%
|
|
\JALALI@y=\year \JALALI@m=\month \JALALI@d=\day
|
|
%
|
|
\JALALI@temp=\JALALI@y
|
|
\divide\JALALI@temp by 100\relax
|
|
\multiply\JALALI@temp by 100\relax
|
|
\JALALI@yModHundred=\JALALI@y
|
|
\advance\JALALI@yModHundred by -\JALALI@temp\relax
|
|
%
|
|
\ifodd\JALALI@yModHundred
|
|
\JALALI@leapfalse
|
|
\else
|
|
\JALALI@temp=\JALALI@yModHundred
|
|
\divide\JALALI@temp by 2\relax
|
|
\ifodd\JALALI@temp\JALALI@leapfalse
|
|
\else
|
|
\ifnum\JALALI@yModHundred=0%
|
|
\JALALI@temp=\JALALI@y
|
|
\divide\JALALI@temp by 400\relax
|
|
\multiply\JALALI@temp by 400\relax
|
|
\ifnum\JALALI@y=\JALALI@temp\JALALI@leaptrue\else\JALALI@leapfalse\fi
|
|
\else\JALALI@leaptrue
|
|
\fi
|
|
\fi
|
|
\fi
|
|
%
|
|
\JALALI@latini=31\relax
|
|
\ifJALALI@leap
|
|
\JALALI@latinii = 29\relax
|
|
\else
|
|
\JALALI@latinii = 28\relax
|
|
\fi
|
|
\JALALI@latiniii = 31\relax
|
|
\JALALI@latiniv = 30\relax
|
|
\JALALI@latinv = 31\relax
|
|
\JALALI@latinvi = 30\relax
|
|
\JALALI@latinvii = 31\relax
|
|
\JALALI@latinviii = 31\relax
|
|
\JALALI@latinix = 30\relax
|
|
\JALALI@latinx = 31\relax
|
|
\JALALI@latinxi = 30\relax
|
|
\JALALI@latinxii = 31\relax
|
|
%
|
|
\JALALI@thirtytwo=32\relax
|
|
%
|
|
\JALALI@temp=\JALALI@y
|
|
\advance\JALALI@temp by -17\relax
|
|
\JALALI@temptwo=\JALALI@temp
|
|
\divide\JALALI@temptwo by 33\relax
|
|
\multiply\JALALI@temptwo by 33\relax
|
|
\advance\JALALI@temp by -\JALALI@temptwo
|
|
\ifnum\JALALI@temp=\JALALI@thirtytwo\JALALI@kabisehfalse
|
|
\else
|
|
\JALALI@temptwo=\JALALI@temp
|
|
\divide\JALALI@temptwo by 4\relax
|
|
\multiply\JALALI@temptwo by 4\relax
|
|
\advance\JALALI@temp by -\JALALI@temptwo
|
|
\ifnum\JALALI@temp=\z@\JALALI@kabisehtrue\else\JALALI@kabisehfalse\fi
|
|
\fi
|
|
%
|
|
% --BE
|
|
% In fact farsii is equal to the Leap years from a fixed year to the last
|
|
% year minus the Kabise years from a fixed year to the last year plus a const.
|
|
%
|
|
\JALALI@tempthree=\JALALI@y % Number of Leap years
|
|
\advance\JALALI@tempthree by -1
|
|
\JALALI@temp=\JALALI@tempthree % T := (MY-1) div 4
|
|
\divide\JALALI@temp by 4\relax
|
|
\JALALI@temptwo=\JALALI@tempthree % T := T - ((MY-1) div 100)
|
|
\divide\JALALI@temptwo by 100\relax
|
|
\advance\JALALI@temp by -\JALALI@temptwo
|
|
\JALALI@temptwo=\JALALI@tempthree % T := T + ((MY-1) div 400)
|
|
\divide\JALALI@temptwo by 400\relax
|
|
\advance\JALALI@temp by \JALALI@temptwo
|
|
\advance\JALALI@tempthree by -611 % Number of Kabise years
|
|
\JALALI@temptwo=\JALALI@tempthree % T := T - ((SY+10) div 33) * 8
|
|
\divide\JALALI@temptwo by 33\relax
|
|
\multiply\JALALI@temptwo by 8\relax
|
|
\advance\JALALI@temp by -\JALALI@temptwo
|
|
\JALALI@temptwo=\JALALI@tempthree %
|
|
\divide\JALALI@temptwo by 33\relax
|
|
\multiply\JALALI@temptwo by 33\relax
|
|
\advance\JALALI@tempthree by -\JALALI@temptwo
|
|
\ifnum\JALALI@tempthree=32\advance\JALALI@temp by 1\fi % if (SY+10) mod 33=32 then Inc(T);
|
|
\divide\JALALI@tempthree by 4\relax % T := T - ((SY+10) mod 33) div 4
|
|
\advance\JALALI@temp by -\JALALI@tempthree
|
|
\advance\JALALI@temp by -137 % T := T - 137 Adjust the value
|
|
\JALALI@farsii=31
|
|
\advance\JALALI@farsii by -\JALALI@temp % now 31 - T is the farsii
|
|
%
|
|
\JALALI@farsiii = 30\relax
|
|
\ifJALALI@kabiseh
|
|
\JALALI@farsiiii = 30\relax
|
|
\else
|
|
\JALALI@farsiiii = 29\relax
|
|
\fi
|
|
\JALALI@farsiiv = 31\relax
|
|
\JALALI@farsiv = 31\relax
|
|
\JALALI@farsivi = 31\relax
|
|
\JALALI@farsivii = 31\relax
|
|
\JALALI@farsiviii= 31\relax
|
|
\JALALI@farsiix = 31\relax
|
|
\JALALI@farsix = 30\relax
|
|
\JALALI@farsixi = 30\relax
|
|
\JALALI@farsixii = 30\relax
|
|
\JALALI@farsixiii= 30\relax
|
|
%
|
|
\JALALI@dn= 0\relax
|
|
\JALALI@sn= 0\relax
|
|
\JALALI@mminusone=\JALALI@m
|
|
\advance\JALALI@mminusone by -1\relax
|
|
%
|
|
\JALALI@i=0\relax
|
|
\ifnum\JALALI@i < \JALALI@mminusone
|
|
\loop
|
|
\advance \JALALI@i by 1\relax
|
|
\advance\JALALI@dn by \csname JALALI@latin\romannumeral\the\JALALI@i\endcsname
|
|
\ifnum\JALALI@i<\JALALI@mminusone \repeat
|
|
\fi
|
|
\advance \JALALI@dn by \JALALI@d
|
|
%
|
|
\JALALI@i=1\relax
|
|
\JALALI@sn = \JALALI@farsii
|
|
\ifnum \JALALI@sn<\JALALI@dn
|
|
\loop
|
|
\advance \JALALI@i by 1\relax
|
|
\advance\JALALI@sn by \csname JALALI@farsi\romannumeral\the\JALALI@i\endcsname
|
|
\ifnum \JALALI@sn<\JALALI@dn \repeat
|
|
\fi
|
|
\ifnum \JALALI@i < 4
|
|
\JALALI@m = 9 \advance\JALALI@m by \JALALI@i
|
|
\advance \JALALI@y by -622\relax
|
|
\else
|
|
\JALALI@m = \JALALI@i \advance \JALALI@m by -3\relax
|
|
\advance \JALALI@y by -621\relax
|
|
\fi
|
|
\advance\JALALI@sn by -\csname JALALI@farsi\romannumeral\the\JALALI@i%
|
|
\endcsname
|
|
\ifnum\JALALI@i = 1
|
|
\JALALI@d = \JALALI@dn \advance \JALALI@d by 30 \advance\JALALI@d by -\JALALI@farsii
|
|
\else
|
|
\JALALI@d = \JALALI@dn \advance \JALALI@d by -\JALALI@sn
|
|
\fi
|
|
%% DATE FORMATTING
|
|
\if@RTL{\farsidigits{\number\JALALI@d}\space%
|
|
\Jalalimonth{\JALALI@m}\space\farsidigits{\number\JALALI@y}}%
|
|
\else
|
|
\number\JALALI@d\space\JalalimonthEnglish{\JALALI@m}%
|
|
\space\number\JALALI@y%
|
|
\fi}
|
|
%%%
|
|
\def\Jalalimonth#1{\ifcase#1\or فروردین\or
|
|
اردیبهشت\or خرداد\or تیر\or مرداد\or شهریور%
|
|
\or مهر\or آبان\or آذر\or دی\or بهمن\or اسفند%
|
|
\fi}
|
|
\def\JalalimonthEnglish#1{\ifcase#1%
|
|
\or Farvardīn\or Ordībehesht\or Khordād\or Tīr%
|
|
\or Mordād\or Shahrīvar\or Mihr\or Ābān\or Āzar%
|
|
\or Dai\or Bahman\or Esfand\fi}
|
|
\endinput
|
|
|