% \iffalse meta-comment
%
% Copyright 1989-2008 Johannes L. Braams and any individual authors
% listed elsewhere in this file.  All rights reserved.
%
% This file is part of 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 Johannes Braams.
%
% The list of all files belonging to the Babel system is
% given in the file `manifest.bbl. See also `legal.bbl' for additional
% information.
%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
% \fi
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{usorbian.dtx}
%</dtx>
%<code>\ProvidesLanguage{usorbian}
%\fi
%\ProvidesFile{usorbian.dtx}
       [2021/11/05 v1.0j Upper Sorbian support from the babel system]
%\iffalse
%% File `usorbian.dtx'
%% Babel package for LaTeX version 2e
%% Copyright (C) 1989 - 2008
%%           by Johannes Braams, TeXniek
%
%% Upper Sorbian Language Definition File
%% Copyright (C) 1994 - 2004
%%           by Eduard Werner
%           Werner, Eduard",
%           Serbski institut z. t.,
%           Dw\'orni\v{s}\'cowa 6
%           02625 Budy\v{s}in/Bautzen
%           Germany",
%           (??)3591 497223",
%           edi at kaihh.hanse.de",
%
%% Please report errors to: Eduard Werner edi at kaihh.hanse.de
%%
%    This file is part of the babel system, it provides the source
%    code for the Upper Sorbian definition file.
%<*filedriver>
\documentclass{ltxdoc}
\newcommand*\TeXhax{\TeX hax}
\newcommand*\babel{\textsf{babel}}
\newcommand*\langvar{$\langle \it lang \rangle$}
\newcommand*\note[1]{}
\newcommand*\Lopt[1]{\textsf{#1}}
\newcommand*\file[1]{\texttt{#1}}
\newfont{\logo}{logo10}
\newcommand*\MF{{\logo METAFONT}}
\begin{document}
\DocInput{usorbian.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{usorbian.dtx}
%
% \changes{usorbian-0.1}{1994/10/10}{First version}
% \changes{usorbian-0.1b}{1994/10/18}{Made it possible to run through
%    \LaTeX; added \cs{MF} and removed extra \cs{end{macro}}}
% \changes{usorbian-1.0d}{1996/07/13}{Replaced \cs{undefined} with
%    \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
%    with \LaTeX}
% \changes{usorbian-1.0e}{1996/10/10}{Moved the definition of
%    \cs{atcatcode} right to the beginning.}
%
%  \section{The Upper Sorbian language}
%
%    The file \file{\filename}\footnote{The file described in this
%    section has version number \fileversion\ and was last revised on
%    \filedate.  It was written by Eduard Werner
%    (\texttt{[email protected]}).}  It defines all the
%    language-specific macros for Upper Sorbian.
%
% \StopEventually{}
%
%    The macro |\LdfInit| takes care of preventing that this file is
%    loaded more than once, checking the category code of the
%    \texttt{@} sign, etc.
% \changes{usorbian-1.0e}{1996/11/03}{Now use \cs{LdfInit} to perform
%    initial checks}
% \changes{usorbian-1.0j}{2007/10/19}{This file can be loaded under
%    more than one name.}
%    \begin{macrocode}
%<*code>
\LdfInit\CurrentOption{date\CurrentOption}
%    \end{macrocode}
%
%    When this file is read as an option, i.e. by the |\usepackage|
%    command, \texttt{usorbian} will be an `unknown' language, in which
%    case we have to make it known. So we check for the existence of
%    |\l@usorbian| to see whether we have to do something here.
% \changes{usorbian-1.0j}{2007/10/19}{Check for the option
%    lowersorbian}
%    As
%    \babel\ also knwos the option \Lopt{uppersorbian} we have to
%    check that as well.
%
%    \begin{macrocode}
\ifx\l@uppersorbian\@undefined
 \ifx\l@usorbian\@undefined
   \@nopatterns{usorbian}
   \adddialect\l@usorbian\z@
   \let\l@uppersorbian\l@usorbian
 \else
   \let\l@uppersorbian\l@usorbian
 \fi
\else
 \let\l@usorbian\l@uppersorbian
