%\iffalse
%<*package>
%% \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     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%</package>
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2015-2020 Nicola Talbot, all rights reserved.
% Copyright (C) 2017-2020 Paul A. Patience <pap@papatience.com>, all rights reserved.
% \fi
% \iffalse
%<*driver>
\documentclass{ltxdoc}

\usepackage{alltt}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[colorlinks,
            bookmarks,
            hyperindex=false,
            pdfauthor={Nicola L.C. Talbot and Paul A. Patience},
            pdftitle={datetime2.sty French Module}]{hyperref}


\CheckSum{580}

\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-french.dtx}
\end{document}
%</driver>
%\fi
%
%\MakeShortVerb{"}
%
%\title{French Module for datetime2 Package}
%\author{Nicola L. C. Talbot (inactive) \\
% Paul A. Patience\thanks{E-mail: pap@papatience.com}}
%\date{2020-09-21 (v1.03)}
%\maketitle
%
%\begin{abstract}
%This is the French language module for the \sty{datetime2}
%package. If you want to use the settings in this module you must
%install it in addition to installing \sty{datetime2}. If you use
%\sty{babel} or \sty{polyglossia}, you will need this module to
%prevent them from redefining \cs{today}. The \sty{datetime2}
% \opt{useregional} setting must be set to "text" or "numeric"
% for the language styles to be set.
% Alternatively, you can set the style in the document using
% \cs{DTMsetstyle}, but this may be changed by \cs{date}\meta{language}
% depending on the value of the \opt{useregional} setting.
%\end{abstract}
%
%\StopEventually{%
%\clearpage
%\phantomsection
%\addcontentsline{toc}{section}{Change History}%
%\PrintChanges
%\addcontentsline{toc}{section}{\indexname}%
%\PrintIndex}
%\section{The Code}
%\iffalse
%    \begin{macrocode}
%<*datetime2-french-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-03-27}{Initial release}
% Identify module
%    \begin{macrocode}
\ProvidesDateTimeModule{french-utf8}[2020/09/21 v1.03]
%    \end{macrocode}
%\begin{macro}{\DTMfrenchordinal}
%    \begin{macrocode}
\ifdef\ier
{%
  \newcommand*{\DTMfrenchordinal}[1]{%
    \number#1
    \ifnum#1=1\DTMtexorpdfstring{\protect\ier}{er}\fi
  }
}%
{%
  \newcommand*{\DTMfrenchordinal}[1]{%
    \number#1
    \ifnum#1=1\DTMtexorpdfstring{\protect\textsuperscript{er}}{er}\fi
  }
}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchmonthname}
% French month names.
%    \begin{macrocode}
\newcommand*{\DTMfrenchmonthname}[1]{%
  \ifcase#1
  \or
  janvier%
  \or
  février%
  \or
  mars%
  \or
  avril%
  \or
  mai%
  \or
  juin%
  \or
  juillet%
  \or
  août%
  \or
  septembre%
  \or
  octobre%
  \or
  novembre%
  \or
  décembre%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchMonthname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchMonthname}[1]{%
  \ifcase#1
  \or
  Janvier%
  \or
  Février%
  \or
  Mars%
  \or
  Avril%
  \or
  Mai%
  \or
  Juin%
  \or
  Juillet%
  \or
  Août%
  \or
  Septembre%
  \or
  Octobre%
  \or
  Novembre%
  \or
  Décembre%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortmonthname}
% Abbreviated French month names.
%\changes{1.01}{2017-04-08}{Add abbreviated month names}
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortmonthname}[1]{%
  \ifcase#1
  \or
  janv.%
  \or
  févr.%
  \or
  mars%
  \or
  avr.%
  \or
  mai%
  \or
  juin%
  \or
  juill.%
  \or
  août%
  \or
  sept.%
  \or
  oct.%
  \or
  nov.%
  \or
  déc.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortMonthname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortMonthname}[1]{%
  \ifcase#1
  \or
  Janv.%
  \or
  Févr.%
  \or
  Mars%
  \or
  Avr.%
  \or
  Mai%
  \or
  Juin%
  \or
  Juill.%
  \or
  Août%
  \or
  Sept.%
  \or
  Oct.%
  \or
  Nov.%
  \or
  Déc.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchweekdayname}
