diff options
author | Karl Berry <karl@freefriends.org> | 2008-07-12 18:23:29 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-07-12 18:23:29 +0000 |
commit | 9bca6550cfe2de5380ebe394480ccb24126f2863 (patch) | |
tree | 2abb49bb229bed346f86399bc005c1ed7038d867 /Master/texmf-dist/tex/xelatex/polyglossia/hebrewcal.sty | |
parent | 037cf3d536e0f1fa1cccb00e1f26e8279abceb40 (diff) |
new xetex package polyglossia (11jul08)
git-svn-id: svn://tug.org/texlive/trunk@9485 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/polyglossia/hebrewcal.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/polyglossia/hebrewcal.sty | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/polyglossia/hebrewcal.sty b/Master/texmf-dist/tex/xelatex/polyglossia/hebrewcal.sty new file mode 100644 index 00000000000..d4f53fccd48 --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/polyglossia/hebrewcal.sty @@ -0,0 +1,331 @@ +\ProvidesPackage{hebrewcal} + [2008/07/01 v2.4 % + Hebrew calendar for polyglossia (adapted from hebcal.sty in Babel)] +\RequirePackage{bidi} + +%% TODO rewrite this on the basis of Reingold & Dershowitz +%% on the model of hijrical (using calc) + +\@ifundefined{@Remainder}{\input{cal-util.def}}{} + +\define@boolkey{hebrew}[@hebrew@]{fullyear}[false]{} +\setkeys{hebrew}{fullyear} + +\newcount\hebrewday \newcount\hebrewmonth \newcount\hebrewyear +\def\hebrewdate#1#2#3{% + \HebrewFromGregorian{#1}{#2}{#3}% + {\hebrewday}{\hebrewmonth}{\hebrewyear}% + \if@rl% + \@FormatForHebrew{\hebrewday}{\hebrewmonth}{\hebrewyear}% + \else% + \@FormatForEnglish{\hebrewday}{\hebrewmonth}{\hebrewyear}% + \fi} +\def\hebrewtoday{\hebrewdate{\day}{\month}{\year}} +\def\hebrewsetreg{% + \HebrewFromGregorian{\day}{\month}{\year}% + {\hebrewday}{\hebrewmonth}{\hebrewyear}} +\def\HebrewYearName#1{{% + \@tempcnta=#1\divide\@tempcnta by 1000\multiply\@tempcnta by 1000 + \ifnum#1=\@tempcnta\relax % divisible by 1000: disambiguate + \hebrewnumeral{#1}\ (לפ"ג)% + \else % not divisible by 1000 + \ifnum#1<1000\relax % first millennium: disambiguate + \hebrewnumeral{#1}\ (לפ"ג)% + \else + \ifnum#1<5000 + \hebrewnumeral{#1}% + \else + \ifnum#1<6000 % current millenium, print without thousands + \@tempcnta=#1\relax + \if@hebrew@fullyear\else\advance\@tempcnta by -5000\fi + \hebrewnumeral{\@tempcnta}% + \else % #1>6000 + \hebrewnumeral{#1}% + \fi + \fi + \fi + \fi}} +\def\HebrewMonthName#1#2{% + \ifnum #1 = 7 % + \@CheckLeapHebrewYear{#2}% + \if@HebrewLeap אדר\ ב'% + \else אדר% + \fi% + \else% + \ifcase#1% + % nothing for 0 + \or תשרי% + \or השון% + \or כסלו% + \or טבת% + \or שבט% + \or אדר\ א'% + \or אדר\ ב'% + \or ניסן% + \or אייר% + \or סיון% + \or תמוז% + \or אב% + \or אלול% + \fi% + \fi} +\def\@FormatForHebrew#1#2#3{% + \hebrewnumeral{#1}~ב\HebrewMonthName{#2}{#3}~% + \HebrewYearName{#3}} +\def\HebrewMonthNameInEnglish#1#2{% + \ifnum #1 = 7% + \@CheckLeapHebrewYear{#2}% + \if@HebrewLeap Adar II\else Adar\fi% + \else% + \ifcase #1% + % nothing for 0 + \or Tishrei% + \or Heshvan% + \or Kislev% + \or Tebeth% + \or Shebat% + \or Adar I% + \or Adar II% + \or Nisan% + \or Iyar% + \or Sivan% + \or Tammuz% + \or Av% + \or Elul% + \fi + \fi} +\def\@FormatForEnglish#1#2#3{% + \HebrewMonthNameInEnglish{#2}{#3} \number#1,\ \number#3} +\newcount\@common +\newif\if@HebrewLeap +\def\@CheckLeapHebrewYear#1{% + {% + \countdef\tmpa = 0% % \tmpa==\count0 + \countdef\tmpb = 1% % \tmpb==\count1 + \tmpa = #1% + \multiply \tmpa by 7% + \advance \tmpa by 1% + \@Remainder{\tmpa}{19}{\tmpb}% + \ifnum \tmpb < 7% % \tmpb = (7*year+1)%19 + \global\@HebrewLeaptrue% + \else% + \global\@HebrewLeapfalse% + \fi}} +\def\@HebrewElapsedMonths#1#2{% + {% + \countdef\tmpa = 0% % \tmpa==\count0 + \countdef\tmpb = 1% % \tmpb==\count1 + \countdef\tmpc = 2% % \tmpc==\count2 + \tmpa = #1% % + \advance \tmpa by -1% % + #2 = \tmpa% % #2 = \tmpa = year-1 + \divide #2 by 19% % Number of complete Meton cycles + \multiply #2 by 235% % #2 = 235*((year-1)/19) + \@Remainder{\tmpa}{19}{\tmpb}% \tmpa = years%19-years this cycle + \tmpc = \tmpb% % + \multiply \tmpb by 12% % + \advance #2 by \tmpb% % add regular months this cycle + \multiply \tmpc by 7% % + \advance \tmpc by 1% % + \divide \tmpc by 19% % \tmpc = (1+7*((year-1)%19))/19 - + \advance #2 by \tmpc% % add leap months + \global\@common = #2}% + #2 = \@common} +\def\@HebrewElapsedDays#1#2{% + {% + \countdef\tmpa = 0% % \tmpa==\count0 + \countdef\tmpb = 1% % \tmpb==\count1 + \countdef\tmpc = 2% % \tmpc==\count2 + \@HebrewElapsedMonths{#1}{#2}% + \tmpa = #2% % + \multiply \tmpa by 13753% % + \advance \tmpa by 5604% % \tmpa=MonthsElapsed*13758 + 5604 + \@Remainder{\tmpa}{25920}{\tmpc}% \tmpc == ConjunctionParts + \divide \tmpa by 25920% + \multiply #2 by 29% + \advance #2 by 1% + \advance #2 by \tmpa% % #2 = 1 + MonthsElapsed*29 + + \@Remainder{#2}{7}{\tmpa}% % \tmpa == DayOfWeek + \ifnum \tmpc < 19440% + \ifnum \tmpc < 9924% + \else% % New moon at 9 h. 204 p. or later + \ifnum \tmpa = 2% % on Tuesday ... + \@CheckLeapHebrewYear{#1}% of a common year + \if@HebrewLeap% + \else% + \advance #2 by 1% + \fi% + \fi% + \fi% + \ifnum \tmpc < 16789% + \else% % New moon at 15 h. 589 p. or later + \ifnum \tmpa = 1% % on Monday ... + \advance #1 by -1% + \@CheckLeapHebrewYear{#1}% at the end of leap year + \if@HebrewLeap% + \advance #2 by 1% + \fi% + \fi% + \fi% + \else% + \advance #2 by 1% % new moon at or after midday + \fi% + \@Remainder{#2}{7}{\tmpa}% % \tmpa == DayOfWeek + \ifnum \tmpa = 0% % if Sunday ... + \advance #2 by 1% + \else% % + \ifnum \tmpa = 3% % Wednesday ... + \advance #2 by 1% + \else% + \ifnum \tmpa = 5% % or Friday + \advance #2 by 1% + \fi% + \fi% + \fi% + \global\@common = #2}% + #2 = \@common} +\def\@DaysInHebrewYear#1#2{% + {% + \countdef\tmpe = 12% % \tmpe==\count12 + \@HebrewElapsedDays{#1}{\tmpe}% + \advance #1 by 1% + \@HebrewElapsedDays{#1}{#2}% + \advance #2 by -\tmpe% + \global\@common = #2}% + #2 = \@common} +\def\@HebrewDaysInPriorMonths#1#2#3{% + {% + \countdef\tmpf= 14% % \tmpf==\count14 + #3 = \ifcase #1% % Days in prior month of regular year + 0 \or% % no month number 0 + 0 \or% % Tishri + 30 \or% % Heshvan + 59 \or% % Kislev + 89 \or% % Tebeth + 118 \or% % Shebat + 148 \or% % Adar I + 148 \or% % Adar II + 177 \or% % Nisan + 207 \or% % Iyar + 236 \or% % Sivan + 266 \or% % Tammuz + 295 \or% % Av + 325 \or% % Elul + 400% % Dummy + \fi% + \@CheckLeapHebrewYear{#2}% + \if@HebrewLeap% % in leap year + \ifnum #1 > 6% % if month after Adar I + \advance #3 by 30% % add 30 days + \fi% + \fi% + \@DaysInHebrewYear{#2}{\tmpf}% + \ifnum #1 > 3% + \ifnum \tmpf = 353% % + \advance #3 by -1% % + \fi% % Short Kislev + \ifnum \tmpf = 383% % + \advance #3 by -1% % + \fi% % + \fi% + \ifnum #1 > 2% + \ifnum \tmpf = 355% % + \advance #3 by 1% % + \fi% % Long Heshvan + \ifnum \tmpf = 385% % + \advance #3 by 1% % + \fi% % + \fi% + \global\@common = #3}% + #3 = \@common} +\def\@FixedFromHebrew#1#2#3#4{% + {% + #4 = #1% + \@HebrewDaysInPriorMonths{#2}{#3}{#1}% + \advance #4 by #1% % Add days in prior months this year + \@HebrewElapsedDays{#3}{#1}% + \advance #4 by #1% % Add days in prior years + \advance #4 by -1373429% % Subtract days before Gregorian + \global\@common = #4}% % 01.01.0001 + #4 = \@common} +\def\@GregorianDaysInPriorMonths#1#2#3{% + {% + #3 = \ifcase #1% + 0 \or% % no month number 0 + 0 \or% + 31 \or% + 59 \or% + 90 \or% + 120 \or% + 151 \or% + 181 \or% + 212 \or% + 243 \or% + 273 \or% + 304 \or% + 334% + \fi% + \if@GregorianLeap{#2}% + \ifnum #1 > 2% % if month after February + \advance #3 by 1% % add leap day + \fi% + \fi% + \global\@common = #3}% + #3 = \@common} +\def\@GregorianDaysInPriorYears#1#2{% + {% + \countdef\tmpc = 4% % \tmpc==\count4 + \countdef\tmpb = 2% % \tmpb==\count2 + \tmpb = #1% % + \advance \tmpb by -1% % + \tmpc = \tmpb% % \tmpc = \tmpb = year-1 + \multiply \tmpc by 365% % Days in prior years = + #2 = \tmpc% % = 365*(year-1) ... + \tmpc = \tmpb% % + \divide \tmpc by 4% % \tmpc = (year-1)/4 + \advance #2 by \tmpc% % ... plus Julian leap days ... + \tmpc = \tmpb% % + \divide \tmpc by 100% % \tmpc = (year-1)/100 + \advance #2 by -\tmpc% % ... minus century years ... + \tmpc = \tmpb% % + \divide \tmpc by 400% % \tmpc = (year-1)/400 + \advance #2 by \tmpc% % ... plus 4-century years. + \global\@common = #2}% + #2 = \@common} +\def\@AbsoluteFromGregorian#1#2#3#4{% + {% + \countdef\tmpd = 0% % \tmpd==\count0 + #4 = #1% % days so far this month + \@GregorianDaysInPriorMonths{#2}{#3}{\tmpd}% + \advance #4 by \tmpd% % add days in prior months + \@GregorianDaysInPriorYears{#3}{\tmpd}% + \advance #4 by \tmpd% % add days in prior years + \global\@common = #4}% + #4 = \@common} +\def\HebrewFromGregorian#1#2#3#4#5#6{% + {% + \countdef\tmpx= 17% % \tmpx==\count17 + \countdef\tmpy= 18% % \tmpy==\count18 + \countdef\tmpz= 19% % \tmpz==\count19 + #6 = #3% % + \global\advance #6 by 3761% approximation from above + \@AbsoluteFromGregorian{#1}{#2}{#3}{#4}% + \tmpz = 1 \tmpy = 1% + \@FixedFromHebrew{\tmpz}{\tmpy}{#6}{\tmpx}% + \ifnum \tmpx > #4% % + \global\advance #6 by -1% Hyear = Gyear + 3760 + \@FixedFromHebrew{\tmpz}{\tmpy}{#6}{\tmpx}% + \fi% % + \advance #4 by -\tmpx% % Days in this year + \advance #4 by 1% % + #5 = #4% % + \divide #5 by 30% % Approximation for month from below + \loop% % Search for month + \@HebrewDaysInPriorMonths{#5}{#6}{\tmpx}% + \ifnum \tmpx < #4% + \advance #5 by 1% + \tmpy = \tmpx% + \repeat% + \global\advance #5 by -1% + \global\advance #4 by -\tmpy}} +\endinput |