summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/datetime2-contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-11-09 03:01:38 +0000
committerNorbert Preining <norbert@preining.info>2019-11-09 03:01:38 +0000
commit89213117b5298d9493446422708bf48384368825 (patch)
tree368c5215c1e6aacc2f7775eef89c5eb4a944dbc9 /macros/latex/contrib/datetime2-contrib
parent378b2ba55f417b42b93d9edb06dd4d007872f8b9 (diff)
CTAN sync 201911090301
Diffstat (limited to 'macros/latex/contrib/datetime2-contrib')
-rw-r--r--macros/latex/contrib/datetime2-contrib/datetime2-serbian/README57
-rw-r--r--macros/latex/contrib/datetime2-contrib/datetime2-serbian/README.md96
-rw-r--r--macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.dtx7018
-rw-r--r--macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.ins147
-rw-r--r--macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.pdfbin78035 -> 280065 bytes
5 files changed, 6765 insertions, 553 deletions
diff --git a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/README b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/README
deleted file mode 100644
index 7f39f59f56..0000000000
--- a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/README
+++ /dev/null
@@ -1,57 +0,0 @@
-Serbian Language Module for datetime2 Package
-
-Author: Nicola L. C. Talbot (inactive)
-
-Licence: LPPL
-
-Required Packages: datetime2, tracklang
-
-This module is unmaintained. If you want to volunteer to take over
-the maintenance contact me at www.dickimaw-books.com/contact.html
-
-Example usage:
-
-\documentclass{article}
-\usepackage[serbian]{datetime2}
-\begin{document}
-\today
-\end{document}
-
-\documentclass[serbian]{article}
-\usepackage{babel}
-\usepackage[useregional]{datetime2}
-\begin{document}
-\today
-\end{document}
-
-\documentclass{article}
-\usepackage{polyglossia}
-\setmainlanguage{serbian}
-\usepackage[serbian]{datetime2}
-\begin{document}
-\today
-\end{document}
-
-INSTALLATION
-============
-
-xelatex datetime2-serbian.ins
-
-Move all *.ldf files to
-TEXMF/tex/latex/datetime2-contrib/datetime2-serbian/
-
-Documentation:
-
-xelatex datetime2-serbian.dtx
-makeindex -s gind.ist datetime2-serbian.idx
-makeindex -s gglo.ist -o datetime2-serbian.gls datetime2-serbian.glo
-xelatex datetime2-serbian.dtx
-xelatex datetime2-serbian.dtx
-
-Move datetime2-serbian.pdf and README to
-TEXMF/doc/latex/datetime2-contrib/datetime2-serbian/
-
-This material is subject to the LaTeX Project Public License.
-See http://www.ctan.org/license/lppl1.3 for the details of that
-license.
-
diff --git a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/README.md b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/README.md
new file mode 100644
index 0000000000..cacfff42e5
--- /dev/null
+++ b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/README.md
@@ -0,0 +1,96 @@
+Serbian Language Module for datetime2 CTAN Package
+==================================================
+
+**Current maintainer:** Andrej Radović
+
+**Authors:** Andrej Radović (r.andrej@gmail.com), Nicola L. C. Talbot
+(inactive)
+
+**Licence:** LPPL
+
+**Required Packages:** `datetime2`, `tracklang`
+
+Styles
+------
+
+This module provides the following styles:
+
+### Latin:
+* serbian - regionless style
+* sr-Latn - Serbian, Serbia
+* sr-Latn-RS - Serbian, Serbia
+* sr-Latn-ME - Serbian, Montenegro
+* sr-Latn-BA - Serbian, Bosnia and Herzegovina
+
+### Cyrillic
+* serbianc - regionless style
+* sr-Cyrl - Serbian, Serbia
+* sr-Cyrl-RS - Serbian, Serbia
+* sr-Cyrl-ME - Serbian, Montenegro
+* sr-Cyrl-BA - Serbian, Bosnia and Herzegovina
+
+Notes:
+------
+
+The regional settings still don't work, but `serbian` and `serbianc` work just
+fine.
+The package is still in development.
+
+Example usage:
+--------------
+
+### Generic w/ `babel`
+ \documentclass{article}
+ \usepackage[serbian]{datetime2}
+ \begin{document}
+ \today
+ \end{document}
+
+### Generic w/ `babel`
+
+ \documentclass[serbian]{article}
+ \usepackage{babel}
+ \usepackage[useregional]{datetime2}
+ \begin{document}
+ \today
+ \end{document}
+
+### Generic w/ `polyglossia`
+
+ \documentclass{article}
+ \usepackage{polyglossia}
+ \setmainlanguage{serbian}
+ \usepackage[serbian]{datetime2}
+ \begin{document}
+ \today
+ \end{document}
+
+
+Installation
+------------
+
+Extract the language definition files first:
+
+Run LuaLaTeX over the file `datetime2-serbian.ins`:
+
+ lualatex datetime2-serbian.ins
+
+Move all `*.ldf` files to
+
+ TEXMF/tex/latex/datetime2-contrib/datetime2-serbian/
+
+ Then, you can compile the documentation yourself by executing
+
+ lualatex datetime2-serbian.dtx
+ makeindex -s ginddt2s.ist datetime2-serbian.idx
+ makeindex -s gglodt2s.ist -o datetime2-serbian.gls datetime2-serbian.glo
+ lualatex datetime2-serbian.dtx
+ lualatex datetime2-serbian.dtx
+
+or just use the precompiled documentation shipped with the source files.
+In both cases, copy the files `datetime2-serbian.pdf` and `README.md` to
+`TEXMF/doc/latex/datetime2-contrib/datetime2-serbian/`.
+
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/license/lppl1.3 for the details of that
+license.
diff --git a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.dtx b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.dtx
index cd0c173e29..8409c539c2 100644
--- a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.dtx
+++ b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.dtx
@@ -20,38 +20,128 @@
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2019 Nicola Talbot, all rights reserved.
-% (New maintainer add relevant lines here.)
+% Copyright (C) 2019 Andrej Radović, all rights reserved.
% \fi
% \iffalse
%<*driver>
-\documentclass{ltxdoc}
+\documentclass[11pt]{ltxdoc}
+
\usepackage{alltt}
+\usepackage{hologo}
\usepackage{graphicx}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
\usepackage{fontspec}
+\usepackage{multicol}
+\usepackage[dvipsnames]{xcolor}
+\usepackage[english]{babel}
\usepackage[colorlinks,
- bookmarks,
- hyperindex=false,
- pdfauthor={Nicola L.C. Talbot},
- pdftitle={datetime2.sty Serbian Module}]{hyperref}
+%draft, % hyperref's draft mode - disable all hypertext
+% TOC settings
+%
+bookmarks,
+linktocpage=true, % make page number, not text, be link on TOC
+%
+% link colors and other settings
+pageanchor=true,% give every page an anchor in its top left corner
+% necessary for many other options
+plainpages=false,% don't force Arabic anchor naming
+breaklinks=true,% allow breaking links over lines
+colorlinks=true,% enable link coloring
+urlcolor=Maroon,% url colors
+linkcolor=MidnightBlue,% color for normal, internal links
+citecolor=PineGreen,% bibliographical citation color
+%frenchlinks=true % use small caps instead of color for links
+%pdfborder={1 0 0},% the color of boxes around links if colorlinks is
+% not used
+%
+% PDF settings
+%
+unicode=true, % set PDF metadata to be unicode
+pdfpagemode=UseNone, % don't open either bookmark or thumbnail sidebar
+% alternately, UseOutlines shows bookmark sidebar
+pdfstartview=FitV, % scale the PDF to fit the height on first open
+bookmarksnumbered=true,% include section number in bookmarks
+bookmarksopen=true,% expand bookmark tree in PDF viewer to a level
+bookmarksopenlevel=1,% this is the level
+hypertexnames=true, % guessable link names
+pdfhighlight=/O,% links are outlined when selected, not /I for inverted
+%
+% PDF metadata
+%
+pdftitle={datetime2.sty Serbian Module}
+pdfauthor={Andrej Radović},
+pdfcreator={xdvipdfmx},%
+pdfproducer={lualatex},%
+hyperindex=false%
+]{hyperref}
+\usepackage{textcase}
+
+\usepackage{enumitem}
+\newlist{optdescription}{description}{1}
+\setlist[optdescription]{%
+ align=right,
+ labelindent=!,
+ leftmargin=0pt,
+ font=\small\normalfont\ttfamily}
-\setmainfont{Liberation Serif}
-\setmonofont{Liberation Mono}
-\newfontfamily\cyrillicfont{Liberation Serif}
+\usepackage{acronym}
+\renewcommand{\acsfont}[1]{{\scshape{#1}}}
+\renewcommand*{\aclabelfont}[1]{{\acsfont{#1}}}
-\CheckSum{615}
+
+%%\CheckSum{692}
\renewcommand*{\usage}[1]{\hyperpage{#1}}
\renewcommand*{\main}[1]{\hyperpage{#1}}
\IndexPrologue{\section*{\indexname}\markboth{\indexname}{\indexname}}
\setcounter{IndexColumns}{2}
+\setcounter{GlossaryColumns}{2}
+\setlength{\columnsep}{2em}
+\let\GlossaryParms\IndexParms%
+\newcommand*{\indexitemst}[1]{{\bfseries\sffamily\normalsize{#1}}}
-\newcommand*{\sty}[1]{\textsf{#1}}
+\newcommand*{\sty}[1]{{\textsf{#1}}}
\newcommand*{\opt}[1]{\texttt{#1}\index{#1=\texttt{#1}|main}}
+\newcommand*{\subsubsectionopt}[1]{\subsubsection{#1}\index{#1=\texttt{#1}|main}}
+\newcommand*{\itemopt}[1]{\item[#1]\index{#1=\texttt{#1}|main}}
+
+\usepackage[final,tracking=true, protrusion=true, expansion=true]{microtype}
-\RecordChanges
-\PageIndex
-\CodelineNumbered
+\usepackage[drafting=false,
+tocaligned=false,
+dottedtoc=false,
+eulerchapternumbers=false,
+linedheaders=false,
+floatperchapter=false,
+eulermath=false,
+beramono=false,
+palatino=false,
+style=arsclassica,
+nochapters=true%
+]{classicthesis}
+
+\pagestyle{plain}
+\cfoot[\small\pagemark]{}% use a small centered page number in the footer
+\ofoot[]{}% clear the outer footer
+
+\usepackage[%showframe,
+top=3.25cm,bottom=3cm]{geometry}
+
+\defaultfontfeatures{Ligatures=TeX, Scale=MatchLowercase}
+\setmainfont{XCharter}[Numbers=OldStyle]
+\setmonofont{Inconsolata LGC}
+\setsansfont{Fira Sans Book}[%
+ Numbers=OldStyle,
+ ItalicFont = {Fira Sans Book Italic},
+ BoldFont = {Fira Sans SemiBold},
+ BoldItalicFont = {Fira Sans SemiBold Italic}]
+\newfontfamily\cyrillicfont{XCharter}
+
+\RecordChanges%
+\PageIndex%
+\CodelineNumbered%
\begin{document}
\DocInput{datetime2-serbian.dtx}
@@ -61,408 +151,1372 @@
%
%\MakeShortVerb{"}
%
-%\title{Serbian Module for datetime2 Package}
-%\author{Nicola L. C. Talbot (inactive)}
-%\date{2019-09-14 (v1.1)}
+%\changes{2.0}{2019-11-07}{%
+% Restyled the documentation.
+%}
+%
+%
+%\title{{\rmfamily\normalfont\spacedallcaps{%
+% Serbian Module for datetime\liningnums{2} Package}}\\%
+% {\large\url{https://gitlab.com/andrejr/datetime2-serbian}}}
+%\author{%
+% \spacedlowsmallcaps{Andrej Radović}\\
+% \url{r.andrej@gmail.com}
+% \and
+% \spacedlowsmallcaps{Nicola L. C. Talbot} \\
+% \spacedlowsmallcaps{(inactive)}
+%}
+%\date{{\sffamily\scshape 2019-11-07 (v2.0)}}
%\maketitle
%
-%This module is currently unmaintained and may be subject to change.
-%If you want to volunteer to take over maintenance, contact me at
-%\url{http://www.dickimaw-books.com/contact.html}
+% \renewcommand{\abstractname}{\normalfont\normalsize\spacedlowsmallcaps{Abstract}}
+%
%
%\begin{abstract}
+%\noindent
%This is the Serbian language module for the \sty{datetime2}
%package. If you want to use the settings in this module you must
%install it in addition to installing \sty{datetime2}. If you use
%\sty{babel} or \sty{polyglossia}, you will need this module to
%prevent them from redefining \cs{today}. The \sty{datetime2}
-% \opt{useregional} setting must be set to "text" or "numeric"
-% for the language styles to be set.
-% Alternatively, you can set the style in the document using
-% \cs{DTMsetstyle}, but this may be changed by \cs{date}\meta{language}
-% depending on the value of the \opt{useregional} setting.
+% \opt{useregional} setting must be on (\texttt{text} or
+% \texttt{numeric}) for the language styles to be set.
+% Alternatively, you can set them in the document using
+% \cs{DTMsetstyle}, but without the \opt{useregional} setting on the
+% style will be changed by \cs{date}\meta{language}.
%\end{abstract}
%
-%I've copied the date style from \texttt{babel-serbian}'s \cs{today}.
+%\changes{2.0}{2019-11-07}{%
+% Added a proper introduction.
+%}
+%
+% \noindent
+% As of version 2.0, there is support for both Ekavian and Ijekavian
+% pronunciation in both Latin and Cyrillic, regions (Serbia, Bosnia and
+% Herzegovina, Montenegro), numeric format variants (Roman month ordinals,
+% optional leading zeros).
+% The package provides two regionless styles, "serbian" (Latin) and "serbianc"
+% (Cyrillic), as well as regional styles (explained in \autoref{sub:regions}).
+%
+% Neither month nor day of week abbreviations are supported.
+% These aren't often used within dates in Serbian.
%
-%I don't know if these settings are correct as I can't speak Serbian.
-%In particular, I don't know if the "serbian" time style is
-%correct. Currently this just uses the "default" time style. Please
-%be aware that this may change. Whoever takes over maintanance
-%of this module may can change it as appropriate.
+% Currently, there are problems invoking regional styles, but I'm working on
+% fixing those.
+% Regionless styles are fully functional and you may load them as "serbian" and
+% "serbianc".
%
-%The new maintainer should add the line:
+% \bigskip
+%
+% {\itshape
+% \noindent
+% The package is generated from (Jinja2) templates by a Python script before
+% it's uploaded to CTAN, so don't try to send patches to files you find there.
+% All development is done on Gitlab
+% (\url{https://gitlab.com/andrejr/datetime2-serbian}).
+%
+% If you're developing other datetime2 localization modules (or
+% localization modules in general), the way the package is generated might be
+% of interest to you.
+% I actually tried writing the package by hand, but it was way too tedious.
+% Generating most of the package from templates seems like the best way to do
+% it.
+% Along the way, I also wrote a small utility for generating \acsu{ascii} --
+% \acsu{licr} strings from utf-8 strings, and it can be found here:
+% \url{https://gitlab.com/andrejr/utf8_to_licr}.
+% I might publish it to CTAN if there is interest.
+% }
+%
+% \tableofcontents
+%
+% \section{The Documentation}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added installation guide.
+%}
+%
+% \subsection{Installation}
+% Extract the language definition files first:
+% \begin{enumerate}
+% \item
+% Run \hologo{LuaLaTeX} over the file \texttt{datetime2-serbian.ins}: \\
+% "lualatex datetime2-serbian.ins"
+% %
+% \item Move all \texttt{*.ldf} files to %
+% \nolinkurl{TEXMF/tex/latex/datetime2-contrib/datetime2-serbian/}
+% \end{enumerate}
+% Then, you can compile the documentation yourself by executing
%\begin{verbatim}
-% The Current Maintainer of this work is Name.
+%lualatex datetime2-serbian.dtx
+%makeindex -s ginddt2s.ist datetime2-serbian.idx
+%makeindex -s gglodt2s.ist -o datetime2-serbian.gls datetime2-serbian.glo
+%lualatex datetime2-serbian.dtx
+%lualatex datetime2-serbian.dtx
%\end{verbatim}
-%to the preamble part in \texttt{datetime2-serbian.ins} where Name
-%is the name of the maintainer(s) and replace
-%the `inactive' status to `maintained'.
+% or just use the precompiled documentation shipped with the source files.
+% In both cases, copy the files \texttt{datetime2-serbian.pdf} and
+% \texttt{README.md} to
+% \nolinkurl{TEXMF/doc/latex/datetime2-contrib/datetime2-serbian/}.
+%
+%
+% \subsection{Setting up \sty{datetime2} with a language module}
+%
+% \subsubsection{Loading a language module}
+% \emph{There are three different ways to load the required language module.
+% See the \sty{datetime2} documentation for further detail.}
+%
+% \medskip
+%
+% \paragraph{Variant 1:}
+% Request the desired language module explicitly by passing one of the
+% region options to the \sty{datetime2} package, such as "serbian", "serbianc",
+% "sr-Cyrl-ME", \ldots{} (the full list can be found in \autoref{sub:regions}).%
+%
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage[serbian]{datetime2}
+%\begin{document}
+%\today
+%\end{document}
+%\end{verbatim}
+%
+% \paragraph{Variant 2:}
+% Load \sty{babel} and pass the "serbian" or "serbianc" option to the
+% "\documentclass" command (or to \sty{babel} directly).
+% If you now pass the \opt{useregional} option to \sty{datetime2}, the language
+% module suitable to the one specified with \sty{babel} is loaded:
+%\begin{verbatim}
+%\documentclass[serbian]{article}
+%\usepackage{babel}
+%\usepackage[useregional]{datetime2}
+%\begin{document}
+%\today
+%\end{document}
+%\end{verbatim}
+%
+% \paragraph{Variant 3:}
+% When using \sty{polyglossia}, you should request the desired language module
+% by passing one of the previously mentioned options to the \sty{datetime2}
+% package:
+%\begin{verbatim}
+%\documentclass{article}
+%\usepackage{polyglossia}
+%\setmainlanguage{serbian}
+%\usepackage[serbian]{datetime2}
+%\begin{document}
+%\today
+%\end{document}
+%\end{verbatim}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added regions and documented their use.
+%}
+% \subsection{Regions and scripts}\label{sub:regions}
+%
+% Serbian language is a rare example of synchronic digraphia --- a situation
+% where all literate members of a society use two interchangeable writing
+% systems (Cyrillic and Latin).
+% This is true in all regions Serbian is spoken in (Serbia, Bosnia and
+% Herzegovina, Montenegro).
+% This is why every region has a Cyrillic and Latin variant, as well as the
+% regionless styles ("serbian" and "serbianc").
+%
+% The only other difference between the regions is the default value of
+% \hyperref[sub:pronu]{\opt{pronunciation}}, which is Ekavian by default for
+% "serbian", "serbianc", "sr-*-RS" and Ijekavian for the rest.
+%
+% The full list of regions (and regionless styles, on top) is as follows:
+%\begin{multicols}{2}
+%\begin{verbatim}
+%serbian
+%sr-Latn
+%sr-Latn-RS
+%sr-Latn-ME
+%sr-Latn-BA
+%serbianc
+%sr-Cyrl
+%sr-Cyrl-RS
+%sr-Cyrl-ME
+%sr-Cyrl-BA
+%\end{verbatim}
+%\end{multicols}
+%
+%
+% \subsection{Settings (Serbian-related)}
+%\changes{2.0}{2019-11-07}{%
+% Added documentation for new settings.
+%}
+%
+% These settings can be changed using \sty{\\DTMlangsetup}.
+% Here's an example showing how to set both multiple--choice and boolean
+% settings.
+%\begin{verbatim}
+% \DTMlangsetup[serbian]{pronunciation=ijekavian, monthi}
+%\end{verbatim}
+%
+%
+% \subsubsectionopt{pronunciation}\label{sub:pronu}
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+% May take values "ekavian" and "ijekavian", which denote the two most
+% frequently used pronunciations in Serbian language.
+% The only difference is in the way weekdays are written.
+%
+% The default value is Ekavian by default for "serbian", "serbianc", "sr-*-RS"
+% and Ijekavian for the rest of the regions.
+%
+% \smallskip
+% ponedeljak, 4. novembar 2019. \hfill \emph{Ekavian pronunciation} \\
+% ponedjeljak, 4. novembar 2019. \hfill \emph{Ijekavian pronunciation}
+%
+%
+% \subsubsectionopt{monthi}
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% This is a boolean key.
+% If "false" (the default), the months June and July are spelled as \emph{Jun}
+% and \emph{Jul}.
+% If "true", the months June and July are spelled as \emph{Juni} and
+% \emph{Juli}.
+%
+% \smallskip
+% 15. juni 1389. \hfill "monthi=true" \\
+% 15. jun 1389. \hfill "monthi=false"
+%
+% \subsubsectionopt{leadingzero}\label{sub:leadingzero}
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for toggling leading zeroes in day and month ordinals.
+%}
+% This is a boolean key.
+% If "false" (the default), there is no leading zero for hours, days or months.
+% If "true", there is.
+%
+% \smallskip
+% уторак, 2. 4. 2019. 8.03 CET \hfill "leadingzero=false" \\
+% уторак, 02. 04. 2019. 08.03 CET \hfill "leadingzero=true"
+%
+% \subsubsectionopt{monthord}
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% This key defines the way the month ordinal is written in Serbian "*-numeric"
+% formats.
+% It takes values "arabic" (the default), "roman" and "romanlsc".
+% The "arabic" setting results in an arabic numeral (subject to
+% \nameref{sub:leadingzero}) followed by a colon.
+% The "roman" setting results in an uppercase Roman numeral without a colon
+% suffix.
+% The "romansc" setting results in a lowercase small caps Roman numeral without
+% a colon suffix (this looks better than regular uppercase when usign old style
+% figures).
+%
+% \smallskip
+% уторак, 2. 4. 2019. 8.03 CET \hfill "monthord=arabic" \\
+% \liningnums{уторак, 2. IV 2019. 8.03 CET} \hfill "monthord=roman" with
+% "\liningnums" \\
+% \oldstylenums{уторак, 02. \textsc{iv} 2019. 08.03 CET} \hfill
+% "monthord=romanlsc" with "\oldstylenums"
+%
+% \subsection{Other features and settings}
+%
+% \subsubsection{Showing the weekday}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% All language modules shipped with \sty{datetime2-serbian} support showing the
+% weekday.
+% To enable this feature, pass the \opt{showdow} option to the \sty{datetime2}
+% package.
+%
+% \subsubsection{Generic customization of styles}
+% There are a number of settings provided that can be used in "\DTMlangsetup"
+% to modify the date-time style.
+% These should be present in all "datetime2-*" packages and are present in
+% all Serbian regionless and regional styles
+%
+% These are:
+% \begin{optdescription}
+% \itemopt{dowdaysep}%
+% The separator between the day of week name and the day of month number.
+%
+% \itemopt{daymonthsep}%
+% The separator between the day and the month name.
+%
+% \itemopt{monthyearsep}%
+% The separator between the month name and year.
+%
+% \itemopt{datesep}%
+% The separator between the date numbers in the numeric styles.
+%
+% \itemopt{timesep}%
+% The separator between hours, minutes and seconds.
+%
+% \itemopt{datetimesep}%
+% The separator between the date and time for the full date-time format.
+%
+% \itemopt{timezonesep}%
+% The separator between the time and zone for the full date-time format.
+%
+% \itemopt{mapzone}%
+% This is a boolean key. If true, the time zone mappings are applied.
+%
+% \itemopt{showdayofmonth}%
+% A boolean key that determines whether or not to show the day of the month.
+%
+% \itemopt{showyear}%
+% A boolean key that determines whether or not to show the year.
+%\end{optdescription}
+%
+% Although the keys listed here are \emph{defined} for all variant styles, it
+% depends on \sty{datetime2}'s setup and the requested styles whether they're
+% \emph{used}. \\
+% For more information about the "\DTMlangsetup" command see the documentation
+% of the main \sty{datetime2} package.
%
-%Currently there is only a regionless style.
+%
+% \subsection{License}
+% This material is subject to the \LaTeX\ Project Public License, Version 1.3c or later. \\
+% See the copyright headers of the single files for further details.
%
%\StopEventually{%
-%\clearpage
-%\phantomsection
-%\addcontentsline{toc}{section}{Change History}%
-%\PrintChanges
-%\addcontentsline{toc}{section}{\indexname}%
-%\PrintIndex}
+% \clearpage
+% \section*{Acronyms}
+% \addcontentsline{toc}{section}{Acronyms}%
+% \begin{acronym}[asciim]
+% \acro{ascii}{American Standard Code for Information
+% Interchange\acroextra{, legacy 7-bit text encoding used on American
+% computers since the 1960s.
+% It fails to encode non-English characters.
+% The mainstream encoding used when \hologo{TeX} was concieved.
+% }}
+% \acro{utf-8}{Unicode Transformation Format -- 8-bit\acroextra{,
+% modern variable width character encoding that's backward-compatible with
+% \acs*{ascii} for all \acs*{ascii} characters, yet provides full coverage
+% for almost every spoken language.}}
+% \acro{licr}{\LaTeX{} Internal Character Representation\acroextra{, a set
+% of macros that help define non-\acs*{ascii} characters for typesetting in
+% \LaTeX{} even in engines that only support \acs*{ascii}.}}
+% \end{acronym}
+% \phantomsection
+% \addcontentsline{toc}{section}{Change History}%
+% \PrintChanges
+% \addcontentsline{toc}{section}{\indexname}%
+% \PrintIndex
+%}
+%
+%\newgeometry{left=5cm,right=2.75cm,top=3.25cm,bottom=3cm}
+%
%\section{The Code}
+%
%\iffalse
% \begin{macrocode}
-%<*datetime2-serbian-utf8.ldf>
+%<*datetime2-serbian-base.ldf>
% \end{macrocode}
%\fi
-%\subsection{UTF-8}
-%This file contains the settings that use UTF-8 characters. This
-%file is loaded if XeLaTeX or LuaLaTeX are used. Please make sure
-%your text editor is set to UTF-8 if you want to view this code.
+%\subsection{Base package localization strings}
+%
+% This file contains the code common to all the Serbian regional
+% variations.
+%
+% The localization strings are later imported with the appropriate encoding.
+%
%\changes{1.0}{2015-03-31}{Initial release}
-% Identify module
+%\changes{2.0}{2019-11-07}{%
+% Separated the base package from the regionless style.
+% The base package now only declares common localization strings and includes
+% adequately encoded localization strings from their respective packages.
+%}
+%
% \begin{macrocode}
-\ProvidesDateTimeModule{serbian-utf8}[2019/09/14 v1.0]
+\ProvidesDateTimeModule{serbian-base}[2019/11/07 v2.0]
% \end{macrocode}
-%\begin{macro}{\DTMserbianordinal}
+%
+%
+%\begin{macro}{\DTMserbianordinalROMAN}
+% Uppercase Roman numerals.
% \begin{macrocode}
-\newcommand*{\DTMserbianordinal}[1]{%
- \number#1.%
+\newcommand*{\DTMserbianordinalROMAN}[1]{%
+ \ifcase#1
+ \or%
+ I%
+ \or%
+ II%
+ \or%
+ III%
+ \or%
+ IV%
+ \or%
+ V%
+ \or%
+ VI%
+ \or%
+ VII%
+ \or%
+ VIII%
+ \or%
+ IX%
+ \or%
+ X%
+ \or%
+ XI%
+ \or%
+ XII%
+ \fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbiancyrmonthname}
-% Serbian month names. (Cyrillic alphabet.)
+%
+%\begin{macro}{\DTMserbianordinalroman}
+% Lowercase Roman numerals.
% \begin{macrocode}
-\newcommand*{\DTMserbiancyrmonthname}[1]{%
+\newcommand*{\DTMserbianordinalroman}[1]{%
\ifcase#1
- \or
- јануар%
- \or
- фебруар%
- \or
- март%
- \or
- април%
- \or
- мај%
- \or
- јун%
- \or
- јул%
- \or
- август%
- \or
- септембар%
- \or
- октобар%
- \or
- новембар%
- \or
- децембар%
+ \or%
+ i%
+ \or%
+ ii%
+ \or%
+ iii%
+ \or%
+ iv%
+ \or%
+ v%
+ \or%
+ vi%
+ \or%
+ vii%
+ \or%
+ viii%
+ \or%
+ ix%
+ \or%
+ x%
+ \or%
+ xi%
+ \or%
+ xii%
\fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbiancyrMonthname}
-% As above but capitalize.
+%
+% We will now include the appropriate localization data.
+%
+% Packages \sty{ifxetex} and \sty{ifluatex} provide a way to determine if the
+% currently used \LaTeX{} engine is \hologo{XeLaTeX} or \hologo{LuaLaTeX},
+% respectively.
+% \begin{macrocode}
+\RequirePackage{ifxetex,ifluatex}
+% \end{macrocode}
+% Load \texttt{serbian-utf8} if either \hologo{XeLaTeX} or \hologo{LuaLaTeX}
+% are used, since these engines natively support utf-8.
+% Otherwise load \texttt{serbian-ascii}, which provides support for legacy
+% engines that only support \ac{licr}.
+% \begin{macrocode}
+\ifxetex%
+ \RequireDateTimeModule{serbian-base-utf8}
+\else
+ \ifluatex%
+ \RequireDateTimeModule{serbian-base-utf8}
+ \else
+ \RequireDateTimeModule{serbian-base-ascii}
+ \fi
+\fi
+% \end{macrocode}
+%
+%\iffalse
% \begin{macrocode}
-\newcommand*{\DTMserbiancyrMonthname}[1]{%
+%</datetime2-serbian-base.ldf>
+% \end{macrocode}
+%\fi
+%
+%
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-serbian-base-utf8.ldf>
+% \end{macrocode}
+%\fi
+%\subsection{Base Serbian \acs{utf-8} localization strings}
+% This file contains the localization strings necessary for proper date
+% formatting in \acs{utf-8} format.
+% This file is loaded if \hologo{XeLaTeX} or \hologo{LuaLaTeX} are used.
+%
+%\changes{1.0}{2015-03-31}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings are now declared within the Python build script
+% and both the \acs{utf-8} and \acs{licr} encoded strings are generated from
+% said files on build, before uploading to CTAN.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{serbian-base-utf8}[2019/11/07 v2.0]
+% \end{macrocode}
+%
+%\subsubsection{Latin month names}
+%
+%\begin{macro}{\DTMserbianlatnoimonthname}
+% Serbian month names, Latin alphabet, no \sty{i} suffix for June and July,
+% non-capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatnoimonthname}[1]{%
\ifcase#1
- \or
- Јануар%
- \or
- Фебруар%
- \or
- Март%
- \or
- Април%
- \or
- Мај%
- \or
- Јун%
- \or
- Јул%
- \or
- Август%
- \or
- Септембар%
- \or
- Октобар%
- \or
- Новембар%
- \or
- Децембар%
+ \or%
+ januar%
+ \or%
+ februar%
+ \or%
+ mart%
+ \or%
+ april%
+ \or%
+ maj%
+ \or%
+ jun%
+ \or%
+ jul%
+ \or%
+ avgust%
+ \or%
+ septembar%
+ \or%
+ oktobar%
+ \or%
+ novembar%
+ \or%
+ decembar%
\fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbianlatinmonthname}
-% Serbian month names. (Latin alphabet.)
+%\begin{macro}{\DTMserbianlatnoiMonthname}
+% Serbian month names, Latin alphabet, no \sty{i} suffix for June and July,
+% capitalized.
% \begin{macrocode}
-\newcommand*{\DTMserbianlatinmonthname}[1]{%
+\newcommand*{\DTMserbianlatnoiMonthname}[1]{%
\ifcase#1
- \or
- januar%
- \or
- februar%
- \or
- mart%
- \or
- april%
- \or
- maj%
- \or
- juni%
- \or
- juli%
- \or
- avgust%
- \or
- septembar%
- \or
- oktobar%
- \or
- novembar%
- \or
- decembar%
+ \or%
+ Januar%
+ \or%
+ Februar%
+ \or%
+ Mart%
+ \or%
+ April%
+ \or%
+ Maj%
+ \or%
+ Jun%
+ \or%
+ Jul%
+ \or%
+ Avgust%
+ \or%
+ Septembar%
+ \or%
+ Oktobar%
+ \or%
+ Novembar%
+ \or%
+ Decembar%
\fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbianlatinMonthname}
-% As above but capitalize.
+%\begin{macro}{\DTMserbianlatimonthname}
+% Serbian month names, Latin alphabet, \sty{i} suffix for June and July,
+% non-capitalized.
% \begin{macrocode}
-\newcommand*{\DTMserbianlatinMonthname}[1]{%
- \ifcase#1
- \or
- Januar%
- \or
- Februar%
- \or
- Mart%
- \or
- April%
- \or
- Maj%
- \or
- Juni%
- \or
+\newcommand*{\DTMserbianlatimonthname}[1]{%
+ \ifnum#1=6%
+ juni%
+ \else\ifnum\#1=7%
+ juli%
+ \else
+ \DTMserbianlatnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianlatiMonthname}
+% Serbian month names, Latin alphabet, \sty{i} suffix for June and July,
+% capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatiMonthname}[1]{%
+ \ifnum#1=6%
+ Juni%
+ \else\ifnum\#1=7%
Juli%
- \or
- Avgust%
- \or
- Septembar%
- \or
- Oktobar%
- \or
- Novembar%
- \or
- Decembar%
+ \else
+ \DTMserbianlatnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Latin days of week, Ekavian pronunciation}
+%
+%\begin{macro}{\DTMserbianlatekweekdayname}
+% Serbian weekday names, Latin alphabet, Ekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatekweekdayname}[1]{%
+ \ifcase#1
+ ponedeljak%
+ \or%
+ utorak%
+ \or%
+ sreda%
+ \or%
+ četvrtak%
+ \or%
+ petak%
+ \or%
+ subota%
+ \or%
+ nedelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianlatekWeekdayname}
+% Serbian weekday names, Latin alphabet, Ekavian pronunciation, capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatekWeekdayname}[1]{%
+ \ifcase#1
+ Ponedeljak%
+ \or%
+ Utorak%
+ \or%
+ Sreda%
+ \or%
+ Četvrtak%
+ \or%
+ Petak%
+ \or%
+ Subota%
+ \or%
+ Nedelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Latin days of week, Ijekavian pronunciation}
+%
+%
+%\begin{macro}{\DTMserbianlatijweekdayname}
+% Serbian weekday names, Latin alphabet, Ijekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatijweekdayname}[1]{%
+ \ifcase#1
+ ponedjeljak%
+ \or%
+ utorak%
+ \or%
+ srijeda%
+ \or%
+ četvrtak%
+ \or%
+ petak%
+ \or%
+ subota%
+ \or%
+ nedjelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianlatijWeekdayname}
+% Serbian weekday names, Latin alphabet, Ijekavian pronunciation,
+% capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatijWeekdayname}[1]{%
+ \ifcase#1
+ Ponedjeljak%
+ \or%
+ Utorak%
+ \or%
+ Srijeda%
+ \or%
+ Četvrtak%
+ \or%
+ Petak%
+ \or%
+ Subota%
+ \or%
+ Nedjelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Cyrillic month names}
+%
+%\begin{macro}{\DTMserbiancyrnoimonthname}
+% Serbian month names, Cyrillic alphabet, no \sty{i} suffix for June and July,
+% non-capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrnoimonthname}[1]{%
+ \ifcase#1
+ \or%
+ јануар%
+ \or%
+ фебруар%
+ \or%
+ март%
+ \or%
+ април%
+ \or%
+ мај%
+ \or%
+ јун%
+ \or%
+ јул%
+ \or%
+ август%
+ \or%
+ септембар%
+ \or%
+ октобар%
+ \or%
+ новембар%
+ \or%
+ децембар%
\fi
}
% \end{macrocode}
%\end{macro}
%
-%If abbreviated dates are supported, short month names should be
-%likewise provided.
+%\begin{macro}{\DTMserbiancyrnoiMonthname}
+% Serbian month names, Cyrillic alphabet, no \sty{i} suffix for June and July,
+% capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrnoiMonthname}[1]{%
+ \ifcase#1
+ \or%
+ Јануар%
+ \or%
+ Фебруар%
+ \or%
+ Март%
+ \or%
+ Април%
+ \or%
+ Мај%
+ \or%
+ Јун%
+ \or%
+ Јул%
+ \or%
+ Август%
+ \or%
+ Септембар%
+ \or%
+ Октобар%
+ \or%
+ Новембар%
+ \or%
+ Децембар%
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyrimonthname}
+% Serbian month names, Cyrillic alphabet, \sty{i} suffix for June and July,
+% non-capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrimonthname}[1]{%
+ \ifnum#1=6%
+ јуни%
+ \else\ifnum\#1=7%
+ јули%
+ \else
+ \DTMserbiancyrnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyriMonthname}
+% Serbian month names, Cyrillic alphabet, \sty{i} suffix for June and July,
+% capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyriMonthname}[1]{%
+ \ifnum#1=6%
+ Јуни%
+ \else\ifnum\#1=7%
+ Јули%
+ \else
+ \DTMserbiancyrnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Cyrillic days of week, Ekavian pronunciation}
+%
+%\begin{macro}{\DTMserbiancyrekweekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrekweekdayname}[1]{%
+ \ifcase#1
+ понедељак%
+ \or%
+ уторак%
+ \or%
+ среда%
+ \or%
+ четвртак%
+ \or%
+ петак%
+ \or%
+ субота%
+ \or%
+ недеља%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyrekWeekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ekavian pronunciation, capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrekWeekdayname}[1]{%
+ \ifcase#1
+ Понедељак%
+ \or%
+ Уторак%
+ \or%
+ Среда%
+ \or%
+ Четвртак%
+ \or%
+ Петак%
+ \or%
+ Субота%
+ \or%
+ Недеља%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Cyrillic days of week, Ijekavian pronunciation}
+%
+%
+%\begin{macro}{\DTMserbiancyrijweekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ijekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrijweekdayname}[1]{%
+ \ifcase#1
+ понедјељак%
+ \or%
+ уторак%
+ \or%
+ сриједа%
+ \or%
+ четвртак%
+ \or%
+ петак%
+ \or%
+ субота%
+ \or%
+ недјеља%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyrijWeekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ijekavian pronunciation,
+% capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrijWeekdayname}[1]{%
+ \ifcase#1
+ Понедјељак%
+ \or%
+ Уторак%
+ \or%
+ Сриједа%
+ \or%
+ Четвртак%
+ \or%
+ Петак%
+ \or%
+ Субота%
+ \or%
+ Недјеља%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
%
%\iffalse
% \begin{macrocode}
-%</datetime2-serbian-utf8.ldf>
+%</datetime2-serbian-base-utf8.ldf>
% \end{macrocode}
%\fi
+%
%\iffalse
% \begin{macrocode}
-%<*datetime2-serbian-ascii.ldf>
+%<*datetime2-serbian-base-ascii.ldf>
% \end{macrocode}
%\fi
-%\subsection{ASCII}
-%This file contains the settings that use \LaTeX\ commands for
-%non-ASCII characters. This should be input if neither XeLaTeX nor
-%LuaLaTeX are used. Even if the user has loaded \sty{inputenc} with
-%"utf8", this file should still be used not the
-%\texttt{datetime2-serbian-utf8.ldf} file as the non-ASCII
-%characters are made active in that situation and would need
-%protecting against expansion.
+%\subsection{Base Serbian \acs{ascii} --- \acs{licr} localization strings}
+% This file contains the localization strings necessary for proper date
+% formatting in \ac{licr} format, which is \acs{ascii}-compatible.
+% It provides support for legacy \LaTeX{} engines that only support this kind
+% of format and encoding.
+%
+% This part of the file is generated from the \acs{utf-8} version with the
+% help of a tool I wrote, since writing pure \ac{licr} by hand would be
+% quite insane.
+%
%\changes{1.0}{2015-03-31}{Initial release}
-% Identify module
+%\changes{2.0}{2019-11-07}{%
+% All localization strings are now declared within the Python build script
+% and both the \acs{utf-8} and \acs{licr} encoded strings are generated from
+% said files on build, before uploading to CTAN.
+%}
+%
% \begin{macrocode}
-\ProvidesDateTimeModule{serbian-ascii}[2019/09/14 v1.0]
+\ProvidesDateTimeModule{serbian-base-ascii}[2019/11/07 v2.0]
% \end{macrocode}
%
-%If abbreviated dates are supported, short month names should be
-%likewise provided.
-%\begin{macro}{\DTMserbianordinal}
+%%\subsubsection{Latin month names}
+%
+%\begin{macro}{\DTMserbianlatnoimonthname}
+% Serbian month names, Latin alphabet, no \sty{i} suffix for June and July,
+% non-capitalized.
% \begin{macrocode}
-\newcommand*{\DTMserbianordinal}[1]{%
- \number#1.%
+\newcommand*{\DTMserbianlatnoimonthname}[1]{%
+ \ifcase#1
+ \or%
+ januar%
+ \or%
+ februar%
+ \or%
+ mart%
+ \or%
+ april%
+ \or%
+ maj%
+ \or%
+ jun%
+ \or%
+ jul%
+ \or%
+ avgust%
+ \or%
+ septembar%
+ \or%
+ oktobar%
+ \or%
+ novembar%
+ \or%
+ decembar%
+ \fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbiancyrmonthname}
-% Serbian month names. (Cyrillic alphabet.) I'm not sure if these
-% are correct.
+%\begin{macro}{\DTMserbianlatnoiMonthname}
+% Serbian month names, Latin alphabet, no \sty{i} suffix for June and July,
+% capitalized.
% \begin{macrocode}
-\newcommand*{\DTMserbiancyrmonthname}[1]{%
+\newcommand*{\DTMserbianlatnoiMonthname}[1]{%
\ifcase#1
- \or
- \protect\cyrje\protect\cyra\protect\cyrn\protect\cyru\protect\cyra
- \protect\cyrr
- \or
- \protect\cyrf\protect\cyrie\protect\cyrb\protect\cyrr\protect\cyru
- \protect\cyrr
- \or
- \protect\cyrm\protect\cyra\protect\cyrr\protect\cyrt
- \or
- \protect\cyra\protect\cyrp\protect\cyrr\protect\cyri\protect\cyrl
- \or
- \protect\cyrm\protect\cyra\protect\cyrje
- \or
- \protect\cyrje\protect\cyru\protect\cyrn
- \or
- \protect\cyrje\protect\cyru\protect\cyrl
- \or
- \protect\cyra\protect\cyrv\protect\cyrg\protect\cyru\protect\cyrs
- \protect\cyrt
- \or
- \protect\cyrs\protect\cyre\protect\cyrp\protect\cyrt\protect\cyre
- \protect\cyrm\protect\cyrb\protect\cyra\protect\cyrr
- \or
- \protect\cyro\protect\cyrk\protect\cyrt\protect\cyro\protect\cyrb
- \protect\cyra\protect\cyrr
- \or
- \protect\cyrn\protect\cyro\protect\cyrv\protect\cyre\protect\cyrm
- \protect\cyrb\protect\cyra\protect\cyrr
- \or
- \protect\cyrd\protect\cyre\protect\cyrc\protect\cyre\protect\cyrm
- \protect\cyrb\protect\cyra\protect\cyrr
+ \or%
+ Januar%
+ \or%
+ Februar%
+ \or%
+ Mart%
+ \or%
+ April%
+ \or%
+ Maj%
+ \or%
+ Jun%
+ \or%
+ Jul%
+ \or%
+ Avgust%
+ \or%
+ Septembar%
+ \or%
+ Oktobar%
+ \or%
+ Novembar%
+ \or%
+ Decembar%
\fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbiancyrMonthname}
-% As above but capitalize.
+%\begin{macro}{\DTMserbianlatimonthname}
+% Serbian month names, Latin alphabet, \sty{i} suffix for June and July,
+% non-capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatimonthname}[1]{%
+ \ifnum#1=6%
+ juni%
+ \else\ifnum\#1=7%
+ juli%
+ \else
+ \DTMserbianlatnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianlatiMonthname}
+% Serbian month names, Latin alphabet, \sty{i} suffix for June and July,
+% capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatiMonthname}[1]{%
+ \ifnum#1=6%
+ Juni%
+ \else\ifnum\#1=7%
+ Juli%
+ \else
+ \DTMserbianlatnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Latin days of week, Ekavian pronunciation}
+%
+%\begin{macro}{\DTMserbianlatekweekdayname}
+% Serbian weekday names, Latin alphabet, Ekavian pronunciation,
+% non-capitalized
% \begin{macrocode}
-\newcommand*{\DTMserbiancyrMonthname}[1]{%
+\newcommand*{\DTMserbianlatekweekdayname}[1]{%
\ifcase#1
- \or
- \protect\CYRJE\protect\cyra\protect\cyrn\protect\cyru\protect\cyra
- \protect\cyrr
- \or
- \protect\CYRF\protect\cyrie\protect\cyrb\protect\cyrr\protect\cyru
- \protect\cyrr
- \or
- \protect\CYRM\protect\cyra\protect\cyrr\protect\cyrt
- \or
- \protect\CYRA\protect\cyrp\protect\cyrr\protect\cyri\protect\cyrl
- \or
- \protect\CYRM\protect\cyra\protect\cyrje
- \or
- \protect\CYRJE\protect\cyru\protect\cyrn
- \or
- \protect\CYRJE\protect\cyru\protect\cyrl
- \or
- \protect\CYRA\protect\cyrv\protect\cyrg\protect\cyru\protect\cyrs
- \protect\cyrt
- \or
- \protect\CYRS\protect\cyre\protect\cyrp\protect\cyrt\protect\cyre
- \protect\cyrm\protect\cyrb\protect\cyra\protect\cyrr
- \or
- \protect\CYRO\protect\cyrk\protect\cyrt\protect\cyro\protect\cyrb
- \protect\cyra\protect\cyrr
- \or
- \protect\CYRN\protect\cyro\protect\cyrv\protect\cyre\protect\cyrm
- \protect\cyrb\protect\cyra\protect\cyrr
- \or
- \protect\CYRD\protect\cyre\protect\cyrc\protect\cyre\protect\cyrm
- \protect\cyrb\protect\cyra\protect\cyrr
- \fi
+ ponedeljak%
+ \or%
+ utorak%
+ \or%
+ sreda%
+ \or%
+ \v cetvrtak%
+ \or%
+ petak%
+ \or%
+ subota%
+ \or%
+ nedelja%
+ \fi%
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbianlatinmonthname}
-% Serbian month names. (Latin alphabet.)
+%\begin{macro}{\DTMserbianlatekWeekdayname}
+% Serbian weekday names, Latin alphabet, Ekavian pronunciation, capitalized
% \begin{macrocode}
-\newcommand*{\DTMserbianlatinmonthname}[1]{%
+\newcommand*{\DTMserbianlatekWeekdayname}[1]{%
\ifcase#1
- \or
- januar%
- \or
- februar%
- \or
- mart%
- \or
- april%
- \or
- maj%
- \or
- juni%
- \or
- juli%
- \or
- avgust%
- \or
- septembar%
- \or
- oktobar%
- \or
- novembar%
- \or
- decembar%
+ Ponedeljak%
+ \or%
+ Utorak%
+ \or%
+ Sreda%
+ \or%
+ \v Cetvrtak%
+ \or%
+ Petak%
+ \or%
+ Subota%
+ \or%
+ Nedelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Latin days of week, Ijekavian pronunciation}
+%
+%
+%\begin{macro}{\DTMserbianlatijweekdayname}
+% Serbian weekday names, Latin alphabet, Ijekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatijweekdayname}[1]{%
+ \ifcase#1
+ ponedjeljak%
+ \or%
+ utorak%
+ \or%
+ srijeda%
+ \or%
+ \v cetvrtak%
+ \or%
+ petak%
+ \or%
+ subota%
+ \or%
+ nedjelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianlatijWeekdayname}
+% Serbian weekday names, Latin alphabet, Ijekavian pronunciation,
+% capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbianlatijWeekdayname}[1]{%
+ \ifcase#1
+ Ponedjeljak%
+ \or%
+ Utorak%
+ \or%
+ Srijeda%
+ \or%
+ \v Cetvrtak%
+ \or%
+ Petak%
+ \or%
+ Subota%
+ \or%
+ Nedjelja%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\subsubsection{Cyrillic month names}
+%
+%\begin{macro}{\DTMserbiancyrnoimonthname}
+% Serbian month names, Cyrillic alphabet, no \sty{i} suffix for June and July,
+% non-capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrnoimonthname}[1]{%
+ \ifcase#1
+ \or%
+ \cyrje\cyra\cyrn\cyru\cyra\cyrr%
+ \or%
+ \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr%
+ \or%
+ \cyrm\cyra\cyrr\cyrt%
+ \or%
+ \cyra\cyrp\cyrr\cyri\cyrl%
+ \or%
+ \cyrm\cyra\cyrje%
+ \or%
+ \cyrje\cyru\cyrn%
+ \or%
+ \cyrje\cyru\cyrl%
+ \or%
+ \cyra\cyrv\cyrg\cyru\cyrs\cyrt%
+ \or%
+ \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyra\cyrr%
+ \or%
+ \cyro\cyrk\cyrt\cyro\cyrb\cyra\cyrr%
+ \or%
+ \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyra\cyrr%
+ \or%
+ \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyra\cyrr%
\fi
}
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\DTMserbianlatinMonthname}
-% As above but capitalize.
+%\begin{macro}{\DTMserbiancyrnoiMonthname}
+% Serbian month names, Cyrillic alphabet, no \sty{i} suffix for June and July,
+% capitalized.
% \begin{macrocode}
-\newcommand*{\DTMserbianlatinMonthname}[1]{%
+\newcommand*{\DTMserbiancyrnoiMonthname}[1]{%
\ifcase#1
- \or
- Januar%
- \or
- Februar%
- \or
- Mart%
- \or
- April%
- \or
- Maj%
- \or
- Juni%
- \or
- Juli%
- \or
- Avgust%
- \or
- Septembar%
- \or
- Oktobar%
- \or
- Novembar%
- \or
- Decembar%
+ \or%
+ \CYRJE\cyra\cyrn\cyru\cyra\cyrr%
+ \or%
+ \CYRF\cyre\cyrb\cyrr\cyru\cyra\cyrr%
+ \or%
+ \CYRM\cyra\cyrr\cyrt%
+ \or%
+ \CYRA\cyrp\cyrr\cyri\cyrl%
+ \or%
+ \CYRM\cyra\cyrje%
+ \or%
+ \CYRJE\cyru\cyrn%
+ \or%
+ \CYRJE\cyru\cyrl%
+ \or%
+ \CYRA\cyrv\cyrg\cyru\cyrs\cyrt%
+ \or%
+ \CYRS\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyra\cyrr%
+ \or%
+ \CYRO\cyrk\cyrt\cyro\cyrb\cyra\cyrr%
+ \or%
+ \CYRN\cyro\cyrv\cyre\cyrm\cyrb\cyra\cyrr%
+ \or%
+ \CYRD\cyre\cyrc\cyre\cyrm\cyrb\cyra\cyrr%
\fi
}
% \end{macrocode}
%\end{macro}
%
+%\begin{macro}{\DTMserbiancyrimonthname}
+% Serbian month names, Cyrillic alphabet, \sty{i} suffix for June and July,
+% non-capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrimonthname}[1]{%
+ \ifnum#1=6%
+ \cyrje\cyru\cyrn\cyri%
+ \else\ifnum\#1=7%
+ \cyrje\cyru\cyrl\cyri%
+ \else
+ \DTMserbiancyrnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyriMonthname}
+% Serbian month names, Cyrillic alphabet, \sty{i} suffix for June and July,
+% capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyriMonthname}[1]{%
+ \ifnum#1=6%
+ \CYRJE\cyru\cyrn\cyri%
+ \else\ifnum\#1=7%
+ \CYRJE\cyru\cyrl\cyri%
+ \else
+ \DTMserbiancyrnoimonthname%
+ \fi\fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Cyrillic days of week, Ekavian pronunciation}
+%
+%\begin{macro}{\DTMserbiancyrekweekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrekweekdayname}[1]{%
+ \ifcase#1
+ \cyrp\cyro\cyrn\cyre\cyrd\cyre\cyrlje\cyra\cyrk%
+ \or%
+ \cyru\cyrt\cyro\cyrr\cyra\cyrk%
+ \or%
+ \cyrs\cyrr\cyre\cyrd\cyra%
+ \or%
+ \cyrch\cyre\cyrt\cyrv\cyrr\cyrt\cyra\cyrk%
+ \or%
+ \cyrp\cyre\cyrt\cyra\cyrk%
+ \or%
+ \cyrs\cyru\cyrb\cyro\cyrt\cyra%
+ \or%
+ \cyrn\cyre\cyrd\cyre\cyrlje\cyra%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyrekWeekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ekavian pronunciation, capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrekWeekdayname}[1]{%
+ \ifcase#1
+ \CYRP\cyro\cyrn\cyre\cyrd\cyre\cyrlje\cyra\cyrk%
+ \or%
+ \CYRU\cyrt\cyro\cyrr\cyra\cyrk%
+ \or%
+ \CYRS\cyrr\cyre\cyrd\cyra%
+ \or%
+ \CYRCH\cyre\cyrt\cyrv\cyrr\cyrt\cyra\cyrk%
+ \or%
+ \CYRP\cyre\cyrt\cyra\cyrk%
+ \or%
+ \CYRS\cyru\cyrb\cyro\cyrt\cyra%
+ \or%
+ \CYRN\cyre\cyrd\cyre\cyrlje\cyra%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\subsubsection{Cyrillic days of week, Ijekavian pronunciation}
+%
+%
+%\begin{macro}{\DTMserbiancyrijweekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ijekavian pronunciation,
+% non-capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrijweekdayname}[1]{%
+ \ifcase#1
+ \cyrp\cyro\cyrn\cyre\cyrd\cyrje\cyre\cyrlje\cyra\cyrk%
+ \or%
+ \cyru\cyrt\cyro\cyrr\cyra\cyrk%
+ \or%
+ \cyrs\cyrr\cyri\cyrje\cyre\cyrd\cyra%
+ \or%
+ \cyrch\cyre\cyrt\cyrv\cyrr\cyrt\cyra\cyrk%
+ \or%
+ \cyrp\cyre\cyrt\cyra\cyrk%
+ \or%
+ \cyrs\cyru\cyrb\cyro\cyrt\cyra%
+ \or%
+ \cyrn\cyre\cyrd\cyrje\cyre\cyrlje\cyra%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyrijWeekdayname}
+% Serbian weekday names, Cyrillic alphabet, Ijekavian pronunciation,
+% capitalized
+% \begin{macrocode}
+\newcommand*{\DTMserbiancyrijWeekdayname}[1]{%
+ \ifcase#1
+ \CYRP\cyro\cyrn\cyre\cyrd\cyrje\cyre\cyrlje\cyra\cyrk%
+ \or%
+ \CYRU\cyrt\cyro\cyrr\cyra\cyrk%
+ \or%
+ \CYRS\cyrr\cyri\cyrje\cyre\cyrd\cyra%
+ \or%
+ \CYRCH\cyre\cyrt\cyrv\cyrr\cyrt\cyra\cyrk%
+ \or%
+ \CYRP\cyre\cyrt\cyra\cyrk%
+ \or%
+ \CYRS\cyru\cyrb\cyro\cyrt\cyra%
+ \or%
+ \CYRN\cyre\cyrd\cyrje\cyre\cyrlje\cyra%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
%\iffalse
% \begin{macrocode}
-%</datetime2-serbian-ascii.ldf>
+%</datetime2-serbian-base-ascii.ldf>
% \end{macrocode}
%\fi
%
-%\subsection{Main Serbian Module (\texttt{datetime2-serbian.ldf})}
-%\changes{1.0}{2015-03-31}{Initial release}
%
%\iffalse
% \begin{macrocode}
@@ -470,44 +1524,48 @@
% \end{macrocode}
%\fi
%
-% Identify Module
+%\subsection{Serbian \sty{serbian} Code
+% (\texttt{datetime2-serbian.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
% \begin{macrocode}
-\ProvidesDateTimeModule{serbian}[2019/09/14 v1.0]
+\ProvidesDateTimeModule{serbian}[2019/11/07 v2.0]
% \end{macrocode}
-% Need to find out if XeTeX or LuaTeX are being used.
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
% \begin{macrocode}
-\RequirePackage{ifxetex,ifluatex}
+\RequireDateTimeModule{serbian-base}
% \end{macrocode}
-% XeTeX and LuaTeX natively support UTF-8, so load
-% \texttt{serbian-utf8} if either of those engines are used
-% otherwise load \texttt{serbian-ascii}.
+%
+%\subsubsection{Defining the \sty{serbian} style}
+%
+% Allow the user a way of configuring the "serbian" and
+% "serbian-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMserbiandowdaysep}
+% The separator between weekday and day.
% \begin{macrocode}
-\ifxetex
- \RequireDateTimeModule{serbian-utf8}
-\else
- \ifluatex
- \RequireDateTimeModule{serbian-utf8}
- \else
- \RequireDateTimeModule{serbian-ascii}
- \fi
-\fi
+\newcommand*{\DTMserbiandowdaysep}{,\space}
% \end{macrocode}
+%\end{macro}
%
-% Define the \texttt{serbian} style.
-% The time style is the same as the "default" style
-% provided by \sty{datetime2}. This may need correcting. For
-% example, if a 12 hour style similar to the "englishampm" (from the
-% "english-base" module) is required.
%
-% Allow the user a way of configuring the "serbian" and
-% "serbian-numeric" styles. This doesn't use the package wide
-% separators such as
-% \cs{dtm@datetimesep} in case other date formats are also required.
%\begin{macro}{\DTMserbiandaymonthsep}
% The separator between the day and month for the text format.
% \begin{macrocode}
\newcommand*{\DTMserbiandaymonthsep}{%
- \DTMtexorpdfstring{\protect~}{\space}%
+ \DTMtexorpdfstring{\protect~}{\space}%
}
% \end{macrocode}
%\end{macro}
@@ -520,16 +1578,16 @@
%\end{macro}
%
%\begin{macro}{\DTMserbiandatetimesep}
-% The separator between the date and time blocks in the full format
-% (either text or numeric).
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
% \begin{macrocode}
\newcommand*{\DTMserbiandatetimesep}{\space}
% \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMserbiantimezonesep}
-% The separator between the time and zone blocks in the full format
-% (either text or numeric).
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
% \begin{macrocode}
\newcommand*{\DTMserbiantimezonesep}{\space}
% \end{macrocode}
@@ -549,44 +1607,144 @@
% \end{macrocode}
%\end{macro}
%
-%Provide keys that can be used in \cs{DTMlangsetup} to set these
-%separators.
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
% \begin{macrocode}
-\DTMdefkey{serbian}{daymonthsep}{\renewcommand*{\DTMserbiandaymonthsep}{#1}}
-\DTMdefkey{serbian}{monthyearsep}{\renewcommand*{\DTMserbianmonthyearsep}{#1}}
-\DTMdefkey{serbian}{datetimesep}{\renewcommand*{\DTMserbiandatetimesep}{#1}}
-\DTMdefkey{serbian}{timezonesep}{\renewcommand*{\DTMserbiantimezonesep}{#1}}
-\DTMdefkey{serbian}{datesep}{\renewcommand*{\DTMserbiandatesep}{#1}}
-\DTMdefkey{serbian}{timesep}{\renewcommand*{\DTMserbiantimesep}{#1}}
+\DTMdefkey{serbian}{dowdaysep}%
+ {\renewcommand*{\DTMserbiandowdaysep}{#1}}
+\DTMdefkey{serbian}{daymonthsep}%
+ {\renewcommand*{\DTMserbiandaymonthsep}{#1}}
+\DTMdefkey{serbian}{monthyearsep}%
+ {\renewcommand*{\DTMserbianmonthyearsep}{#1}}
+\DTMdefkey{serbian}{datetimesep}%
+ {\renewcommand*{\DTMserbiandatetimesep}{#1}}
+\DTMdefkey{serbian}{timezonesep}%
+ {\renewcommand*{\DTMserbiantimezonesep}{#1}}
+\DTMdefkey{serbian}{datesep}%
+ {\renewcommand*{\DTMserbiandatesep}{#1}}
+\DTMdefkey{serbian}{timesep}%
+ {\renewcommand*{\DTMserbiantimesep}{#1}}
% \end{macrocode}
%
-%\begin{macro}{\DTMserbianmonthname}
-% Provide a way to switch between Latin and Cyrillic month names.
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMserbianweekdayname}
+% Define the weekday name, lowercase.
% \begin{macrocode}
-\newcommand*{\DTMserbianmonthname}{\DTMserbiancyrmonthname}
+\newcommand*{\DTMserbianweekdayname}%
+{\DTMserbianlatekweekdayname}
% \end{macrocode}
%\end{macro}
-%\begin{macro}{\DTMserbianMonthname}
+
+%\begin{macro}{\DTMserbianweekdayname}
+% Define the weekday name, capitalized.
% \begin{macrocode}
-\newcommand*{\DTMserbianMonthname}{\DTMserbiancyrMonthname}
+\newcommand*{\DTMserbianWeekdayname}%
+ {\DTMserbianlatekWeekdayname}
% \end{macrocode}
%\end{macro}
%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
% \begin{macrocode}
-\DTMdefchoicekey{serbian}{alphabet}[\val\nr]{cyrillic,latin}{%
- \ifcase\nr\relax
- \renewcommand*{\DTMserbianmonthname}{\DTMserbiancyrmonthname}%
- \renewcommand*{\DTMserbianMonthname}{\DTMserbiancyrMonthname}%
- \or
- \renewcommand*{\DTMserbianmonthname}{\DTMserbianlatinmonthname}%
- \renewcommand*{\DTMserbianMonthname}{\DTMserbianlatinMonthname}%
- \fi
+\DTMdefchoicekey{serbian}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMserbianweekdayname}%
+ {\DTMserbianlatekweekdayname}%
+ \renewcommand*{\DTMserbianWeekdayname}%
+ {\DTMserbianlatekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMserbianweekdayname}%
+ {\DTMserbianlatijweekdayname}%
+ \renewcommand*{\DTMserbianWeekdayname}
+ {\DTMserbianlatijWeekdayname}%
+ \fi
}
% \end{macrocode}
%
-% TODO: provide a boolean key to switch between full and abbreviated
-% formats if appropriate. (I don't know how the date should be
-% abbreviated.)
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{serbian}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{serbian}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{serbian}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{serbian}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMserbiandayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMserbiandayordinal}[1]{%
+ \DTMifbool{serbian}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMserbiandatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMserbianyearordinal}[1]{%
+ \number#1\DTMserbiandatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMserbiannoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbiannoimonthname}{\DTMserbianlatnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiannoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbiannoiMonthname}{\DTMserbianlatnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbianimonthname}{\DTMserbianlatimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbianiMonthname}{\DTMserbianlatiMonthname}
+% \end{macrocode}
+%\end{macro}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
@@ -617,137 +1775,222 @@
% \begin{macrocode}
\DTMsetbool{serbian}{showyear}{true}
% \end{macrocode}
-%
-% Define the "serbian" style. (TODO: implement day of week?)
-% \begin{macrocode}
-\DTMnewstyle
- {serbian}% label
- {% date style
- \renewcommand*\DTMdisplaydate[4]{%
- \DTMifbool{serbian}{showdayofmonth}
- {\DTMserbianordinal{##3}\DTMserbiandaymonthsep}%
- {}%
- \DTMserbianmonthname{##2}%
- \DTMifbool{serbian}{showyear}%
- {%
- \DTMserbianmonthyearsep
- \number##1
- }%
- {}%
- }%
- \renewcommand*\DTMDisplaydate[4]{%
- \DTMifbool{serbian}{showdayofmonth}
- {%
- \DTMserbianordinal{##3}\DTMserbiandaymonthsep
- \DTMserbianmonthname{##2}%
- }%
- {%
- \DTMserbianMonthname{##2}%
- }%
- \DTMifbool{serbian}{showyear}%
- {%
- \DTMserbianmonthyearsep
- \number##1
- }%
- {}%
- }%
- }%
- {% time style (use default)
- \DTMsettimestyle{default}%
- }%
- {% zone style
- \DTMresetzones
- \DTMserbianzonemaps
- \renewcommand*{\DTMdisplayzone}[2]{%
- \DTMifbool{serbian}{mapzone}%
- {\DTMusezonemapordefault{##1}{##2}}%
- {%
- \ifnum##1<0 \else+\fi\DTMtwodigits{##1}%
- \ifDTMshowzoneminutes\DTMserbiantimesep\DTMtwodigits{##2}\fi
- }%
- }%
- }%
- {% full style
- \renewcommand*{\DTMdisplay}[9]{%
- \ifDTMshowdate
- \DTMdisplaydate{##1}{##2}{##3}{##4}%
- \DTMserbiandatetimesep
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{serbian}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbianweekdayname{##4}%
+ \DTMserbiandowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbian}{showdayofmonth}
+ {\DTMserbiandayordinal{##3}\DTMserbiandaymonthsep}%
+ {}%
+ \DTMifbool{serbian}{monthi}%
+ {\DTMserbianimonthname{##2}}%
+ {\DTMserbiannoimonthname{##2}}%
+ \DTMifbool{serbian}{showyear}%
+ {%
+ \DTMserbianmonthyearsep%
+ \DTMserbianyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbianWeekdayname{##4}%
+ \DTMserbiandowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbian}{showdayofmonth}
+ {%
+ \DTMserbiandayordinal{##3}\DTMserbiandaymonthsep%
+ \DTMifbool{serbian}{monthi}%
+ {\DTMserbianimonthname{##2}}%
+ {\DTMserbiannoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{serbian}{monthi}%
+ {\DTMserbianiMonthname{##2}}%
+ {\DTMserbiannoiMonthname{##2}}%
+ }%
+ \DTMifbool{serbian}{showyear}%
+ {%
+ \DTMserbianmonthyearsep%
+ \DTMserbianyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{serbian}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMserbiantimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMserbiantimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMserbianzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{serbian}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMserbiantimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMserbiandatetimesep%
\fi
\DTMdisplaytime{##5}{##6}{##7}%
- \ifDTMshowzone
- \DTMserbiantimezonesep
- \DTMdisplayzone{##8}{##9}%
+ \ifDTMshowzone%
+ \DTMserbiantimezonesep%
+ \DTMdisplayzone{##8}{##9}%
\fi
- }%
- \renewcommand*{\DTMDisplay}[9]{%
- \ifDTMshowdate
- \DTMDisplaydate{##1}{##2}{##3}{##4}%
- \DTMserbiandatetimesep
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMserbiandatetimesep%
\fi
\DTMdisplaytime{##5}{##6}{##7}%
- \ifDTMshowzone
- \DTMserbiantimezonesep
- \DTMdisplayzone{##8}{##9}%
+ \ifDTMshowzone%
+ \DTMserbiantimezonesep%
+ \DTMdisplayzone{##8}{##9}%
\fi
- }%
- }%
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMserbianmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMserbianmonthordinal}[1]{%
+ \DTMifbool{serbian}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "serbian-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{serbian}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMserbianmonthordinal}[1]{%
+ \DTMifbool{serbian}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMserbiandatesep}%
+ \or%
+ \renewcommand*{\DTMserbianmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMserbianmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
% \end{macrocode}
%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
% Define numeric style.
% \begin{macrocode}
-\DTMnewstyle
- {serbian-numeric}% label
- {% date style
- \renewcommand*\DTMdisplaydate[4]{%
- \DTMifbool{serbian}{showdayofmonth}%
- {%
- \number##3 % space intended
- \DTMserbiandatesep
- }%
- {}%
- \number##2 % space intended
- \DTMifbool{serbian}{showyear}%
- {%
- \DTMserbiandatesep
- \number##1 % space intended
- }%
- {}%
+\DTMnewstyle%
+{serbian-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbianweekdayname{##4}%
+ \DTMserbiandowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbian}{showdayofmonth}%
+ {\DTMserbiandayordinal{##3}\DTMserbiandaymonthsep}%
+ {}%
+ \DTMserbianmonthordinal{##2}%
+ \DTMifbool{serbian}{showyear}%
+ {%
+ \DTMserbianmonthyearsep%
+ \DTMserbianyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbianWeekdayname{##4}%
+ \DTMserbiandowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbian}{showdayofmonth}%
+ {\DTMserbiandayordinal{##3}\DTMserbiandaymonthsep}%
+ {}%
+ \DTMserbianmonthordinal{##2}%
+ \DTMifbool{serbian}{showyear}%
+ {%
+ \DTMserbianmonthyearsep%
+ \DTMserbianyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{serbian}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMserbiantimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMserbiantimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMserbianzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{serbian}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMserbiantimesep\DTMtwodigits{##2}\fi
}%
- \renewcommand*{\DTMDisplaydate}{\DTMdisplaydate}%
- }%
- {% time style
- \renewcommand*\DTMdisplaytime[3]{%
- \number##1
- \DTMserbiantimesep\DTMtwodigits{##2}%
- \ifDTMshowseconds\DTMserbiantimesep\DTMtwodigits{##3}\fi
- }%
- }%
- {% zone style
- \DTMresetzones
- \DTMserbianzonemaps
- \renewcommand*{\DTMdisplayzone}[2]{%
- \DTMifbool{serbian}{mapzone}%
- {\DTMusezonemapordefault{##1}{##2}}%
- {%
- \ifnum##1<0 \else+\fi\DTMtwodigits{##1}%
- \ifDTMshowzoneminutes\DTMserbiantimesep\DTMtwodigits{##2}\fi
- }%
- }%
- }%
- {% full style
- \renewcommand*{\DTMdisplay}[9]{%
- \ifDTMshowdate
- \DTMdisplaydate{##1}{##2}{##3}{##4}%
- \DTMserbiandatetimesep
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMserbiandatetimesep%
\fi
\DTMdisplaytime{##5}{##6}{##7}%
- \ifDTMshowzone
- \DTMserbiantimezonesep
- \DTMdisplayzone{##8}{##9}%
+ \ifDTMshowzone%
+ \DTMserbiantimezonesep%
+ \DTMdisplayzone{##8}{##9}%
\fi
- }%
- \renewcommand*{\DTMDisplay}{\DTMdisplay}%
- }
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
% \end{macrocode}
%
%\begin{macro}{\DTMserbianzonemaps}
@@ -764,25 +2007,28 @@
% Switch style according to the \opt{useregional} setting.
% \begin{macrocode}
-\DTMifcaseregional
+\DTMifcaseregional%
{}% do nothing
-{\DTMsetstyle{serbian}}
-{\DTMsetstyle{serbian-numeric}}
+{\DTMsetstyle{serbian}}%
+{\DTMsetstyle{serbian-numeric}}%
% \end{macrocode}
%
% Redefine \cs{dateserbian} (or \cs{date}\meta{dialect}) to prevent
% \sty{babel} from resetting \cs{today}. (For this to work,
% \sty{babel} must already have been loaded if it's required.)
%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
% \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
- \ifundef\dateserbian
+ \ifundef\dateserbian%
{% do nothing
}%
{%
\def\dateserbian{%
- \DTMifcaseregional
+ \DTMifcaseregional%
{}% do nothing
{\DTMsetstyle{serbian}}%
{\DTMsetstyle{serbian-numeric}}%
@@ -791,17 +2037,4819 @@
}%
{%
\csdef{date\CurrentTrackedDialect}{%
- \DTMifcaseregional
+ \DTMifcaseregional%
{}% do nothing
{\DTMsetstyle{serbian}}%
{\DTMsetstyle{serbian-numeric}}%
}%
}%
% \end{macrocode}
+%
%\iffalse
% \begin{macrocode}
%</datetime2-serbian.ldf>
% \end{macrocode}
%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Latn.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Latn} Code
+% (\texttt{datetime2-sr-Latn.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Latn}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Latn} style}
+%
+% Allow the user a way of configuring the "srLatn" and
+% "srLatn-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrLatndowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatndowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrLatndaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatndaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatndatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatndatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatntimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatntimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatndatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatndatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatntimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatntimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Latn}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Latndowdaysep}{#1}}
+\DTMdefkey{sr-Latn}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Latndaymonthsep}{#1}}
+\DTMdefkey{sr-Latn}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Latnmonthyearsep}{#1}}
+\DTMdefkey{sr-Latn}{datetimesep}%
+ {\renewcommand*{\DTMsr-Latndatetimesep}{#1}}
+\DTMdefkey{sr-Latn}{timezonesep}%
+ {\renewcommand*{\DTMsr-Latntimezonesep}{#1}}
+\DTMdefkey{sr-Latn}{datesep}%
+ {\renewcommand*{\DTMsr-Latndatesep}{#1}}
+\DTMdefkey{sr-Latn}{timesep}%
+ {\renewcommand*{\DTMsr-Latntimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrLatnweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnweekdayname}%
+{\DTMserbianlatekweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrLatnweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnWeekdayname}%
+ {\DTMserbianlatekWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnweekdayname}%
+ {\DTMserbianlatekweekdayname}%
+ \renewcommand*{\DTMsrLatnWeekdayname}%
+ {\DTMserbianlatekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrLatnweekdayname}%
+ {\DTMserbianlatijweekdayname}%
+ \renewcommand*{\DTMsrLatnWeekdayname}
+ {\DTMserbianlatijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrLatndayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatndayordinal}[1]{%
+ \DTMifbool{sr-Latn}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrLatndatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnyearordinal}[1]{%
+ \number#1\DTMsrLatndatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrLatnnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnnoimonthname}{\DTMserbianlatnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnnoiMonthname}{\DTMserbianlatnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnimonthname}{\DTMserbianlatimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatniMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatniMonthname}{\DTMserbianlatiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnweekdayname{##4}%
+ \DTMsrLatndowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn}{showdayofmonth}
+ {\DTMsrLatndayordinal{##3}\DTMsrLatndaymonthsep}%
+ {}%
+ \DTMifbool{sr-Latn}{monthi}%
+ {\DTMsrLatnimonthname{##2}}%
+ {\DTMsrLatnnoimonthname{##2}}%
+ \DTMifbool{sr-Latn}{showyear}%
+ {%
+ \DTMsrLatnmonthyearsep%
+ \DTMsrLatnyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnWeekdayname{##4}%
+ \DTMsrLatndowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn}{showdayofmonth}
+ {%
+ \DTMsrLatndayordinal{##3}\DTMsrLatndaymonthsep%
+ \DTMifbool{sr-Latn}{monthi}%
+ {\DTMsrLatnimonthname{##2}}%
+ {\DTMsrLatnnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Latn}{monthi}%
+ {\DTMsrLatniMonthname{##2}}%
+ {\DTMsrLatnnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Latn}{showyear}%
+ {%
+ \DTMsrLatnmonthyearsep%
+ \DTMsrLatnyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatntimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatntimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatntimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatndatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatntimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatndatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatntimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrLatnmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnmonthordinal}[1]{%
+ \DTMifbool{sr-Latn}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srLatn-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnmonthordinal}[1]{%
+ \DTMifbool{sr-Latn}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrLatndatesep}%
+ \or%
+ \renewcommand*{\DTMsrLatnmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrLatnmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnweekdayname{##4}%
+ \DTMsrLatndowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn}{showdayofmonth}%
+ {\DTMsrLatndayordinal{##3}\DTMsrLatndaymonthsep}%
+ {}%
+ \DTMsrLatnmonthordinal{##2}%
+ \DTMifbool{sr-Latn}{showyear}%
+ {%
+ \DTMsrLatnmonthyearsep%
+ \DTMsrLatnyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnWeekdayname{##4}%
+ \DTMsrLatndowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn}{showdayofmonth}%
+ {\DTMsrLatndayordinal{##3}\DTMsrLatndaymonthsep}%
+ {}%
+ \DTMsrLatnmonthordinal{##2}%
+ \DTMifbool{sr-Latn}{showyear}%
+ {%
+ \DTMsrLatnmonthyearsep%
+ \DTMsrLatnyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatntimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatntimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatntimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatndatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatntimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Latnzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Latnzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Latn}}%
+{\DTMsetstyle{sr-Latn-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbian} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbian%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbian{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn}}%
+ {\DTMsetstyle{sr-Latn-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn}}%
+ {\DTMsetstyle{sr-Latn-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Latn.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Latn-RS.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Latn-RS} Code
+% (\texttt{datetime2-sr-Latn-RS.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Latn-RS}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Latn-RS} style}
+%
+% Allow the user a way of configuring the "srLatnRS" and
+% "srLatnRS-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrLatnRSdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrLatnRSdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRStimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRStimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRStimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRStimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Latn-RS}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Latn-RSdowdaysep}{#1}}
+\DTMdefkey{sr-Latn-RS}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Latn-RSdaymonthsep}{#1}}
+\DTMdefkey{sr-Latn-RS}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Latn-RSmonthyearsep}{#1}}
+\DTMdefkey{sr-Latn-RS}{datetimesep}%
+ {\renewcommand*{\DTMsr-Latn-RSdatetimesep}{#1}}
+\DTMdefkey{sr-Latn-RS}{timezonesep}%
+ {\renewcommand*{\DTMsr-Latn-RStimezonesep}{#1}}
+\DTMdefkey{sr-Latn-RS}{datesep}%
+ {\renewcommand*{\DTMsr-Latn-RSdatesep}{#1}}
+\DTMdefkey{sr-Latn-RS}{timesep}%
+ {\renewcommand*{\DTMsr-Latn-RStimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrLatnRSweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSweekdayname}%
+{\DTMserbianlatekweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrLatnRSweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSWeekdayname}%
+ {\DTMserbianlatekWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn-RS}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnRSweekdayname}%
+ {\DTMserbianlatekweekdayname}%
+ \renewcommand*{\DTMsrLatnRSWeekdayname}%
+ {\DTMserbianlatekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrLatnRSweekdayname}%
+ {\DTMserbianlatijweekdayname}%
+ \renewcommand*{\DTMsrLatnRSWeekdayname}
+ {\DTMserbianlatijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-RS}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-RS}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-RS}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-RS}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrLatnRSdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnRSdayordinal}[1]{%
+ \DTMifbool{sr-Latn-RS}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrLatnRSdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnRSyearordinal}[1]{%
+ \number#1\DTMsrLatnRSdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrLatnRSnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSnoimonthname}{\DTMserbianlatnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSnoiMonthname}{\DTMserbianlatnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSimonthname}{\DTMserbianlatimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnRSiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnRSiMonthname}{\DTMserbianlatiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-RS}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-RS}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-RS}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-RS}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-RS}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-RS}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-RS}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnRSweekdayname{##4}%
+ \DTMsrLatnRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-RS}{showdayofmonth}
+ {\DTMsrLatnRSdayordinal{##3}\DTMsrLatnRSdaymonthsep}%
+ {}%
+ \DTMifbool{sr-Latn-RS}{monthi}%
+ {\DTMsrLatnRSimonthname{##2}}%
+ {\DTMsrLatnRSnoimonthname{##2}}%
+ \DTMifbool{sr-Latn-RS}{showyear}%
+ {%
+ \DTMsrLatnRSmonthyearsep%
+ \DTMsrLatnRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnRSWeekdayname{##4}%
+ \DTMsrLatnRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-RS}{showdayofmonth}
+ {%
+ \DTMsrLatnRSdayordinal{##3}\DTMsrLatnRSdaymonthsep%
+ \DTMifbool{sr-Latn-RS}{monthi}%
+ {\DTMsrLatnRSimonthname{##2}}%
+ {\DTMsrLatnRSnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Latn-RS}{monthi}%
+ {\DTMsrLatnRSiMonthname{##2}}%
+ {\DTMsrLatnRSnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Latn-RS}{showyear}%
+ {%
+ \DTMsrLatnRSmonthyearsep%
+ \DTMsrLatnRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn-RS}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatnRStimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatnRStimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnRSzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn-RS}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatnRStimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnRSdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnRStimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnRSdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnRStimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrLatnRSmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnRSmonthordinal}[1]{%
+ \DTMifbool{sr-Latn-RS}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srLatnRS-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn-RS}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnRSmonthordinal}[1]{%
+ \DTMifbool{sr-Latn-RS}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrLatnRSdatesep}%
+ \or%
+ \renewcommand*{\DTMsrLatnRSmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrLatnRSmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-RS-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnRSweekdayname{##4}%
+ \DTMsrLatnRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-RS}{showdayofmonth}%
+ {\DTMsrLatnRSdayordinal{##3}\DTMsrLatnRSdaymonthsep}%
+ {}%
+ \DTMsrLatnRSmonthordinal{##2}%
+ \DTMifbool{sr-Latn-RS}{showyear}%
+ {%
+ \DTMsrLatnRSmonthyearsep%
+ \DTMsrLatnRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnRSWeekdayname{##4}%
+ \DTMsrLatnRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-RS}{showdayofmonth}%
+ {\DTMsrLatnRSdayordinal{##3}\DTMsrLatnRSdaymonthsep}%
+ {}%
+ \DTMsrLatnRSmonthordinal{##2}%
+ \DTMifbool{sr-Latn-RS}{showyear}%
+ {%
+ \DTMsrLatnRSmonthyearsep%
+ \DTMsrLatnRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn-RS}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatnRStimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatnRStimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnRSzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn-RS}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatnRStimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnRSdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnRStimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Latn-RSzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Latn-RSzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Latn-RS}}%
+{\DTMsetstyle{sr-Latn-RS-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbian} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbian%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbian{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn-RS}}%
+ {\DTMsetstyle{sr-Latn-RS-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn-RS}}%
+ {\DTMsetstyle{sr-Latn-RS-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Latn-RS.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Latn-ME.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Latn-ME} Code
+% (\texttt{datetime2-sr-Latn-ME.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Latn-ME}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Latn-ME} style}
+%
+% Allow the user a way of configuring the "srLatnME" and
+% "srLatnME-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrLatnMEdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrLatnMEdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEtimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEtimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEtimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEtimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Latn-ME}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Latn-MEdowdaysep}{#1}}
+\DTMdefkey{sr-Latn-ME}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Latn-MEdaymonthsep}{#1}}
+\DTMdefkey{sr-Latn-ME}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Latn-MEmonthyearsep}{#1}}
+\DTMdefkey{sr-Latn-ME}{datetimesep}%
+ {\renewcommand*{\DTMsr-Latn-MEdatetimesep}{#1}}
+\DTMdefkey{sr-Latn-ME}{timezonesep}%
+ {\renewcommand*{\DTMsr-Latn-MEtimezonesep}{#1}}
+\DTMdefkey{sr-Latn-ME}{datesep}%
+ {\renewcommand*{\DTMsr-Latn-MEdatesep}{#1}}
+\DTMdefkey{sr-Latn-ME}{timesep}%
+ {\renewcommand*{\DTMsr-Latn-MEtimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrLatnMEweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEweekdayname}%
+{\DTMserbianlatijweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrLatnMEweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEWeekdayname}%
+ {\DTMserbianlatijWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn-ME}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnMEweekdayname}%
+ {\DTMserbianlatekweekdayname}%
+ \renewcommand*{\DTMsrLatnMEWeekdayname}%
+ {\DTMserbianlatekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrLatnMEweekdayname}%
+ {\DTMserbianlatijweekdayname}%
+ \renewcommand*{\DTMsrLatnMEWeekdayname}
+ {\DTMserbianlatijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-ME}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-ME}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-ME}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-ME}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrLatnMEdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnMEdayordinal}[1]{%
+ \DTMifbool{sr-Latn-ME}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrLatnMEdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnMEyearordinal}[1]{%
+ \number#1\DTMsrLatnMEdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrLatnMEnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEnoimonthname}{\DTMserbianlatnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEnoiMonthname}{\DTMserbianlatnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEimonthname}{\DTMserbianlatimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnMEiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnMEiMonthname}{\DTMserbianlatiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-ME}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-ME}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-ME}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-ME}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-ME}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-ME}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-ME}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnMEweekdayname{##4}%
+ \DTMsrLatnMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-ME}{showdayofmonth}
+ {\DTMsrLatnMEdayordinal{##3}\DTMsrLatnMEdaymonthsep}%
+ {}%
+ \DTMifbool{sr-Latn-ME}{monthi}%
+ {\DTMsrLatnMEimonthname{##2}}%
+ {\DTMsrLatnMEnoimonthname{##2}}%
+ \DTMifbool{sr-Latn-ME}{showyear}%
+ {%
+ \DTMsrLatnMEmonthyearsep%
+ \DTMsrLatnMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnMEWeekdayname{##4}%
+ \DTMsrLatnMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-ME}{showdayofmonth}
+ {%
+ \DTMsrLatnMEdayordinal{##3}\DTMsrLatnMEdaymonthsep%
+ \DTMifbool{sr-Latn-ME}{monthi}%
+ {\DTMsrLatnMEimonthname{##2}}%
+ {\DTMsrLatnMEnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Latn-ME}{monthi}%
+ {\DTMsrLatnMEiMonthname{##2}}%
+ {\DTMsrLatnMEnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Latn-ME}{showyear}%
+ {%
+ \DTMsrLatnMEmonthyearsep%
+ \DTMsrLatnMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn-ME}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatnMEtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatnMEtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnMEzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn-ME}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatnMEtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnMEdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnMEtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnMEdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnMEtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrLatnMEmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnMEmonthordinal}[1]{%
+ \DTMifbool{sr-Latn-ME}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srLatnME-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn-ME}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnMEmonthordinal}[1]{%
+ \DTMifbool{sr-Latn-ME}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrLatnMEdatesep}%
+ \or%
+ \renewcommand*{\DTMsrLatnMEmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrLatnMEmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-ME-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnMEweekdayname{##4}%
+ \DTMsrLatnMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-ME}{showdayofmonth}%
+ {\DTMsrLatnMEdayordinal{##3}\DTMsrLatnMEdaymonthsep}%
+ {}%
+ \DTMsrLatnMEmonthordinal{##2}%
+ \DTMifbool{sr-Latn-ME}{showyear}%
+ {%
+ \DTMsrLatnMEmonthyearsep%
+ \DTMsrLatnMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnMEWeekdayname{##4}%
+ \DTMsrLatnMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-ME}{showdayofmonth}%
+ {\DTMsrLatnMEdayordinal{##3}\DTMsrLatnMEdaymonthsep}%
+ {}%
+ \DTMsrLatnMEmonthordinal{##2}%
+ \DTMifbool{sr-Latn-ME}{showyear}%
+ {%
+ \DTMsrLatnMEmonthyearsep%
+ \DTMsrLatnMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn-ME}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatnMEtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatnMEtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnMEzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn-ME}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatnMEtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnMEdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnMEtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Latn-MEzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Latn-MEzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Latn-ME}}%
+{\DTMsetstyle{sr-Latn-ME-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbian} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbian%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbian{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn-ME}}%
+ {\DTMsetstyle{sr-Latn-ME-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn-ME}}%
+ {\DTMsetstyle{sr-Latn-ME-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Latn-ME.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Latn-BA.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Latn-BA} Code
+% (\texttt{datetime2-sr-Latn-BA.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Latn-BA}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Latn-BA} style}
+%
+% Allow the user a way of configuring the "srLatnBA" and
+% "srLatnBA-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrLatnBAdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrLatnBAdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAtimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAtimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAtimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAtimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Latn-BA}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Latn-BAdowdaysep}{#1}}
+\DTMdefkey{sr-Latn-BA}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Latn-BAdaymonthsep}{#1}}
+\DTMdefkey{sr-Latn-BA}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Latn-BAmonthyearsep}{#1}}
+\DTMdefkey{sr-Latn-BA}{datetimesep}%
+ {\renewcommand*{\DTMsr-Latn-BAdatetimesep}{#1}}
+\DTMdefkey{sr-Latn-BA}{timezonesep}%
+ {\renewcommand*{\DTMsr-Latn-BAtimezonesep}{#1}}
+\DTMdefkey{sr-Latn-BA}{datesep}%
+ {\renewcommand*{\DTMsr-Latn-BAdatesep}{#1}}
+\DTMdefkey{sr-Latn-BA}{timesep}%
+ {\renewcommand*{\DTMsr-Latn-BAtimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrLatnBAweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAweekdayname}%
+{\DTMserbianlatijweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrLatnBAweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAWeekdayname}%
+ {\DTMserbianlatijWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn-BA}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnBAweekdayname}%
+ {\DTMserbianlatekweekdayname}%
+ \renewcommand*{\DTMsrLatnBAWeekdayname}%
+ {\DTMserbianlatekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrLatnBAweekdayname}%
+ {\DTMserbianlatijweekdayname}%
+ \renewcommand*{\DTMsrLatnBAWeekdayname}
+ {\DTMserbianlatijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-BA}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-BA}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-BA}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-BA}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrLatnBAdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnBAdayordinal}[1]{%
+ \DTMifbool{sr-Latn-BA}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrLatnBAdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnBAyearordinal}[1]{%
+ \number#1\DTMsrLatnBAdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrLatnBAnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAnoimonthname}{\DTMserbianlatnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAnoiMonthname}{\DTMserbianlatnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAimonthname}{\DTMserbianlatimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrLatnBAiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrLatnBAiMonthname}{\DTMserbianlatiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-BA}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-BA}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-BA}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-BA}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Latn-BA}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Latn-BA}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-BA}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnBAweekdayname{##4}%
+ \DTMsrLatnBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-BA}{showdayofmonth}
+ {\DTMsrLatnBAdayordinal{##3}\DTMsrLatnBAdaymonthsep}%
+ {}%
+ \DTMifbool{sr-Latn-BA}{monthi}%
+ {\DTMsrLatnBAimonthname{##2}}%
+ {\DTMsrLatnBAnoimonthname{##2}}%
+ \DTMifbool{sr-Latn-BA}{showyear}%
+ {%
+ \DTMsrLatnBAmonthyearsep%
+ \DTMsrLatnBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnBAWeekdayname{##4}%
+ \DTMsrLatnBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-BA}{showdayofmonth}
+ {%
+ \DTMsrLatnBAdayordinal{##3}\DTMsrLatnBAdaymonthsep%
+ \DTMifbool{sr-Latn-BA}{monthi}%
+ {\DTMsrLatnBAimonthname{##2}}%
+ {\DTMsrLatnBAnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Latn-BA}{monthi}%
+ {\DTMsrLatnBAiMonthname{##2}}%
+ {\DTMsrLatnBAnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Latn-BA}{showyear}%
+ {%
+ \DTMsrLatnBAmonthyearsep%
+ \DTMsrLatnBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn-BA}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatnBAtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatnBAtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnBAzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn-BA}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatnBAtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnBAdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnBAtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnBAdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnBAtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrLatnBAmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrLatnBAmonthordinal}[1]{%
+ \DTMifbool{sr-Latn-BA}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srLatnBA-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Latn-BA}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrLatnBAmonthordinal}[1]{%
+ \DTMifbool{sr-Latn-BA}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrLatnBAdatesep}%
+ \or%
+ \renewcommand*{\DTMsrLatnBAmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrLatnBAmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Latn-BA-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnBAweekdayname{##4}%
+ \DTMsrLatnBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-BA}{showdayofmonth}%
+ {\DTMsrLatnBAdayordinal{##3}\DTMsrLatnBAdaymonthsep}%
+ {}%
+ \DTMsrLatnBAmonthordinal{##2}%
+ \DTMifbool{sr-Latn-BA}{showyear}%
+ {%
+ \DTMsrLatnBAmonthyearsep%
+ \DTMsrLatnBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrLatnBAWeekdayname{##4}%
+ \DTMsrLatnBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Latn-BA}{showdayofmonth}%
+ {\DTMsrLatnBAdayordinal{##3}\DTMsrLatnBAdaymonthsep}%
+ {}%
+ \DTMsrLatnBAmonthordinal{##2}%
+ \DTMifbool{sr-Latn-BA}{showyear}%
+ {%
+ \DTMsrLatnBAmonthyearsep%
+ \DTMsrLatnBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Latn-BA}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrLatnBAtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrLatnBAtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrLatnBAzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Latn-BA}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrLatnBAtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrLatnBAdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrLatnBAtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Latn-BAzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Latn-BAzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Latn-BA}}%
+{\DTMsetstyle{sr-Latn-BA-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbian} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbian%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbian{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn-BA}}%
+ {\DTMsetstyle{sr-Latn-BA-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Latn-BA}}%
+ {\DTMsetstyle{sr-Latn-BA-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Latn-BA.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-serbianc.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{serbianc} Code
+% (\texttt{datetime2-serbianc.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{serbianc}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{serbianc} style}
+%
+% Allow the user a way of configuring the "serbianc" and
+% "serbianc-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMserbiancdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMserbiancdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMserbiancdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianctimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMserbianctimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianctimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMserbianctimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{serbianc}{dowdaysep}%
+ {\renewcommand*{\DTMserbiancdowdaysep}{#1}}
+\DTMdefkey{serbianc}{daymonthsep}%
+ {\renewcommand*{\DTMserbiancdaymonthsep}{#1}}
+\DTMdefkey{serbianc}{monthyearsep}%
+ {\renewcommand*{\DTMserbiancmonthyearsep}{#1}}
+\DTMdefkey{serbianc}{datetimesep}%
+ {\renewcommand*{\DTMserbiancdatetimesep}{#1}}
+\DTMdefkey{serbianc}{timezonesep}%
+ {\renewcommand*{\DTMserbianctimezonesep}{#1}}
+\DTMdefkey{serbianc}{datesep}%
+ {\renewcommand*{\DTMserbiancdatesep}{#1}}
+\DTMdefkey{serbianc}{timesep}%
+ {\renewcommand*{\DTMserbianctimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMserbiancweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancweekdayname}%
+{\DTMserbiancyrekweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMserbiancweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMserbiancWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{serbianc}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMserbiancweekdayname}%
+ {\DTMserbiancyrekweekdayname}%
+ \renewcommand*{\DTMserbiancWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMserbiancweekdayname}%
+ {\DTMserbiancyrijweekdayname}%
+ \renewcommand*{\DTMserbiancWeekdayname}
+ {\DTMserbiancyrijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{serbianc}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{serbianc}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{serbianc}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{serbianc}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMserbiancdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMserbiancdayordinal}[1]{%
+ \DTMifbool{serbianc}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMserbiancdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMserbiancyearordinal}[1]{%
+ \number#1\DTMserbiancdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMserbiancnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbiancnoimonthname}{\DTMserbiancyrnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbiancnoiMonthname}{\DTMserbiancyrnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbiancimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbiancimonthname}{\DTMserbiancyrimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMserbianciMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMserbianciMonthname}{\DTMserbiancyriMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{serbianc}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{serbianc}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{serbianc}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{serbianc}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{serbianc}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{serbianc}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{serbianc}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbiancweekdayname{##4}%
+ \DTMserbiancdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbianc}{showdayofmonth}
+ {\DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep}%
+ {}%
+ \DTMifbool{serbianc}{monthi}%
+ {\DTMserbiancimonthname{##2}}%
+ {\DTMserbiancnoimonthname{##2}}%
+ \DTMifbool{serbianc}{showyear}%
+ {%
+ \DTMserbiancmonthyearsep%
+ \DTMserbiancyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbiancWeekdayname{##4}%
+ \DTMserbiancdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbianc}{showdayofmonth}
+ {%
+ \DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep%
+ \DTMifbool{serbianc}{monthi}%
+ {\DTMserbiancimonthname{##2}}%
+ {\DTMserbiancnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{serbianc}{monthi}%
+ {\DTMserbianciMonthname{##2}}%
+ {\DTMserbiancnoiMonthname{##2}}%
+ }%
+ \DTMifbool{serbianc}{showyear}%
+ {%
+ \DTMserbiancmonthyearsep%
+ \DTMserbiancyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{serbianc}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMserbianctimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMserbianctimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMserbianczonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{serbianc}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMserbianctimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMserbiancdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMserbianctimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMserbiancdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMserbianctimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMserbiancmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMserbiancmonthordinal}[1]{%
+ \DTMifbool{serbianc}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "serbianc-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{serbianc}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMserbiancmonthordinal}[1]{%
+ \DTMifbool{serbianc}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMserbiancdatesep}%
+ \or%
+ \renewcommand*{\DTMserbiancmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMserbiancmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{serbianc-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbiancweekdayname{##4}%
+ \DTMserbiancdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbianc}{showdayofmonth}%
+ {\DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep}%
+ {}%
+ \DTMserbiancmonthordinal{##2}%
+ \DTMifbool{serbianc}{showyear}%
+ {%
+ \DTMserbiancmonthyearsep%
+ \DTMserbiancyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMserbiancWeekdayname{##4}%
+ \DTMserbiancdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{serbianc}{showdayofmonth}%
+ {\DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep}%
+ {}%
+ \DTMserbiancmonthordinal{##2}%
+ \DTMifbool{serbianc}{showyear}%
+ {%
+ \DTMserbiancmonthyearsep%
+ \DTMserbiancyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{serbianc}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMserbianctimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMserbianctimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMserbianczonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{serbianc}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMserbianctimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMserbiancdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMserbianctimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMserbianczonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMserbianczonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{serbianc}}%
+{\DTMsetstyle{serbianc-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbianc} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbianc%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbianc{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{serbianc}}%
+ {\DTMsetstyle{serbianc-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{serbianc}}%
+ {\DTMsetstyle{serbianc-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-serbianc.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Cyrl.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Cyrl} Code
+% (\texttt{datetime2-sr-Cyrl.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Cyrl}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Cyrl} style}
+%
+% Allow the user a way of configuring the "srCyrl" and
+% "srCyrl-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrCyrldowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrldowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrCyrldaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrldaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrldatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrldatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrltimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrltimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrldatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrldatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrltimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrltimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Cyrl}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Cyrldowdaysep}{#1}}
+\DTMdefkey{sr-Cyrl}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Cyrldaymonthsep}{#1}}
+\DTMdefkey{sr-Cyrl}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Cyrlmonthyearsep}{#1}}
+\DTMdefkey{sr-Cyrl}{datetimesep}%
+ {\renewcommand*{\DTMsr-Cyrldatetimesep}{#1}}
+\DTMdefkey{sr-Cyrl}{timezonesep}%
+ {\renewcommand*{\DTMsr-Cyrltimezonesep}{#1}}
+\DTMdefkey{sr-Cyrl}{datesep}%
+ {\renewcommand*{\DTMsr-Cyrldatesep}{#1}}
+\DTMdefkey{sr-Cyrl}{timesep}%
+ {\renewcommand*{\DTMsr-Cyrltimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrCyrlweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlweekdayname}%
+{\DTMserbiancyrekweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrCyrlweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlweekdayname}%
+ {\DTMserbiancyrekweekdayname}%
+ \renewcommand*{\DTMsrCyrlWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrCyrlweekdayname}%
+ {\DTMserbiancyrijweekdayname}%
+ \renewcommand*{\DTMsrCyrlWeekdayname}
+ {\DTMserbiancyrijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrCyrldayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrldayordinal}[1]{%
+ \DTMifbool{sr-Cyrl}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrCyrldatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlyearordinal}[1]{%
+ \number#1\DTMsrCyrldatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrCyrlnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlnoimonthname}{\DTMserbiancyrnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlnoiMonthname}{\DTMserbiancyrnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlimonthname}{\DTMserbiancyrimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrliMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrliMonthname}{\DTMserbiancyriMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlweekdayname{##4}%
+ \DTMsrCyrldowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl}{showdayofmonth}
+ {\DTMsrCyrldayordinal{##3}\DTMsrCyrldaymonthsep}%
+ {}%
+ \DTMifbool{sr-Cyrl}{monthi}%
+ {\DTMsrCyrlimonthname{##2}}%
+ {\DTMsrCyrlnoimonthname{##2}}%
+ \DTMifbool{sr-Cyrl}{showyear}%
+ {%
+ \DTMsrCyrlmonthyearsep%
+ \DTMsrCyrlyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlWeekdayname{##4}%
+ \DTMsrCyrldowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl}{showdayofmonth}
+ {%
+ \DTMsrCyrldayordinal{##3}\DTMsrCyrldaymonthsep%
+ \DTMifbool{sr-Cyrl}{monthi}%
+ {\DTMsrCyrlimonthname{##2}}%
+ {\DTMsrCyrlnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Cyrl}{monthi}%
+ {\DTMsrCyrliMonthname{##2}}%
+ {\DTMsrCyrlnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Cyrl}{showyear}%
+ {%
+ \DTMsrCyrlmonthyearsep%
+ \DTMsrCyrlyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrltimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrltimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrltimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrldatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrltimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrldatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrltimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrCyrlmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srCyrl-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrCyrldatesep}%
+ \or%
+ \renewcommand*{\DTMsrCyrlmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrCyrlmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlweekdayname{##4}%
+ \DTMsrCyrldowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl}{showdayofmonth}%
+ {\DTMsrCyrldayordinal{##3}\DTMsrCyrldaymonthsep}%
+ {}%
+ \DTMsrCyrlmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl}{showyear}%
+ {%
+ \DTMsrCyrlmonthyearsep%
+ \DTMsrCyrlyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlWeekdayname{##4}%
+ \DTMsrCyrldowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl}{showdayofmonth}%
+ {\DTMsrCyrldayordinal{##3}\DTMsrCyrldaymonthsep}%
+ {}%
+ \DTMsrCyrlmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl}{showyear}%
+ {%
+ \DTMsrCyrlmonthyearsep%
+ \DTMsrCyrlyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrltimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrltimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrltimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrldatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrltimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Cyrlzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Cyrlzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Cyrl}}%
+{\DTMsetstyle{sr-Cyrl-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbianc} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbianc%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbianc{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl}}%
+ {\DTMsetstyle{sr-Cyrl-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl}}%
+ {\DTMsetstyle{sr-Cyrl-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Cyrl.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Cyrl-RS.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Cyrl-RS} Code
+% (\texttt{datetime2-sr-Cyrl-RS.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Cyrl-RS}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Cyrl-RS} style}
+%
+% Allow the user a way of configuring the "srCyrlRS" and
+% "srCyrlRS-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrCyrlRSdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrCyrlRSdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRStimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRStimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRStimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRStimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Cyrl-RS}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Cyrl-RSdowdaysep}{#1}}
+\DTMdefkey{sr-Cyrl-RS}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Cyrl-RSdaymonthsep}{#1}}
+\DTMdefkey{sr-Cyrl-RS}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Cyrl-RSmonthyearsep}{#1}}
+\DTMdefkey{sr-Cyrl-RS}{datetimesep}%
+ {\renewcommand*{\DTMsr-Cyrl-RSdatetimesep}{#1}}
+\DTMdefkey{sr-Cyrl-RS}{timezonesep}%
+ {\renewcommand*{\DTMsr-Cyrl-RStimezonesep}{#1}}
+\DTMdefkey{sr-Cyrl-RS}{datesep}%
+ {\renewcommand*{\DTMsr-Cyrl-RSdatesep}{#1}}
+\DTMdefkey{sr-Cyrl-RS}{timesep}%
+ {\renewcommand*{\DTMsr-Cyrl-RStimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrCyrlRSweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSweekdayname}%
+{\DTMserbiancyrijweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrCyrlRSweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSWeekdayname}%
+ {\DTMserbiancyrijWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl-RS}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlRSweekdayname}%
+ {\DTMserbiancyrekweekdayname}%
+ \renewcommand*{\DTMsrCyrlRSWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrCyrlRSweekdayname}%
+ {\DTMserbiancyrijweekdayname}%
+ \renewcommand*{\DTMsrCyrlRSWeekdayname}
+ {\DTMserbiancyrijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-RS}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-RS}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-RS}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-RS}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrCyrlRSdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlRSdayordinal}[1]{%
+ \DTMifbool{sr-Cyrl-RS}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrCyrlRSdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlRSyearordinal}[1]{%
+ \number#1\DTMsrCyrlRSdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrCyrlRSnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSnoimonthname}{\DTMserbiancyrnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSnoiMonthname}{\DTMserbiancyrnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSimonthname}{\DTMserbiancyrimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlRSiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlRSiMonthname}{\DTMserbiancyriMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-RS}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-RS}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-RS}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-RS}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-RS}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-RS}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-RS}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlRSweekdayname{##4}%
+ \DTMsrCyrlRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-RS}{showdayofmonth}
+ {\DTMsrCyrlRSdayordinal{##3}\DTMsrCyrlRSdaymonthsep}%
+ {}%
+ \DTMifbool{sr-Cyrl-RS}{monthi}%
+ {\DTMsrCyrlRSimonthname{##2}}%
+ {\DTMsrCyrlRSnoimonthname{##2}}%
+ \DTMifbool{sr-Cyrl-RS}{showyear}%
+ {%
+ \DTMsrCyrlRSmonthyearsep%
+ \DTMsrCyrlRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlRSWeekdayname{##4}%
+ \DTMsrCyrlRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-RS}{showdayofmonth}
+ {%
+ \DTMsrCyrlRSdayordinal{##3}\DTMsrCyrlRSdaymonthsep%
+ \DTMifbool{sr-Cyrl-RS}{monthi}%
+ {\DTMsrCyrlRSimonthname{##2}}%
+ {\DTMsrCyrlRSnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Cyrl-RS}{monthi}%
+ {\DTMsrCyrlRSiMonthname{##2}}%
+ {\DTMsrCyrlRSnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Cyrl-RS}{showyear}%
+ {%
+ \DTMsrCyrlRSmonthyearsep%
+ \DTMsrCyrlRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl-RS}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrlRStimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrlRStimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlRSzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl-RS}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrlRStimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlRSdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlRStimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlRSdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlRStimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrCyrlRSmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlRSmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl-RS}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srCyrlRS-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl-RS}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlRSmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl-RS}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrCyrlRSdatesep}%
+ \or%
+ \renewcommand*{\DTMsrCyrlRSmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrCyrlRSmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-RS-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlRSweekdayname{##4}%
+ \DTMsrCyrlRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-RS}{showdayofmonth}%
+ {\DTMsrCyrlRSdayordinal{##3}\DTMsrCyrlRSdaymonthsep}%
+ {}%
+ \DTMsrCyrlRSmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl-RS}{showyear}%
+ {%
+ \DTMsrCyrlRSmonthyearsep%
+ \DTMsrCyrlRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlRSWeekdayname{##4}%
+ \DTMsrCyrlRSdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-RS}{showdayofmonth}%
+ {\DTMsrCyrlRSdayordinal{##3}\DTMsrCyrlRSdaymonthsep}%
+ {}%
+ \DTMsrCyrlRSmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl-RS}{showyear}%
+ {%
+ \DTMsrCyrlRSmonthyearsep%
+ \DTMsrCyrlRSyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl-RS}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrlRStimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrlRStimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlRSzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl-RS}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrlRStimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlRSdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlRStimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Cyrl-RSzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Cyrl-RSzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Cyrl-RS}}%
+{\DTMsetstyle{sr-Cyrl-RS-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbianc} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbianc%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbianc{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl-RS}}%
+ {\DTMsetstyle{sr-Cyrl-RS-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl-RS}}%
+ {\DTMsetstyle{sr-Cyrl-RS-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Cyrl-RS.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Cyrl-ME.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Cyrl-ME} Code
+% (\texttt{datetime2-sr-Cyrl-ME.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Cyrl-ME}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Cyrl-ME} style}
+%
+% Allow the user a way of configuring the "srCyrlME" and
+% "srCyrlME-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrCyrlMEdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrCyrlMEdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEtimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEtimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEtimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEtimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Cyrl-ME}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEdowdaysep}{#1}}
+\DTMdefkey{sr-Cyrl-ME}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEdaymonthsep}{#1}}
+\DTMdefkey{sr-Cyrl-ME}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEmonthyearsep}{#1}}
+\DTMdefkey{sr-Cyrl-ME}{datetimesep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEdatetimesep}{#1}}
+\DTMdefkey{sr-Cyrl-ME}{timezonesep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEtimezonesep}{#1}}
+\DTMdefkey{sr-Cyrl-ME}{datesep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEdatesep}{#1}}
+\DTMdefkey{sr-Cyrl-ME}{timesep}%
+ {\renewcommand*{\DTMsr-Cyrl-MEtimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrCyrlMEweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEweekdayname}%
+{\DTMserbiancyrijweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrCyrlMEweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEWeekdayname}%
+ {\DTMserbiancyrijWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl-ME}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlMEweekdayname}%
+ {\DTMserbiancyrekweekdayname}%
+ \renewcommand*{\DTMsrCyrlMEWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrCyrlMEweekdayname}%
+ {\DTMserbiancyrijweekdayname}%
+ \renewcommand*{\DTMsrCyrlMEWeekdayname}
+ {\DTMserbiancyrijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-ME}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-ME}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-ME}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-ME}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrCyrlMEdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlMEdayordinal}[1]{%
+ \DTMifbool{sr-Cyrl-ME}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrCyrlMEdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlMEyearordinal}[1]{%
+ \number#1\DTMsrCyrlMEdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrCyrlMEnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEnoimonthname}{\DTMserbiancyrnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEnoiMonthname}{\DTMserbiancyrnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEimonthname}{\DTMserbiancyrimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlMEiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlMEiMonthname}{\DTMserbiancyriMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-ME}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-ME}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-ME}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-ME}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-ME}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-ME}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-ME}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlMEweekdayname{##4}%
+ \DTMsrCyrlMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-ME}{showdayofmonth}
+ {\DTMsrCyrlMEdayordinal{##3}\DTMsrCyrlMEdaymonthsep}%
+ {}%
+ \DTMifbool{sr-Cyrl-ME}{monthi}%
+ {\DTMsrCyrlMEimonthname{##2}}%
+ {\DTMsrCyrlMEnoimonthname{##2}}%
+ \DTMifbool{sr-Cyrl-ME}{showyear}%
+ {%
+ \DTMsrCyrlMEmonthyearsep%
+ \DTMsrCyrlMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlMEWeekdayname{##4}%
+ \DTMsrCyrlMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-ME}{showdayofmonth}
+ {%
+ \DTMsrCyrlMEdayordinal{##3}\DTMsrCyrlMEdaymonthsep%
+ \DTMifbool{sr-Cyrl-ME}{monthi}%
+ {\DTMsrCyrlMEimonthname{##2}}%
+ {\DTMsrCyrlMEnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Cyrl-ME}{monthi}%
+ {\DTMsrCyrlMEiMonthname{##2}}%
+ {\DTMsrCyrlMEnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Cyrl-ME}{showyear}%
+ {%
+ \DTMsrCyrlMEmonthyearsep%
+ \DTMsrCyrlMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl-ME}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrlMEtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrlMEtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlMEzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl-ME}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrlMEtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlMEdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlMEtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlMEdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlMEtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrCyrlMEmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlMEmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl-ME}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srCyrlME-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl-ME}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlMEmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl-ME}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrCyrlMEdatesep}%
+ \or%
+ \renewcommand*{\DTMsrCyrlMEmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrCyrlMEmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-ME-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlMEweekdayname{##4}%
+ \DTMsrCyrlMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-ME}{showdayofmonth}%
+ {\DTMsrCyrlMEdayordinal{##3}\DTMsrCyrlMEdaymonthsep}%
+ {}%
+ \DTMsrCyrlMEmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl-ME}{showyear}%
+ {%
+ \DTMsrCyrlMEmonthyearsep%
+ \DTMsrCyrlMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlMEWeekdayname{##4}%
+ \DTMsrCyrlMEdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-ME}{showdayofmonth}%
+ {\DTMsrCyrlMEdayordinal{##3}\DTMsrCyrlMEdaymonthsep}%
+ {}%
+ \DTMsrCyrlMEmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl-ME}{showyear}%
+ {%
+ \DTMsrCyrlMEmonthyearsep%
+ \DTMsrCyrlMEyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl-ME}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrlMEtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrlMEtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlMEzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl-ME}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrlMEtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlMEdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlMEtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Cyrl-MEzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Cyrl-MEzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Cyrl-ME}}%
+{\DTMsetstyle{sr-Cyrl-ME-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbianc} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbianc%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbianc{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl-ME}}%
+ {\DTMsetstyle{sr-Cyrl-ME-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl-ME}}%
+ {\DTMsetstyle{sr-Cyrl-ME-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Cyrl-ME.ldf>
+% \end{macrocode}
+%\fi
+%
+%\iffalse
+% \begin{macrocode}
+%<*datetime2-sr-Cyrl-BA.ldf>
+% \end{macrocode}
+%\fi
+%
+%\subsection{Serbian \sty{sr-Cyrl-BA} Code
+% (\texttt{datetime2-sr-Cyrl-BA.ldf})}
+%\changes{1.0}{2015-03-24}{Initial release}
+%\changes{2.0}{2019-11-07}{%
+% Added regions, all settings made available to regions so all changes can be
+% region-specific.
+%}
+% \begin{macrocode}
+\ProvidesDateTimeModule{sr-Cyrl-BA}[2019/11/07 v2.0]
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% All localization strings loaded from base module.
+%}
+%
+% Load base Serbian module.
+% \begin{macrocode}
+\RequireDateTimeModule{serbian-base}
+% \end{macrocode}
+%
+%\subsubsection{Defining the \sty{sr-Cyrl-BA} style}
+%
+% Allow the user a way of configuring the "srCyrlBA" and
+% "srCyrlBA-numeric" styles by providing macros for various format
+% elements.
+%
+% This doesn't use the package-wide separators such as \cs{dtm@datetimesep} in
+% case other date formats are also required.
+%
+%
+%\begin{macro}{\DTMsrCyrlBAdowdaysep}
+% The separator between weekday and day.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAdowdaysep}{,\space}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\DTMsrCyrlBAdaymonthsep}
+% The separator between the day and month for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAdaymonthsep}{%
+ \DTMtexorpdfstring{\protect~}{\space}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAmonthyearsep}
+% The separator between the month and year for the text format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAmonthyearsep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAdatetimesep}
+% The separator between the date and time blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAdatetimesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAtimezonesep}
+% The separator between the time and zone blocks in the full format (either
+% text or numeric).
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAtimezonesep}{\space}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAdatesep}
+% The separator for the numeric date format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAdatesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAtimesep}
+% The separator for the numeric time format.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAtimesep}{.}
+% \end{macrocode}
+%\end{macro}
+%
+%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
+% \begin{macrocode}
+\DTMdefkey{sr-Cyrl-BA}{dowdaysep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAdowdaysep}{#1}}
+\DTMdefkey{sr-Cyrl-BA}{daymonthsep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAdaymonthsep}{#1}}
+\DTMdefkey{sr-Cyrl-BA}{monthyearsep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAmonthyearsep}{#1}}
+\DTMdefkey{sr-Cyrl-BA}{datetimesep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAdatetimesep}{#1}}
+\DTMdefkey{sr-Cyrl-BA}{timezonesep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAtimezonesep}{#1}}
+\DTMdefkey{sr-Cyrl-BA}{datesep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAdatesep}{#1}}
+\DTMdefkey{sr-Cyrl-BA}{timesep}%
+ {\renewcommand*{\DTMsr-Cyrl-BAtimesep}{#1}}
+% \end{macrocode}
+%
+%\subsubsection{Switches and settings}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+%\begin{macro}{\DTMsrCyrlBAweekdayname}
+% Define the weekday name, lowercase.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAweekdayname}%
+{\DTMserbiancyrijweekdayname}
+% \end{macrocode}
+%\end{macro}
+
+%\begin{macro}{\DTMsrCyrlBAweekdayname}
+% Define the weekday name, capitalized.
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAWeekdayname}%
+ {\DTMserbiancyrijWeekdayname}
+% \end{macrocode}
+%\end{macro}
+%
+% Provide a way to switch between Ekavian and Ijekavian pronunciation.
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch between Ekavian and Ijekavian pronunciation.
+%}
+%
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl-BA}%
+ {pronunciation}[\@dtm@val\@dtm@nr]{ekavian,ijekavian}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlBAweekdayname}%
+ {\DTMserbiancyrekweekdayname}%
+ \renewcommand*{\DTMsrCyrlBAWeekdayname}%
+ {\DTMserbiancyrekWeekdayname}%
+ \or%
+ \renewcommand*{\DTMsrCyrlBAweekdayname}%
+ {\DTMserbiancyrijweekdayname}%
+ \renewcommand*{\DTMsrCyrlBAWeekdayname}
+ {\DTMserbiancyrijWeekdayname}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a way to switch June, July alternate spellings.
+%}
+% Define a boolean key that can switch between (jun, jul) and (juni, juli)
+% month spellings.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-BA}{monthi}[true]{}
+% \end{macrocode}
+% The default is without the "i" suffix.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-BA}{monthi}{false}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch for adding leading zeroes in day and month ordinals.
+%}
+% Define a boolean key that determines if the day and month ordinals should
+% have leading zeroes.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-BA}{leadingzero}[true]{}
+% \end{macrocode}
+% The default is to omit the leading zero.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-BA}{leadingzero}{false}
+% \end{macrocode}
+%
+%
+%
+%\begin{macro}{\DTMsrCyrlBAdayordinal}
+% Define the day ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlBAdayordinal}[1]{%
+ \DTMifbool{sr-Cyrl-BA}{leadingzero}%
+ {\DTMtwodigits{#1}}%
+ {\number#1}\DTMsrCyrlBAdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAyearordinal}
+% Define the year ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlBAyearordinal}[1]{%
+ \number#1\DTMsrCyrlBAdatesep}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Removed the option to switch between writing systems, since that is
+% accomplished by using different regions or regionless styles ("serbian" and
+% "serbianc" for example).
+%}
+%
+% Define the month names.
+%
+%\begin{macro}{\DTMsrCyrlBAnoimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAnoimonthname}{\DTMserbiancyrnoimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAnoiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAnoiMonthname}{\DTMserbiancyrnoiMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAimonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAimonthname}{\DTMserbiancyrimonthname}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\DTMsrCyrlBAiMonthname}
+% \begin{macrocode}
+\newcommand*{\DTMsrCyrlBAiMonthname}{\DTMserbiancyriMonthname}
+% \end{macrocode}
+%\end{macro}
+%
+% Define a boolean key that determines if the time zone mappings
+% should be used.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-BA}{mapzone}[true]{}
+% \end{macrocode}
+% The default is to use mappings.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-BA}{mapzone}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the day of month should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-BA}{showdayofmonth}[true]{}
+% \end{macrocode}
+% The default is to show the day of month.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-BA}{showdayofmonth}{true}
+% \end{macrocode}
+%
+% Define a boolean key that determines if the year should be
+% displayed.
+% \begin{macrocode}
+\DTMdefboolkey{sr-Cyrl-BA}{showyear}[true]{}
+% \end{macrocode}
+% The default is to show the year.
+% \begin{macrocode}
+\DTMsetbool{sr-Cyrl-BA}{showyear}{true}
+% \end{macrocode}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-BA}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlBAweekdayname{##4}%
+ \DTMsrCyrlBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-BA}{showdayofmonth}
+ {\DTMsrCyrlBAdayordinal{##3}\DTMsrCyrlBAdaymonthsep}%
+ {}%
+ \DTMifbool{sr-Cyrl-BA}{monthi}%
+ {\DTMsrCyrlBAimonthname{##2}}%
+ {\DTMsrCyrlBAnoimonthname{##2}}%
+ \DTMifbool{sr-Cyrl-BA}{showyear}%
+ {%
+ \DTMsrCyrlBAmonthyearsep%
+ \DTMsrCyrlBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlBAWeekdayname{##4}%
+ \DTMsrCyrlBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-BA}{showdayofmonth}
+ {%
+ \DTMsrCyrlBAdayordinal{##3}\DTMsrCyrlBAdaymonthsep%
+ \DTMifbool{sr-Cyrl-BA}{monthi}%
+ {\DTMsrCyrlBAimonthname{##2}}%
+ {\DTMsrCyrlBAnoimonthname{##2}}%
+ }%
+ {%
+ \DTMifbool{sr-Cyrl-BA}{monthi}%
+ {\DTMsrCyrlBAiMonthname{##2}}%
+ {\DTMsrCyrlBAnoiMonthname{##2}}%
+ }%
+ \DTMifbool{sr-Cyrl-BA}{showyear}%
+ {%
+ \DTMsrCyrlBAmonthyearsep%
+ \DTMsrCyrlBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl-BA}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrlBAtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrlBAtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlBAzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl-BA}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrlBAtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlBAdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlBAtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMDisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlBAdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlBAtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+}%
+% \end{macrocode}
+%
+%
+%\begin{macro}{\DTMsrCyrlBAmonthordinal}
+% Define the month ordinal format to be used by this style.
+% \begin{macrocode}
+ \newcommand*{\DTMsrCyrlBAmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl-BA}{leadingzero}{\DTMtwodigits{#1}}{\number#1}.}%
+% \end{macrocode}
+%\end{macro}
+%
+%\changes{2.0}{2019-11-07}{%
+% Added a switch between multiple numeric month ordinal formats used in
+% Serbian.
+%}
+% Define a setting to switch between Arabic, uppercase Roman and lowercase
+% smallcaps Roman month format for the "srCyrlBA-numeric" style.
+% \begin{macrocode}
+\DTMdefchoicekey{sr-Cyrl-BA}{monthord}%
+[\@dtm@val\@dtm@nr]{arabic,roman,romanlsc}{%
+ \ifcase\@dtm@nr\relax
+ \renewcommand*{\DTMsrCyrlBAmonthordinal}[1]{%
+ \DTMifbool{sr-Cyrl-BA}{leadingzero}%
+ {\DTMtwodigits{##1}}{\number##1}\DTMsrCyrlBAdatesep}%
+ \or%
+ \renewcommand*{\DTMsrCyrlBAmonthordinal}[1]{%
+ \DTMtexorpdfstring{\protect\DTMserbianordinalROMAN{##1}}%
+ {serbianordinalROMAN{##1}}}%
+ \or%
+ \renewcommand*{\DTMsrCyrlBAmonthordinal}[1]{%
+ \DTMtexorpdfstring{\textsc{\protect\DTMserbianordinalroman{##1}}}%
+ {serbianordinalROMAN{##1}}}%
+ \fi
+}
+% \end{macrocode}
+%
+%\changes{2.0}{2019-11-07}{%
+% Fixed the (previously entirely wrong) numeric date style.
+%}
+%\changes{2.0}{2019-11-07}{%
+% Added weekday names.
+%}
+% Define numeric style.
+% \begin{macrocode}
+\DTMnewstyle%
+{sr-Cyrl-BA-numeric}% label
+{% date style
+ \renewcommand*\DTMdisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlBAweekdayname{##4}%
+ \DTMsrCyrlBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-BA}{showdayofmonth}%
+ {\DTMsrCyrlBAdayordinal{##3}\DTMsrCyrlBAdaymonthsep}%
+ {}%
+ \DTMsrCyrlBAmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl-BA}{showyear}%
+ {%
+ \DTMsrCyrlBAmonthyearsep%
+ \DTMsrCyrlBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+ \renewcommand*\DTMDisplaydate[4]{%
+ \ifDTMshowdow%
+ \ifnum##4>-1
+ \DTMsrCyrlBAWeekdayname{##4}%
+ \DTMsrCyrlBAdowdaysep%
+ \fi
+ \fi
+ \DTMifbool{sr-Cyrl-BA}{showdayofmonth}%
+ {\DTMsrCyrlBAdayordinal{##3}\DTMsrCyrlBAdaymonthsep}%
+ {}%
+ \DTMsrCyrlBAmonthordinal{##2}%
+ \DTMifbool{sr-Cyrl-BA}{showyear}%
+ {%
+ \DTMsrCyrlBAmonthyearsep%
+ \DTMsrCyrlBAyearordinal{##1}%
+ }%
+ {}%
+ }%
+}%
+{% time style
+ \renewcommand*\DTMdisplaytime[3]{%
+ \DTMifbool{sr-Cyrl-BA}{leadingzero}{\DTMtwodigits{##1}}{\number##1}%
+ \DTMsrCyrlBAtimesep\DTMtwodigits{##2}%
+ \ifDTMshowseconds\DTMsrCyrlBAtimesep\DTMtwodigits{##3}\fi
+ }%
+}%
+{% zone style
+ \DTMresetzones%
+ \DTMsrCyrlBAzonemaps%
+ \renewcommand*{\DTMdisplayzone}[2]{%
+ \DTMifbool{sr-Cyrl-BA}{mapzone}%
+ {\DTMusezonemapordefault{##1}{##2}}%
+ {%
+ \ifnum##1<0
+ \else+\fi\DTMtwodigits{##1}%
+ \ifDTMshowzoneminutes\DTMsrCyrlBAtimesep\DTMtwodigits{##2}\fi
+ }%
+ }%
+}%
+{% full style
+ \renewcommand*{\DTMdisplay}[9]{%
+ \ifDTMshowdate%
+ \DTMdisplaydate{##1}{##2}{##3}{##4}%
+ \DTMsrCyrlBAdatetimesep%
+ \fi
+ \DTMdisplaytime{##5}{##6}{##7}%
+ \ifDTMshowzone%
+ \DTMsrCyrlBAtimezonesep%
+ \DTMdisplayzone{##8}{##9}%
+ \fi
+ }%
+ \renewcommand*{\DTMDisplay}{\DTMdisplay}%
+}
+% \end{macrocode}
+%
+%\begin{macro}{\DTMsr-Cyrl-BAzonemaps}
+% The time zone mappings are set through this command, which can be
+% redefined if extra mappings are required or mappings need to be
+% removed.
+% \begin{macrocode}
+\newcommand*{\DTMsr-Cyrl-BAzonemaps}{%
+ \DTMdefzonemap{01}{00}{CET}%
+ \DTMdefzonemap{02}{00}{CEST}%
+}
+% \end{macrocode}
+%\end{macro}
+
+% Switch style according to the \opt{useregional} setting.
+% \begin{macrocode}
+\DTMifcaseregional%
+{}% do nothing
+{\DTMsetstyle{sr-Cyrl-BA}}%
+{\DTMsetstyle{sr-Cyrl-BA-numeric}}%
+% \end{macrocode}
+%
+% Redefine \cs{dateserbianc} (or \cs{date}\meta{dialect}) to prevent
+% \sty{babel} from resetting \cs{today}. (For this to work,
+% \sty{babel} must already have been loaded if it's required.)
+%\changes{1.1}{2019-09-14}{removed spurious space}
+%\changes{2.0}{2019-11-07}{%
+% Added regions.
+%}
+% \begin{macrocode}
+\ifcsundef{date\CurrentTrackedDialect}
+{%
+ \ifundef\dateserbianc%
+ {% do nothing
+ }%
+ {%
+ \def\dateserbianc{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl-BA}}%
+ {\DTMsetstyle{sr-Cyrl-BA-numeric}}%
+ }%
+ }%
+}%
+{%
+ \csdef{date\CurrentTrackedDialect}{%
+ \DTMifcaseregional%
+ {}% do nothing
+ {\DTMsetstyle{sr-Cyrl-BA}}%
+ {\DTMsetstyle{sr-Cyrl-BA-numeric}}%
+ }%
+}%
+% \end{macrocode}
+%
+%\iffalse
+% \begin{macrocode}
+%</datetime2-sr-Cyrl-BA.ldf>
+% \end{macrocode}
+%\fi
+%
+%
+%
+%\restoregeometry{}
%\Finale
-\endinput
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.ins b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.ins
index eb0e2e0ff7..7825ac0082 100644
--- a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.ins
+++ b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.ins
@@ -3,6 +3,7 @@
\preamble
datetime2-serbian.dtx
+ Copyright 2019 Andrej Radović
Copyright 2019 Nicola Talbot
This work may be distributed and/or modified under the
@@ -13,12 +14,26 @@
and version 1.3 or later is part of all distributions of LaTeX
version 2005/12/01 or later.
- This work has the LPPL maintenance status `inactive'.
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Andrej Radović.
This work consists of the files datetime2-serbian.dtx and
- datetime2-serbian.ins and the derived files
- datetime2-serbian-utf8.ldf, datetime2-serbian-ascii.ldf and
- datetime2-serbian.ldf.
+ datetime2-serbian.ins and the derived files are as follows:
+ datetime2-serbian-base.ldf
+ datetime2-serbian-base-utf8.ldf
+ datetime2-serbian-base-ascii.ldf
+ datetime2-serbian.ldf
+ datetime2-sr-Latn.ldf
+ datetime2-sr-Latn-RS.ldf
+ datetime2-sr-Latn-ME.ldf
+ datetime2-sr-Latn-BA.ldf
+ datetime2-serbianc.ldf
+ datetime2-sr-Cyrl.ldf
+ datetime2-sr-Cyrl-RS.ldf
+ datetime2-sr-Cyrl-ME.ldf
+ datetime2-sr-Cyrl-BA.ldf
+
\endpreamble
@@ -27,35 +42,145 @@
\generate
{%
\file
- {datetime2-serbian-utf8.ldf}%
+ {datetime2-serbian.ldf}%
{%
\usepreamble\defaultpreamble
\usepostamble\defaultpostamble
- \from{datetime2-serbian.dtx}{datetime2-serbian-utf8.ldf,package}%
+ \from{datetime2-serbian.dtx}{datetime2-serbian.ldf,package}%
}%
}
\generate
{%
\file
- {datetime2-serbian-ascii.ldf}%
+ {datetime2-sr-Latn.ldf}%
{%
\usepreamble\defaultpreamble
\usepostamble\defaultpostamble
- \from{datetime2-serbian.dtx}{datetime2-serbian-ascii.ldf,package}%
+ \from{datetime2-serbian.dtx}{datetime2-sr-Latn.ldf,package}%
}%
}
\generate
{%
\file
- {datetime2-serbian.ldf}%
+ {datetime2-sr-Latn-RS.ldf}%
{%
\usepreamble\defaultpreamble
\usepostamble\defaultpostamble
- \from{datetime2-serbian.dtx}{datetime2-serbian.ldf,package}%
+ \from{datetime2-serbian.dtx}{datetime2-sr-Latn-RS.ldf,package}%
}%
}
-\endbatchfile
+\generate
+{%
+ \file
+ {datetime2-sr-Latn-ME.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-sr-Latn-ME.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-sr-Latn-BA.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-sr-Latn-BA.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-serbianc.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-serbianc.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-sr-Cyrl.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-sr-Cyrl.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-sr-Cyrl-RS.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-sr-Cyrl-RS.ldf,package}%
+ }%
+}
+\generate
+{%
+ \file
+ {datetime2-sr-Cyrl-ME.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-sr-Cyrl-ME.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-sr-Cyrl-BA.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-sr-Cyrl-BA.ldf,package}%
+ }%
+}
+
+
+\generate
+{%
+ \file
+ {datetime2-serbian-base.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-serbian-base.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-serbian-base-utf8.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-serbian-base-utf8.ldf,package}%
+ }%
+}
+
+\generate
+{%
+ \file
+ {datetime2-serbian-base-ascii.ldf}%
+ {%
+ \usepreamble\defaultpreamble
+ \usepostamble\defaultpostamble
+ \from{datetime2-serbian.dtx}{datetime2-serbian-base-ascii.ldf,package}%
+ }%
+}
+
+\endbatchfile
diff --git a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.pdf b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.pdf
index 090f1a9353..3f1b8c2768 100644
--- a/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.pdf
+++ b/macros/latex/contrib/datetime2-contrib/datetime2-serbian/datetime2-serbian.pdf
Binary files differ