% French day of week names.
%    \begin{macrocode}
\newcommand*{\DTMfrenchweekdayname}[1]{%
  \ifcase#1
  lundi%
  \or
  mardi%
  \or
  mercredi%
  \or
  jeudi%
  \or
  vendredi%
  \or
  samedi%
  \or
  dimanche%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchWeekdayname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchWeekdayname}[1]{%
  \ifcase#1
  Lundi%
  \or
  Mardi%
  \or
  Mercredi%
  \or
  Jeudi%
  \or
  Vendredi%
  \or
  Samedi%
  \or
  Dimanche%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortweekdayname}
% French abbreviated day of week names.
%\changes{1.01}{2017-04-08}{Add abbreviated day of week names}
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortweekdayname}[1]{%
  \ifcase#1
  lun.%
  \or
  mar.%
  \or
  mer.%
  \or
  jeu.%
  \or
  ven.%
  \or
  sam.%
  \or
  dim.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortWeekdayname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortWeekdayname}[1]{%
  \ifcase#1
  Lun.%
  \or
  Mar.%
  \or
  Mer.%
  \or
  Jeu.%
  \or
  Ven.%
  \or
  Sam.%
  \or
  Dim.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchmidnight}
%    \begin{macrocode}
\newcommand*\DTMfrenchmidnight{minuit}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchnoon}
%    \begin{macrocode}
\newcommand*\DTMfrenchnoon{midi}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchtimesymsep}
%    \begin{macrocode}
\newcommand*\DTMfrenchtimesymsep{\,}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchhoursym}
%    \begin{macrocode}
\newcommand*\DTMfrenchhoursym{h}%
%    \end{macrocode}
%\end{macro}
%
% This style ignores seconds.
%\changes{1.01}{2017-04-08}{Add frenchalpha time style}
%    \begin{macrocode}
\DTMnewtimestyle
 {frenchalpha}% label
 {%
    \renewcommand*\DTMdisplaytime[3]{%
      \ifnum##2=0
        \ifnum##1=12
          \DTMfrenchnoon
        \else
          \ifnum##1=0
            \DTMfrenchmidnight
          \else
            \ifnum##1=24
              \DTMfrenchmidnight
            \else
              \number##1
              \DTMfrenchtimesymsep\DTMfrenchhoursym
            \fi
          \fi
        \fi
      \else
        \ifnum##1=24
          0%
        \else
          \number##1
        \fi
        \DTMfrenchtimesymsep\DTMfrenchhoursym
        \DTMfrenchtimesymsep\DTMtwodigits{##2}%
      \fi
    }%
 }%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-french-utf8.ldf>
%    \end{macrocode}
%\fi
%\iffalse
%    \begin{macrocode}
%<*datetime2-french-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-french-utf8.ldf} file as the non-ASCII
%characters are made active in that situation and would need
%protecting against expansion.
%\changes{1.0}{2015-03-27}{Initial release}
% Identify module
%    \begin{macrocode}
\ProvidesDateTimeModule{french-ascii}[2020/09/21 v1.03]
%    \end{macrocode}
%
%\begin{macro}{\DTMfrenchordinal}
%    \begin{macrocode}
\ifdef\ier
{%
  \newcommand*{\DTMfrenchordinal}[1]{%
    \number#1
    \ifnum#1=1\DTMtexorpdfstring{\protect\ier}{er}\fi
  }
}%
{%
  \newcommand*{\DTMfrenchordinal}[1]{%
    \number#1
    \ifnum#1=1\DTMtexorpdfstring{\protect\textsuperscript{er}}{er}\fi
  }
}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchmonthname}
% French month names.
%    \begin{macrocode}
\newcommand*{\DTMfrenchmonthname}[1]{%
  \ifcase#1
  \or
  janvier%
  \or
  f\protect\'evrier%
  \or
  mars%
  \or
  avril%
  \or
  mai%
  \or
  juin%
  \or
  juillet%
  \or
  ao\protect\^ut%
  \or
  septembre%
  \or
  octobre%
  \or
  novembre%
  \or
  d\protect\'ecembre%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchMonthname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchMonthname}[1]{%
  \ifcase#1
  \or
  Janvier%
  \or
  F\protect\'evrier%
  \or
  Mars%
  \or
  Avril%
  \or
  Mai%
  \or
  Juin%
  \or
  Juillet%
  \or
  Ao\protect\^ut%
  \or
  Septembre%
  \or
  Octobre%
  \or
  Novembre%
  \or
  D\protect\'ecembre%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortmonthname}
% Abbreviated French month names.
%\changes{1.01}{2017-04-08}{Add abbreviated month names}
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortmonthname}[1]{%
  \ifcase#1
  \or
  janv.%
  \or
  f\protect\'evr.%
  \or
  mars%
  \or
  avr.%
  \or
  mai%
  \or
  juin%
  \or
  juill.%
  \or
  ao\protect\^ut%
  \or
  sept.%
  \or
  oct.%
  \or
  nov.%
  \or
  d\protect\'ec.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortMonthname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortMonthname}[1]{%
  \ifcase#1
  \or
  Janv.%
  \or
  F\protect\'evr.%
  \or
  Mars%
  \or
  Avr.%
  \or
  Mai%
  \or
  Juin%
  \or
  Juill.%
  \or
  Ao\protect\^ut%
  \or
  Sept.%
  \or
  Oct.%
  \or
  Nov.%
  \or
  D\protect\'ec.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchweekdayname}
% French day of week names.
%    \begin{macrocode}
\newcommand*{\DTMfrenchweekdayname}[1]{%
  \ifcase#1
  lundi%
  \or
  mardi%
  \or
  mercredi%
  \or
  jeudi%
  \or
  vendredi%
  \or
  samedi%
  \or
  dimanche%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchWeekdayname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchWeekdayname}[1]{%
  \ifcase#1
  Lundi%
  \or
  Mardi%
  \or
  Mercredi%
  \or
  Jeudi%
  \or
  Vendredi%
  \or
  Samedi%
  \or
  Dimanche%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortweekdayname}
% French abbreviated day of week names.
%\changes{1.01}{2017-04-08}{Add abbreviated day of week names}
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortweekdayname}[1]{%
  \ifcase#1
  lun.%
  \or
  mar.%
  \or
  mer.%
  \or
  jeu.%
  \or
  ven.%
  \or
  sam.%
  \or
  dim.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchshortWeekdayname}
