%\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>
%
% Doc-Source file to use with LaTeX2e
% Copyright (C) 2015 Nicola Talbot, all rights reserved.
% Copyright (C) 2017-19 Sebastian Friedl, all rights reserved.
% \fi
%
%
%
% \subsection{Swiss German (de-CH): \texttt{datetime2-de-CH.ldf}}
% \changes{2.0}{2017-10-03}{Added regional variant: Swiss German (de-CH)}
%
% Identify Module.
%    \begin{macrocode}
\ProvidesDateTimeModule{de-CH}[2019/12/13 v3.0]
%    \end{macrocode}
% Require the base German module
%    \begin{macrocode}
\RequireDateTimeModule{german-base}
%    \end{macrocode}
%
%
% Allow the user to configure the "de-CH" and "de-CH-numeric" styles.
% The package wide separators such as \cs{dtm@datetimesep} are not used
% in case other date formats are also required.
%
%\begin{macro}{\DTMdeCHdowdaysep}
% The separator between weekday and day
%    \begin{macrocode}
\newcommand*{\DTMdeCHdowdaysep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHdaymonthsep}
% The separator between the day and month for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHdaymonthsep}{.\DTMtexorpdfstring{\protect~}{\space}}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHmonthyearsep}
% The separator between the month and year for the text format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHmonthyearsep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHdatetimesep}
% The separator between the date and time blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeCHdatetimesep}{,\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHtimezonesep}
% The separator between the time and zone blocks in the full format
% (either text or numeric).
%    \begin{macrocode}
\newcommand*{\DTMdeCHtimezonesep}{\space}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHdatesep}
% The separator for the numeric date format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHdatesep}{.}
%    \end{macrocode}
%\end{macro}
%
%\begin{macro}{\DTMdeCHtimesep}
% The separator for the numeric time format.
%    \begin{macrocode}
\newcommand*{\DTMdeCHtimesep}{.}
%    \end{macrocode}
%\end{macro}
%
% Provide keys that can be used in \cs{DTMlangsetup} to set these
% separators.
%    \begin{macrocode}
\DTMdefkey{de-CH}{dowdaysep}{\renewcommand*{\DTMdeCHdowdaysep}{#1}}
\DTMdefkey{de-CH}{daymonthsep}{\renewcommand*{\DTMdeCHdaymonthsep}{#1}}
\DTMdefkey{de-CH}{monthyearsep}{\renewcommand*{\DTMdeCHmonthyearsep}{#1}}
\DTMdefkey{de-CH}{datetimesep}{\renewcommand*{\DTMdeCHdatetimesep}{#1}}
\DTMdefkey{de-CH}{timezonesep}{\renewcommand*{\DTMdeCHtimezonesep}{#1}}
\DTMdefkey{de-CH}{datesep}{\renewcommand*{\DTMdeCHdatesep}{#1}}
\DTMdefkey{de-CH}{timesep}{\renewcommand*{\DTMdeCHtimesep}{#1}}
%    \end{macrocode}
%
% 
% Define a boolean key that can switch between full and abbreviated formats for
% the month and day of week names.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{abbr}[true]{}
%    \end{macrocode}
%
% The default is to show the full name.
%    \begin{macrocode}
\DTMsetbool{de-CH}{abbr}{false}
%    \end{macrocode}
%
% Define a boolean key that determines if the time zone mappings
% should be used.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{mapzone}[true]{}
%    \end{macrocode}
% The default is to use mappings.
%    \begin{macrocode}
\DTMsetbool{de-CH}{mapzone}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the day of month should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{showdayofmonth}[true]{}
%    \end{macrocode}
% The default is to show the day of month.
%    \begin{macrocode}
\DTMsetbool{de-CH}{showdayofmonth}{true}
%    \end{macrocode}
%
% Define a boolean key that determines if the year should be
% displayed.
%    \begin{macrocode}
\DTMdefboolkey{de-CH}{showyear}[true]{}
%    \end{macrocode}
% The default is to show the year.
%    \begin{macrocode}
\DTMsetbool{de-CH}{showyear}{true}
%    \end{macrocode}
%
%
% Define the "de-CH" style.
%    \begin{macrocode}
\DTMnewstyle
{de-CH}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-CH}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeCHdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-CH}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeCHdaymonthsep}%
    {}%
    %
    \DTMifbool{de-CH}{abbr}%
    {\DTMdeCHshortmonthname{##2}}%
    {\DTMgermanmonthname{##2}}%
    %
    \DTMifbool{de-CH}{showyear}%
    {%
      \DTMdeCHmonthyearsep%
      \number##1 % space intended
    }%
    {}%
  }%
  \renewcommand*\DTMDisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-CH}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeCHdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-CH}{showdayofmonth}%
    {\DTMgermanordinal{##3}\DTMdeCHdaymonthsep}%
    {}%
    %
    \DTMifbool{de-CH}{abbr}%
    {\DTMdeCHshortmonthname{##2}}%
    {\DTMgermanmonthname{##2}}%
    %
    \DTMifbool{de-CH}{showyear}%
    {%
      \DTMdeCHmonthyearsep%
      \number##1 % space intended
    }%
    {}%
  }
}%
{% time style (use default)
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeCHtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeCHtimesep\DTMtwodigits{##3}\fi\space%
    Uhr%
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-CH}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
        \ifDTMshowzoneminutes\DTMdeCHtimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeCHdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeCHtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}[9]{%
    \ifDTMshowdate
      \DTMDisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeCHdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeCHtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
}%
%    \end{macrocode}
%
% Define the corresponding numeric style.
%    \begin{macrocode}
\DTMnewstyle
{de-CH-numeric}% label
{% date style
  \renewcommand*\DTMdisplaydate[4]{%
    \ifDTMshowdow
      \ifnum##4>-1
        \DTMifbool{de-CH}{abbr}%
        {\DTMgermanshortweekdayname{##4}}%
        {\DTMgermanweekdayname{##4}}%
        \DTMdeCHdowdaysep
      \fi
    \fi
    %
    \DTMifbool{de-CH}{showdayofmonth}%
    {%
      \DTMtwodigits{##3}%
      \DTMdeCHdatesep
    }%
    {}%
    \DTMtwodigits{##2}%
    \DTMdeCHdatesep%
    \DTMifbool{de-CH}{showyear}%
    {%
      \DTMifbool{de-CH}{abbr}%
      {\DTMtwodigits{##1}}%
      {\number##1 }% space intended
    }%
    {}%
  }%
  \renewcommand*{\DTMDisplaydate}[4]{\DTMdisplaydate{##1}{##2}{##3}{##4}}%
}%
{% time style
  \renewcommand*\DTMdisplaytime[3]{%
    \DTMtwodigits{##1}%
    \DTMdeCHtimesep\DTMtwodigits{##2}%
    \ifDTMshowseconds\DTMdeCHtimesep\DTMtwodigits{##3}\fi\space%
    Uhr%
  }%
}%
{% zone style
  \DTMresetzones
  \DTMgermanzonemaps
  \renewcommand*{\DTMdisplayzone}[2]{%
    \DTMifbool{de-CH}{mapzone}%
    {\DTMusezonemapordefault{##1}{##2}}%
    {%
      \ifnum##1<0\else+\fi\DTMtwodigits{##1}%
      \ifDTMshowzoneminutes\DTMgermantimesep\DTMtwodigits{##2}\fi
    }%
  }%
}%
{% full style
  \renewcommand*{\DTMdisplay}[9]{%
    \ifDTMshowdate
      \DTMdisplaydate{##1}{##2}{##3}{##4}%
      \DTMdeCHdatetimesep
    \fi
    \DTMdisplaytime{##5}{##6}{##7}%
    \ifDTMshowzone
      \DTMdeCHtimezonesep
      \DTMdisplayzone{##8}{##9}%
    \fi
  }%
  \renewcommand*{\DTMDisplay}{\DTMdisplay}%
}
%    \end{macrocode}
%
% Switch the style according to the \opt{useregional} setting.
%    \begin{macrocode}
\DTMifcaseregional
  {}% do nothing
  {\DTMsetstyle{de-CH}}%
  {\DTMsetstyle{de-CH-numeric}}%
%    \end{macrocode}
%
% Redefine \cs{dategerman} (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\dategerman
  {}% do nothing
  {%
    \def\dategerman{%
      \DTMifcaseregional
      {}% do nothing
      {\DTMsetstyle{de-CH}}%
      {\DTMsetstyle{de-CH-numeric}}%
    }%
  }%
}%
{%
  \csdef{date\CurrentTrackedDialect}{%
    \DTMifcaseregional
    {}% do nothing
    {\DTMsetstyle{de-CH}}%
    {\DTMsetstyle{de-CH-numeric}}%
  }%
}%
%    \end{macrocode}
%
\endinput
