<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%\iffalse
%&lt;*package&gt;
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&amp;
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \&lt;
%%   Equals        \=     Greater than  \&gt;     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%&lt;/package&gt;
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2019 Nicola Talbot, all rights reserved.
% Copyright (C) 2019 Andrej Radović, all rights reserved.
% \fi
% \iffalse
%&lt;*driver&gt;
\documentclass[11pt]{ltxdoc}
\CheckSum{3809}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fontspec}

\usepackage{hologo}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage[dvipsnames]{xcolor}
\usepackage[english]{babel}
\usepackage[colorlinks,
%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{flushenumerate}{enumerate}{2}
\setlist[flushenumerate]{nosep,after=\vspace{\baselineskip}}
\setlist[flushenumerate, 1]{leftmargin=0pt, label=\arabic*}
\setlist[flushenumerate, 2]{leftmargin=*}
\newlist{optdescription}{description}{1}
\setlist[optdescription]{%
  align=right,
  labelindent=!,
  leftmargin=0pt,
  font=\small\normalfont\ttfamily}

\usepackage{acronym}
\renewcommand{\acsfont}[1]{{\scshape{#1}}}
\renewcommand*{\aclabelfont}[1]{{\acsfont{#1}}}

\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*{\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}

\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, marginpar=2cm]{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}
\end{document}
%&lt;/driver&gt;
%\fi
%
%\MakeShortVerb{"}
%
%\changes{2.0.0}{2019-11-07}{%
%   Restyled the documentation.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%
%\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} \\
%  {\textsf{(inactive)}}
%}
%\date{{\sffamily\scshape 2019-11-22 (v2.1.0)}}
%\maketitle
%
% \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 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}
%
%\changes{2.0.0}{2019-11-07}{%
%   Added a proper introduction.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.1.0}{2019-11-22}{Fixed version string.}
%
% \noindent
% As of version 2.0.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.
%
% \changes{2.1.0}{2019-11-22}{Mentioned starred \cs{DTMdate}}
% Thanks to the author of \sty{datetime2}, Dr Nicola L. C. Talbot,
% \sty{datetime2-serbian} now (since \sty{datetime2} v1.5.5 and
% \sty{datetime2-serbian} v1.1.0)  supports a peculiar aspect of Serbian date
% formatting: omission of year ordinal's trailing dot when the date is followed
% by a punctuation mark such as a comma.
% This is facilitated by the starred versions of \cs{DTMdate} and
% \cs{DTMDate} --- \cs{DTMdate*} and \cs{DTMDate*}.
% This is explained better in \autoref{sub:pecs}.
%
% \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.
%\changes{2.1.0}{2019-11-22}{fixed \acsu{utf-8} shortcut.}
% Along the way, I also wrote a small utility for generating \acsu{ascii} --
% \acsu{licr} strings from \acsu{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.
%
% All of Serbian Cyrillic localization strings are also automatically generated
% from Serbian Latin strings using my
% \href{https://gitlab.com/andrejr/srtools}{srtools} Python package, available
% on \href{https://pypi.org/project/srtools/}{PyPI} and
% \href{https://aur.archlinux.org/packages/python-srtools/}{AUR}.
% }
%
% \tableofcontents
%
% \section{The Documentation}
%
%\changes{2.0.0}{2019-11-07}{%
%   Added installation guide.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
% \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}
%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}
% 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
% \cs{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.0}{2019-11-07}{%
%   Added regions and documented their use.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \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.0}{2019-11-07}{%
%   Added documentation for new settings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
% 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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% 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.
%
% \changes{2.0.1}{2019-11-11}{Fixed paragraph indentation.}
% \bigskip
% \noindent
% ponedeljak, 4. novembar 2019. \hfill \emph{Ekavian pronunciation} \\
% ponedjeljak, 4. novembar 2019. \hfill \emph{Ijekavian pronunciation}
%
%
% \subsubsectionopt{monthi}
%\changes{2.0.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% 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}.
%
% \changes{2.0.1}{2019-11-11}{Fixed paragraph indentation.}
% \bigskip
% \noindent
% 15. juni 1389. \hfill "monthi=true" \\
% 15. jun 1389. \hfill "monthi=false"
%
% \subsubsectionopt{leadingzero}\label{sub:leadingzero}
%\changes{2.0.0}{2019-11-07}{%
%   Added a switch for toggling leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% This is a boolean key.
% If "false" (the default), there is no leading zero for hours, days or months.
% If "true", there is.
%
% \changes{2.0.1}{2019-11-11}{Fixed paragraph indentation.}
% \bigskip
% \noindent
% уторак, 2. 4. 2019. 8.03 CET \hfill "leadingzero=false" \\
% уторак, 02. 04. 2019. 08.03 CET \hfill "leadingzero=true"
%
% \subsubsectionopt{monthord}
%\changes{2.0.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Changed colon \rightarrow{} period.}
% This key defines the way the month ordinal is written in Serbian "*-numeric"
% formats.
% This key defines the way the month ordinal is written in Serbian "*-numeric"
% 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 period.
%
% The "roman" setting results in an uppercase Roman numeral without a period
% suffix.
% The "romansc" setting results in a lowercase small caps Roman numeral without
% a period suffix (this looks better than regular uppercase when usign old
% style figures).
%
% \changes{2.0.1}{2019-11-11}{Fixed paragraph indentation.}
% \changes{2.0.1}{2019-11-11}{Fixed wrong example.}
% \bigskip
% \noindent
% уторак, 2. 4. 2019. 8.03 CET \hfill "monthord=arabic" \\
% \liningnums{уторак, 2. IV 2019. 8.03 CET} \hfill "monthord=roman" with
% \cs{liningnums} \\
% \oldstylenums{уторак, 2. \textsc{iv} 2019. 8.03 CET} \hfill
% "monthord=romanlsc" with \cs{oldstylenums}
%
% \subsection{Peculiarities of Serbian date formatting}\label{sub:pecs}
% \changes{2.1.0}{2019-11-22}{Mentioned starred \cs{DTMdate}}
% \marginpar{%
% All numbers in a date are considered to be ordinals in Serbian.
% Hence, the dots in Serbian dates aren't seen as mere separators, but
% ordinal designations.
% }
% Date rules in Serbian language feature a dot after the year (the ordinal dot)
% in \emph{almost} every case.
% When the date is followed by a punctuation mark, the trailing dot is omitted.
% When a sentence ends with a date, the date's trailing dot is also omitted, so
% the sentence ends in a single period (or question or exclamation mark).
%
% \smallskip
% \noindent
% Here are some examples:
%
% \begin{flushenumerate}
%    \item Za 21. 2. 2019. i 3. 10. 2019. smo zakazali okupljanja.
%    \item Prva verzija je izašla 17. 9. 1991, nakon nepune godine razvoja.
%    \item Da li svima odgovara 21. februar 2019?
%    \item Konferencija je održana 6. 8. 2013.
% \end{flushenumerate}
%
% To facilitate this, \sty{datetime2} and \sty{datetime2-serbian} provide
% starred alternatives for \cs{DTMdate} and \cs{DTMDate}, which omit the
% trailing dot.
% Such alternatives for \cs{DTMdisplaydate}, \cs{today}, etc.\ are not
% possible, since they would prevent said macros from working in expandable
% contexts (such as \acsu{pdf} bookmarks).
% It is the primary design feature of these commands to work in expandable
% contexts.
% Still, \cs{DTMdate*} and \cs{DTMDate} should cover most of our needs.
%
% Now, here's how we'd write example from above:
%\begin{verbatim}
% Za \DTMdate{2019-02-21} i \DTMdate{2019-10-03} smo zakazali okupljanja.
% Prva verzija je izašla \DTMdate*{1991-09-17}, nakon nepune godine razvoja.
% Da li svima odgovara \DTMdate*{2019-02-21}?
% Konferencija je održana \DTMdate*{2013-08-06}.
%\end{verbatim}
%
% \subsection{Other features and settings}
%
% \subsubsection{Showing the weekday}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% 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 \cs{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 \cs{DTMlangsetup} command see the documentation
% of the main \sty{datetime2} package.
%
%
% \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
%  \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}.}}
%    \acro{pdf}{Portable Document Format}
%  \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}
%&lt;*datetime2-serbian-base.ldf&gt;
%    \end{macrocode}
%\fi
%\subsection{Base package localization strings}
%
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraphs.}
% 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}
%\changes{2.0.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.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \begin{macrocode}
\ProvidesDateTimeModule{serbian-base}[2019/11/22 v2.1.0]
%    \end{macrocode}
%
%
%\begin{macro}{\DTMserbianordinalROMAN}
% Uppercase Roman numerals.
%    \begin{macrocode}
\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}{\DTMserbianordinalroman}
% Lowercase Roman numerals.
%    \begin{macrocode}
\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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%&lt;/datetime2-serbian-base.ldf&gt;
%    \end{macrocode}
%\fi
%
%
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-serbian-base-utf8.ldf&gt;
%    \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.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.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{serbian-base-utf8}[2019/11/22 v2.1.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%
    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}{\DTMserbianlatnoiMonthname}
% Serbian month names, Latin alphabet, no \sty{i} suffix for June and July,
% capitalized.
%    \begin{macrocode}
\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}{\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*{\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}
%
%\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}
%&lt;/datetime2-serbian-base-utf8.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-serbian-base-ascii.ldf&gt;
%    \end{macrocode}
%\fi
%\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}
%\changes{2.0.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.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \begin{macrocode}
\ProvidesDateTimeModule{serbian-base-ascii}[2019/11/22 v2.1.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%
    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}{\DTMserbianlatnoiMonthname}
% Serbian month names, Latin alphabet, no \sty{i} suffix for June and July,
% capitalized.
%    \begin{macrocode}
\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}{\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*{\DTMserbianlatekweekdayname}[1]{%
  \ifcase#1
    ponedeljak%
  \or%
    utorak%
  \or%
    sreda%
  \or%
    \v cetvrtak%
  \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%
    \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}{\DTMserbiancyrnoiMonthname}
% Serbian month names, Cyrillic alphabet, no \sty{i} suffix for June and July,
% 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}{\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}
%&lt;/datetime2-serbian-base-ascii.ldf&gt;
%    \end{macrocode}
%\fi
%
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-serbian.ldf&gt;
%    \end{macrocode}
%\fi
%
%\subsection{Serbian \sty{serbian} Code
%   (\texttt{datetime2-serbian.ldf})}
%\changes{1.0}{2015-03-24}{Initial release}
%\changes{2.0.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{serbian}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load base Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbian-base}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{serbian} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% 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}
\newcommand*{\DTMserbiandowdaysep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%
%\begin{macro}{\DTMserbiandaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMserbiandaymonthsep}{%
  \DTMtexorpdfstring{\protect~}{\space}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMserbianmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMserbianmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMserbiandatetimesep}
% 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).
%    \begin{macrocode}
\newcommand*{\DTMserbiantimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMserbiandatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMserbiandatesep}{.}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMserbiantimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMserbiantimesep}{.}
%    \end{macrocode}
%\end{macro}
%
%Provide keys that can be used in \cs{DTMlangsetup} to set these separators.
%    \begin{macrocode}
\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}
%
%\subsubsection{Switches and settings}
%
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\begin{macro}{\DTMserbianweekdayname}
% Define the weekday name, lowercase.
%    \begin{macrocode}
\newcommand*{\DTMserbianweekdayname}%
{\DTMserbianlatekweekdayname}
%    \end{macrocode}
%\end{macro}

