% \iffalse meta-comment
% !TeX program = xelatex
%<*internal>
\iffalse
%</internal>
%<*readme>
----------------------------------------------------------------

Ukrainian Language Module for datetime2 Package

Author: Nicola L. C. Talbot (inactive)
Current maintainer: Sergiy M. Ponomarenko <sergiy.ponomarenko@gmail.com>.

Licence: LPPL

Required Packages: tracklang


1. INSTALLATION

xelatex datetime2-ukrainian.ins

Move all *.ldf files to
TEXMF/tex/latex/datetime2-ukrainian/

2. USAGE

2.1.1 PDFLATeX, LaTeX

    \documentclass{article}
    \usepackage[ukrainian]{datetime2}
    \begin{document}
        \today
    \end{document}

    \documentclass[ukrainian]{article}
    \usepackage{babel}
    \usepackage[useregional]{datetime2}
    \begin{document}
        \today
    \end{document}

2.1.2 Lua(Xe)LaTeX

    \documentclass{article}
    \usepackage{polyglossia}
    \setmainlanguage{ukrainian}
    \usepackage[ukrainian]{datetime2}
    \begin{document}
       \today
    \end{document}

3. DOCUMENTATION

See datetime2-ukrainian.pdf for more information.

This material is subject to the LaTeX Project Public License.
See http://www.ctan.org/license/lppl1.3 for the details of that license.

----------------------------------------------------------------
%</readme>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input docstrip.tex
\keepsilent
\askforoverwritefalse
\preamble
----------------------------------------------------------------

This material is subject to the LaTeX Project Public License.
See http://www.ctan.org/license/lppl1.3 for the details of that
license.

----------------------------------------------------------------

\endpreamble
\postamble

