% \iffalse meta-comment
%
% File `ngermanb.dtx'
%
% Copyright 1989--2024
%     Johannes L. Braams
%     Bernd Raichle
%     Walter Schmidt
%     Juergen Spitzmueller
% All rights reserved.
% 
% This file is part of the babel-german bundle,
% an extension to the Babel system.
% ----------------------------------------------
% 
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (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 2003/12/01 or later.
% 
% This work has the LPPL maintenance status "maintained".
% 
% The Current Maintainer of this work is Juergen Spitzmueller.
%
% This file is based on german.tex version 2.5e
%                       by Bernd Raichle, Hubert Partl et.al.
%
% \fi
% \CheckSum{505}
%
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{ngermanb.dtx}
%</dtx>
%<naustrian>\ProvidesLanguage{naustrian}
%<ngerman>\ProvidesLanguage{ngerman}
%<nswissgerman>\ProvidesLanguage{nswissgerman}
%<ngermanb>\ProvidesLanguage{ngermanb}
%\fi
%\ProvidesFile{ngermanb.dtx}
        [2024/01/19 v2.14 German support for babel (post-1996 orthography)]
%\iffalse
%
%<*filedriver>
\documentclass{ltxdoc}
\usepackage[T1]{fontenc}
\usepackage[osf]{libertine}
\usepackage[scaled=0.76]{beramono}
\usepackage{url}
\usepackage{array}
\usepackage{booktabs}
\usepackage[tableposition=top,skip=5pt]{caption}
\usepackage{marginnote}
\usepackage[svgnames]{xcolor}
\usepackage[pdfusetitle]{hyperref}
\hypersetup{%
  colorlinks,
  linkcolor=black,
  filecolor=Maroon,
  urlcolor=Maroon,
  citecolor=black
}
\newcommand*\babel{\textsf{babel}}
\newcommand*\Babel{\textsf{Babel}}
\newcommand*\langvar{$\langle \it lang \rangle$}
\newcommand*\graph[1]{$\langle$#1$\rangle$}
\newcommand*\note[1]{}
\newcommand*\Lopt[1]{\texttt{#1}}
\newcommand*\file[1]{\texttt{#1}}
\newcommand*\newfeature[1]{\marginnote{\footnotesize New feature\\in v.\,#1!}}
\GlossaryMin = .33\textheight

\begin{document}
 \DocInput{ngermanb.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{ngermanb.dtx}
%
%\RecordChanges
%
% \changes{Version 2.9a=Version 2.10}{2016/11/07}{Improvements to the manual}
%
% \changes{Version 2.7}{2013/12/13}{Added support for variety \Lopt{nswissgerman}.}
% \changes{Version 2.7}{2013/12/13}{Revised \Lopt{naustrian} support.}
% \changes{Version 2.7}{2013/12/13}{Revised documentation: Turn the \babel{}
%          manual chapter into a self-enclosed manual.}
%
% \changes{Version 2.6f}{1999/03/24}{Renamed from \file{germanb.ldf};
%          language names changed from \Lopt{german} and \Lopt{austrian}
%          to \Lopt{ngerman} and \Lopt{naustrian}.}
%
%  \title{Babel support for the German language (post-1996~orthography)}
%  \author{Johannes Braams \and Bernd Raichle \and Walter Schmidt \and J\"urgen Spitzm\"uller\thanks{%
%         Current maintainer. Please report issues via \protect\url{https://github.com/jspitz/babel-german}.}}
%  \date{\fileversion\ (\filedate)}
%  \maketitle
%
%    \begin{abstract}
%      \noindent This manual documents \babel\ language support for German (post-1996 orthography),
%      including support for the Austrian and Swiss (standard) varieties of German.
%      The manual is part of the \textsf{babel-german} bundle.
%    \end{abstract}
%
%    \section{Aim and usage}
%
%    The \babel\ `language definition file' \file{ngermanb.ldf} documented in this manual provides
%    the \babel\ package with all language specific strings, settings and commands needed for writing
%    German texts, including texts in the Austrian and Swiss (standard) varieties of German.\footnote{%
%              The file \file{ngermanb.ldf} started as a re-implementation of the
%              package \file{ngerman.sty} by Bernd Raichle (cf.\,\cite{gerdoc}),
%              which itself builds on \file{german.sty}, originally developed by
%              Hubert Partl (cf.\,\cite{HP}) and later maintained by Bernd Raichle
%              as well. The initial re-implementation was done by Johannes Braams.}
%    Furthermore, it is assured that the correct hyphenation patterns for the respective
%    language or variety are used (see sec.~\ref{sec:patterns} for details).
%    The file, and hence this manual, addresses the contemporary (`reformed', i.\,e., post-1996) orthography.
%    For traditional (pre-1996) German orthography support, please refer to the complementary
%    \href{file:germanb.pdf}{manual for the \file{germanb.ldf} language definition file}.
%
%    In order to use the language definitions provided here, you need to use
%    the \babel\ package and pass the respective language\slash variety name\footnote{%
%        Obviously, the prefix \graph{n} in the language\slash variety
%        names stands for `new' (orthography) here, since the names \Lopt{austrian}, \Lopt{german}
%        and \Lopt{swissgerman} were already used for pre-1996 orthography.}
%    as an option, either of
%
%    \begin{itemize}
%       \setlength{\itemsep}{0pt}
%       \item |\usepackage[ngerman]{babel}|
%       \item |\usepackage[naustrian]{babel}|
%       \item |\usepackage[ngerman.capsz]{babel}|\newfeature{2.14}\footnote{%
%              See sec.~\ref{sec:capsz} on the \Lopt{capsz} modifier.}
%       \item |\usepackage[naustrian.capsz]{babel}|
%       \item |\usepackage[nswissgerman]{babel}|
%       \item |\usepackage[nswissgerman.toss]{babel}|\newfeature{2.10}\footnote{%
%              See sec.~\ref{sec:toss} on the \Lopt{toss} modifier.}
%    \end{itemize}
%    Using multiple varieties in parallel is possible;
%    consult the \babel\ manual \cite{babel} for details.
%
%    \section{Shorthands}
%
%    For all three varieties of German, the character |"| is made active
%    in order to provide some shorthand macros for frequently used special
%    characters as well as for better control of hyphenation, line breaks
%    and ligatures.
%    Table~\ref{tab:german-quote} provides an overview of the shorthands
%    that are provided by \textsf{babel-german} for \Lopt{ngerman}, \Lopt{naustrian}
%    and \Lopt{nswissgerman}.
%    \begin{table}[htb]
%     \begin{center}
%     \small
%     \caption{The extra definitions made
%              by \file{ngermanb.ldf}}\label{tab:german-quote}
%     \begin{tabular}{l>{\raggedright}p{.9\textwidth}}
%      \toprule
%      |"a|	& 	Umlaut \graph{\"a} (shorthand for |\"a|). Similar shorthands are
%                  	available for all other lower- and uppercase
%                  	vowels (umlauts: |"a|, |"o|, |"u|, |"A|, |"O|,
%                  	|"U|; tremata: |"e|, |"i|, |"E|, |"I|).			\tabularnewline
%      |"s|	& 	German \graph{\ss} (shorthand for |\ss{}|);
%                       but cf. sec.~\ref{sec:toss}.                             \tabularnewline
%      |"z|	& 	German \graph{\ss} (shorthand for |\ss{}|). 
% 			Differs to |"s| in uppercase version;
%                       but cf. sec.~\ref{sec:toss}.                             \tabularnewline
%      |"S|	& 	|\uppercase{"s}|, typeset as \graph{SS}(\graph{\ss}
%			is traditonally written as \graph{SS} in uppercase writing,
%                       but cf. sec.~\ref{sec:capsz} if you prefer a capital eszett). \tabularnewline
%      |"Z|	& 	|\uppercase{"z}|, typeset as \graph{SZ}. In traditional
%			spelling, \graph{\ss} could also be written as \graph{SZ}
%			instead of \graph{SS} in uppercase writing. Note that,
%			with reformed orthography, the \graph{SZ} variant has
%			been deprecated in favour of \graph{SS} only.		\tabularnewline
%     \verb="|= & 	Disable ligature at this position (e.\,g., at morpheme
%			boundaries, as in \verb=Auf"|lage=).                 	\tabularnewline
%      |"-|	& 	An additional breakpoint that does still
%             		allow for hyphenation at the breakpoints preset in
%             		the hyphenation patterns (as opposed to |\-|).       	\tabularnewline
%      |"=|	& 	An explicit hyphen with a breakpoint, allowing
%             		for hyphenation at the other points preset in the
%             		hyphenation patterns (as opposed to plain |-|);
%			useful for long compounds such as
%			|IT"=Dienstleisterinnen|.      				\tabularnewline
%      |"~|	& 	An explicit hyphen without a breakpoint. Useful for
%              		cases where the hyphen should stick at the following
%			syllable, e.\,g., |bergauf und "~ab| .			\tabularnewline
%      |""|	& 	A breakpoint that does not output a hyphen if the line 
%             		break is performed (consider parenthetical extensions
%			as in |(pseudo"~)""wissenschaftlich|).           	\tabularnewline
%      |"/|	& 	\newfeature{2.9}A slash that allows for a linebreak. 
%			As opposed to |\slash{}|, hyphenation at the breakpoints
%             		preset in the hyphenation patterns is still allowed.	\tabularnewline
%      |"*|	& 	\newfeature{2.14}An asterisk which assures the word can
%                       still be hyphenated at its defined breakpoints.
%                       Useful if you want to employ gender-sensitive writing
%                       (,gender star`).					
%                       Similar shorthands are available for the alternative
%                       gender-sensitive spellings, |":| and |"_|.		\tabularnewline
%      |"x|	& 	\newfeature{2.14}Inserts a gender mark which assures
%                       the word can still be hyphenated at its defined breakpoints.
%                       This is predefined to |*| but can be globally redefined
%                       by redefining the macro |\def\mkngender{*}|		\tabularnewline
%      |"`|	& 	German left double quotes \graph{,,}.               	\tabularnewline
%      |"'|	& 	German right double quotes \graph{``}.              	\tabularnewline
%      |"<|	& 	French/Swiss left double quotes \graph{<<}.   		\tabularnewline
%      |">|	& 	French/Swiss right double quotes \graph{>>}.  		\tabularnewline
%      \bottomrule
%     \end{tabular}
%     \end{center}
%    \end{table}
%
%    \enlargethispage{\baselineskip}
%    \noindent Table~\ref{tab:more-quote} lists some \babel\ macros for quotation marks
%    that might be used as an alternative to the quotation mark shorthands listed above.
%    \begin{table}[!h]
%     \begin{center}
%     \small
%     \caption{Alternative commands for quotation marks (provided by \babel)}\label{tab:more-quote}
%     \begin{tabular}{lp{.88\textwidth}}
%      \toprule
%      |\glqq|	&	German left double quotes \graph{,,}.				\tabularnewline
%      |\grqq|	&	German right double quotes \graph{``}.				\tabularnewline
%      |\glq|	&	German left single quotes \graph{,}.				\tabularnewline
%      |\grq|	&	German right single quotes \graph{`}.				\tabularnewline
%      |\flqq|	&	French/Swiss left double quotes \graph{<<}.			\tabularnewline
%      |\frqq|	&	French/Swiss right double quotes \graph{>>}.			\tabularnewline
%      |\flq|	&	French/Swiss left single quotes \graph{\guilsinglleft}.		\tabularnewline
%      |\frq|	&	French/Swiss right single quotes \graph{\guilsinglright}.	\tabularnewline
%      |\dq|	&	The straight quotation mark character \graph{\textquotedbl}.	\tabularnewline
%      \bottomrule
%     \end{tabular}
%     \end{center}
%    \end{table}
%
%   \section{Hyphenation patterns}\label{sec:patterns}
%
%   The question which hyphenation patterns are used by \Babel\ in case of the varieties of German needs some elaboration.
%   There is a set of established hyphenation patterns for pre- and post-1996 German orthography that has been available
%   with \TeX\ distributions for a long time (currently, these are shipped in form of the \texttt{dehypht} and \texttt{dehyphn} files).
%   These patterns, though, have many flaws (they produce wrong hyphenations, and not much is known about their construction). Therefore,
%   a group of people developed completely new patterns that do much better, the so-called `experimental' new hyphenation patterns of German,
%   distributed in the \textsf{dehyph-exptl} package \cite{exptl}.
%   As opposed to the old patterns, the new ones undergo constant improvement. The price for this, however, is that hyphenation and thus
%   the typeset document is subject to change with, and only due to, pattern updates.
%
%   Modern engines (i.\,e., \texttt{xetex} and \texttt{luatex}) have already embraced those new patterns, i.\,e., they are activated on these
%   engines by default. The classic \TeX\ engines (\texttt{tex}\slash\texttt{pdftex}), however, haven't: they continue to use the old patterns.
%   The reason for this is one of \TeX's quality standards: refrain, if ever possible, from changing the output of user's documents in the wake
%   of software updates.
%
%   This means that you need to explicitly activate the new patterns for a given document with the classic engines, should you want to use them
%   instead of the old ones. With \Babel, this can be done easily by means of the \cs{babelprovide} command and the \textsf{hyphenrules} option:
%   \begin{verbatim}
%     \babelprovide[hyphenrules=ngerman-x-latest]{ngerman}
%   \end{verbatim}\vspace{-\baselineskip}
%   For \Lopt{naustrian} and \Lopt{nswissgerman}, use a respectively adapted version of the above.
%
%   \section{Variety-specific options}%
%
%    \subsection{Capital eszett letter}\label{sec:capsz}
%
%    In\newfeature{2.14} 2008, a capital variant of the letter \graph{\ss} has been included to the Unicode standard
%    (U+1E9E), and in 2017, the capital eszett letter has been acknowledged in German orthography as a valid alternative
%    to \graph{SS} in uppercase writing of \graph{\ss}. The letter differs from its miniscule counterpart in that it is
%    usually more wide to match the form of uppercase letters.
%
%    If you want to use this letter, you can do so by using the \Babel\ modifier \Lopt{capsz}, which is supported
%    for the ngerman and naustrian varieties. I.\,e., pass \Lopt{ngerman.capsz} or \Lopt{naustrian.capsz}
%    (rather than \Lopt{ngerman} or \Lopt{naustrian}) as \babel\ option. As the eszett letter is not common
%    in Swiss German writing in general, the option is not supported there. Similarly, the pre-1996 varieties
%    do not support the letter either.
%
%    The modifier causes both |\MakeUppercase| and the |"S| shorthand to use the capital eszett letter.
%    Note that this requires a font which actually contains the glyph (otherwise, you still get \graph{SS})
%    and \LaTeX\ kernel 2023/06 at least.
%
%   \subsection{Handling of \texttt{"s} and \texttt{"z} in Swiss German}\label{sec:toss}
%
%   In\newfeature{2.10} Swiss (and Liechtensteinian) German writing, the use of \graph{\ss} is rather uncommon.
%   Swiss writers would normally use \graph{ss} where German or Austrian writers use the \graph{\ss} character
%   (e.\,g., \emph{Bu\ss e} vs.\,\emph{Busse}). When texts (or names) from other German speaking areas are quoted,
%   however, the spelling and hence the \graph{\ss} is often maintained  (particularly in scholarly writing where
%   the spelling of quoted text is not supposed to be touched).
%
%   We assume that (1) Swiss writers normally input \graph{ss} directly when they mean \graph{ss}, and that (2) the
%   \graph{\ss}-related shorthands |"s| and |"z| are useful also for Swiss writers when they actually need \graph{\ss},
%   the more so since the \graph{\ss} is not as directly accessible on Swiss keyboards as it is on German and Austrian ones.
%   On the other hand, there might be occasions where writers want to transfer a text from German or Austrian into Swiss
%   Standard German and adapt the spelling on the fly, i.\,e., transform all \graph{\ss} into \graph{ss}.
%
%   For this special case, we provide an option to make the \graph{\ss}-related shorthands |"s| and |"z| expand to the
%   respective digraphs\footnote{In graphematics, the term \emph{digraph} denotes two characters that make a functional pair
%   (which means, depending on the theoretical assumptions: they represent a single sound or they are semantically distinctive).},
%   \graph{ss} and \graph{sz}, rather than to \graph{\ss}. This is not the default behavior with
%   \Lopt{nswissgerman} since, as mentioned, there are situations when the \graph{\ss} is (and has to be) used in Swiss writing,
%   and normally, no shorthand is needed to input (or output) two simple \graph{s} characters. You can opt-in (and out) digraphical
%   expansion of |"s| and |"z| on a global and local level:
%   \begin{itemize}
%   \item To globally switch on the digraphical expansion, use the \Babel\ modifier \Lopt{toss} (read: `to \graph{ss}') with
%         \Lopt{nswissgerman}. I.\,e., pass \Lopt{nswissgerman.toss} (rather than \Lopt{nswissgerman}) as \babel\ option.
%
%   \item To switch on the digraphical expansion only locally, you can use the boolean switch |\ntosstrue|. Likewise,
%         |\ntossfalse| switches off (both locally and globally set) digraphical expansion.
%   \end{itemize}
%   Both these changes result in the following deviant behavior of two shorthands:\\
%     \begin{tabular}{l>{\raggedright}p{.9\textwidth}}
%      |"s|	& 	Expands to digraph \graph{ss}             \tabularnewline
%      |"z|	& 	Expands to digraph \graph{sz}             \tabularnewline
%     \end{tabular}
%
%
% \StopEventually{}
%
%
%    \section{Implementation}
%
%    \subsection{General settings}
%
%    If \file{ngermanb.ldf} is read via the deprecated \babel\ option
%    \Lopt{ngermanb}, we make it behave as if \Lopt{ngerman} was specified.
%    \begin{macrocode}
\def\tmpa{ngermanb}
\ifx\CurrentOption\tmpa
  \def\CurrentOption{ngerman}
\fi
%    \end{macrocode}
%
%    The macro |\LdfInit| takes care of preventing that this file is
%    loaded more than once with the same option, checking the category
%    code of the \texttt{@} sign, etc.
%    \begin{macrocode}
\LdfInit\CurrentOption{captions\CurrentOption}
%    \end{macrocode}
%
%    We define some helper macros that help us to identify later on
%    which variety of German we are currently dealing with.
% \changes{Version 2.9a=Version 2.10}{2016/11/03}{Add helper macros to identify the current option.}
% \changes{Version 2.9d=Version 2.13}{2021/02/27}{Move option helper macros after \cs{LdfInit} to fix plain tex usage.}
% \iffalse
%<*ngermanb>
% \fi
%    \begin{macrocode}
\def\bbl@opt@ngerman{ngerman}
\def\bbl@opt@ngermanb{ngermanb}
\def\bbl@opt@naustrian{naustrian}
\def\bbl@opt@nswissgerman{nswissgerman}
%    \end{macrocode}
%
%    If \file{ngermanb.ldf} is read as an option, i.e., by the |\usepackage|
%    command, \Lopt{ngerman} could be an `unknown' language, so we
%    have to make it known.  We check for the existence of
%    |\l@ngerman| and issue a warning if it is unknown.
%
%    \begin{macrocode}
\ifx\l@ngerman\@undefined
  \@nopatterns{German (new orthography)}
  \adddialect\l@ngerman0
\fi
%    \end{macrocode}
%
%    We set \Lopt{naustrian} and \Lopt{nswissgerman} as dialects
%    of \Lopt{ngerman}, since they use the same hyphenation patterns
%    than \Lopt{ngerman}. If no \Lopt{ngerman} patterns are found,
%    we issue a warning.
%    \changes{Version 2.8}{2016/11/01}{Only add dialects if the respective
%                                       variety is loaded}
%    \changes{Version 2.9}{2016/11/02}{Do not attempt to load \cs{l@naustrian}
%                                      or \cs{l@nswissgerman}, which do not exist}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@naustrian
  \ifx\l@ngerman\@undefined
    \@nopatterns{German (new orthography), needed by Austrian (new orthography)}
    \adddialect\l@naustrian0
  \else
    \adddialect\l@naustrian\l@ngerman
  \fi
\fi
\ifx\CurrentOption\bbl@opt@nswissgerman
  \ifx\l@ngerman\@undefined
    \@nopatterns{German (new orthography), needed by Swiss Standard German (new orthography)}
    \adddialect\l@nswissgerman0
  \else
    \adddialect\l@nswissgerman\l@ngerman
  \fi
\fi
%    \end{macrocode}
%
%    \subsection{Language-specific strings (captions)}
%
%    The next step consists of defining macros that provide language specific strings
%    and settings.
%
%  \begin{macro}{\@captionsngerman}
%  \changes{Version 2.6n}{2008/07/06}{Corrected typo
%    \cs{captionnsgerman}} 
%    The macro |\@captionsngerman| defines all strings used in the four
%    standard document classes provided with \LaTeX\ for German.
%    This is an internal macro that is inherited and modified by the following
%    macros for the respective language varieties.
%
% \changes{Version 2.7}{2013/12/13}{Split \cs{captionsngerman} from
%                                    \cs{captionsnaustrian} and
%                                    \cs{captionsnswissgerman}.}
% \changes{Version 2.7}{2013/12/13}{Changed \cs{enclname} in
%                                     \Lopt{naustrian} to
%                                    \emph{Beilage(n)}.}
% \changes{Version 2.6k}{2000/09/20}{Added \cs{glossaryname}}
% \changes{Version 2.8}{2016/11/01}{Define trans-variational base captions
%                                   which are loaded and modified by the varieties}
%    \begin{macrocode}
\@namedef{@captionsngerman}{%
  \def\prefacename{Vorwort}%
  \def\refname{Literatur}%
  \def\abstractname{Zusammenfassung}%
  \def\bibname{Literaturverzeichnis}%
  \def\chaptername{Kapitel}%
  \def\appendixname{Anhang}%
  \def\contentsname{Inhaltsverzeichnis}%
  \def\listfigurename{Abbildungsverzeichnis}%
  \def\listtablename{Tabellenverzeichnis}%
  \def\indexname{Index}%
  \def\figurename{Abbildung}%
  \def\tablename{Tabelle}%
  \def\partname{Teil}%
  \def\enclname{Anlage(n)}%
  \def\ccname{Verteiler}%
  \def\headtoname{An}%
  \def\pagename{Seite}%
  \def\seename{siehe}%
  \def\alsoname{siehe auch}%
  \def\proofname{Beweis}%
  \def\glossaryname{Glossar}%
}
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\captionsngerman}
%    The macro |\captionsngerman| is identical to |\@captionsngerman|,
%    but only defined if \Lopt{ngerman} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsngerman} if
%                                    \Lopt{ngerman} is requested.}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@ngerman
  \@namedef{captionsngerman}{%
    \@nameuse{@captionsngerman}%
  }
\fi
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\captionsnaustrian}
%    The macro |\captionsnaustrian| builds on |\@captionsngerman|, but
%    redefines some strings following Austrian conventions (for the
%    respective variants, cf. \cite{vwb}). It is only defined if
%    \Lopt{naustrian} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsnaustrian} if
%                                    \Lopt{naustrian} is requested.}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@naustrian
  \@namedef{captionsnaustrian}{%
    \@nameuse{@captionsngerman}%
    \def\enclname{Beilage(n)}%
  }