\fi
%    \end{macrocode}
%
%    The next step consists of defining commands to switch to (and
%    from) the Upper Sorbian language.
%
% \begin{macro}{\captionsusorbian}
%    The macro |\captionsusorbian| defines all strings used in the four
%    standard documentclasses provided with \LaTeX.
% \changes{usorbian-0.1c}{1994/11/27}{Removed two typos (Kapitel and
%    Dodatki)}
% \changes{usorbian-1.0b}{1995/07/04}{Added \cs{proofname} for
%    AMS-\LaTeX}
% \changes{usorbian-1.0i}{2000/09/22}{Added \cs{glossaryname}}
% \changes{usorbian-1.0j}{2007/10/19}{Make this work for more than one
%    option name}
%    \begin{macrocode}
\@namedef{captions\CurrentOption}{%
 \def\prefacename{Zawod}%
 \def\refname{Referency}%
 \def\abstractname{Abstrakt}%
 \def\bibname{Literatura}%
 \def\chaptername{Kapitl}%
 \def\appendixname{Dodawki}%
 \def\contentsname{Wobsah}%
 \def\listfigurename{Zapis wobrazow}%
 \def\listtablename{Zapis tabulkow}%
 \def\indexname{Indeks}%
 \def\figurename{Wobraz}%
 \def\tablename{Tabulka}%
 \def\partname{D\'z\v el}%
 \def\enclname{P\v r\l oha}%
 \def\ccname{CC}%
 \def\headtoname{Komu}%
 \def\pagename{Strona}%
 \def\seename{hl.}%
 \def\alsoname{hl.~te\v z}
 \def\proofname{Proof}%  <-- needs translation
 \def\glossaryname{Glossary}% <-- Needs translation
 }%
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\newdateusorbian}
%    The macro |\newdateusorbian| redefines the command |\today| to
%    produce Upper Sorbian dates.
% \changes{usorbian-1.0g}{1997/10/01}{Use \cs{edef} to define
%    \cs{today} to save memory}
% \changes{usorbian-1.0g}{1998/03/28}{use \cs{def} instead of
%    \cs{edef}}
% \changes{usorbian-1.0j}{2007/10/19}{Make this work for more than one
%    option name}
%    \begin{macrocode}
\@namedef{newdate\CurrentOption}{%
 \def\today{\number\day.~\ifcase\month\or
   januara\or februara\or m\v erca\or apryla\or meje\or junija\or
   julija\or awgusta\or septembra\or oktobra\or
   nowembra\or decembra\fi
   \space \number\year}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\olddateusorbian}
%    The macro |\olddateusorbian| redefines the command |\today| to
%    produce old-style Upper Sorbian dates.
% \changes{usorbian-1.0g}{1997/10/01}{Use \cs{edef} to define
%    \cs{today} to save memory}
% \changes{usorbian-1.0g}{1998/03/28}{use \cs{def} instead of
%    \cs{edef}}
% \changes{usorbian-1.0j}{2007/10/19}{Make this work for more than one
%    option name}
%    \begin{macrocode}
\@namedef{olddate\CurrentOption}{%
 \def\today{\number\day.~\ifcase\month\or
   wulkeho r\'o\v zka\or ma\l eho r\'o\v zka\or nal\v etnika\or
   jutrownika\or r\'o\v zownika\or  sma\v znika\or pra\v znika\or
   \v znjenca\or po\v znjenca\or winowca\or nazymnika\or
   hodownika\fi \space \number\year}}
%    \end{macrocode}
% \end{macro}
%
%    The default will be the new-style dates.
% \changes{usorbian-1.0j}{2007/10/19}{Make this work for more than one
%    option name}
%    \begin{macrocode}
\expandafter\let\csname date\CurrentOption\expandafter\endcsname
               \csname newdate\CurrentOption\endcsname