%\begin{macro}{\DTMserbianweekdayname}
% Define the weekday name, capitalized.
%    \begin{macrocode}
\newcommand*{\DTMserbianWeekdayname}%
    {\DTMserbianlatekWeekdayname}
%    \end{macrocode}
%\end{macro}
%
% Provide a way to switch between Ekavian and Ijekavian pronunciation.
%\changes{2.0.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \begin{macrocode}
\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}
%\changes{2.0.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{serbian}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{serbian}{mapzone}{true}
%    \end{macrocode}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{serbian}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{serbian}{showdayofmonth}{true}
%    \end{macrocode}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{serbian}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{serbian}{showyear}{true}
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{serbian}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMserbianweekdayname{##4}%
   	    \DTMserbiandowdaysep%
   	  \fi
   	\fi
    \DTMifbool{serbian}{showdayofmonth}
      {\DTMserbiandayordinal{##3}\DTMserbiandaymonthsep}%
      {}%
    \DTMifbool{serbian}{monthi}%
      {\DTMserbianimonthname{##2}}%
      {\DTMserbiannoimonthname{##2}}%
    \DTMifbool{serbian}{showyear}%
    {%
      \DTMserbianmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate%
      \DTMDisplaydate{##1}{##2}{##3}{##4}%
      \DTMserbiandatetimesep%
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{serbian-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMserbianweekdayname{##4}%
   	    \DTMserbiandowdaysep%
   	  \fi
   	\fi
    \DTMifbool{serbian}{showdayofmonth}%
    {\DTMserbiandayordinal{##3}\DTMserbiandaymonthsep}%
    {}%
    \DTMserbianmonthordinal{##2}%
    \DTMifbool{serbian}{showyear}%
    {%
      \DTMserbianmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMserbianWeekdayname{##4}%
   	    \DTMserbiandowdaysep%
   	  \fi
   	\fi
    \DTMifbool{serbian}{showdayofmonth}%
    {\DTMserbiandayordinal{##3}\DTMserbiandaymonthsep}%
    {}%
    \DTMserbianmonthordinal{##2}%
    \DTMifbool{serbian}{showyear}%
    {%
      \DTMserbianmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}{\DTMdisplay}%
}
%    \end{macrocode}
%
%\begin{macro}{\DTMserbianzonemaps}
% The time zone mappings are set through this command, which can be
% redefined if extra mappings are required or mappings need to be
% removed.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMserbianzonemaps}{%
  \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{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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\dateserbian%
  {% do nothing
  }%
  {%
    \def\dateserbian{%
      \DTMifcaseregional%
      {}% do nothing
      {\DTMsetstyle{serbian}}%
      {\DTMsetstyle{serbian-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional%
    {}% do nothing
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{serbian}}%
      {\DTMsetstyle{serbian-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-serbian.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Latn.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Latn}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbian}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Latn} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Latn" and
% "sr-Latn-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnweekdayname{##4}%
   	    \DTMsrLatndowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn}{showdayofmonth}%
    {\DTMsrLatndayordinal{##3}\DTMsrLatndaymonthsep}%
    {}%
    \DTMsrLatnmonthordinal{##2}%
    \DTMifbool{sr-Latn}{showyear}%
    {%
      \DTMsrLatnmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnWeekdayname{##4}%
   	    \DTMsrLatndowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn}{showdayofmonth}%
    {\DTMsrLatndayordinal{##3}\DTMsrLatndaymonthsep}%
    {}%
    \DTMsrLatnmonthordinal{##2}%
    \DTMifbool{sr-Latn}{showyear}%
    {%
      \DTMsrLatnmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrLatnzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Latn}}%
      {\DTMsetstyle{sr-Latn-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Latn.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Latn-RS.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Latn-RS}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbian}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Latn-RS} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Latn-RS" and
% "sr-Latn-RS-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-RS}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-RS-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnRSweekdayname{##4}%
   	    \DTMsrLatnRSdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn-RS}{showdayofmonth}%
    {\DTMsrLatnRSdayordinal{##3}\DTMsrLatnRSdaymonthsep}%
    {}%
    \DTMsrLatnRSmonthordinal{##2}%
    \DTMifbool{sr-Latn-RS}{showyear}%
    {%
      \DTMsrLatnRSmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnRSWeekdayname{##4}%
   	    \DTMsrLatnRSdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn-RS}{showdayofmonth}%
    {\DTMsrLatnRSdayordinal{##3}\DTMsrLatnRSdaymonthsep}%
    {}%
    \DTMsrLatnRSmonthordinal{##2}%
    \DTMifbool{sr-Latn-RS}{showyear}%
    {%
      \DTMsrLatnRSmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrLatnRSzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Latn-RS}}%
      {\DTMsetstyle{sr-Latn-RS-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Latn-RS.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Latn-ME.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Latn-ME}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbian}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Latn-ME} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Latn-ME" and
% "sr-Latn-ME-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-ME}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-ME-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnMEweekdayname{##4}%
   	    \DTMsrLatnMEdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn-ME}{showdayofmonth}%
    {\DTMsrLatnMEdayordinal{##3}\DTMsrLatnMEdaymonthsep}%
    {}%
    \DTMsrLatnMEmonthordinal{##2}%
    \DTMifbool{sr-Latn-ME}{showyear}%
    {%
      \DTMsrLatnMEmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnMEWeekdayname{##4}%
   	    \DTMsrLatnMEdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn-ME}{showdayofmonth}%
    {\DTMsrLatnMEdayordinal{##3}\DTMsrLatnMEdaymonthsep}%
    {}%
    \DTMsrLatnMEmonthordinal{##2}%
    \DTMifbool{sr-Latn-ME}{showyear}%
    {%
      \DTMsrLatnMEmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrLatnMEzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Latn-ME}}%
      {\DTMsetstyle{sr-Latn-ME-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Latn-ME.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Latn-BA.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Latn-BA}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbian}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Latn-BA} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Latn-BA" and
% "sr-Latn-BA-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-BA}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Latn-BA-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnBAweekdayname{##4}%
   	    \DTMsrLatnBAdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn-BA}{showdayofmonth}%
    {\DTMsrLatnBAdayordinal{##3}\DTMsrLatnBAdaymonthsep}%
    {}%
    \DTMsrLatnBAmonthordinal{##2}%
    \DTMifbool{sr-Latn-BA}{showyear}%
    {%
      \DTMsrLatnBAmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrLatnBAWeekdayname{##4}%
   	    \DTMsrLatnBAdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Latn-BA}{showdayofmonth}%
    {\DTMsrLatnBAdayordinal{##3}\DTMsrLatnBAdaymonthsep}%
    {}%
    \DTMsrLatnBAmonthordinal{##2}%
    \DTMifbool{sr-Latn-BA}{showyear}%
    {%
      \DTMsrLatnBAmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrLatnBAzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Latn-BA}}%
      {\DTMsetstyle{sr-Latn-BA-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Latn-BA.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-serbianc.ldf&gt;
%    \end{macrocode}
%\fi
%
%\subsection{Serbian \sty{serbianc} Code
%   (\texttt{datetime2-serbianc.ldf})}
%\changes{1.0}{2015-03-24}{Initial release}
%\changes{2.0.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{serbianc}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load base Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbian-base}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{serbianc} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{serbianc}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMserbiancweekdayname{##4}%
   	    \DTMserbiancdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{serbianc}{showdayofmonth}
      {\DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep}%
      {}%
    \DTMifbool{serbianc}{monthi}%
      {\DTMserbiancimonthname{##2}}%
      {\DTMserbiancnoimonthname{##2}}%
    \DTMifbool{serbianc}{showyear}%
    {%
      \DTMserbiancmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{serbianc-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMserbiancweekdayname{##4}%
   	    \DTMserbiancdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{serbianc}{showdayofmonth}%
    {\DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep}%
    {}%
    \DTMserbiancmonthordinal{##2}%
    \DTMifbool{serbianc}{showyear}%
    {%
      \DTMserbiancmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMserbiancWeekdayname{##4}%
   	    \DTMserbiancdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{serbianc}{showdayofmonth}%
    {\DTMserbiancdayordinal{##3}\DTMserbiancdaymonthsep}%
    {}%
    \DTMserbiancmonthordinal{##2}%
    \DTMifbool{serbianc}{showyear}%
    {%
      \DTMserbiancmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{serbianc}}%
      {\DTMsetstyle{serbianc-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-serbianc.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Cyrl.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Cyrl}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbianc}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Cyrl} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Cyrl" and
% "sr-Cyrl-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlweekdayname{##4}%
   	    \DTMsrCyrldowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl}{showdayofmonth}%
    {\DTMsrCyrldayordinal{##3}\DTMsrCyrldaymonthsep}%
    {}%
    \DTMsrCyrlmonthordinal{##2}%
    \DTMifbool{sr-Cyrl}{showyear}%
    {%
      \DTMsrCyrlmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlWeekdayname{##4}%
   	    \DTMsrCyrldowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl}{showdayofmonth}%
    {\DTMsrCyrldayordinal{##3}\DTMsrCyrldaymonthsep}%
    {}%
    \DTMsrCyrlmonthordinal{##2}%
    \DTMifbool{sr-Cyrl}{showyear}%
    {%
      \DTMsrCyrlmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrCyrlzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Cyrl}}%
      {\DTMsetstyle{sr-Cyrl-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Cyrl.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Cyrl-RS.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Cyrl-RS}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbianc}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Cyrl-RS} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Cyrl-RS" and
% "sr-Cyrl-RS-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-RS}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-RS-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlRSweekdayname{##4}%
   	    \DTMsrCyrlRSdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl-RS}{showdayofmonth}%
    {\DTMsrCyrlRSdayordinal{##3}\DTMsrCyrlRSdaymonthsep}%
    {}%
    \DTMsrCyrlRSmonthordinal{##2}%
    \DTMifbool{sr-Cyrl-RS}{showyear}%
    {%
      \DTMsrCyrlRSmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlRSWeekdayname{##4}%
   	    \DTMsrCyrlRSdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl-RS}{showdayofmonth}%
    {\DTMsrCyrlRSdayordinal{##3}\DTMsrCyrlRSdaymonthsep}%
    {}%
    \DTMsrCyrlRSmonthordinal{##2}%
    \DTMifbool{sr-Cyrl-RS}{showyear}%
    {%
      \DTMsrCyrlRSmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrCyrlRSzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Cyrl-RS}}%
      {\DTMsetstyle{sr-Cyrl-RS-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Cyrl-RS.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Cyrl-ME.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Cyrl-ME}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbianc}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Cyrl-ME} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Cyrl-ME" and
% "sr-Cyrl-ME-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-ME}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-ME-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlMEweekdayname{##4}%
   	    \DTMsrCyrlMEdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl-ME}{showdayofmonth}%
    {\DTMsrCyrlMEdayordinal{##3}\DTMsrCyrlMEdaymonthsep}%
    {}%
    \DTMsrCyrlMEmonthordinal{##2}%
    \DTMifbool{sr-Cyrl-ME}{showyear}%
    {%
      \DTMsrCyrlMEmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlMEWeekdayname{##4}%
   	    \DTMsrCyrlMEdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl-ME}{showdayofmonth}%
    {\DTMsrCyrlMEdayordinal{##3}\DTMsrCyrlMEdaymonthsep}%
    {}%
    \DTMsrCyrlMEmonthordinal{##2}%
    \DTMifbool{sr-Cyrl-ME}{showyear}%
    {%
      \DTMsrCyrlMEmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrCyrlMEzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Cyrl-ME}}%
      {\DTMsetstyle{sr-Cyrl-ME-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Cyrl-ME.ldf&gt;
%    \end{macrocode}
%\fi
%
%\iffalse
%    \begin{macrocode}
%&lt;*datetime2-sr-Cyrl-BA.ldf&gt;
%    \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.0}{2019-11-07}{%
%   Added regions, all settings made available to regions so all changes can be
%   region-specific.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\ProvidesDateTimeModule{sr-Cyrl-BA}[2019/11/22 v2.1.0]
%    \end{macrocode}
%\changes{2.0.0}{2019-11-07}{%
%   All localization strings loaded from base module.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% Load appropriate regionless Serbian module.
%    \begin{macrocode}
\RequireDateTimeModule{serbianc}
%    \end{macrocode}
%
%
%
%\subsubsection{Defining the \sty{sr-Cyrl-BA} style}
%
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Fixed region name error.}
% Allow the user a way of configuring the "sr-Cyrl-BA" and
% "sr-Cyrl-BA-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.0}{2019-11-07}{%
%   Added weekday names.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\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.0}{2019-11-07}{%
%   Added a way to switch between Ekavian and Ijekavian pronunciation.
%}
    %\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%
%    \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.0}{2019-11-07}{%
%   Added a way to switch June, July alternate spellings.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added a switch for adding leading zeroes in day and month ordinals.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%
%\changes{2.1.0}{2019-11-22}{%
%   Removed year ordinal macro since year ordinals are handled differently now.
%}
%\changes{2.0.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).
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
%\changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-BA}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-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%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.0}{2019-11-07}{%
%   Added a switch between multiple numeric month ordinal formats used in
%   Serbian.
%}
% \changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% 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.0}{2019-11-07}{%
%   Fixed the (previously entirely wrong) numeric date style.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%\changes{2.0.0}{2019-11-07}{%
%   Added weekday names.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
% \changes{2.0.1}{2019-11-11}{Removed extraneous paragraph indentation.}
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle%
{sr-Cyrl-BA-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlBAweekdayname{##4}%
   	    \DTMsrCyrlBAdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl-BA}{showdayofmonth}%
    {\DTMsrCyrlBAdayordinal{##3}\DTMsrCyrlBAdaymonthsep}%
    {}%
    \DTMsrCyrlBAmonthordinal{##2}%
    \DTMifbool{sr-Cyrl-BA}{showyear}%
    {%
      \DTMsrCyrlBAmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
   	\ifDTMshowdow%
   	  \ifnum##4&gt;-1
   	    \DTMsrCyrlBAWeekdayname{##4}%
   	    \DTMsrCyrlBAdowdaysep%
   	  \fi
   	\fi
    \DTMifbool{sr-Cyrl-BA}{showdayofmonth}%
    {\DTMsrCyrlBAdayordinal{##3}\DTMsrCyrlBAdaymonthsep}%
    {}%
    \DTMsrCyrlBAmonthordinal{##2}%
    \DTMifbool{sr-Cyrl-BA}{showyear}%
    {%
      \DTMsrCyrlBAmonthyearsep%
%    \end{macrocode}
%\changes{2.1.0}{2019-11-22}{%
%   Adapted the code to omit the final dot on starred version of \cs{DTMdate}
%   and \cs{DTMDate}. Thanks Nicola!
%}
%    \begin{macrocode}
      ##1\DTMfinaldot{}%
    }%
    {}%
  }%
}%
{% 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&lt;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.
%\changes{2.0.1}{2019-11-11}{Replaced wrong parameter for zonemapping.}
%    \begin{macrocode}
\newcommand*{\DTMsrCyrlBAzonemaps}{%
  \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.0}{2019-11-07}{%
%   Added regions.
%}
%\changes{2.0.1}{2019-11-11}{Adopted semantic versioning.}
%    \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
%    \end{macrocode}
%\changes{2.0.1}{2019-11-11}{Fixed non-regional variant for regional code.}
%\changes{2.1.0}{2019-11-22}{Reverted wrong regional variant changes.}
%    \begin{macrocode}
      {\DTMsetstyle{sr-Cyrl-BA}}%
      {\DTMsetstyle{sr-Cyrl-BA-numeric}}%
  }%
}%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%&lt;/datetime2-sr-Cyrl-BA.ldf&gt;
%    \end{macrocode}
%\fi
%
%
%
%\restoregeometry{}
%\Finale
\endinput</pre></body></html>