Skip to content

Commit

Permalink
Dedicated files for calendars.
Browse files Browse the repository at this point in the history
  • Loading branch information
Javier committed May 27, 2022
1 parent 583fab7 commit df9c84a
Show file tree
Hide file tree
Showing 7 changed files with 136 additions and 113 deletions.
4 changes: 2 additions & 2 deletions README.md
@@ -1,4 +1,4 @@
## Babel 3.75.2749
## Babel 3.75.2750

*(Development)*

Expand Down Expand Up @@ -49,7 +49,7 @@ respective authors.
### Summary of latest changes
```
3.75 (dev)
* Start calendars: islamic-civil, islamic-umalqura
* Calendar conversion: islamic-civil, islamic-umalqura.
3.75 2022-05-22
* `\BabelEnsureInfo` is active by default, to make sure the BCP 47
Expand Down
157 changes: 130 additions & 27 deletions babel.dtx
Expand Up @@ -32,7 +32,7 @@
%
% \iffalse
%<*filedriver>
\ProvidesFile{babel.dtx}[2022/05/26 v3.75.2749 The Babel package]
\ProvidesFile{babel.dtx}[2022/05/27 v3.75.2750 The Babel package]
\documentclass{ltxdoc}
\GetFileInfo{babel.dtx}
\usepackage{fontspec}
Expand Down Expand Up @@ -5143,8 +5143,8 @@ help from Bernd Raichle, for which I am grateful.
% \section{Tools}
%
% \begin{macrocode}
%<<version=3.75.2749>>
%<<date=2022/05/26>>
%<<version=3.75.2750>>
%<<date=2022/05/27>>
% \end{macrocode}
%
% \textbf{Do not use the following macros in \texttt{ldf} files. They
Expand Down Expand Up @@ -10018,6 +10018,17 @@ help from Bernd Raichle, for which I am grateful.
\let\atcatcode\relax
\global\bbl@csarg\let{rqtex@\languagename}\relax
\fi}%
\bbl@ifunset{bbl@rqcal@\languagename}{}%
{\edef\bbl@tempa{\bbl@cs{rqcal@\languagename}}%
\bbl@replace\bbl@tempa{ }{,}%
\bbl@foreach\bbl@tempa{%
\bbl@ifunset{bbl@ca@##1}{%
\chardef\atcatcode=\catcode`\@
\catcode`\@=11\relax
\InputIfFileExists{babel-ca-##1.tex}{}{}%
\catcode`\@=\atcatcode
\let\atcatcode\relax}%
{}}}%
\fi
% == frenchspacing ==
\ifcase\bbl@howloaded\in@true\else\in@false\fi
Expand Down Expand Up @@ -10460,6 +10471,7 @@ help from Bernd Raichle, for which I am grateful.
\bbl@exportkey{dgnat}{numbers.digits.native}{}%
\ifnum#1=\tw@ % only (re)new
\bbl@exportkey{rqtex}{identification.require.babel}{}%
\bbl@exportkey{rqcal}{identification.require.calendars}{}%
\bbl@toglobal\bbl@savetoday
\bbl@toglobal\bbl@savedate
\bbl@savestrings
Expand Down Expand Up @@ -10753,6 +10765,8 @@ help from Bernd Raichle, for which I am grateful.
%
% \begin{macrocode}
\let\bbl@calendar\@empty
\newcommand\babelcalendar[2][\the\year-\the\month-\the\day]{%
\@nameuse{bbl@ca@#2}#1\@@}
\newcommand\BabelDateSpace{\nobreakspace}
\newcommand\BabelDateDot{.\@} % TODO. \let instead of repeating
\newcommand\BabelDated[1]{{\number#1}}
Expand Down Expand Up @@ -10795,30 +10809,6 @@ help from Bernd Raichle, for which I am grateful.
\def\bbl@xdatecntr[#1|#2]{\localenumeral{#2}{#1}}
% \end{macrocode}
%
% \textbf{Calendars.} The code for specific calendars are placed in the
% locales requiring it. Here we just define a few general macros,
% particularly a funcion to get the julian day. It’s based on the
% little library |calendar.js|, by John Walker, in the public domain.
%
% \begin{macrocode}
\ifx\ExplSyntaxOn\@undefined\else
\ExplSyntaxOn
\def\bbl@fpmod#1#2{(#1-#2*floor(#1/#2))}
\def\bbl@cs@gregleap#1{%
(\bbl@fpmod{#1}{4} == 0) &&
(!((\bbl@fpmod{#1}{100} == 0) && (\bbl@fpmod{#1}{400} != 0)))}
\def\bbl@ca@jd#1#2#3{% year, month, day
\fp_eval:n{ 1721424.5 + (365 * (#1 - 1)) +
floor((#1 - 1) / 4) + (-floor((#1 - 1) / 100)) +
floor((#1 - 1) / 400) + floor((((367 * #2) - 362) / 12) +
((#2 <= 2) ? 0 : (\bbl@cs@gregleap{#1} ? -1 : -2)) + #3) }}
\newcommand\babelcalendar[2][\the\year-\the\month-\the\day]{%
\@nameuse{bbl@ca@#2}#1\@@}
\ExplSyntaxOff
\fi
% \end{macrocode}
%
%
% \textbf{Transforms.}
%
% \begin{macrocode}
Expand Down Expand Up @@ -22709,6 +22699,119 @@ Babel.cjk_breaks = {
%</nil>
% \end{macrocode}
%
% \section{Calendars}
%
% The code for specific calendars are placed in the
% specific files, loaded when requested by an |ini| file in the
% |identification| section with |require.calendars|.
%
% \subsection{Islamic}
%
% Start with function to compute the Julian day. It’s based on the
% little library |calendar.js|, by John Walker, in the public domain.
% The code for the Civil calendar is based on it, too.
%
% \begin{macrocode}
%<*ca-islamic>
\ExplSyntaxOn
\def\bbl@fpmod#1#2{(#1-#2*floor(#1/#2))}
\def\bbl@cs@gregleap#1{%
(\bbl@fpmod{#1}{4} == 0) &&
(!((\bbl@fpmod{#1}{100} == 0) && (\bbl@fpmod{#1}{400} != 0)))}
\def\bbl@ca@jd#1#2#3{% year, month, day
\fp_eval:n{ 1721424.5 + (365 * (#1 - 1)) +
floor((#1 - 1) / 4) + (-floor((#1 - 1) / 100)) +
floor((#1 - 1) / 400) + floor((((367 * #2) - 362) / 12) +
((#2 <= 2) ? 0 : (\bbl@cs@gregleap{#1} ? -1 : -2)) + #3) }}
% == islamic (default)
% Not yet implemented
\def\bbl@ca@islamic#1-#2-#3\@@#4#5#6{}
% \end{macrocode}
%
% The Civil calendar.
%
% \begin{macrocode}
\def\bbl@cs@isltojd#1#2#3{ % year, month, day
((#3 + ceil(29.5 * (#2 - 1)) +
(#1 - 1) * 354 + floor((3 + (11 * #1)) / 30) +
1948439.5) - 1) }
\@namedef{bbl@ca@islamic-civil++}{\bbl@ca@islamicvl@x{+2}}
\@namedef{bbl@ca@islamic-civil+}{\bbl@ca@islamicvl@x{+1}}
\@namedef{bbl@ca@islamic-civil}{\bbl@ca@islamicvl@x{}}
\@namedef{bbl@ca@islamic-civil-}{\bbl@ca@islamicvl@x{-1}}
\@namedef{bbl@ca@islamic-civil--}{\bbl@ca@islamicvl@x{-2}}
\def\bbl@ca@islamicvl@x#1#2-#3-#4\@@#5#6#7{%
\edef\bbl@tempa{%
\fp_eval:n{ floor(\bbl@ca@jd{#2}{#3}{#4})+0.5 #1}}%
\edef#5{%
\fp_eval:n{ floor(((30*(\bbl@tempa-1948439.5)) + 10646)/10631) }}%
\edef#6{\fp_eval:n{
min(12,ceil((\bbl@tempa-(29+\bbl@cs@isltojd{#5}{1}{1}))/29.5)+1) }}%
\edef#7{\fp_eval:n{ \bbl@tempa - \bbl@cs@isltojd{#5}{#6}{1} + 1} }}
% \end{macrocode}
%
% The Umm al-Qura calendar, used mainly in Saudi Arabia. Based on
% \texttt{islamdate\_today.js} on |https://webspace.science.uu.nl/|.
% Copyright 1999-2002 by Ray Stott. Free to use if credited.
%
% Since the main aim is to provide a suitable |\today|, and maybe some
% close dates, data just covers Hijri $\sim$1435/$\sim$1460 (Gregorian
% $\sim$2014/$\sim$2038).
%
% \begin{macrocode}
\def\bbl@ca@umalqura@data{56660, 56690,56719,56749,56778,56808,%
56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,%
57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,%
57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,%
57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,%
58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,%
58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,%
58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,%
58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,%
59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,%
59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,%
59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,%
60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,%
60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,%
60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,%
60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,%
61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,%
61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,%
61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,%
62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,%
62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,%
62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,%
63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,%
63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,%
63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,%
63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,%
64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,%
64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,%
64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,%
65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,%
65401,65431,65460,65490,65520}
\@namedef{bbl@ca@islamic-umalqura+}{\bbl@ca@islamcuqr@x{+1}}
\@namedef{bbl@ca@islamic-umalqura}{\bbl@ca@islamcuqr@x{}}
\@namedef{bbl@ca@islamic-umalqura-}{\bbl@ca@islamcuqr@x{-1}}
\def\bbl@ca@islamcuqr@x#1#2-#3-#4\@@#5#6#7{%
\edef\bbl@tempd{\fp_eval:n{ % (Julian) day
\bbl@ca@jd{#2}{#3}{#4} + 0.5 - 2400000 #1}}%
\count@\@ne
\bbl@foreach\bbl@ca@umalqura@data{%
\advance\count@\@ne
\ifnum##1>\bbl@tempd\else
\edef\bbl@tempe{\the\count@}%
\edef\bbl@tempb{##1}%
\fi}%
\edef\bbl@templ{\fp_eval:n{ \bbl@tempe + 16260 + 949 }}% month~lunar
\edef\bbl@tempa{\fp_eval:n{ floor((\bbl@templ - 1 ) / 12) }}% annus
\edef#5{\fp_eval:n{ \bbl@tempa + 1 }}%
\edef#6{\fp_eval:n{ \bbl@templ - (12 * \bbl@tempa) }}%
\edef#7{\fp_eval:n{ \bbl@tempd - \bbl@tempb + 1 }}}
\ExplSyntaxOff
%</ca-islamic>
% \end{macrocode}
%
% \section{Support for Plain \TeX\ (\texttt{plain.def})}
%
% \subsection{Not renaming \file{hyphen.tex}}
Expand Down
3 changes: 2 additions & 1 deletion babel.ins
Expand Up @@ -26,7 +26,7 @@
%% and covered by LPPL is defined by the unpacking scripts (with
%% extension .ins) which are part of the distribution.
%%
\def\filedate{2022/05/26}
\def\filedate{2022/05/27}
\def\batchfile{babel.ins}
\input docstrip.tex

Expand Down Expand Up @@ -135,6 +135,7 @@
\file{switch.def}{\from{babel.dtx}{kernel}}
\file{hyphen.cfg}{\from{babel.dtx}{patterns}}
\file{nil.ldf}{\from{babel.dtx}{nil}}
\file{babel-ca-islamic.tex}{\from{babel.dtx}{ca-islamic}}
\file{xebabel.def}{\from{babel.dtx}{xetex}}
\file{luababel.def}{\from{babel.dtx}{luatex}}
\file{txtbabel.def}{\from{babel.dtx}{texxet}}
Expand Down
Binary file modified babel.pdf
Binary file not shown.
2 changes: 1 addition & 1 deletion bbcompat.dtx
Expand Up @@ -30,7 +30,7 @@
%
% \iffalse
%<*dtx>
\ProvidesFile{bbcompat.dtx}[2022/05/26 v3.75.2749]
\ProvidesFile{bbcompat.dtx}[2022/05/27 v3.75.2750]
%</dtx>
%
%% File 'bbcompat.dtx'
Expand Down
2 changes: 1 addition & 1 deletion locale/ar/babel-ar.ini
Expand Up @@ -26,7 +26,7 @@ script.tag.opentype = arab
level = 1
encodings = LAE
derivate = no
require.babel = arabic
require.calendars = islamic

[captions]
preface = مدخل
Expand Down
81 changes: 0 additions & 81 deletions locale/ar/babel-arabic.tex
Expand Up @@ -10,85 +10,4 @@
\BabelBeforeIni{ar}{%
}

\ExplSyntaxOn

% == islamic-civil ==

\def\bbl@cs@isltojd#1#2#3{ % year, month, day
((#3 + ceil(29.5 * (#2 - 1)) +
(#1 - 1) * 354 + floor((3 + (11 * #1)) / 30) +
1948439.5) - 1) }

\@namedef{bbl@ca@islamic-civil++}{\bbl@ca@islamicvl@x{+2}}
\@namedef{bbl@ca@islamic-civil+}{\bbl@ca@islamicvl@x{+1}}
\@namedef{bbl@ca@islamic-civil}{\bbl@ca@islamicvl@x{}}
\@namedef{bbl@ca@islamic-civil-}{\bbl@ca@islamicvl@x{-1}}
\@namedef{bbl@ca@islamic-civil--}{\bbl@ca@islamicvl@x{-2}}

\def\bbl@ca@islamicvl@x#1#2-#3-#4\@@#5#6#7{%
\edef\bbl@tempa{%
\fp_eval:n{ floor(\bbl@ca@jd{#2}{#3}{#4})+0.5 #1}}%
\edef#5{%
\fp_eval:n{ floor(((30*(\bbl@tempa-1948439.5)) + 10646)/10631) }}%
\edef#6{\fp_eval:n{
min(12,ceil((\bbl@tempa-(29+\bbl@cs@isltojd{#5}{1}{1}))/29.5)+1) }}%
\edef#7{\fp_eval:n{ \bbl@tempa - \bbl@cs@isltojd{#5}{#6}{1} + 1} }}

% == islamic-umalqura ==

% Data covers Hijri ~1435/~1460 (Gregorian ~2014/~2038)
\def\bbl@ca@umalqura@data{56660, 56690,56719,56749,56778,56808,%
56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,%
57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,%
57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,%
57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,%
58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,%
58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,%
58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,%
58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,%
59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,%
59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,%
59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,%
60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,%
60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,%
60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,%
60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,%
61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,%
61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,%
61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,%
62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,%
62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,%
62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,%
63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,%
63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,%
63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,%
63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,%
64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,%
64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,%
64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,%
65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,%
65401,65431,65460,65490,65520}

\@namedef{bbl@ca@islamic-umalqura+}{\bbl@ca@islamcuqr@x{+1}}
\@namedef{bbl@ca@islamic-umalqura}{\bbl@ca@islamcuqr@x{}}
\@namedef{bbl@ca@islamic-umalqura-}{\bbl@ca@islamcuqr@x{-1}}

\def\bbl@ca@islamcuqr@x#1#2-#3-#4\@@#5#6#7{%
\edef\bbl@tempd{\fp_eval:n{ % (Julian) day
\bbl@ca@jd{#2}{#3}{#4} + 0.5 - 2400000 #1}}%
\count@\@ne
\bbl@foreach\bbl@ca@umalqura@data{%
\advance\count@\@ne
\ifnum##1>\bbl@tempd\else
\edef\bbl@tempe{\the\count@}%
\edef\bbl@tempb{##1}%
\fi}%
\edef\bbl@templ{\fp_eval:n{ \bbl@tempe + 16260 + 949 }}% month~lunar
\edef\bbl@tempa{\fp_eval:n{ floor((\bbl@templ - 1 ) / 12) }}% annus
\edef#5{\fp_eval:n{ \bbl@tempa + 1 }}%
\edef#6{\fp_eval:n{ \bbl@templ - (12 * \bbl@tempa) }}%
\edef#7{\fp_eval:n{ \bbl@tempd - \bbl@tempb + 1 }}}

\ExplSyntaxOff

\endinput

0 comments on commit df9c84a

Please sign in to comment.