%    \end{macrocode}
%
% \begin{macro}{\extrasusorbian}
%    The macro |\extrasusorbian| will perform all the extra
%    definitions needed for the Upper Sorbian language. It's pirated
%    from |germanb.sty|.  The macro |\noextrasusorbian| is used to
%    cancel the actions of |\extrasusorbian|.
%
%    Because for Upper Sorbian (as well as for Dutch) the \texttt{"}
%    character is made active. This is done once, later on its
%    definition may vary.
% \changes{usorbian-1.0j}{2007/10/19}{Make this work for more than one
%    option name}
%    \begin{macrocode}
\initiate@active@char{"}
\@namedef{extras\CurrentOption}{\languageshorthands{usorbian}}
\expandafter\addto\csname extras\CurrentOption\endcsname{%
 \bbl@activate{"}}
%    \end{macrocode}
%    Don't forget to turn the shorthands off again.
% \changes{usorbian-1.0h}{1999/12/17}{Deactivate shorthands ouside of
%    Upper Sorbian}
% \changes{usorbian-1.0i}{2021/02/06}{correct deactivation command}
%    \begin{macrocode}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
 \bbl@deactivate{"}}
%    \end{macrocode}
%
%    In order for \TeX\ to be able to hyphenate German Upper Sorbian
%    words which contain `\ss' we have to give the character a nonzero
%    |\lccode| (see Appendix H, the \TeX book). As some of the other
%    language definitions turn the character |^| into a shorthand we
%    need to make sure that it has it's orginial definition here.
% \changes{usorbian-1.0k}{2008/03/17}{Make sure the caret has the
%    right \cs{catcdoe}}
%    \begin{macrocode}
\begingroup \catcode`\^7
\def\x{\endgroup
 \expandafter\addto\csname extras\CurrentOption\endcsname{%
   \babel@savevariable{\lccode`\^^Y}%
   \lccode`\^^Y`\^^Y}}
\x
%    \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}
\expandafter\addto\csname noextras\CurrentOption\endcsname{%
 \umlauthigh}
%    \end{macrocode}
%    The Upper Sorbian hyphenation patterns can be used with
%    |\lefthyphenmin| and |\righthyphenmin| set to~2.
% \changes{usorbian-1.0i}{2000/09/22}{Now use \cs{providehyphenmins} to
%    provide a default value}
%    \begin{macrocode}
\providehyphenmins{\CurrentOption}{\tw@\tw@}
%    \end{macrocode}
% \end{macro}
%
% \changes{usorbian-1.0a}{1995/05/27}{Removed stuff that has been
%    moved to \file{babel.def}}
%
%  \begin{macro}{\dq}
%    We save the original double quote character in |\dq| to keep it
%    available, the math accent |\"| can now be typed as |"|.  Also we
%    store the original meaning of the command |\"| for future use.
%    \begin{macrocode}
\begingroup \catcode`\"12
\def\x{\endgroup
 \def\@SS{\mathchar"7019 }
 \def\dq{"}}
\x
%    \end{macrocode}
% \end{macro}
%
%    Now we can define the doublequote macros: the umlauts,
%    \begin{macrocode}
\declare@shorthand{usorbian}{"a}{\textormath{\"{a}}{\ddot a}}
\declare@shorthand{usorbian}{"o}{\textormath{\"{o}}{\ddot o}}
\declare@shorthand{usorbian}{"u}{\textormath{\"{u}}{\ddot u}}
\declare@shorthand{usorbian}{"A}{\textormath{\"{A}}{\ddot A}}
\declare@shorthand{usorbian}{"O}{\textormath{\"{O}}{\ddot O}}
\declare@shorthand{usorbian}{"U}{\textormath{\"{U}}{\ddot U}}
%    \end{macrocode}
%    tremas,
%    \begin{macrocode}
\declare@shorthand{usorbian}{"e}{\textormath{\"{e}}{\ddot e}}
\declare@shorthand{usorbian}{"E}{\textormath{\"{E}}{\ddot E}}
\declare@shorthand{usorbian}{"i}{\textormath{\"{\i}}{\ddot\imath}}
\declare@shorthand{usorbian}{"I}{\textormath{\"{I}}{\ddot I}}
%    \end{macrocode}
%    usorbian es-zet (sharp s),
%    \begin{macrocode}
\declare@shorthand{usorbian}{"s}{\textormath{\ss{}}{\@SS{}}}
\declare@shorthand{usorbian}{"S}{SS}
%    \end{macrocode}
%    german and french quotes,
% \changes{usorbian-1.0f}{1997/04/03}{Removed empty groups after
%    double quote and guillemot characters}
%    \begin{macrocode}
\declare@shorthand{usorbian}{"`}{%
 \textormath{\quotedblbase}{\mbox{\quotedblbase}}}
\declare@shorthand{usorbian}{"'}{%
 \textormath{\textquotedblleft}{\mbox{\textquotedblleft}}}
\declare@shorthand{usorbian}{"<}{%
 \textormath{\guillemotleft}{\mbox{\guillemotleft}}}
\declare@shorthand{usorbian}{">}{%
 \textormath{\guillemotright}{\mbox{\guillemotright}}}
%    \end{macrocode}
%    discretionary commands
% \changes{usorbian-1.0c}{1996/01/24}{Now use \cs{bbl@disc}}
%    \begin{macrocode}
\declare@shorthand{usorbian}{"c}{\textormath{\bbl@disc ck}{c}}
\declare@shorthand{usorbian}{"C}{\textormath{\bbl@disc CK}{C}}
\declare@shorthand{usorbian}{"f}{\textormath{\bbl@disc f{ff}}{f}}
\declare@shorthand{usorbian}{"F}{\textormath{\bbl@disc F{FF}}{F}}
\declare@shorthand{usorbian}{"l}{\textormath{\bbl@disc l{ll}}{l}}
\declare@shorthand{usorbian}{"L}{\textormath{\bbl@disc L{LL}}{L}}
\declare@shorthand{usorbian}{"m}{\textormath{\bbl@disc m{mm}}{m}}
\declare@shorthand{usorbian}{"M}{\textormath{\bbl@disc M{MM}}{M}}
\declare@shorthand{usorbian}{"n}{\textormath{\bbl@disc n{nn}}{n}}
\declare@shorthand{usorbian}{"N}{\textormath{\bbl@disc N{NN}}{N}}
\declare@shorthand{usorbian}{"p}{\textormath{\bbl@disc p{pp}}{p}}
\declare@shorthand{usorbian}{"P}{\textormath{\bbl@disc P{PP}}{P}}
\declare@shorthand{usorbian}{"t}{\textormath{\bbl@disc t{tt}}{t}}
\declare@shorthand{usorbian}{"T}{\textormath{\bbl@disc T{TT}}{T}}
%    \end{macrocode}
%    and some additional commands:
%    \begin{macrocode}
\declare@shorthand{usorbian}{"-}{\nobreak\-\bbl@allowhyphens}
%    \end{macrocode}
% \changes{usorbian-1.0i}{2021/02/06}{Adapted some shorthands to changes in hyperref}
% To avoid problems in bookmarks the shorthands should be hyperref aware.
%    \begin{macrocode}
\providecommand\texorpdfstring[2]{#1}
\declare@shorthand{usorbian}{"|}{%
 \texorpdfstring{\textormath{\nobreak\discretionary{-}{}{\kern.03em}%
             \allowhyphens}{}}{}}
\declare@shorthand{usorbian}{""}{\hskip\z@skip}
%    \end{macrocode}
%
%  \begin{macro}{\mdqon}
%  \begin{macro}{\mdqoff}
%  \begin{macro}{\ck}
%    All that's left to do now is to  define a couple of commands
%    for reasons of compatibility with \file{german.sty}.
% \changes{usorbian-1.0g}{1998/06/07}{Now use \cs{shorthandon} and
%    \cs{shorthandoff}}
%    \begin{macrocode}
\def\mdqon{\shorthandon{"}}
\def\mdqoff{\shorthandoff{"}}
\def\ck{\allowhyphens\discretionary{k-}{k}{ck}\allowhyphens}
%    \end{macrocode}
%  \end{macro}
%  \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.
% \changes{usorbian-1.0e}{1996/11/03}{Now use \cs{ldf@finish} to wrap
%    up}
% \changes{usorbian-1.0j}{2007/10/19}{Make this work for more than one
%    option name}
%    \begin{macrocode}
\ldf@finish\CurrentOption
%</code>
%    \end{macrocode}
%
% \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