----------------------------------------------------------------
 datetime2-ukrainian.dtx
 Copyright 2015 Nicola Talbot
           2017 Sergiy M. Ponomarenko

 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3
 of this license of (at your option) any later version.
 The latest version of this license is in
   http://www.latex-project.org/lppl.txt
 and version 1.3 or later is part of all distributions of LaTeX
 version 2005/12/01 or later.

 This work has the LPPL maintenance status `inactive'.

 
 This work consists of the files datetime2-ukrainian.dtx 
                                 datetime2-ukrainian.ins 
                                 datetime2-ukrainian-utf8.ldf, 
                                 datetime2-ukrainian-ascii.ldf
                                 datetime2-ukrainian.ldf.
----------------------------------------------------------------

\endpostamble

\usedir{tex/latex/datetime2-ukrainian}
\askforoverwritefalse

\generate
{%
  \file
  {datetime2-ukrainian-utf8.ldf}%
  {%
   \usepreamble\defaultpreamble
   \usepostamble\defaultpostamble
   \from{datetime2-ukrainian.dtx}{datetime2-ukrainian-utf8.ldf,package}%
  }%
}

\generate
{%
  \file
  {datetime2-ukrainian-ascii.ldf}%
  {%
   \usepreamble\defaultpreamble
   \usepostamble\defaultpostamble
   \from{datetime2-ukrainian.dtx}{datetime2-ukrainian-ascii.ldf,package}%
  }%
}

\generate
{%
  \file
  {datetime2-ukrainian.ldf}%
  {%
   \usepreamble\defaultpreamble
   \usepostamble\defaultpostamble
   \from{datetime2-ukrainian.dtx}{datetime2-ukrainian.ldf,package}%
  }%
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/democls}
\generate{
  \file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\usedir{doc/latex/democls}
\generate{
  \file{README.md}{\from{\jobname.dtx}{readme}}
}
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>

%<*driver>
\documentclass{ltxdoc}
%%
%% This document should be compiled by
%% XeLaTeX or LuaLaTex
%% 
\usepackage[%
    a4paper,%
    footskip=1cm,%
    headsep=0.3cm,% 
    top=2cm, 
    bottom=2cm, 
    left=6cm,
    right=2cm, 
    ]{geometry}

\usepackage{fontspec}
\defaultfontfeatures{Ligatures={TeX}}
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}

\usepackage[dvipsnames,usenames]{xcolor}

\definecolor{thered}  {rgb}{0.65,0.04,0.07}
\definecolor{thegreen}{rgb}{0.06,0.44,0.08}
\definecolor{thegrey} {gray}{0.8}
\definecolor{theshade}{rgb}{1,1,0.97}
\definecolor{theframe}{gray}{0.6}
\definecolor{theblue}{cmyk}{1.00, 0.50, 0.00, 0.40}
% ====================================

% --------------------------------------------------
\IfFileExists{listings.sty}{
    \usepackage{listings}
    \lstset{
        gobble=1,
        columns=flexible,
        keepspaces,
        basicstyle=\MacroFont,
        keywords=[0]{\selectlanguage,\foreignlanguage
         ,\babelhyphen,\babelhyphenation
         ,\lefthyphenmin,\righthyphenmin
         ,\StartBabelCommands,\SetString,\EndBabelCommands,\shorthandoff,\shorthandon
         ,\languageshorthands,\useshorthands,\defineshorthand
         ,\AddBabelHook,\SetStringLoop,\SetCase,\AfterBabelLanguage
         ,\defaultfontfeatures,\setmainfont,\setsansfont,\setmonofont
         ,\Ukrainian,\cyrdash,\cdash
         ,\cyr,\cyrillictext,\textcyrillic,\cyrillicencoding
         ,\addto,\captionsukrainian,\dateukrainian,\noextrasukrainian,\extrasukrainian
         ,\languageattribute
         ,\ch,\sh,\tg,\ctg,\arctg,\arcctg\,\th,\cth,\cosec
         ,\dq
         ,\XeTeXinputencoding
         ,\setmainlanguage
         ,\setotherlanguage
        }
        ,keywordstyle=[0]\color{thered}
        ,keywords=[1]{main,ukrainian,english,german,frenchb
         ,shorthands,extrasenglish
         ,stringprocess,afterextras
         ,soft,empty,nobreak,hard
         ,Renderer,Ligatures
         ,T1,T2A,lutf8,utf8
         ,fontspec,babel,inputenc,fontenc,useregional
         },
        keywordstyle=[1]\color{thegreen},
        comment=[l]\%,
        commentstyle=\color{thegrey}\itshape,
        alsoother={0123456789_},
        frame=single,
        backgroundcolor=\color{theshade},
        rulecolor=\color{theframe},
        framerule=\fboxrule,
    }
    \let\verbatim\relax
    \lstnewenvironment{verbatim}[1][]{\lstset{##1}}{}
    \AtBeginDocument{%
      \DeleteShortVerb{\|}%
      \lstMakeShortInline|%
    }
}{}
\def\PrintDescribeMacro#1{%
    \strut\MacroFont\color{thered}\normalsize\string#1}
\def\Describe#1{%
    \par\penalty-500\vskip3ex\noindent
    \DescribeMacro{#1}\args}
\def\DescribeOther{\vskip-5.8ex\Describe}
\makeatletter
\def\args#1{%
    \def\bbl@tempa{#1}%
    \ifx\bbl@tempa\@empty\else#1\vskip1ex\fi\ignorespaces}
\makeatother
% ====================================
\EnableCrossrefs
%\DisableCrossrefs   % Say \DisableCrossrefs if index is ready
\CodelineIndex       % Index code by line number
\RecordChanges       % Gather update information
%\PageIndex          % Index code by page number
% ====================================
\usepackage{alltt}


\usepackage[colorlinks,
            bookmarks,
            hyperindex=false,
            pdfauthor={Sergiy M. Ponomarenko},
            pdftitle={datetime2.sty Ukrainian Module}]{hyperref}


\renewcommand*{\usage}[1]{\hyperpage{#1}}
\renewcommand*{\main}[1]{\hyperpage{#1}}
\IndexPrologue{\section*{\indexname}\markboth{\indexname}{\indexname}}
\setcounter{IndexColumns}{2}

\newcommand*{\sty}[1]{\textsf{#1}}
\newcommand*{\opt}[1]{\texttt{#1}\index{#1=\texttt{#1}|main}}

\RecordChanges
\PageIndex
\CodelineNumbered

\begin{document}
\DocInput{datetime2-ukrainian.dtx}
\end{document}
%</driver>
% \fi
%
%
% \GetFileInfo{\jobname.dtx}
%
% \def\fileversion{1.2a}
% \def\filedate{2018/04/15}
%
%
%\MakeShortVerb{"}
%
%\title{\bfseries Ukrainian Module for datetime2 Package}
%\author{Nicola L. C. Talbot \and Sergiy M. Ponomarenko}
%\date{2018/04/15 (1.2a)}
%\maketitle
%\tableofcontents
%
%\begin{abstract}
% This is the Ukrainian language module for the \sty{datetime2}
% package. If you want to use the settings in this module you must
% install it in addition to installing \sty{datetime2}. If you use
% \sty{babel} or \sty{polyglossia}, you will need this module to
% prevent them from redefining \cs{today}. The \sty{datetime2}
% \opt{useregional} setting must be set to "text" or "numeric"
% for the language styles to be set.
% Alternatively, you can set the style in the document using
% \cs{DTMsetstyle}, but this may be changed by \cs{dateukrainian}
% depending on the value of the \opt{useregional} setting.
%\end{abstract}
%
%\StopEventually{%
%\clearpage
%\phantomsection
%\addcontentsline{toc}{section}{Change History}%
%\PrintChanges
%\addcontentsline{toc}{section}{\indexname}%
%\PrintIndex}
% \section{Usage}
%
% \subsection{\LaTeX}
%
% When user's document is compiled with \texttt{latex.exe} or \texttt{pdflatex.exe},
% recommended set of packages  includes the \texttt{inputenc} and \texttt{fontenc}
% packages. 
% 
%
% \begin{verbatim}
%    \usepackage[T1,T2A]{fontenc}
%    \usepackage[utf8]{inputenc}
%    \usepackage[english,ukrainian]{babel}
%    \usepackage[useregional]{datetime2}
% \end{verbatim}
%
%
%
% \subsection{Lua(Xe)\LaTeX}
%
% \subsubsection{Usage with \texttt{babel}}
%
% To invoke Unicode mode, one needs to load the \texttt{fontspec} package instead
% of \texttt{inputenc} and \texttt{fontspec} and explicitly indicate which True Type
% or Open Type fonts should be used for romanic, sans-serif and monospaced types.
% The following example shows how to load Computer Modern Unicode (CMU) fonts,
% which is a part of all modern \LaTeX\ distributions with \texttt{babel} package:
% \begin{verbatim}
%     \usepackage{fontspec}
%     \defaultfontfeatures{Renderer=Basic,Ligatures={TeX}}
%         \setmainfont{CMU Serif}
%         \setsansfont{CMU Sans Serif}
%         \setmonofont{CMU Typewriter Text}
%     \usepackage[english,ukrainian]{babel}
%     \usepackage[useregional]{datetime2}
% \end{verbatim}
%
% Here |Renderer=Basic,Ligatures={TeX}| activates ligatures which are existed
% in \LaTeX.
%
% \subsubsection{Usage with \texttt{polyglossia}}
%
% \begin{verbatim}
%     \usepackage{polyglossia}
%         \defaultfontfeatures{Renderer=Basic,Ligatures={TeX}}
%         \setmainlanguage{ukrainian}
%         \setotherlanguage{english}
%         \setmainfont{CMU Serif}
%         \setsansfont{CMU Sans Serif}
%         \setmonofont{CMU Typewriter Text}
%     \usepackage[english,ukrainian]{babel}
%     \usepackage[useregional]{datetime2}
% \end{verbatim}
% 
% If ohe need use month name in nominative form, it sould  be able to switch between 
% the different cases using \cs{DTMlangsetup}. For example:
% \begin{verbatim}
%     % Default is genitive
%     \today
%     \DTMlangsetup[ukrainian]{month=nominative}
%     % Now \today in nominative
%     \today
% \end{verbatim}
%
% For more information see documentation on \href{https://www.ctan.org/pkg/datetime2}{\texttt{datetime2}}.
%\section{Implementetion}
%\iffalse
%    \begin{macrocode}
%<*datetime2-ukrainian-utf8.ldf>
%    \end{macrocode}
%\fi
%\subsection{UTF-8}
% This file contains the settings that use UTF-8 characters. This
% file is loaded if XeLaTeX or LuaLaTeX are used. Please make sure
% your text editor is set to UTF-8 if you want to view this code.
% \changes{1.0}{2015-04-01}{Initial release} 
% Identify module
%    \begin{macrocode}
\ProvidesDateTimeModule{ukrainian-utf8}[2017/06/13 1.2]
%    \end{macrocode}
%\begin{macro}{\DTMukrainianordinal}
%    \begin{macrocode}
\newcommand*{\DTMukrainianordinal}[1]{%
  \number#1
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianyear}
%    \begin{macrocode}
\newcommand*{\DTMukrainianyear}[1]{%
  \number#1
  \DTMtexorpdfstring{\protect~}{\space}р.%
}
%    \end{macrocode}
%\end{macro}
%
%\changes{1.2}{2017/06/13}{Add nominative month names (capitalize and common)}
%
%\begin{macro}{\DTMukrainiannominativemonthname}
%
% ======= Ukrainian month names in nominative =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiannominativemonthname}[1]{%
  \ifcase#1
  \or
  січень%
  \or
  лютий%
  \or
  березень%
  \or
  квітень%
  \or
  травень%
  \or
  червень%
  \or
  липень%
  \or
  серпень%
  \or
  вересень%
  \or
  жовтень%
  \or
  листопад%
  \or
  грудень%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiannominativeMonthname}
%
% ======= Ukrainian Capitalized month names in nominative =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiannominativeMonthname}[1]{%
  \ifcase#1
  \or
  Січень%
  \or
  Лютий%
  \or
  Березень%
  \or
  Квітень%
  \or
  Травень%
  \or
  Червень%
  \or
  Липень%
  \or
  Серпень%
  \or
  Вересень%
  \or
  Жовтень%
  \or
  Листопад%
  \or
  Грудень%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiangenitivemonthname}
%
% ======= Ukrainian month names in genitive =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiangenitivemonthname}[1]{%
  \ifcase#1
  \or
  січня%
  \or
  лютого%
  \or
  березня%
  \or
  квітня%
  \or
  травня%
  \or
  червня%
  \or
  липня%
  \or
  серпня%
  \or
  вересня%
  \or
  жовтня%
  \or
  листопада%
  \or
  грудня%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiangenitiveMonthname}
%
% ======= Ukrainian Capitalized month names in genitive =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiangenitiveMonthname}[1]{%
  \ifcase#1
  \or
  Січня%
  \or
  Лютого%
  \or
  Березня%
  \or
  Квітня%
  \or
  Травня%
  \or
  Червня%
  \or
  Липня%
  \or
  Серпня%
  \or
  Вересня%
  \or
  Жовтня%
  \or
  Листопада%
  \or
  Грудня%
  \fi
}
%    \end{macrocode}
%\end{macro}
% \changes{1.2}{2017/06/13}{Set as default genitive form of month name}
% Now we set \cs{DTMukrainiangenitiveMonthname} and \cs{DTMukrainiangenitivemonthname} as default setting.
%    \begin{macrocode}
\newcommand*{\DTMukrainianmonthname}{\DTMukrainiangenitivemonthname}% default
\newcommand*{\DTMukrainianMonthname}{\DTMukrainiangenitiveMonthname}% default
%    \end{macrocode}
%
%\begin{macro}{\DTMukrainianshortmonthname}%
%
% ======= Abbreviated Ukrainian short month names =======
%
%\changes{v1.1}{2017/06/11}{Add abbreviated month names}
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortmonthname}[1]{%
  \ifcase#1
  \or
  січ.%
  \or
  лют.%
  \or
  бер.%
  \or
  квіт.%
  \or
  трав%
  \or
  черв.%
  \or
  лип.%
  \or
  серп.%
  \or
  вер.%
  \or
  жовт.%
  \or
  листоп.%
  \or
  груд.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianshortMonthname}
%
% ======= Abbreviated Ukrainian Capitalized short month names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortMonthname}[1]{%
  \ifcase#1
  \or
  Січ.%
  \or
  Лют.%
  \or
  Бер.%
  \or
  Квіт.%
  \or
  Трав%
  \or
  Черв.%
  \or
  Лип.%
  \or
  Серп.%
  \or
  Вер.%
  \or
  Жовт.%
  \or
  Листоп.%
  \or
  Груд.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
% \changes{v1.1}{2017/06/11}{Adding Ukrainian week days}
%\begin{macro}{\DTMukrainianweekdayname}
%
% ======= Ukrainian  day of week names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianweekdayname}[1]{%
  \ifcase#1
  понеділок%
  \or
  вівторок%
  \or
  середа%
  \or
  четвер%
  \or
  п'ятниця%
  \or
  субота%
  \or
  неділя%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianWeekdayname}
%
% ======= Ukrainian Capitalized day of week names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianWeekdayname}[1]{%
  \ifcase#1
  Понеділок%
  \or
  Вівторок%
  \or
  Середа%
  \or
  Четвер%
  \or
  П'ятниця%
  \or
  Субота%
  \or
  Неділя%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianshortweekdayname}
%
%
% ======= Abbreviated Ukrainian day of week names =======
%
%\changes{v1.1}{2017/06/11}{Add abbreviated day of week names}
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortweekdayname}[1]{%
  \ifcase#1
  пн.%
  \or
  вт.%
  \or
  ср.%
  \or
  чт%
  \or
  пт.%
  \or
  сб.%
  \or
  нд.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianshortWeekdayname}
%
% ======= Abbreviated Ukrainian Capitalized day of week names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortWeekdayname}[1]{%
  \ifcase#1
  Пн.%
  \or
  Вт.%
  \or
  Ср.%
  \or
  Чт%
  \or
  Пт.%
  \or
  Сб.%
  \or
  Нд.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%
%\iffalse
%    \begin{macrocode}
%</datetime2-ukrainian-utf8.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datetime2-ukrainian-ascii.ldf>
%    \end{macrocode}
%\fi
%\subsection{ASCII}
%This file contains the settings that use \LaTeX\ commands for
%non-ASCII characters. This should be input if neither XeLaTeX nor
%LuaLaTeX are used. Even if the user has loaded \sty{inputenc} with
%"utf8", this file should still be used not the
%\texttt{datetime2-ukrainian-utf8.ldf} file as the non-ASCII
%characters are made active in that situation and would need
%protecting against expansion.
%\changes{1.0}{2015-04-01}{Initial release}
% Identify module
%    \begin{macrocode}
\ProvidesDateTimeModule{ukrainian-ascii}[2017/06/13 1.2]
%    \end{macrocode}
%
%I f abbreviated dates are supported, short month names should be
% likewise provided.
%\begin{macro}{\DTMukrainianordinal}
%    \begin{macrocode}
\newcommand*{\DTMukrainianordinal}[1]{%
  \number#1
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianyear}
%    \begin{macrocode}
\newcommand*{\DTMukrainianyear}[1]{%
  \number#1 
  \DTMtexorpdfstring{\protect~}{\space}\protect\cyrr.%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiannominativemonthname}
%
%
% ======= Ukrainian month names in nominative =======
%
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiannominativemonthname}[1]{%
  \ifcase#1
  \or
   \protect\cyrs\protect\cyrii\protect\cyrch\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrl\protect\cyryu\protect\cyrt\protect\cyri\protect\cyrishrt
  \or
   \protect\cyrb\protect\cyre\protect\cyrr\protect\cyre\protect\cyrz
    \protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrk\protect\cyrv\protect\cyrii\protect\cyrt\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrt\protect\cyrr\protect\cyra\protect\cyrv\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrch\protect\cyre\protect\cyrr\protect\cyrv\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrl\protect\cyri\protect\cyrp\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrs\protect\cyre\protect\cyrr\protect\cyrp\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrv\protect\cyre\protect\cyrr\protect\cyre\protect\cyrs
    \protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrzh\protect\cyro\protect\cyrv\protect\cyrt\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\cyrl\protect\cyri\protect\cyrs\protect\cyrt\protect\cyro
    \protect\cyrp\protect\cyra\protect\cyrd
  \or
   \protect\cyrg\protect\cyrr\protect\cyru\protect\cyrd\protect\protect\cyre\protect\cyrn\protect\cyrsftsn
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiannominativeMonthname}
%
%
% ======= Ukrainian Capitalized month names in nominative =======
%
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiannominativeMonthname}[1]{%
  \ifcase#1
  \or
   \protect\CYRS\protect\cyrii\protect\cyrch\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRL\protect\cyryu\protect\cyrt\protect\cyri\protect\cyrishrt
  \or
   \protect\CYRB\protect\cyre\protect\cyrr\protect\cyre\protect\cyrz
    \protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRK\protect\cyrv\protect\cyrii\protect\cyrt\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRT\protect\cyrr\protect\cyra\protect\cyrv\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRCH\protect\cyre\protect\cyrr\protect\cyrv\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRL\protect\cyri\protect\cyrp\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRS\protect\cyre\protect\cyrr\protect\cyrp\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRV\protect\cyre\protect\cyrr\protect\cyre\protect\cyrs
    \protect\CYRE\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRZH\protect\cyro\protect\cyrv\protect\cyrt\protect\cyre\protect\cyrn\protect\cyrsftsn
  \or
   \protect\CYRL\protect\cyri\protect\cyrs\protect\cyrt\protect\cyro
    \protect\cyrp\protect\cyra\protect\cyrd
  \or
   \protect\CYRG\protect\cyrr\protect\cyru\protect\cyrd\protect\protect\cyre\protect\cyrn\protect\cyrsftsn
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiangenitivemonthname}
%
% ======= Ukrainian month names in genitive =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiangenitivemonthname}[1]{%
  \ifcase#1
  \or
   \protect\cyrs\protect\cyrii\protect\cyrch\protect\cyrn\protect\cyrya
  \or
   \protect\cyrl\protect\cyryu\protect\cyrt\protect\cyro\protect\cyrg
    \protect\cyro
  \or
   \protect\cyrb\protect\cyre\protect\cyrr\protect\cyre\protect\cyrz
    \protect\cyrn\protect\cyrya
  \or
   \protect\cyrk\protect\cyrv\protect\cyrii\protect\cyrt\protect\cyrn
    \protect\cyrya
  \or
   \protect\cyrt\protect\cyrr\protect\cyra\protect\cyrv\protect\cyrn
    \protect\cyrya
  \or
   \protect\cyrch\protect\cyre\protect\cyrr\protect\cyrv\protect\cyrn
    \protect\cyrya
  \or
   \protect\cyrl\protect\cyri\protect\cyrp\protect\cyrn\protect\cyrya
  \or
   \protect\cyrs\protect\cyre\protect\cyrr\protect\cyrp\protect\cyrn
    \protect\cyrya
  \or
   \protect\cyrv\protect\cyre\protect\cyrr\protect\cyre\protect\cyrs
    \protect\cyrn\protect\cyrya
  \or
   \protect\cyrzh\protect\cyro\protect\cyrv\protect\cyrt\protect\cyrn
    \protect\cyrya
  \or
   \protect\cyrl\protect\cyri\protect\cyrs\protect\cyrt\protect\cyro
    \protect\cyrp\protect\cyra\protect\cyrd\protect\cyra
  \or
   \protect\cyrg\protect\cyrr\protect\cyru\protect\cyrd\protect\cyrn
    \protect\cyrya
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiangenitiveMonthname}
%
% ======= Ukrainian Capitalized month names in genitive =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainiangenitiveMonthname}[1]{%
  \ifcase#1
  \or
   \protect\CYRS\protect\cyrii\protect\cyrch\protect\cyrn\protect\cyrya
  \or
   \protect\CYRL\protect\cyryu\protect\cyrt\protect\cyro\protect\cyrg
    \protect\cyro
  \or
   \protect\CYRB\protect\cyre\protect\cyrr\protect\cyre\protect\cyrz
    \protect\cyrn\protect\cyrya
  \or
   \protect\CYRK\protect\cyrv\protect\cyrii\protect\cyrt\protect\cyrn
    \protect\cyrya
  \or
   \protect\CYRT\protect\cyrr\protect\cyra\protect\cyrv\protect\cyrn
    \protect\cyrya
  \or
   \protect\CYRCH\protect\cyre\protect\cyrr\protect\cyrv\protect\cyrn
    \protect\cyrya
  \or
   \protect\CYRL\protect\cyri\protect\cyrp\protect\cyrn\protect\cyrya
  \or
   \protect\CYRS\protect\cyre\protect\cyrr\protect\cyrp\protect\cyrn
    \protect\cyrya
  \or
   \protect\CYRV\protect\cyre\protect\cyrr\protect\cyre\protect\cyrs
    \protect\cyrn\protect\cyrya
  \or
   \protect\CYRZH\protect\cyro\protect\cyrv\protect\cyrt\protect\cyrn
    \protect\cyrya
  \or
   \protect\CYRL\protect\cyri\protect\cyrs\protect\cyrt\protect\cyro
    \protect\cyrp\protect\cyra\protect\cyrd\protect\cyra
  \or
   \protect\CYRG\protect\cyrr\protect\cyru\protect\cyrd\protect\cyrn
    \protect\cyrya
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\changes{1.2}{2017/06/13}{Set as default genitive form of month name}
% Now we set \cs{DTMukrainiangenitiveMonthname} and \cs{DTMukrainiangenitivemonthname} as default setting.
%    \begin{macrocode}
\newcommand*{\DTMukrainianmonthname}{\DTMukrainiangenitivemonthname}% default
\newcommand*{\DTMukrainianMonthname}{\DTMukrainiangenitiveMonthname}% default
%    \end{macrocode}
%
%
%\begin{macro}{\DTMukrainianshortmonthname}
%
% ======= Abbreviated Ukrainian month names =======
%
%\changes{v1.1}{2017/06/11}{Add abbreviated month names}
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortmonthname}[1]{%
  \ifcase#1
  \or
   \protect\cyrs\protect\cyrii\protect\cyrch.
  \or
   \protect\cyrl\protect\cyryu\protect\cyrt.
  \or
   \protect\cyrb\protect\cyre\protect\cyrr.
  \or
   \protect\cyrk\protect\cyrv\protect\cyrii\protect\cyrt.
  \or
   \protect\cyrt\protect\cyrr\protect\cyra\protect\cyrv.
  \or
   \protect\cyrch\protect\cyre\protect\cyrr\protect\cyrv.
  \or
   \protect\cyrl\protect\cyri\protect\cyrp.
  \or
   \protect\cyrs\protect\cyre\protect\cyrr\protect\cyrp.
  \or
   \protect\cyrv\protect\cyre\protect\cyrr.
  \or
   \protect\cyrzh\protect\cyro\protect\cyrv\protect\cyrt.
  \or
   \protect\cyrl\protect\cyri\protect\cyrs\protect\cyrt\protect\cyro
    \protect\cyrp.
  \or
   \protect\cyrg\protect\cyrr\protect\cyru\protect\cyrd.
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianshortMonthname}
%
% ======= Abbreviated Capitalized Ukrainian month names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortMonthname}[1]{%
  \ifcase#1
  \or
   \protect\CYRS\protect\cyrii\protect\cyrch.
  \or
   \protect\CYRL\protect\cyryu\protect\cyrt.
  \or
   \protect\CYRB\protect\cyre\protect\cyrr.
  \or
   \protect\CYRK\protect\cyrv\protect\cyrii\protect\cyrt.
  \or
   \protect\CYRT\protect\cyrr\protect\cyra\protect\cyrv.
  \or
   \protect\CYRCH\protect\cyre\protect\cyrr\protect\cyrv.
  \or
   \protect\CYRL\protect\cyri\protect\cyrp.
  \or
   \protect\CYRS\protect\cyre\protect\cyrr\protect\cyrp.
  \or
   \protect\CYRV\protect\cyre\protect\cyrr.
  \or
   \protect\CYRZH\protect\cyro\protect\cyrv\protect\cyrt.
  \or
   \protect\CYRL\protect\cyri\protect\cyrs\protect\cyrt\protect\cyro
    \protect\cyrp.
  \or
   \protect\CYRG\protect\cyrr\protect\cyru\protect\cyrd.
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianweekdayname}
%
% ======= Ukrainian day of week names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianweekdayname}[1]{%
  \ifcase#1
  \protect\cyrp\protect\cyro\protect\cyrn\protect\cyre\protect\cyrd\protect\cyrii\protect\cyrl\protect\cyro\protect\cyrk%
  \or
  \protect\cyrv\protect\cyrii\protect\cyrv\protect\cyrt\protect\cyro\protect\cyrr\protect\cyro\protect\cyrk%
  \or
  \protect\cyrs\protect\cyre\protect\cyrr\protect\cyre\protect\cyrd\protect\cyra%
  \or
  \protect\cyrch\protect\cyre\protect\cyrt\protect\cyrv\protect\cyre\protect\cyrr%
  \or
  \protect\cyrp'\protect\cyrya\protect\cyrt\protect\cyrn\protect\cyri\protect\cyrc\protect\cyrya%
  \or
  \protect\cyrs\protect\cyru\protect\cyrb\protect\cyro\protect\cyrt\protect\cyra%
  \or
  \protect\cyrn\protect\cyre\protect\cyrd\protect\cyrii\protect\cyrl\protect\cyrya%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianWeekdayname}
%
% ======= Ukrainian Capitalized day of week names =======
%
%    \begin{macrocode}
\newcommand*{\DTMukrainianWeekdayname}[1]{%
  \ifcase#1
	  \protect\CYRP\protect\cyro\protect\cyrn\protect\cyre\protect\cyrd\protect\cyrii\protect\cyrl\protect\cyro\protect\cyrk%
  \or
  \protect\CYRV\protect\cyrii\protect\cyrv\protect\cyrt\protect\cyro\protect\cyrr\protect\cyro\protect\cyrk%
  \or
  \protect\CYRS\protect\cyre\protect\cyrr\protect\cyre\protect\cyrd\protect\cyra%
  \or
	  \protect\CYRCH\protect\cyre\protect\cyrt\protect\cyrv\protect\cyre\protect\cyrr%
  \or
  \protect\CYRP'\protect\cyrya\protect\cyrt\protect\cyrn\protect\cyri\protect\cyrc\protect\cyrya%
  \or
  \protect\CYRS\protect\cyru\protect\cyrb\protect\cyro\protect\cyrt\protect\cyra%
  \or
  \protect\CYRN\protect\cyre\protect\cyrd\protect\cyrii\protect\cyrl\protect\cyrya%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianshortweekdayname}
%
% ======= Abbreviated Ukrainian day of week names ======= 
%
%\changes{v1.1}{2017/06/11}{Add abbreviated day of week names}
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortweekdayname}[1]{%
  \ifcase#1
  \protect\cyrp\protect\cyrn.%
  \or
  \protect\cyrv\protect\cyrt.%
  \or
  \protect\cyrs\protect\cyrr.%
  \or
  \protect\cyrch\protect\cyrt%
  \or
  \protect\cyrp\protect\cyrt.%
  \or
  \protect\cyrs\protect\cyrb.%
  \or
  \protect\cyrn\protect\cyrd.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianshortWeekdayname}
% ======= Abbreviated Ukrainian Capitalized day of week names ======= 
%    \begin{macrocode}
\newcommand*{\DTMukrainianshortWeekdayname}[1]{%
  \ifcase#1
  \protect\CYRP\protect\cyrn.%
  \or
  \protect\CYRV\protect\cyrt.%
  \or
  \protect\CYRS\protect\cyrr.%
  \or
  \protect\CYRCH\protect\cyrt.%
  \or
  \protect\CYRP\protect\cyrt.%
  \or
  \protect\CYRS\protect\cyrb.%
  \or
  \protect\CYRN\protect\cyrd.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-ukrainian-ascii.ldf>
%    \end{macrocode}
%\fi
%
%\subsection{Main Ukrainian Module (\texttt{datetime2-ukrainian.ldf})}
%\changes{1.0}{2015-04-01}{Initial release}
%
%\iffalse
%    \begin{macrocode}
%<*datetime2-ukrainian.ldf>
%    \end{macrocode}
%\fi
%
% Identify Module
%    \begin{macrocode}
\ProvidesDateTimeModule{ukrainian}[2017/06/13 1.2]
%    \end{macrocode}
% Need to find out if XeTeX or LuaTeX are being used.
%    \begin{macrocode}
\RequirePackage{ifxetex,ifluatex}
%    \end{macrocode}
% XeTeX and LuaTeX natively support UTF-8, so load
% \texttt{ukrainian-utf8} if either of those engines are used
% otherwise load \texttt{ukrainian-ascii}.
%    \begin{macrocode}
\ifxetex
 \RequireDateTimeModule{ukrainian-utf8}
\else
 \ifluatex
   \RequireDateTimeModule{ukrainian-utf8}
 \else
   \RequireDateTimeModule{ukrainian-ascii}
 \fi
\fi
%    \end{macrocode}
%
% Define the \texttt{ukrainian} style.
% The time style is the same as the "default" style
% provided by \sty{datetime2}. This may need correcting. For
% example, if a 12 hour style similar to the "englishampm" (from the
% "english-base" module) is required. 
%
% Allow the user a way of configuring the "ukrainian" and
% "ukrainian-numeric" styles. This doesn't use the package wide
% separators such as
% \cs{dtm@datetimesep} in case other date formats are also required.
%
%\begin{macro}{\DTMukrainiandowdaysep}
% The separator between the day of week name and the day of month
% number for the text format.
%\changes{1.2}{2017/06/13}{Add support for showdow}
%    \begin{macrocode}
\newcommand*{\DTMukrainiandowdaysep}{%
 \DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiandaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMukrainiandaymonthsep}{%
 \DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
% \changes{1.2}{2017/06/13}{Added \cs{DTMukrainiannommonthyearsep}}
%
%\begin{macro}{\DTMukrainiannommonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMukrainiannommonthyearsep}{%
 \DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainianmonthyearsep}
% The separator between the month and year for the text format.
% \changes{1.2}{2017/06/13}{Fixed: spacebar in tableofcontents was}
%    \begin{macrocode}
\newcommand*{\DTMukrainianmonthyearsep}{%
 \DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiandatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMukrainiandatetimesep}{%
 \DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiantimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMukrainiantimezonesep}{%
 \DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiandatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMukrainiandatesep}{.}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMukrainiantimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMukrainiantimesep}{:}
%    \end{macrocode}
%\end{macro}
%
% Provide keys that can be used in \cs{DTMlangsetup} to set these
% separators.
% \changes{1.2}{2017/06/13}{Added key dowdaysep}
%    \begin{macrocode}
\DTMdefkey{ukrainian}{dowdaysep}{\renewcommand*{\DTMukrainiandowdaysep}{#1}}
\DTMdefkey{ukrainian}{daymonthsep}{\renewcommand*{\DTMukrainiandaymonthsep}{#1}}
\DTMdefkey{ukrainian}{monthyearsep}{\renewcommand*{\DTMukrainianmonthyearsep}{#1}}
\DTMdefkey{ukrainian}{nommonthyearsep}{\renewcommand*{\DTMukrainiannommonthyearsep}{#1}}
\DTMdefkey{ukrainian}{datetimesep}{\renewcommand*{\DTMukrainiandatetimesep}{#1}}
\DTMdefkey{ukrainian}{timezonesep}{\renewcommand*{\DTMukrainiantimezonesep}{#1}}
\DTMdefkey{ukrainian}{datesep}{\renewcommand*{\DTMukrainiandatesep}{#1}}
\DTMdefkey{ukrainian}{timesep}{\renewcommand*{\DTMukrainiantimesep}{#1}}
%    \end{macrocode}
% \changes{1.2}{2017/06/13}{Added genitive and nominative keys}
% The block that defines the module options for using genitive or nominative case of month name:
%
%    \begin{macrocode}
\DTMdefchoicekey{ukrainian}{month}[\val\nr]{genitive,nominative}{%
 \ifcase\nr\relax
  \renewcommand*\DTMukrainianmonthname{\DTMukrainiangenitivemonthname}%
  \renewcommand*\DTMukrainianMonthname{\DTMukrainiangenitiveMonthname}%
 \or
  \renewcommand*\DTMukrainianmonthname{\DTMukrainiannominativemonthname}%
  \renewcommand*\DTMukrainianMonthname{\DTMukrainiannominativeMonthname}%
 \fi
}
%    \end{macrocode}
%
% \changes{1.2}{2017/06/13}{Define a boolean key that can switch between full and abbreviated
% formats for the month and day of week names in the text format}
% Define a boolean key that can switch between full and abbreviated
% formats for the month and day of week names in the text format.
%    \begin{macrocode}
\DTMdefboolkey{ukrainian}{abbr}[true]{}
%    \end{macrocode}
% The default is the full name.
%    \begin{macrocode}
\DTMsetbool{ukrainian}{abbr}{false}
%    \end{macrocode}
%
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{ukrainian}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{ukrainian}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{ukrainian}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{ukrainian}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{ukrainian}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{ukrainian}{showyear}{true}
%    \end{macrocode}
%
%    \begin{macrocode}
\DTMnewstyle
 {ukrainian}% label
 {% date style
   \renewcommand*\DTMdisplaydate[4]{%
     \ifDTMshowdow
       \ifnum##4>-1
         \DTMifbool{ukrainian}{abbr}%
         {\DTMukrainianshortweekdayname{##4}}%
         {\DTMukrainianweekdayname{##4}}%
         \DTMukrainiandowdaysep
       \fi
     \fi
     \DTMifbool{ukrainian}{showdayofmonth}%
     {%
       \DTMukrainianordinal{##3}%
       \DTMukrainiandaymonthsep
     }%
     {}%
     \DTMifbool{ukrainian}{abbr}%
     {\DTMukrainianshortmonthname{##2}}%
     {\DTMukrainianmonthname{##2}}%
     \DTMifbool{ukrainian}{showyear}%
     {%
       \DTMukrainianmonthyearsep
       \DTMukrainianyear{##1}%
     }%
     {}%
   }%
   \renewcommand*\DTMDisplaydate[4]{%
     \ifDTMshowdow
       \ifnum##4>-1
         \DTMifbool{ukrainian}{abbr}%
         {\DTMukrainianshortWeekdayname{##4}}%
         {\DTMukrainianWeekdayname{##4}}%
         \DTMukrainiandowdaysep
         \DTMifbool{ukrainian}{showdayofmonth}%
         {%
           \DTMukrainianordinal{##3}%
           \DTMukrainiandaymonthsep
         }%
         {}%
         \DTMifbool{ukrainian}{abbr}%
         {\DTMukrainianshortmonthname{##2}}%
         {\DTMukrainianmonthname{##2}}%
         \DTMifbool{ukrainian}{showyear}%
         {%
           \DTMukrainianmonthyearsep
           \DTMukrainianyear{##1}%
         }%
         {}%
       \else
         \DTMifbool{ukrainian}{showdayofmonth}
         {%
           \DTMukrainianordinal{##3}%
           \DTMukrainiandaymonthsep
           \DTMifbool{ukrainian}{abbr}%
           {\DTMukrainianshortMonthname{##2}}%
           {\DTMukrainianMonthname{##2}}%
         }%
         {%
           \DTMifbool{ukrainian}{abbr}%
           {\DTMukrainianshortMonthname{##2}}%
           {\DTMukrainianMonthname{##2}}%
         }%
         \DTMifbool{ukrainian}{showyear}%
         {%
           \DTMukrainianmonthyearsep
           \DTMukrainianyear{##1}%
         }%
         {}%
       \fi
     \else
       \DTMifbool{ukrainian}{showdayofmonth}
       {%
        \DTMukrainianordinal{##3}%
        \DTMukrainiandaymonthsep
        \DTMifbool{ukrainian}{abbr}%
        {\DTMukrainianshortMonthname{##2}}%
        {\DTMukrainianMonthname{##2}}%
       }%
       {%
        \DTMifbool{ukrainian}{abbr}%
        {\DTMukrainianshortMonthname{##2}}%
        {\DTMukrainianMonthname{##2}}%
       }%
       \DTMifbool{ukrainian}{showyear}%
       {%
        \DTMukrainianmonthyearsep
        \DTMukrainianyear{##1}%
       }%
       {}%
     \fi
   }%
 }%
 {% time style (ignores seconds)
   \renewcommand*\DTMdisplaytime[3]{%
     \number##1
     \DTMukrainiantimesep\DTMtwodigits{##2}%
   }%
 }%
 {% zone style
   \DTMresetzones
   \DTMukrainianzonemaps
   \renewcommand*{\DTMdisplayzone}[2]{%
     \DTMifbool{ukrainian}{mapzone}%
     {\DTMusezonemapordefault{##1}{##2}}%
     {%
       \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
       \ifDTMshowzoneminutes\DTMukrainiantimesep\DTMtwodigits{##2}\fi
     }%
   }%
 }%
 {% full style
   \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
     \DTMdisplaydate{##1}{##2}{##3}{##4}%
     \DTMukrainiandatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMukrainiantimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
   \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
     \DTMDisplaydate{##1}{##2}{##3}{##4}%
     \DTMukrainiandatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMukrainiantimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
 }%
%    \end{macrocode}
%
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle
 {ukrainian-numeric}% label
 {% date style
    \renewcommand*\DTMdisplaydate[4]{%
      \DTMifbool{ukrainian}{showdayofmonth}%
      {%
        \number##3 % space intended
        \DTMukrainiandatesep
      }%
      {}%
      \number##2 % space intended
      \DTMifbool{ukrainian}{showyear}%
      {%
        \DTMukrainiandatesep
        \number##1 % space intended
      }%
      {}%
    }%
    \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
 }%
 {% time style
    \renewcommand*\DTMdisplaytime[3]{%
      \number##1
      \DTMukrainiantimesep\DTMtwodigits{##2}%
      \ifDTMshowseconds\DTMukrainiantimesep\DTMtwodigits{##3}\fi
    }%
 }%
 {% zone style
   \DTMresetzones
   \DTMukrainianzonemaps
   \renewcommand*{\DTMdisplayzone}[2]{%
     \DTMifbool{ukrainian}{mapzone}%
     {\DTMusezonemapordefault{##1}{##2}}%
     {%
       \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
       \ifDTMshowzoneminutes\DTMukrainiantimesep\DTMtwodigits{##2}\fi
     }%
   }%
 }%
 {% full style
   \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
     \DTMdisplaydate{##1}{##2}{##3}{##4}%
     \DTMukrainiandatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMukrainiantimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
   \renewcommand*{\DTMDisplay}{\DTMdisplay}%
 }
%    \end{macrocode}
%
%\begin{macro}{\DTMukrainianzonemaps}
% The time zone mappings are set through this command, which can be
% redefined if extra mappings are required or mappings need to be
% removed. These may need translating (in which case the definitions
% might need to be moved to the \texttt{utf8} and \texttt{ascii} ldf
% files).
%    \begin{macrocode}
\newcommand*{\DTMukrainianzonemaps}{%
  \DTMdefzonemap{02}{00}{EET}% Східноєвропейський час
  \DTMdefzonemap{03}{00}{EEST}% Східноєвропейський літній час
}
%    \end{macrocode}
%\end{macro}

% Switch style according to the \opt{useregional} setting.
%    \begin{macrocode}
\DTMifcaseregional
{}% do nothing
{\DTMsetstyle{ukrainian}}%
{\DTMsetstyle{ukrainian-numeric}}%
%    \end{macrocode}
%
% Redefine \cs{dateukrainian} (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.)
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\dateukrainian
  {% do nothing
  }%
  {%
    \def\dateukrainian{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{ukrainian}}%
      {\DTMsetstyle{ukrainian-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{ukrainian}}%
    {\DTMsetstyle{ukrainian-numeric}}%
  }%
}%
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datetime2-ukrainian.ldf>
%    \end{macrocode}
%\fi
%
% \CheckSum{1642}
%\Finale
