%\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) 2017-18 Sebastian Friedl
%
% This work is subject to the LaTeX Project Public License, Version 1.3c or -- at
% your option -- any later version of this license.
% The work consists of the files termcal-de.dtx, termcal-de.ins,
% termcal-de-doc.dtx, termcal-de-doc-example1.dtx, termcal-de-doc-example2.dtx
% and the derived file termcal-de.sty
%
% This work has the LPPL maintenance status `maintained'.
% Current maintainer of the work is Sebastian Friedl.
% \fi
%
%
%
% \subsubsection*{Initialize}
% \changes{1.0}{2017/08/03}{Initial release}
% Identify the package and require \LaTeXe
%    \begin{macrocode}
\ProvidesPackage{termcal-de}[2018/03/23 v2.0 German locals to the termcal package]
\NeedsTeXFormat{LaTeX2e}
%    \end{macrocode}
%
%
%
% \subsubsection*{Require a basic set of packages}
%
% Require the \enquote{original} "termcal" package
%    \begin{macrocode}
\RequirePackage{termcal}
%    \end{macrocode}
%
% Require packages providing the key-value option stuff
% \changes{2.0}{2018/03/23}{Key-Value-Options}
%    \begin{macrocode}
\RequirePackage{pgfkeys}
\RequirePackage{pgfopts}
%    \end{macrocode}
%
%
%
% \subsubsection*{Define options}
%
% Define variables:
%    \begin{macrocode}
\newif\if@termcalde@compat
\newif\if@termcalde@drawbox
\newif\if@termcalde@dtmconf@frompreamble
\newif\if@termcalde@dtmconf@useregional
\newif\if@termcalde@dtmconf@numeric
%    \end{macrocode}
%
% Set variables to default values:
%    \begin{macrocode}
\@termcalde@compatfalse
\@termcalde@drawboxfalse
\@termcalde@dtmconf@frompreamblefalse
\@termcalde@dtmconf@useregionaltrue
\@termcalde@dtmconf@numerictrue
%    \end{macrocode}
%
% Define variables, p.r.n. with default values:
%    \begin{macrocode}
\def\termcalde@setdrawbox{}
\def\termcalde@dtmdialect{german}
%    \end{macrocode}
%
%
% \medskip
% Define a \opt{compat} option for switching on compatibility mode:
% \changes{2.0}{2018/03/23}{Introduce a compatibility option}
%    \begin{macrocode}
\pgfkeys{%
    /termcal-de/compat/.cd, .is choice, .default=true,
        true/.code={\@termcalde@compattrue},
        false/.code={\@termcalde@compatfalse}}
%    \end{macrocode}
%
% Define a \opt{drawdateframe} option set for configuring whether a frame is drawn around the date:
% \begin{itemize}
%     \item[\texttt{always}] Always draw a frame around the date 
%     \item[\texttt{atNewMonth}] Draw a frame around the date at the beginning of a month
%     \item[\texttt{never}] Never draw a frame around the date
% \end{itemize}
% \changes{2.0}{2018/03/23}{Configurable date frame}
%    \begin{macrocode}
\pgfkeys{%
    /termcal-de/drawdateframe/.cd, .is choice, .default=always,
            always/.code={\def\termcalde@setdrawbox{\@termcalde@drawboxtrue}},
            atNewMonth/.code={\def\termcalde@setdrawbox{%
                \ifnewmonth\@termcalde@drawboxtrue%
                \else\@termcalde@drawboxfalse%
                \fi}},
            never/.code={\def\termcalde@setdrawbox{\@termcalde@drawboxfalse}}}
%    \end{macrocode}
%
% Define a \opt{datetime2} option for configuring "datetime2":
% \begin{itemize}
%     \item[\texttt{local}] Defines which language module should be loaded. \\
%         Possible values are "german", "de-DE", "de-AT" and "de-CH" loading "datetime2-german"'s according sub-module and "useregional",
%         which determines the used sub-module based on the language settings of "babel" or "polyglossia"
%     \item[\texttt{numeric}] Influences whether to use the numeric style when printing dates. \\
%         Possible values are "true" and "false". Is the "numeric" key set without a value, it is assumed to be "true".
%     \item[\texttt{frompreamble}] This option has to be set when "datetime2" is loaded in the preamble. Overrides all other options.
% \end{itemize}
%    \begin{macrocode}
\pgfkeys{%
    /termcal-de/datetime2/.code={\pgfkeys{/termcal-de/datetime2/.cd, #1}},
    /termcal-de/datetime2/local/.cd, .is choice, .default=useregional,
        useregional/.code={\@termcalde@dtmconf@useregionaltrue},
        german/.code={%
            \@termcalde@dtmconf@useregionalfalse%
            \def\termcalde@dtmdialect{german}},
        de-DE/.code={%
            \@termcalde@dtmconf@useregionalfalse%
            \def\termcalde@dtmdialect{de-DE}},
        de-AT/.code={%
            \@termcalde@dtmconf@useregionalfalse%
            \def\termcalde@dtmdialect{de-AT}},
        de-CH/.code={%
            \@termcalde@dtmconf@useregionalfalse%
            \def\termcalde@dtmdialect{de-CH}},
    /termcal-de/datetime2/numeric/.cd, .is choice, .default=true,
        true/.code={\@termcalde@dtmconf@numerictrue},
        false/.code={\@termcalde@dtmconf@numericfalse},
    /termcal-de/datetime2/frompreamble/.cd, .is choice, .default=true,
        true/.code={\@termcalde@dtmconf@frompreambletrue},
        false/.code={\@termcalde@dtmconf@frompreamblefalse}}
%    \end{macrocode}
% Process the options:
%    \begin{macrocode}
\ProcessPgfPackageOptions{/termcal-de}
%    \end{macrocode}
%
%
%
% \subsubsection*{Require and configure \texttt{datetime2}}
% \changes{2.0}{2018/03/23}{Require \texttt{datetime2}}
%
% \begin{macro}{\termcalde@dtmnumeric}
% Define an auxiliary command adding "=numeric" to "datetime2"'s "useregional" key and adding "-numeric" to "datetime2"'s module names,
% depending on the current configuration of "datetime2":
%    \begin{macrocode}
\def\termcalde@dtmnumeric{%
    \if@termcalde@dtmconf@numeric%
        \if@termcalde@dtmconf@useregional=\else-\fi%
        numeric\fi}
%    \end{macrocode}
% \end{macro}
%
% Require "datetime2" for printing dates inside the calendar boxes and configure it as long as the "datetime2=frompreamble" key is not set.
%    \begin{macrocode}
\if@termcalde@dtmconf@frompreamble\RequirePackage{datetime2}%
\else%
    \RequirePackage[%
        \if@termcalde@dtmconf@useregional{useregional}%
        \else\termcalde@dtmdialect\fi%
        %
        \if@termcalde@dtmconf@useregional\termcalde@dtmnumeric\fi]{datetime2}%
\fi
%    \end{macrocode}
%
% When "datetime2"'s language module is loaded by using the module name, a hook executing "\DTMsetstyle" at the begin of the document is required
% for setting the date style to the numeric format.
%    \begin{macrocode}
\if@termcalde@dtmconf@frompreamble\else%
    \if@termcalde@dtmconf@useregional\else%
        \if@termcalde@dtmconf@numeric%
            \AtBeginDocument{\DTMsetstyle{\termcalde@dtmdialect\termcalde@dtmnumeric}}%
\fi\fi\fi
%    \end{macrocode}
%
%
%
% \subsubsection*{Redefinitions}
%
% \begin{macro}{\setdate}
% Use "D.M.YYYY" instead of "m/d/y" when entering dates from the code unless the \opt{compat} option is given.
% Do \emph{not} use leading zeros in date specifications!
%    \begin{macrocode}
\if@termcalde@compat\else%
    \def\setdate@#1.#2.#3!{%
        \setcounter{date}{#1}%
        \setcounter{month}{#2}%
        \setcounter{year}{#3}%
        \global\newmonthtrue\setleap}%
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\curdate}
% This command is used internally by "termcal". \\
% Redefine "\curdate"'s output format to be the same as "\setdate"'s. \\
% Remember: Do \emph{not} use leading zeros in date specifications!
%    \begin{macrocode}
\if@termcalde@compat\else%
    \def\curdate{\arabic{date}.\arabic{month}.\arabic{year}}%
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\currentdate}
% Provides a facility to print the date inside a cell's content. \\
% The date format can be configured via configuring "\DTMdisplaydate".
%    \begin{macrocode}
\def\currentdate{\DTMdisplaydate{%
    \arabic{year}}{\arabic{month}}{\arabic{date}}{-1}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\calprintdate}
% Prints the date displayed in the cell heading. \\
% The date format can be configured via configuring "\DTMDisplaydate".
%    \begin{macrocode}
\def\calprintdate{%
    \termcalde@setdrawbox%
    \if@termcalde@drawbox\framebox{%
        \DTMDisplaydate{\arabic{year}}{\arabic{month}}{\arabic{date}}{-1}}%
    \else\DTMDisplaydate{\arabic{year}}{\arabic{month}}{\arabic{date}}{-1}%
    \fi}
%    \end{macrocode}
% \end{macro}
