% Language definition file (part of polyglossia v2.3 -- 2024/09/23)
%
\ProvidesFile{gloss-german.ldf}[polyglossia: module for German]

\PolyglossiaSetup{german}{
  bcp47=de-DE,
  bcp47-language=de,
  bcp47-region=DE,
  bcp47-variant=1996,
  bcp47-script=Latn,
  hyphenmins={2,2},
  frenchspacing=true,
  fontsetup=true,
  langtag=DEU,
  babelname=ngerman
}

% BCP-47 compliant aliases
\setlanguagealias*{german}{de}
\setlanguagealias*[variant=swiss,spelling=new]{german}{de-CH}
\setlanguagealias*[variant=austrian,spelling=new]{german}{de-AT}
\setlanguagealias*[variant=german,spelling=new]{german}{de-DE}
\setlanguagealias*[variant=swiss,spelling=new,script=blackletter]{german}{de-Latf-CH}
\setlanguagealias*[variant=german,spelling=new,script=blackletter]{german}{de-Latf-DE}
\setlanguagealias*[variant=austrian,spelling=new,script=blackletter]{german}{de-Latf-AT}
\setlanguagealias*[variant=austrian,spelling=old]{german}{de-AT-1901}
\setlanguagealias*[variant=swiss,spelling=new]{german}{de-CH-1996}
\setlanguagealias*[variant=austrian,spelling=new]{german}{de-AT-1996}
\setlanguagealias*[variant=german,spelling=old]{german}{de-DE-1901}
\setlanguagealias*[variant=swiss,spelling=old,script=blackletter]{german}{de-Latf-CH-1901}
\setlanguagealias*[variant=swiss,spelling=old]{german}{de-CH-1901}
\setlanguagealias*[variant=austrian,spelling=old,script=blackletter]{german}{de-Latf-AT-1901}
\setlanguagealias*[variant=swiss,spelling=new,script=blackletter]{german}{de-Latf-CH-1996}
\setlanguagealias*[script=blackletter]{german}{de-Latf}
\setlanguagealias*[variant=german,spelling=new]{german}{de-DE-1996}
\setlanguagealias*[variant=german,spelling=old,script=blackletter]{german}{de-Latf-DE-1901}
\setlanguagealias*[variant=german,spelling=new,script=blackletter]{german}{de-Latf-DE-1996}
\setlanguagealias*[variant=austrian,spelling=new,script=blackletter]{german}{de-Latf-AT-1996}

% Babel aliases
\setlanguagealias[variant=austrian,spelling=old]{german}{austrian}
\setlanguagealias[variant=austrian,spelling=new]{german}{naustrian}
\setlanguagealias[variant=german,spelling=old]{german}{germanb}
\setlanguagealias[variant=german,spelling=new]{german}{ngerman}
\setlanguagealias[variant=swiss,spelling=old]{german}{swissgerman}
\setlanguagealias[variant=swiss,spelling=new]{german}{nswissgerman}

\newif\if@german@oldspelling
\@german@oldspellingfalse

\newif\if@austrian@locale
\@austrian@localefalse
\newif\if@swiss@locale
\@swiss@localefalse

\def\german@set@babelname{%
  \if@german@oldspelling
     \if@swiss@locale
         \if@german@blackletter
           \SetLanguageKeys{german}{babelname=swissgerman,bcp47=de-Latf-CH-1901,bcp47-language=de,bcp47-region=CH,bcp47-variant=1901,bcp47-script=Latf}%
         \else
           \SetLanguageKeys{german}{babelname=swissgerman,bcp47=de-CH-1901,bcp47-language=de,bcp47-region=CH,bcp47-variant=1901,bcp47-script=Latn}%
         \fi
     \else
     \if@austrian@locale
         \if@german@blackletter
            \SetLanguageKeys{german}{babelname=austrian,bcp47=de-Latf-AT-1901,bcp47-language=de,bcp47-region=AT,bcp47-variant=1901,bcp47-script=Latf}%
         \else
            \SetLanguageKeys{german}{babelname=austrian,bcp47=de-AT-1901,bcp47-language=de,bcp47-region=AT,bcp47-variant=1901,bcp47-script=Latn}%
         \fi
     \else
         \if@german@blackletter
            \SetLanguageKeys{german}{babelname=german,bcp47=de-Latf-DE-1901,bcp47-script=Latf,bcp47-language=de,bcp47-region=DE,bcp47-variant=1901,bcp47-script=Latf}%
         \else
            \SetLanguageKeys{german}{babelname=german,bcp47=de-DE-1901,bcp47-language=de,bcp47-region=DE,bcp47-variant=1901,bcp47-script=Latn}%
         \fi
     \fi\fi
  \else
     \if@swiss@locale
         \if@german@blackletter
           \SetLanguageKeys{german}{babelname=nswissgerman,bcp47=de-Latf-CH,bcp47-language=de,bcp47-region=CH,bcp47-variant=1996,bcp47-script=Latf}%
         \else
           \SetLanguageKeys{german}{babelname=nswissgerman,bcp47=de-CH,bcp47-language=de,bcp47-region=CH,bcp47-variant=1996,bcp47-script=Latn}%
         \fi
     \else
     \if@austrian@locale
         \if@german@blackletter
           \SetLanguageKeys{german}{babelname=naustrian,bcp47=de-Latf-AT,bcp47-language=de,bcp47-region=AT,bcp47-variant=1996,bcp47-script=Latf}%
         \else
           \SetLanguageKeys{german}{babelname=naustrian,bcp47=de-AT,bcp47-language=de,bcp47-region=AT,bcp47-variant=1996,bcp47-script=Latn}%
         \fi
     \else
         \if@german@blackletter
           \SetLanguageKeys{german}{babelname=ngerman,bcp47=de-Latf-DE,bcp47-language=de,bcp47-region=DE,bcp47-variant=1996,bcp47-script=Latf}%
         \else
           \SetLanguageKeys{german}{babelname=ngerman,bcp47=de-DE,bcp47-language=de,bcp47-region=DE,bcp47-variant=1996,bcp47-script=Latn}%
         \fi
     \fi\fi
  \fi
}