\fi
%    \end{macrocode}
%  \end{macro}
%  \begin{macro}{\captionsnswissgerman}
%    The macro |\captionsnswissgerman| builds on |\@captionsngerman|, but
%    redefines some strings following Swiss conventions (for the
%    respective variants, cf. \cite{vwb}). It is only defined if
%    \Lopt{nswissgerman} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{captionsnswissgerman} if
%                                    \Lopt{nswissgerman} is requested.}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@nswissgerman
  \@namedef{captionsnswissgerman}{%
    \@nameuse{@captionsngerman}%
    \def\enclname{Beilage(n)}%
  }
\fi
%    \end{macrocode}
%  \end{macro}
%
%  \subsection{Date localizations}
%
%  \begin{macro}{\month@ngerman}
%    The macro |\month@ngerman| defines German month names for all varieties.
%    \begin{macrocode}
\def\month@ngerman{\ifcase\month\or
  Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or
  Juli\or August\or September\or Oktober\or November\or Dezember\fi}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\datengerman}
%    The macro |\datengerman| redefines the command
%    |\today| to produce German dates. It is only defined if
%    \Lopt{ngerman} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{datengerman} if
%                                    \Lopt{ngerman} is requested.}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@ngerman
  \def\datengerman{\def\today{\number\day.~\month@ngerman
      \space\number\year}}