% As above but start with a capital.
%    \begin{macrocode}
\newcommand*{\DTMfrenchshortWeekdayname}[1]{%
  \ifcase#1
  Lun.%
  \or
  Mar.%
  \or
  Mer.%
  \or
  Jeu.%
  \or
  Ven.%
  \or
  Sam.%
  \or
  Dim.%
  \fi
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchmidnight}
%    \begin{macrocode}
\newcommand*\DTMfrenchmidnight{minuit}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchnoon}
%    \begin{macrocode}
\newcommand*\DTMfrenchnoon{midi}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchtimesymsep}
%    \begin{macrocode}
\newcommand*\DTMfrenchtimesymsep{\,}%
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchhoursym}
%    \begin{macrocode}
\newcommand*\DTMfrenchhoursym{h}%
%    \end{macrocode}
%\end{macro}
%
% This style ignores seconds.
%\changes{1.01}{2017-04-08}{Add frenchalpha time style}
%    \begin{macrocode}
\DTMnewtimestyle
 {frenchalpha}% label
 {%
    \renewcommand*\DTMdisplaytime[3]{%
      \ifnum##2=0
        \ifnum##1=12
          \DTMfrenchnoon
        \else
          \ifnum##1=0
            \DTMfrenchmidnight
          \else
            \ifnum##1=24
              \DTMfrenchmidnight
            \else
              \number##1
              \DTMfrenchtimesymsep\DTMfrenchhoursym
            \fi
          \fi
        \fi
      \else
        \ifnum##1=24
          0%
        \else
          \number##1
        \fi
        \DTMfrenchtimesymsep\DTMfrenchhoursym
        \DTMfrenchtimesymsep\DTMtwodigits{##2}%
      \fi
    }%
 }%
%    \end{macrocode}
%
%\iffalse
%    \begin{macrocode}
%</datetime2-french-ascii.ldf>
%    \end{macrocode}
%\fi
%
%\subsection{Main French Module (\texttt{datetime2-french.ldf})}
%\changes{1.0}{2015-03-27}{Initial release}
%
%\iffalse
%    \begin{macrocode}
%<*datetime2-french.ldf>
%    \end{macrocode}
%\fi
%
% Identify Module
%    \begin{macrocode}
\ProvidesDateTimeModule{french}[2020/09/21 v1.03]
%    \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{french-utf8} if either of those engines are used
% otherwise load \texttt{french-ascii}.
%    \begin{macrocode}
\ifxetex
 \RequireDateTimeModule{french-utf8}
\else
 \ifluatex
   \RequireDateTimeModule{french-utf8}
 \else
   \RequireDateTimeModule{french-ascii}
 \fi
\fi
%    \end{macrocode}
%
% Define the \texttt{french} style.
% The time style is the same as the "default" style
% provided by \sty{datetime2}. This may need correcting.
%
% Allow the user a way of configuring the "french" and
% "french-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}{\DTMfrenchdowdaysep}
% The separator between the day of week name and the day of month
% number for the text format.
%\changes{1.01}{2017-04-08}{Add support for showdow}
%    \begin{macrocode}
\newcommand*{\DTMfrenchdowdaysep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchdaymonthsep}
% The separator between the day and month for the text format.
%\changes{1.02}{2017-04-08}{Use non-breaking space}
%    \begin{macrocode}
\newcommand*{\DTMfrenchdaymonthsep}{%
 \DTMtexorpdfstring{\protect~}{\space}%
}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMfrenchmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchdatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMfrenchdatetimesep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchtimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMfrenchtimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchdatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMfrenchdatesep}{/}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMfrenchtimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMfrenchtimesep}{:}
%    \end{macrocode}
%\end{macro}
%
%Provide keys that can be used in \cs{DTMlangsetup} to set these
%separators.
%    \begin{macrocode}
\DTMdefkey{french}{dowdaysep}{\renewcommand*{\DTMfrenchdowdaysep}{#1}}
\DTMdefkey{french}{daymonthsep}{\renewcommand*{\DTMfrenchdaymonthsep}{#1}}
\DTMdefkey{french}{monthyearsep}{\renewcommand*{\DTMfrenchmonthyearsep}{#1}}
\DTMdefkey{french}{datetimesep}{\renewcommand*{\DTMfrenchdatetimesep}{#1}}
\DTMdefkey{french}{timezonesep}{\renewcommand*{\DTMfrenchtimezonesep}{#1}}
\DTMdefkey{french}{datesep}{\renewcommand*{\DTMfrenchdatesep}{#1}}
\DTMdefkey{french}{timesep}{\renewcommand*{\DTMfrenchtimesep}{#1}}
%    \end{macrocode}
%
% Define a boolean key that can switch between full and abbreviated
% formats for the month and day of week names in the text format.
%\changes{1.01}{2017-04-08}{Add support for abbr}
%    \begin{macrocode}
\DTMdefboolkey{french}{abbr}[true]{}
%    \end{macrocode}
% The default is the full name.
%    \begin{macrocode}
\DTMsetbool{french}{abbr}{false}
%    \end{macrocode}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{french}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{french}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{french}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{french}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{french}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{french}{showyear}{true}
%    \end{macrocode}
%
% Define the "french" style.
%\changes{1.01}{2017-04-08}{Add support for abbr and showdow}
%    \begin{macrocode}
\DTMnewstyle
 {french}% label
 {% date style
   \renewcommand*\DTMdisplaydate[4]{%
     \ifDTMshowdow
       \ifnum##4>-1
         \DTMifbool{french}{abbr}%
         {\DTMfrenchshortweekdayname{##4}}%
         {\DTMfrenchweekdayname{##4}}%
         \DTMfrenchdowdaysep
       \fi
     \fi
     \DTMifbool{french}{showdayofmonth}%
     {%
       \DTMfrenchordinal{##3}%
       \DTMfrenchdaymonthsep
     }%
     {}%
     \DTMifbool{french}{abbr}%
     {\DTMfrenchshortmonthname{##2}}%
     {\DTMfrenchmonthname{##2}}%
     \DTMifbool{french}{showyear}%
     {%
       \DTMfrenchmonthyearsep
       \number##1 % space intended
     }%
     {}%
   }%
   \renewcommand*\DTMDisplaydate[4]{%
     \ifDTMshowdow
       \ifnum##4>-1
         \DTMifbool{french}{abbr}%
         {\DTMfrenchshortWeekdayname{##4}}%
         {\DTMfrenchWeekdayname{##4}}%
         \DTMfrenchdowdaysep
         \DTMifbool{french}{showdayofmonth}%
         {%
           \DTMfrenchordinal{##3}%
           \DTMfrenchdaymonthsep
         }%
         {}%
         \DTMifbool{french}{abbr}%
         {\DTMfrenchshortmonthname{##2}}%
         {\DTMfrenchmonthname{##2}}%
         \DTMifbool{french}{showyear}%
         {%
           \DTMfrenchmonthyearsep
           \number##1 % space intended
         }%
         {}%
       \else
         \DTMifbool{french}{showdayofmonth}
         {%
           \DTMfrenchordinal{##3}%
           \DTMfrenchdaymonthsep
           \DTMifbool{french}{abbr}%
           {\DTMfrenchshortmonthname{##2}}%
           {\DTMfrenchmonthname{##2}}%
         }%
         {%
           \DTMifbool{french}{abbr}%
           {\DTMfrenchshortMonthname{##2}}%
           {\DTMfrenchMonthname{##2}}%
         }%
         \DTMifbool{french}{showyear}%
         {%
           \DTMfrenchmonthyearsep
           \number##1 % space intended
         }%
         {}%
       \fi
     \else
       \DTMifbool{french}{showdayofmonth}
       {%
        \DTMfrenchordinal{##3}%
        \DTMfrenchdaymonthsep
        \DTMifbool{french}{abbr}%
        {\DTMfrenchshortmonthname{##2}}%
        {\DTMfrenchmonthname{##2}}%
       }%
       {%
        \DTMifbool{french}{abbr}%
        {\DTMfrenchshortMonthname{##2}}%
        {\DTMfrenchMonthname{##2}}%
       }%
       \DTMifbool{french}{showyear}%
       {%
        \DTMfrenchmonthyearsep
        \number##1 % space intended
       }%
       {}%
     \fi
   }%
 }%
 {% time style
   \DTMsettimestyle{frenchalpha}%
 }%
 {% zone style
   \DTMresetzones
   \DTMfrenchzonemaps
   \renewcommand*{\DTMdisplayzone}[2]{%
     \DTMifbool{french}{mapzone}%
     {\DTMusezonemapordefault{##1}{##2}}%
     {%
       \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
       \ifDTMshowzoneminutes\DTMfrenchtimesep\DTMtwodigits{##2}\fi
     }%
   }%
 }%
 {% full style
   \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
     \DTMdisplaydate{##1}{##2}{##3}{##4}%
     \DTMfrenchdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMfrenchtimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
   \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
     \DTMDisplaydate{##1}{##2}{##3}{##4}%
     \DTMfrenchdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMfrenchtimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
 }%
%    \end{macrocode}
%
% Define numeric style.
%    \begin{macrocode}
\DTMnewstyle
 {french-numeric}% label
 {% date style
    \renewcommand*\DTMdisplaydate[4]{%
      \DTMifbool{french}{showdayofmonth}%
      {%
        \number##3 % space intended
        \DTMfrenchdatesep
      }%
      {}%
      \number##2 % space intended
      \DTMifbool{french}{showyear}%
      {%
        \DTMfrenchdatesep
        \number##1 % space intended
      }%
      {}%
    }%
    \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
 }%
 {% time style
    \renewcommand*\DTMdisplaytime[3]{%
      \number##1
      \DTMfrenchtimesep\DTMtwodigits{##2}%
      \ifDTMshowseconds\DTMfrenchtimesep\DTMtwodigits{##3}\fi
    }%
 }%
 {% zone style
   \DTMresetzones
   \DTMfrenchzonemaps
   \renewcommand*{\DTMdisplayzone}[2]{%
     \DTMifbool{french}{mapzone}%
     {\DTMusezonemapordefault{##1}{##2}}%
     {%
       \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
       \ifDTMshowzoneminutes\DTMfrenchtimesep\DTMtwodigits{##2}\fi
     }%
   }%
 }%
 {% full style
   \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
     \DTMdisplaydate{##1}{##2}{##3}{##4}%
     \DTMfrenchdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
     \DTMfrenchtimezonesep
     \DTMdisplayzone{##8}{##9}%
    \fi
   }%
   \renewcommand*{\DTMDisplay}{\DTMdisplay}%
 }
%    \end{macrocode}
%
%\begin{macro}{\DTMfrenchzonemaps}
% The time zone mappings are set through this command, which can be
% redefined if extra mappings are required or mappings need to be
% removed.
%    \begin{macrocode}
\newcommand*{\DTMfrenchzonemaps}{%
  \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{french}}
{\DTMsetstyle{french-numeric}}
%    \end{macrocode}
%
% Redefine \cs{datefrench} (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.03}{2020-09-21}{removed spurious space}
%    \begin{macrocode}
\ifcsundef{date\CurrentTrackedDialect}
{%
  \ifundef\datefrench
  {% do nothing
  }%
  {%
    \def\datefrench{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{french}}%
      {\DTMsetstyle{french-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{french}}%
    {\DTMsetstyle{french-numeric}}%
  }%
}%
%    \end{macrocode}
%\iffalse
%    \begin{macrocode}
%</datetime2-french.ldf>
%    \end{macrocode}
%\fi
%\Finale
\endinput