\newif\if@german@blackletter

\DeclareKeys[polyglossia/gloss/german]
  {
    babelshorthands.if = german@babelshorthands,
    babelshorthands.default:n = true,
    latesthyphen.if = german@latesthyphen,
    latesthyphen.default:n = true,
    capitaleszett.choice:,
    capitaleszett / true.code = 
      {% MakeUppercase capitalizes the eszett (U+00DF) with U+1E9E
        \SetLanguageKeys{german}{bcp47-casing=de-x-eszett,bcp47-extension-x=eszett}%
      },
    capitaleszett / false.code =
      {% Capitalize eszett as <SS>
        \SetLanguageKeys{german}{bcp47-casing=de,bcp47-extension-x={}}%
      },
    capitaleszett.default:n = true,
    script.choice:,
    script / latin.code =
      {%
        \@german@blackletterfalse
        \german@set@babelname
      },
    script / blackletter.code =
      {%
        \@german@blacklettertrue
        \german@set@babelname
      },
    script / fraktur.code =
      {%
        \@german@blacklettertrue
        \german@set@babelname
      },
    script.default:n = latin,
    script/unknown.code = \xpg@warning{Unknown German script `#1'},
    spelling.choice:,
    spelling / new.code =
      {%
        \@german@oldspellingfalse
        \german@set@babelname
      },
    spelling / old.code =
      {%
        \@german@oldspellingtrue
        \german@set@babelname
      },
    spelling / 1901.code =
      {%
        \@german@oldspellingtrue
        \german@set@babelname
      },
    spelling / 1996.code =
      {%
        \@german@oldspellingfalse
        \german@set@babelname
      },
    spelling.default:n = new,
    spelling/unknown.code = \xpg@warning{Unknown German spelling `#1'},
    variant.choice:,
    variant / german.code =
      {%
        \@swiss@localefalse
        \@austrian@localefalse
        \german@set@babelname
      },
    variant / austrian.code =
      {%
        \@austrian@localetrue
        \@swiss@localefalse
        \german@set@babelname
      },
    variant / swiss.code =
      {%
        \@swiss@localetrue
        \@austrian@localefalse
        \IfLanguageDefinedF{swissgerman}
           {%
             \xpg@warning{No hyphenation patterns were loaded for "Swiss German (Old Spelling)"\MessageBreak
	                  I will use the standard patterns for German (old spelling) instead}%
	                 \adddialect\l@swissgerman\l@german\relax
           }%
        \german@set@babelname
      },
    variant.default:n = german,
    variant/unknown.code = \xpg@warning{Unknown German variant `#1'}
  }
  

\SetGlossOptions{german}{spelling,script,variant}

% Register default options
\InitializeGlossOptions{german}{variant=german,spelling=new,script=latin,babelshorthands=false}
% Register alias options
\SetLanguageAliasValues{german}{spelling}{new,1996}
\SetLanguageAliasValues{german}{spelling}{old,1901}
\SetLanguageAliasValues{german}{script}{blackletter,fraktur}

\ifsystem@babelshorthands
  \SetGlossOptions{german}{babelshorthands=true}
\else
  \SetGlossOptions{german}{babelshorthands=false}
\fi

\InitializeBabelShorthands

\def\german@shorthands{%
  \xpg@activate@shorthands%
  \def\language@group{german}%
  \declare@shorthand{german}{"`}{„}%
  \declare@shorthand{german}{"'}{“}%
  \declare@shorthand{german}{"<}{«}%
  \declare@shorthand{german}{">}{»}%
  \declare@shorthand{german}{"c}{\textormath{\bbl@disc@german ck}{c}}%
  \declare@shorthand{german}{"C}{\textormath{\bbl@disc@german CK}{C}}%
  \declare@shorthand{german}{"F}{\textormath{\bbl@disc@german F{FF}}{F}}%
  \declare@shorthand{german}{"l}{\textormath{\bbl@disc@german l{ll}}{l}}%
  \declare@shorthand{german}{"L}{\textormath{\bbl@disc@german L{LL}}{L}}%
  \declare@shorthand{german}{"m}{\textormath{\bbl@disc@german m{mm}}{m}}%
  \declare@shorthand{german}{"M}{\textormath{\bbl@disc@german M{MM}}{M}}%
  \declare@shorthand{german}{"n}{\textormath{\bbl@disc@german n{nn}}{n}}%
  \declare@shorthand{german}{"N}{\textormath{\bbl@disc@german N{NN}}{N}}%
  \declare@shorthand{german}{"p}{\textormath{\bbl@disc@german p{pp}}{p}}%
  \declare@shorthand{german}{"P}{\textormath{\bbl@disc@german P{PP}}{P}}%
  \declare@shorthand{german}{"r}{\textormath{\bbl@disc@german r{rr}}{r}}%
  \declare@shorthand{german}{"R}{\textormath{\bbl@disc@german R{RR}}{R}}%
  \declare@shorthand{german}{"t}{\textormath{\bbl@disc@german t{tt}}{t}}%
  \declare@shorthand{german}{"T}{\textormath{\bbl@disc@german T{TT}}{T}}%
  \declare@shorthand{german}{"f}{\texorpdfstring{\textormath{\bbl@discff}{f}}{f}}%
  \def\bbl@discff{\penalty\@M
    \afterassignment\bbl@insertff \cslet{bbl@nextff}{ }}%
  \def\bbl@insertff{%
    \if f\bbl@nextff
      \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
    {\relax\discretionary{ff-}{f}{ff}\allowhyphens}{f\bbl@nextff}}%
  \cslet{bbl@nextff}{f}%
  \declare@shorthand{german}{"-}{\nobreak\-\nobreak\hskip\z@skip}%
  \declare@shorthand{german}{"|}{\textormath{\penalty\@M\discretionary{-}{}{\kern.03em}}{}}%
  \declare@shorthand{german}{""}{\hskip\z@skip}%
  \declare@shorthand{german}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
  \declare@shorthand{german}{"=}{\penalty\@M-\hskip\z@skip}%
  \declare@shorthand{german}{"/}{\textormath
    {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
  \def\ck{\allowhyphens\discretionary{k-}{k}{ck}\allowhyphens}%
  \def\mkgender{*}%
  \declare@shorthand{german}{":}{\nobreak:\bbl@allowhyphens}%
  \declare@shorthand{german}{"*}{\nobreak*\bbl@allowhyphens}%
  \declare@shorthand{german}{"_}{\nobreak\_\bbl@allowhyphens}%
  \declare@shorthand{german}{"x}{\nobreak\mkgender\bbl@allowhyphens}%
}

\def\nogerman@shorthands{%
  \xpg@deactivate@shorthands%
}

\def\captions@german{%
  \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}%
}
\def\date@german{%   
  \def\today{\number\day.%
    \space \ifcase\month%
    \or\if@austrian@locale Jänner\else Januar\fi\or Februar\or März\or%
    April\or Mai\or Juni\or Juli\or August\or September\or Oktober\or%
    November\or Dezember\fi
    \space \number\year}%
}

\def\captions@german@austrian{%
  \def\enclname{Beilage(n)}%
}

\def\captions@german@swiss{%
  \def\enclname{Beilage(n)}%
}

%%Strings for Fraktur contributed by Gerrit <z0idberg . gmx . de>
\def\captions@german@blackletter{%
  \captions@german%
  \def\abstractname{Zuſammenfaſſung}%
  \def\seename{ſiehe}%
  \def\alsoname{ſiehe auch}%
  \def\glossaryname{Gloſſar}%
}

\def\date@german@blackletter{%
  \def\today{\number\day.%
    \space \ifcase\month%
    \or\if@austrian@locale Jänner\else Januar\fi\or Februar\or März\or%
    April\or Mai\or Juni\or Juli\or Auguſt\or September\or Oktober\or%
    November\or Dezember\fi
    \space \number\year}%
}

\def\captionsgerman{%
  \if@german@blackletter\captions@german@blackletter\else\captions@german\fi
  \if@austrian@locale\captions@german@austrian\fi
  \if@swiss@locale\captions@german@swiss\fi
}

\def\dategerman{%
  \if@german@blackletter\date@german@blackletter\else\date@german\fi
}

\def\german@language{%
  \if@german@oldspelling
      \if@swiss@locale
          \SetupPolyglossiaLangPatterns{swissgerman}%
      \else
          \SetupPolyglossiaLangPatterns{german}%
      \fi
      \if@austrian@locale
         \adddialect\l@austrian\l@german%
      \fi
  \else
      \SetupPolyglossiaLangPatterns{ngerman}%
      \if@austrian@locale
         \adddialect\l@naustrian\l@ngerman%
      \fi
      \if@swiss@locale
         \adddialect\l@nswissgerman\l@ngerman%
      \fi
  \fi
}

\def\noextras@german{%
  \ifgerman@babelshorthands\nogerman@shorthands\fi%
}

\def\blockextras@german{%
  \ifgerman@babelshorthands\german@shorthands\else\nogerman@shorthands\fi%
}

\def\inlineextras@german{%
  \ifgerman@babelshorthands\german@shorthands\else\nogerman@shorthands\fi%
}

\endinput