\fi
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\datenswissgerman}
%    \changes{Version 2.7}{2013/12/13}{Added \cs{datenswissgerman}.}
%    The macro |\datenswissgerman| does the same for Swiss Standard German dates.
%    The result is identical to German. This macro is only defined if
%    \Lopt{nswissgerman} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{datenswissgerman} if
%                                    \Lopt{nswissgerman} is requested.}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@nswissgerman
  \def\datenswissgerman{\def\today{\number\day.~\month@ngerman
      \space\number\year}}
\fi
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\datenaustrian}
%    The macro |\datenaustrian| redefines the command
%    |\today| to produce Austrian versions of the German dates.
%    Here, the naming of January (,,J\"anner``) differs from the
%    other German varieties. The macro is only defined if
%    \Lopt{naustrian} is requested.
%  \changes{Version 2.8}{2016/11/01}{Only define \cs{datenaustrian} if
%                                    \Lopt{naustrian} is requested.}
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@naustrian
  \def\datenaustrian{\def\today{\number\day.~\ifnum1=\month
    J\"anner\else \month@ngerman\fi \space\number\year}}
\fi
%    \end{macrocode}
%  \end{macro}
%
%  \subsection{Extras}
%
%  \begin{macro}{\extrasnaustrian}
%  \begin{macro}{\extrasnswissgerman}
%    \changes{Version 2.7}{2013/12/13}{Added \cs{extrasnswissgerman}.}
%  \begin{macro}{\extrasngerman}
%  \begin{macro}{\noextrasnaustrian}
%  \begin{macro}{\noextrasnswissgerman}
%    \changes{Version 2.7}{2013/12/13}{Added \cs{noextrasnswissgerman}.}
%  \begin{macro}{\noextrasngerman}
%    The macros |\extrasngerman|, |\extrasnaustrian|
%    and |\extrasnswissgerman|, respectively, will perform all the extra 
%    definitions needed for the German language or the respective
%    variety. The macro |\noextrasngerman| is used to cancel the
%    actions of |\extrasngerman|. |\noextrasnaustrian| and
%    |\noextrasnswissgerman| behave analoguously.
%
%    First, the character \texttt{"} is declared active for all German
%    varieties. This is done once, later on its definition may vary.
%    \begin{macrocode}
\initiate@active@char{"}
%    \end{macrocode}
%
%    Depending on the option with which the language definition file
%    has been loaded, the macro |\extrasngerman|, |\extrasnaustrian|
%    or |\extrasnswissgerman| is defined. Each of those is identical:
%    they load the shorthands defined below and activate the \texttt{"}
%    character.
%    \begin{macrocode}
\@namedef{extras\CurrentOption}{%
  \languageshorthands{ngerman}%
}
\expandafter\addto\csname extras\CurrentOption\endcsname{%
  \bbl@activate{"}}
%    \end{macrocode}
%
%   \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement boolean switch
%            \cs{ntosstrue}\slash\cs{ntossfalse} to customize \graph{\ss}-related
%            shorthands in Swiss Standard German context.}
%   \changes{Version 2.9a=Version 2.10}{2018/03/28}{Implement modifier \Lopt{toss}
%            to customize \graph{\ss}-related shorthands in Swiss Standard German context.}
%   \begin{macro}{toss}
%   \begin{macro}{\ntosstrue}
%   \begin{macro}{\ntossfalse}
%    For Swiss Standard German, we allow optionally to expand the \graph{\ss}-related
%    shorthands the Swiss way, i.\,e. as \graph{ss} (globally, if the modifier \Lopt{toss}
%    is used or locally if |\ntosstrue|).
%    \begin{macrocode}
\newif\ifntoss\ntossfalse
\newif\ifbbl@ntoss\bbl@ntossfalse
\ifx\bbl@mod@nswissgerman\@undefined\else
  \@expandtwoargs\in@{,toss,}{,\bbl@mod@nswissgerman,}
  \ifin@
    \ntosstrue
  \fi
  \addto\extrasnswissgerman{%
    \ifntoss\bbl@ntosstrue\else\bbl@ntossfalse\fi}
\fi
%    \end{macrocode}
%   \end{macro}
%   \end{macro}
%   \end{macro}
%
%   \begin{macro}{capsz}
%   \changes{Version 2.9e=Version 2.14}{2024/01/19}{Implement modifier \Lopt{capsz}
%            to use capital eszett letter in Austrian and German varieties if possible.}
%    For German and Austrian Standard German, we allow optionally to uppercase \graph{\ss}
%    with the capital eszett letter rather as \graph{SS} if the font provides the glyph
%    (if the modifier \Lopt{capsz} is used).
%    \begin{macrocode}
\newif\ifcapsz\capszfalse
\newif\ifbbl@capsz\bbl@capszfalse
\ifx\bbl@mod@ngerman\@undefined\else
  \@expandtwoargs\in@{,capsz,}{,\bbl@mod@ngerman,}
  \ifin@
    \capsztrue
  \fi
  \addto\extrasngerman{%
    \ifcapsz\bbl@capsztrue\bbl@csarg\xdef{casing@ngerman}{de-x-eszett}%
    \else\bbl@csarg\xdef{casing@ngerman}{de}\bbl@capszfalse\fi}
\fi
\newif\if@at@capsz\@at@capszfalse
\ifx\bbl@mod@naustrian\@undefined\else
  \@expandtwoargs\in@{,capsz,}{,\bbl@mod@naustrian,}
  \ifin@
    \@at@capsztrue
  \fi
  \addto\extrasnaustrian{%
    \if@at@capsz\bbl@capsztrue\bbl@csarg\xdef{casing@naustrian}{de-x-eszett}%
    \else\bbl@csarg\xdef{casing@naustrian}{de}\bbl@capszfalse\fi}
\fi
%    \end{macrocode}
%   \end{macro}
%
%    Next, again depending on the option with which the language definition
%    file has been loaded, the macro |\noextrasngerman|, |\noextrasnaustrian|
%    or |\noextrasnswissgerman| is defined. 
%    These deactivate the \texttt{"} character and thus turn the shorthands
%    off again outside of the respective variety.
% \changes{Version 2.6j}{1999/12/16}{Deactivate shorthands outside of
%    German}
% \changes{Version 2.7}{2013/12/13}{Deactivate shorthands also outside of
%    \Lopt{naustrian} and \Lopt{nswissgerman}.}
%    \begin{macrocode}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
  \bbl@deactivate{"}}
%    \end{macrocode}
%
%    Now deactivate the settings that might have been done by the modifiers:
%    \begin{macrocode}
\ifx\CurrentOption\bbl@opt@nswissgerman
  \addto\noextrasnswissgerman{\bbl@ntossfalse}
\fi
\ifx\CurrentOption\bbl@opt@ngerman
  \ifbbl@capsz
    \addto\noextrasngerman{\bbl@capszfalse\bbl@csarg\xdef{casing@ngerman}{de}}
  \fi
\fi
\ifx\CurrentOption\bbl@opt@naustrian
  \ifbbl@capsz
     \addto\noextrasnaustrian{\bbl@capszfalse\bbl@csarg\xdef{casing@naustrian}{de}}
  \fi
\fi
%    \end{macrocode}
%
%
%    In order for \TeX\ to be able to hyphenate German words which
%    contain `\ss' (in the \texttt{OT1} position |^^Y|) we have to
%    give the character a nonzero |\lccode| (see Appendix H, the \TeX
%    book).
%    \begin{macrocode}
\expandafter\addto\csname extras\CurrentOption\endcsname{%
  \babel@savevariable{\lccode25}%
  \lccode25=25}
%    \end{macrocode}
%
%    The umlaut accent macro |\"| is changed to lower the umlaut dots.
%    The redefinition is done with the help of |\umlautlow|.
%    \begin{macrocode}
\expandafter\addto\csname extras\CurrentOption\endcsname{%
  \babel@save\"\umlautlow}
%    \end{macrocode}
% \changes{Version 2.7}{2013/12/13}{Do not use \cs{@namedef} when
%    \cs{noextras} is already defined and should not be overwritten.}
%    \begin{macrocode}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
  \umlauthigh}
%    \end{macrocode}
%    The current 
%    version of the `new' German hyphenation patterns (\file{dehyphn.tex})
%    is to be used with |\lefthyphenmin| and |\righthyphenmin| set to~2. 
% \changes{Version 2.6k}{2000/09/22}{Now use \cs{providehyphenmins} to
%    provide a default value}
%    \begin{macrocode}
\providehyphenmins{\CurrentOption}{\tw@\tw@}
%    \end{macrocode}
%    For German texts we need to assure that |\frenchspacing| is
%    turned on.
% \changes{Version 2.6m}{2001/01/26}{Turn frenchspacing on, as in
%    \file{german.sty}}
%    \begin{macrocode}
\expandafter\addto\csname extras\CurrentOption\endcsname{%
  \bbl@frenchspacing}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
  \bbl@nonfrenchspacing}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%  \end{macro}
%
%    \subsection{Active characters, macros \& shorthands}
%
%    The following code is necessary because we need an extra active
%    character. This character is then used as indicated in
%    table~\ref{tab:german-quote}.
%
%    In order to be able to define the function of |"|, we first define a
%    couple of `support' macros.
%
%
%  \changes{Version 2.9e=Version 2.14}{2024/01/19}{Output capital eszett for \texttt{"S} if possible and required}
%  \begin{macro}{\dq}
%    We save the original double quotation mark character in |\dq| to keep
%    it available, the math accent |\"| can now be typed as |"|.
%
%    Furthermore, we define some helper macros for contextual \graph{\ss} handling.
%    \begin{macrocode}
\begingroup \catcode`\"12
\def\x{\endgroup
  \def\dq{"}
  \def\@SS{\mathchar"7019 }
  \def\bbl@ss{\ifbbl@ntoss ss\else\textormath{\ss}{\@SS{}}\fi}
  \def\bbl@SS{\ifbbl@capsz\MakeUppercase{\ss}\else SS\fi}
  \def\bbl@sz{\ifbbl@ntoss sz\else\textormath{\ss}{\@SS{}}\fi}
  \def\bbl@SZ{SZ}
}
\x
%    \end{macrocode}
%  \end{macro}
%
%    Since we need to add special cases for hyperref which needs hyperref's |\texorpdfstring|,
%    we provide a dummy command for the case that hyperref is not loaded.
% \changes{Version 2.9c=Version 2.12}{2020/07/21}{Properly handle shorthands in hyperref pdf strings}
%    \begin{macrocode}
\providecommand\texorpdfstring[2]{#1}
%    \end{macrocode}
%
%    Now we can define the doublequote shorthands: the umlauts,
%    \begin{macrocode}
\declare@shorthand{ngerman}{"a}{\textormath{\"{a}\bbl@allowhyphens}{\ddot a}}
\declare@shorthand{ngerman}{"o}{\textormath{\"{o}\bbl@allowhyphens}{\ddot o}}
\declare@shorthand{ngerman}{"u}{\textormath{\"{u}\bbl@allowhyphens}{\ddot u}}
\declare@shorthand{ngerman}{"A}{\textormath{\"{A}\bbl@allowhyphens}{\ddot A}}
\declare@shorthand{ngerman}{"O}{\textormath{\"{O}\bbl@allowhyphens}{\ddot O}}
\declare@shorthand{ngerman}{"U}{\textormath{\"{U}\bbl@allowhyphens}{\ddot U}}
%    \end{macrocode}
%    tremata,
%    \begin{macrocode}
\declare@shorthand{ngerman}{"e}{\textormath{\"{e}}{\ddot e}}
\declare@shorthand{ngerman}{"E}{\textormath{\"{E}}{\ddot E}}
\declare@shorthand{ngerman}{"i}{\textormath{\"{\i}}%
                              {\ddot\imath}}
\declare@shorthand{ngerman}{"I}{\textormath{\"{I}}{\ddot I}}
%    \end{macrocode}
%    German \ss{},
%    \begin{macrocode}
\declare@shorthand{ngerman}{"s}{\bbl@ss}
\declare@shorthand{ngerman}{"S}{\bbl@SS}
\declare@shorthand{ngerman}{"z}{\bbl@sz}
\declare@shorthand{ngerman}{"Z}{\bbl@SZ}
%    \end{macrocode}
%    German and French/Swiss quotation marks,
%    \begin{macrocode}
\declare@shorthand{ngerman}{"`}{\glqq}
\declare@shorthand{ngerman}{"'}{\grqq}
\declare@shorthand{ngerman}{"<}{\flqq}
\declare@shorthand{ngerman}{">}{\frqq}
%    \end{macrocode}
%    some additional commands (hyphenation, line breaking and ligature control):
%  \changes{Version 2.9}{2016/11/02}{Add \texttt{"/} shortcut for breakable slash
%                                    (taken from \file{dutch.ldf})}
%  \changes{Version 2.9b=Version 2.11}{2018/12/08}{Fix old hyphenation regression introduced with \babel\ 3.7
%                                     (2002) in a number of shorthands (change of meaning of \cs{allowhyphens}
%                                      vs. \cs{bbl@allowhyphens})}
%    \begin{macrocode}
\declare@shorthand{ngerman}{"-}{\nobreak\-\bbl@allowhyphens}
\declare@shorthand{ngerman}{"|}{%
  \texorpdfstring{\textormath{\penalty\@M\discretionary{-}{}{\kern.03em}\bbl@allowhyphens}{}}% TeX string
                 {}% PDF string
}
\declare@shorthand{ngerman}{""}{\hskip\z@skip}
\declare@shorthand{ngerman}{"~}{%
  \texorpdfstring{\textormath{\leavevmode\hbox{-}}{-}}% tex string
                 {-}% PDF string
}
\declare@shorthand{ngerman}{"=}{\penalty\@M-\hskip\z@skip}
\declare@shorthand{ngerman}{"/}{\textormath
  {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}
%    \end{macrocode}
%  and some shorthands to support gender-sensitive spelling:
%  \changes{Version 2.9e=Version 2.14}{2024/01/19}{Add \texttt{"*}, \texttt{":}, \texttt{"\_}, and \texttt{"x}
%                                     shorthands to support gender-sensitive writing}
%    \begin{macrocode}
\def\mkngender{*}
\declare@shorthand{ngerman}{":}{\nobreak:\bbl@allowhyphens}
\declare@shorthand{ngerman}{"*}{\nobreak*\bbl@allowhyphens}
\declare@shorthand{ngerman}{"_}{\nobreak\_\bbl@allowhyphens}
\declare@shorthand{ngerman}{"x}{\nobreak\mkngender\bbl@allowhyphens}
%    \end{macrocode}
%
%  \begin{macro}{\mdqon}
%  \begin{macro}{\mdqoff}
%    All that's left to do now is to  define a couple of commands
%    for reasons of compatibility with \file{german.sty}.
%    \begin{macrocode}
\def\mdqon{\shorthandon{"}}
\def\mdqoff{\shorthandoff{"}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%    The macro |\ldf@finish| takes care of looking for a
%    configuration file, setting the main language to be switched on
%    at |\begin{document}| and resetting the category code of
%    \texttt{@} to its original value.
%    \begin{macrocode}
\ldf@finish\CurrentOption
%    \end{macrocode}
% \iffalse
%</ngermanb>
% \fi
%
%  \subsection{\file{naustrian.ldf}, \file{ngerman.ldf} and \file{nswissgerman.ldf}}
%
% \changes{Version 2.7}{2013/12/13}{Generate portmanteau files \file{naustrian.ldf},
%            \file{ngerman.ldf} and \file{nswissgerman.ldf}.}
%
%  \Babel\ expects a \file{\langvar{}.ldf} file for each \langvar. So we create portmanteau
%    ldf files for \Lopt{naustrian}, \Lopt{ngerman} and \Lopt{nswissgerman}.\footnote{%
%    For \Lopt{naustrian} and \Lopt{ngerman}, this is not strictly necessary,
%    since \babel\ provides aliases for these languages (pointing to \Lopt{ngermanb}).
%    However, since \babel\ does not officially support these aliases anymore after
%    the language definition files have been separated from the core, we provide
%    the whole range of ldf files for the sake of completeness.} These files themselves
%    only load \file{ngermanb.ldf}, which does the real work:
%
% \iffalse
%<*naustrian|ngerman|nswissgerman>
% \fi
%    \begin{macrocode}
\input ngermanb.ldf\relax
%    \end{macrocode}
% \iffalse
%</naustrian|ngerman|nswissgerman>
% \fi
%
%\PrintChanges
%
%  \begin{thebibliography}{9}
%    \bibitem{vwb} Ammon, Ulrich et al.:
%       \emph{Variantenw\"orterbuch des Deutschen. Die Standardsprache in \"Osterreich, der Schweiz
%        und Deutschland sowie in Liechtenstein, Luxemburg, Ostbelgien und S\"udtirol.}
%        Berlin, New York: De Gruyter.
%    \bibitem{babel} Braams, Johannes and Bezos, Javier:
%       \emph{Babel}.
%       \url{http://www.ctan.org/pkg/babel}.
%    \bibitem{exptl} Deutschsprachige Trennmustermannschaft:
%       \emph{dehyph-exptl -- Experimental hyphenation patterns for the German language}.
%       \url{https://ctan.org/pkg/dehyph-exptl}.
%    \bibitem{HP} Partl, Hubert:
%      \emph{German \TeX}, \emph{TUGboat} 9/1 (1988), p.~70--72.
%    \bibitem{hyph-utf8} Manuel P\'egouri\'e-Gonnard et al.:
%      \emph{hyph-utf8 -- Hyphenation patterns expressed in UTF-8}.
%       \url{https://ctan.org/pkg/hyph-utf8}.
%    \bibitem{gerdoc} Raichle, Bernd:
%       \emph{German}.
%       \url{http://www.ctan.org/pkg/german}.
%  \end{thebibliography}
%
% \Finale
%%
%% \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         \~}
%%
\endinput