\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 %%% Copyright (C) 2000-2001 Behdad Esfahbod %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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