% Language definition file (part of polyglossia v2.10 -- 2026/04/18)
%
\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,
   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=old]{german}{german-at-1901}
\setlanguagealias[variant=austrian,spelling=old]{german}{german-austria-1901}
\setlanguagealias[variant=austrian,spelling=new]{german}{naustrian}
\setlanguagealias[variant=austrian,spelling=new]{german}{german-at}
\setlanguagealias[variant=austrian,spelling=new]{german}{german-austria}
\setlanguagealias[variant=german,spelling=old]{german}{germanb}
\setlanguagealias[variant=german,spelling=old]{german}{german-de-1901}
\setlanguagealias[variant=german,spelling=old]{german}{german-germany-1901}
\setlanguagealias[variant=german,spelling=new]{german}{ngerman}
\setlanguagealias[variant=german,spelling=new]{german}{german-de}
\setlanguagealias[variant=german,spelling=new]{german}{german-germany}
\setlanguagealias[variant=swiss,spelling=old]{german}{swissgerman}
\setlanguagealias[variant=swiss,spelling=old]{german}{german-ch-1901}
\setlanguagealias[variant=swiss,spelling=old]{german}{german-switzerland-1901}
\setlanguagealias[variant=swiss,spelling=new]{german}{nswissgerman}
\setlanguagealias[variant=swiss,spelling=new]{german}{german-ch}
\setlanguagealias[variant=swiss,spelling=new]{german}{german-switzerland}

\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}

\ifsystem@babelshorthands
  \SetGlossOptions{german}{babelshorthands=true}
  % Register default options
  \InitializeGlossOptions{german}{variant=german,spelling=new,script=latin,babelshorthands=true}
\else
  \SetGlossOptions{german}{babelshorthands=false}
  % Register default options
  \InitializeGlossOptions{german}{variant=german,spelling=new,script=latin,babelshorthands=false}
\fi

% Register alias options
\SetLanguageAliasValues{german}{spelling}{new,1996}
\SetLanguageAliasValues{german}{spelling}{old,1901}
\SetLanguageAliasValues{german}{script}{blackletter,fraktur}

\InitializeBabelShorthands

\def\xpg@disc@german#1#2#3{%
  \if@german@oldspelling
    \textormath{%
      \xpg@allowhyphenationbefore\discretionary{#2-}{}{#1}%
      \xpg@allowhyphenationafter
    }{#1}% math
  \else
    #3%
  \fi
}

\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}{\xpg@disc@german{c}{k}{c}}%
  \declare@shorthand{german}{"C}{\xpg@disc@german{C}{K}{C}}%
  \declare@shorthand{german}{"f}{\xpg@disc@german{f}{ff}{ff}}%
  \declare@shorthand{german}{"F}{\xpg@disc@german{F}{FF}{FF}}%
  \declare@shorthand{german}{"l}{\xpg@disc@german{l}{ll}{ll}}%
  \declare@shorthand{german}{"L}{\xpg@disc@german{L}{LL}{LL}}%
  \declare@shorthand{german}{"m}{\xpg@disc@german{m}{mm}{mm}}%
  \declare@shorthand{german}{"M}{\xpg@disc@german{M}{MM}{MM}}%
  \declare@shorthand{german}{"n}{\xpg@disc@german{n}{nn}{nn}}%
  \declare@shorthand{german}{"N}{\xpg@disc@german{N}{NN}{NN}}%
  \declare@shorthand{german}{"p}{\xpg@disc@german{p}{pp}{pp}}%
  \declare@shorthand{german}{"P}{\xpg@disc@german{P}{PP}{PP}}%
  \declare@shorthand{german}{"r}{\xpg@disc@german{r}{rr}{rr}}%
  \declare@shorthand{german}{"R}{\xpg@disc@german{R}{RR}{RR}}%
  \declare@shorthand{german}{"t}{\xpg@disc@german{t}{tt}{tt}}%
  \declare@shorthand{german}{"T}{\xpg@disc@german{T}{TT}{TT}}%
  \declare@shorthand{german}{"-}{\xpg@add@hyphenation@point}%
  \declare@shorthand{german}{"|}{\xpg@ligature@break}%
  \declare@shorthand{german}{""}{\xpg@invisible@break}%
  \declare@shorthand{german}{"~}{\xpg@nobreak@hyphen}%
  \declare@shorthand{german}{"=}{\xpg@breakable@hyphen}%
  \declare@shorthand{german}{"/}{\xpg@breakable@slash}%
  \if@german@oldspelling
     \def\ck{\xpg@allowhyphenationbefore\discretionary{k-}{k}{ck}%
             \xpg@allowhyphenationafter}%
  \else
     \def\ck{ck}%
  \fi%
  \def\germanabbrspace{\,}%
  \declare@shorthand{german}{".}{%
    \leavevmode\ifdim\lastskip>\z@\unskip\fi
    .\germanabbrspace\ignorespaces%
  }%
  \def\mkgender{*}%
  \declare@shorthand{german}{":}{%
    \xpg@allowhyphenationbefore:\xpg@allowhyphenationafter
  }%
  \declare@shorthand{german}{"*}{%
    \xpg@allowhyphenationbefore*\xpg@allowhyphenationafter
  }%
  \declare@shorthand{german}{"_}{%
    \xpg@allowhyphenationbefore\_\xpg@allowhyphenationafter
  }%
  \declare@shorthand{german}{"x}{%
    \xpg@allowhyphenationbefore\mkgender\xpg@allowhyphenationafter
  }%
}

\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
         \AddDialectIfNeeded{austrian}{german}%
      \fi
  \else
      \SetupPolyglossiaLangPatterns{ngerman}%
      \if@austrian@locale
          \AddDialectIfNeeded{naustrian}{ngerman}%
      \fi
      \if@swiss@locale
         \AddDialectIfNeeded{nswissgerman}{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
