% \iffalse meta-comment
%
%Copyright 2019--2022 Uroš Stefanović,
%2002--2019 Filip Brčić
%All rights reserved.
% 
% This file is intended to be used with 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 Uroš Stefanović.
% 
% 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{serbianc.dtx}
%</dtx>
%<code>\ProvidesLanguage{serbianc}
%\fi
%\ProvidesFile{serbianc.dtx}
        [2022/09/30 3.2a Serbian Cyrillic support for the Babel system]
%\iffalse
%% File `serbianc.dtx'
%
%    This file is part of the babel system, it provides the source
%    code for the Serbian Cyrillic language definition file.
%<*filedriver>
\documentclass{ltxdoc}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[a4paper,top=2.0cm,left=3cm,right=2.5cm,bottom=2cm,includefoot,includehead]{geometry}
\title{The Serbian Cyrillic Language in the \babel\ system}
\author{Uroš Stefanović\footnote{\texttt{urostajms@gmail.com}}} 
\newcommand*\babel{\textsf{babel}}
\newcommand*\langvar{$\langle \it lang \rangle$}
\newcommand*\note[1]{}
\newcommand*\Lopt[1]{\textsf{#1}}
\newcommand*\file[1]{\texttt{#1}}
\begin{document}
 \maketitle
 \DocInput{serbianc.dtx}
\end{document}
%</filedriver>
%\fi
% \GetFileInfo{serbianc.dtx}
%
%  \section*{Serbian Cyrillic Language}
%
%    The file \file{\filename} defines all the language definition
%    macros for Serbian language, typeset in a Cyrillic script.
%
%    For this language the character |"| is made active. In
%    table~\ref{tab:serbianc-quote} an overview is given of its
%    purpose. One of the reasons for this is that, in the Serbian
%    language, some special characters are used.
%
%    \begin{table}[htb]
%     \begin{center}
%     \begin{tabular}{lp{8cm}}
%      |"-| & An explicit hyphen sign, allowing hyphenation
%             in the rest of the word; inserts a hyphen which is repeated at the beginning of the
%             next line (recommended to use for compound words with hyphen).                \\
%      \verb="|= & Disables ligature at this position.                   \\
%      |""| & Similar to |"-| but prints no hyphen sign. 			   \\
%      |"~| & Compound word mark without a breakpoint, prints hyphen
%            prohibiting hyphenation at the point.		                \\
%      |"=| & A compound word mark with a breakpoint, prints hyphen
%            allowing hyphenation in the composing words.               \\
%      |"`| & German opening double quote (looks like ,\kern-0.08em,).      \\
%      |"'| & German closing double quote (looks like ``).                    \\
%      |"'| & (if the \Lopt{quotes} attribute is used) Closing double quote (looks like '').                    \\
%      |"<| & French opening double quote (looks like $<\!\!<$).     \\
%      |">| & French closing double quote (looks like $>\!\!>$).    \\
%     \end{tabular}
%     \caption{The extra definitions made
%              by \file{serbianc.ldf}}\label{tab:serbianc-quote}
%     \end{center}
%    \end{table}
%
%    Macro |\today| prints the date in Serbian. Alternatively, if attribute \Lopt{datei} is used,
%    |\today| prints the current date, but prints `јуни' and `јули' for `June' and `July'.
%    If you prefer to use `јуни' and `јули' instead of default `јун' and `јул',
%    use the \Lopt{datei} attribute. Also, the |\today*| macro prints the date without dot after the year
%    (used when after the date is the punctuation mark, such as comma).
%    Alternatively, the commands |\todayRoman| and |\todayRoman*| prints the current date using Roman numerals for months;
%    |\todayGen| and |\todayGen*| prints the current month name in the genitive case,
%    and |\todayArabic| and |\todayArabic*| prints the current month as a number.
%
%    The alphabetical enumerations in texts use the Cyrillic alphabet and alphabetic order (all 30 letters of the Serbian language are used).
%    Also, the Serbian language allows enumeration with the Latin alphabet.
%    If the Latin alphabet is used in the enumeration the letters q, w, x and y are omitted by the rules of the Serbian language
%    (22 letters are used in that case).
%    However, if the user wants to use the English alphabet for the enumeration (26 letters), this option is also available.
%    One can manually switch the enumeration alphabet with the commands |\enumCyr|, |\enumLat| and |\enumEng|.
%    This commands can be used after the |\begin{document}| when the \Lopt{serbianc} language is active.
%    In principle, enumerations are a matter for class and style designers but the same can be
%    said also about things, other than enumerations, such as names of sections and bibliography lists.
%
%    Apart from defining shorthands, we need to make sure that the
%    first paragraph of each section is indented. Furthermore, the
%    following new math operators are defined: |\sh|, |\ch|, |\tg|, |\ctg|,
%    |\arctg|, |\arcctg|, |\th|, |\cth|, |\arsh|,
%    |\arch|, |\arth|, |\arcth|, |\cosec|, |\Prob|, |\Expect|, |\Variance|,
%    |\arcsec|, |\arccosec|, |\sech|, |\cosech|, |\arsech|, |\arcosech|,
%    |\NZD|, |\nzd|, |\NZS|, |\nzs|.  Cyrillic letters
%    in math mode can be typed with the aid of text commands such as |\textbf|, |\textsf|, |\textit|,
%    |\texttt|, e.t.c.
%
% By default, ekavian spelling is enabled. Ijekavian
% spelling can be enabled by setting the attribute to \Lopt{ijekav}. To set
% an attribute, put the |\languageattribute| macro within a document preamble after
% \babel, for example,
%\begin{verbatim}
%    \usepackage[english,serbianc]{babel}
%    \languageattribute{serbianc}{ijekav}
%\end{verbatim}
% Setting the \Lopt{ijekav} attribute changes the built-in strings (caption names).
% For example, the part will be entitled as
% `Део' by default and as `Дио' if the
% Serbianc language attribute is set to \Lopt{ijekav}.
% Same result can be achieved using a modifier as follows:
%\begin{verbatim}
%    \usepackage[english,serbianc.ijekav]{babel}
%\end{verbatim}
% Using a modifier in a package option is often better. A modifier is set after
% the language name, and is prefixed with a dot (only when the language is set
% as package option — neither global options nor the main key accept them).
% Also, it's possible to use more than one attribute:
%\begin{verbatim}
%    \usepackage[english,serbianc.ijekav.datei.quotes]{babel}
%\end{verbatim}
%
% The file \file{serbianc.ldf} is designed to work both with
% legacy non-unicode (8-bit) and new Unicode encodings of the source document
% files (input encodings) and of the font files (font encodings). This is
% achieved by excluding (bypassing) the |\cyr...| macros, which map every letter
% in a source file with given input encoding to a corresponding code point in a
% font file with a given font encoding when running modern engines, such as
% Lua\LaTeX\ or Xe\LaTeX, in native Unicode mode instead of legacy engines, such
% as \LaTeX\ or PDF\LaTeX, or Unicode engines in a compatibility (8-bit) mode.
%
% For Lua\LaTeX\ or Xe\LaTeX\ one needs to load the |fontspec| package.
% The following example shows how to load Computer Modern Unicode (CMU) fonts (which is a
% part of all modern \LaTeX\ distributions), and also to get correct italic shape of the letters |б|, |г|, |д|, |п| and |т| for Serbian language:
%\begin{verbatim}
%    \usepackage{fontspec}
%    \defaultfontfeatures{Ligatures={TeX},Language=Serbian,Script=Cyrillic}
%    \setmainfont{CMU Serif}
%    \setsansfont{CMU Sans Serif}
%    \setmonofont{CMU Typewriter Text}
%    \usepackage[english,serbianc]{babel}
%\end{verbatim}
%
% \StopEventually{}
%
%  \section*{The code}
%
%    The macro |\LdfInit| takes care of preventing this file from
%    loading more than once, checking the category code of the
%    \texttt{@} sign, etc.
%
%    \begin{macrocode}
%<*code>
\LdfInit{serbianc}{captionsserbianc}
%    \end{macrocode}
%
%    First, we check if Lua\LaTeX\ or Xe\LaTeX\ is running. If it is, we set
%    the boolean key |\if@srbc@uni@ode| to true. It will be used to eliminate |\cyr...|
%    commands, which were introduced in \LaTeX2e\ to handle various
%    Cyrillic input encodings. With the introduction of Unicode, \LaTeX\ is
%    moving to universal input encoding, so we consider these |\cyr...|
%    commands obsolete. However, they are still preserved for backward
%    compatibility in case \LaTeX\ or PDF\LaTeX\ are running.
%
%    \begin{macrocode}
\ifdefined\if@srbc@uni@ode
  \PackageError{babel}{if@srbc@uni@ode already defined.}
  \relax
\fi
\newif\if@srbc@uni@ode
\ifdefined\luatexversion \@srbc@uni@odetrue \else
\ifdefined\XeTeXrevision \@srbc@uni@odetrue \fi\fi
%    \end{macrocode}
%
%    Check if hyphenation patterns for the Serbianc language have been
%    loaded in \file{language.dat}. Namely, we check for the existence of
%    |\l@serbianc|. If it is not defined, we declare Serbianc as dialect
%    for the default language number 0, which is almost certainly English.
%
%    \begin{macrocode}
\ifx\l@serbianc\@undefined
  \@nopatterns{Serbianc}
  \adddialect\l@serbianc0
\fi
%    \end{macrocode}
%
%    There is a limited list of encodings appropriate for Serbian Cyrillic text. We
%    will look at which one of them is declared and keep its name in the macro
%    |\cyrillicencoding|.
%    The correct 7-bit Cyrillic encoding is \texttt{OT2}.
%    The correct 8-bit Cyrillic encodings are
%    \texttt{T2A} (default for 8-bit compilers) and \texttt{X2}.
%    The correct utf8 encodings are
%    \texttt{TU}  (default for Xe\LaTeX\ and Lua\LaTeX),
%    \texttt{EU1} (obsolete, formerly used for Xe\LaTeX),
%    \texttt{EU2} (obsolete, formerly used for Lua\LaTeX).
%
%    In 8-bit (\LaTeX) mode, the user may choose a different non-unicode Cyrillic
%    encoding---\texttt{X2} or \texttt{OT2}. If one wants
%    to use another font encoding rather than default (\texttt{T2A}),
%    he or she has to load the corresponding file \emph{before} \file{babel.sty}.
%
%    Remember that, for the Serbian language, the \texttt{T2A} encoding is
%    better than \texttt{X2}, because \texttt{X2} does not contain Latin
%    letters, and users should pay attention and switch the language
%    every time they want to type a Latin word inside a Serbian phrase
%    or vice versa.
%
%    We parse the |\cdp@list| containing encodings known to \LaTeX\
%    in the order in which they have been loaded by the time \texttt{babel} is called.
%    We set the |\cyrillicencoding| to the \emph{last} loaded encoding in the
%    list of supported Cyrillic encodings: \texttt{OT2},
%    \texttt{X2}, \texttt{T2A}. In Unicode mode,
%    |\cyrillicencoding| is set to \texttt{TU} by \texttt{fontspec}. Nevertheless,
%    here we provide similar definitions; 8-bit encodings are kept for Unicode
%    compilers (Lua\LaTeX\ and Xe\LaTeX) since they can run in compatibility
%    (8-bit) mode.
%
%    \begin{macrocode}
\def\@setcyrillicencoding{%
  \def\sce@a##1##2{%
    \edef\sce@b{##1}%
    \edef\sce@c{##2}%
    \ifx\sce@b\sce@c
      \let\cyrillicencoding\sce@c
    \fi}%
  \def\cdp@elt##1##2##3##4{%
    \sce@a{##1}{OT2}%
    \sce@a{##1}{X2}%
    \sce@a{##1}{T2A}%
    \if@srbc@uni@ode
      \sce@a{##1}{TU}%
    \fi}%
  \cdp@list
}
\ifx\cyrillicencoding\undefined
  \@setcyrillicencoding
\fi
\@onlypreamble\@setcyrillicencoding
\@onlypreamble\sce@a
\@onlypreamble\sce@b
\@onlypreamble\sce@c
\ifx\cyrillicencoding\undefined
  \if@srbc@uni@ode
    \edef\cyrillicencoding{TU}
  \else
    \edef\cyrillicencoding{T2A}
  \fi
  \PackageWarning{babel}%
    {No Cyrillic font encoding has been loaded so far.\MessageBreak
     A font encoding should be declared before babel.\MessageBreak
     Default `\cyrillicencoding' encoding will be loaded
    }%
  \lowercase\expandafter{\expandafter\input\cyrillicencoding enc.def\relax}%
  \AtBeginDocument{\@setcyrillicencoding}
\fi
%    \end{macrocode}
%
%    We define the macro |\Serbianc| simply as an alias for
%    |\selectlanguage{serbianc}|.
%
%    \begin{macrocode}
\DeclareRobustCommand{\Serbianc}{\selectlanguage{\serbianc}}
%    \end{macrocode}
%
%    We define |\cyrillictext| and its alias |\cyr|; these macros are intended for use within the \texttt{babel} macros and
%    do not perform the complete change of the language.
%
%    In particular, they to do not change the captions and the name of current
%    language stored in the macro |\languagename|. This inconsistency might
%    break some assumptions embedded into \texttt{babel}.
%    For example, the |\iflanguage| macro will fail.
%
%    Furthermore, |\cyrillictext| does
%    not activate shorthands, so |"<|, |">|, |"`|, |"'|, e.t.c. will not work.
%
%    Lastly, |\cyrillictext| does not write its trace
%    to \file{.aux} file, which might result in wrong typesetting of
%    table of contents, list of tables and list of figures in multilingual
%    documents.
%
%    For these reasons, the use of the declaration |\cyrillictext| and
%    its aliases in ordinary text is strongly discouraged. Instead of the
%    declaration |\cyrillictext|, it is recommended to use |\Serbianc| or the
%    command |\foreignlanguage| defined in the \texttt{babel} core; their
%    functionality is similar to |\selectlanguage{serbianc}|, but they do not
%    change caption names, dates and shorthands.
%
%    \begin{macrocode}
\DeclareRobustCommand{\cyrillictext}{%
  \fontencoding\cyrillicencoding\selectfont
  \let\encodingdefault\cyrillicencoding
  \expandafter\set@hyphenmins\serbianchyphenmins
  \language\l@serbianc}%
\let\cyr\cyrillictext
%    \end{macrocode}
%
%    The macro |\textcyrillic| takes an argument which is then typeset using the
%    |\cyrillictext| declaration.
%
%    \begin{macrocode}
\DeclareTextFontCommand{\textcyrillic}{\cyrillictext}
%    \end{macrocode}
%
%    For Serbian, the \texttt{"} character is made active. This is done
%    once; later on, its definition may vary. Other languages in the
%    same document may also use the \texttt{"}~character for
%    shorthands; we specify that the Serbian group of shorthands
%    should be used. We save the original double quote character
%    in the |\dq| macro to keep it available. The shorthand \texttt{"-}
%    should be used in places where a word contains an explictit
%    hyphenation character. According to the rules of the Serbian language, when
%    a word break occurs at an explicit hyphen, it must appear both at the end of the
%    first line and at the beginning of the second line.
%
%    \begin{macrocode}
\initiate@active@char{"}
\begingroup \catcode`\"12
\def\reserved@a{\endgroup
  \def\@SS{\mathchar"7019 }
  \def\dq{"}}
\reserved@a
\declare@shorthand{serbianc}{"`}{\quotedblbase}
\declare@shorthand{serbianc}{"'}{\textquotedblleft}
\declare@shorthand{serbianc}{"<}{\guillemotleft}
\declare@shorthand{serbianc}{">}{\guillemotright}
\declare@shorthand{serbianc}{""}{\hskip\z@skip}
\declare@shorthand{serbianc}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
\declare@shorthand{serbianc}{"=}{\nobreak-\hskip\z@skip}
\declare@shorthand{serbianc}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}
\declare@shorthand{serbianc}{"-}{\nobreak\discretionary{-}{-}{-}\bbl@allowhyphens}
%    \end{macrocode}
%
%    The |\cyrdash| macro will be defined if it hadn't already been defined in a fontenc file. For |T2A| and |X2| fonts,
%    |cyrdash| will be placed in the code of the English emdash.
%
%    \begin{macrocode}
\ProvideTextCommandDefault{\cyrdash}{\hbox to.8em{--\hss--}}
%    \end{macrocode}
%
%    The macro |\captionsserbianc| defines all strings used in the four
%    standard documentclasses provided by \LaTeX.
%
%    \begin{macrocode}
\if@srbc@uni@ode
  \addto\captionsserbianc{%
    \def\prefacename{Предговор}%
    \def\refname{Литература}%
    \def\abstractname{Сажетак}%
    \def\bibname{Библиографија}%
    \def\chaptername{Глава}%
    \def\appendixname{Додатак}%
    \def\contentsname{Садржај}%
    \def\listfigurename{Списак слика}%
    \def\listtablename{Списак табела}%
    \def\indexname{Индекс}%
    \def\figurename{Слика}%
    \def\tablename{Табела}%
    \def\partname{Део}%
    \def\enclname{Прилози}%
    \def\ccname{Копије}%
    \def\headtoname{Прима}%
    \def\pagename{страна}%
    \def\seename{види}%
    \def\alsoname{види такође}%
    \def\proofname{Доказ}%
    \def\glossaryname{Речник}%
  }%
  \let\captionsserbianc@ijekav=\captionsserbianc
  \addto\captionsserbianc@ijekav{%
    \def\partname{Дио}%
    \def\glossaryname{Рjечник}%
  }
\else
  \addto\captionsserbianc{%
    \def\prefacename{{\cyr\CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr}}%
    \def\refname{{\cyr\CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra}}%
    \def\abstractname{{\cyr\CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk}}%
    \def\bibname{{\cyr\CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra}}%
    \def\chaptername{{\cyr\CYRG\cyrl\cyra\cyrv\cyra}}%
    \def\appendixname{{\cyr\CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk}}%
    \def\contentsname{{\cyr\CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje}}%
    \def\listfigurename{{\cyr\CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra}}%
    \def\listtablename{{\cyr\CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra}}%
    \def\indexname{{\cyr\CYRI\cyrn\cyrd\cyre\cyrk\cyrs}}%
    \def\figurename{{\cyr\CYRS\cyrl\cyri\cyrk\cyra}}%
    \def\tablename{{\cyr\CYRT\cyra\cyrb\cyre\cyrl\cyra}}%
    \def\partname{{\cyr\CYRD\cyre\cyro}}%
    \def\enclname{{\cyr\CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri}}%
    \def\ccname{{\cyr\CYRK\cyro\cyrp\cyri\cyrje\cyre}}%
    \def\headtoname{{\cyr\CYRP\cyrr\cyri\cyrm\cyra}}%
    \def\pagename{{\cyr\cyrs\cyrt\cyrr\cyra\cyrn\cyra}}%
    \def\seename{{\cyr\cyrv\cyri\cyrd\cyri}}%
    \def\alsoname{{\cyr\cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre}}%
    \def\proofname{{\cyr\CYRD\cyro\cyrk\cyra\cyrz}}%
    \def\glossaryname{{\cyr\CYRR\cyre\cyrch\cyrn\cyri\cyrk}}%
  }%
  \let\captionsserbianc@ijekav=\captionsserbianc
  \addto\captionsserbianc@ijekav{%
    \def\partname{{\cyr\CYRD\cyri\cyro}}%
    \def\glossaryname{{\cyr\CYRR\cyrje\cyre\cyrch\cyrn\cyri\cyrk}}%
  }
\fi
%    \end{macrocode}
%
%    The macro |\dateserbianc| redefines the commands |\today|, |\today*|, |\todayRoman| and |\todayRoman*| to produce Serbian dates.
%    Also, the commands |\todayGen|, |\todayGen*|, |\todayArabic| and |\todayArabic*| are provided.
%
%    \begin{macrocode}
\if@srbc@uni@ode
  \addto\dateserbianc{%
   \def\month@serbianc{\ifcase\month\or
    јануар\or
    фебруар\or
    март\or
    април\or
    мај\or
    јун\or
    јул\or
    август\or
    септембар\or
    октобар\or
    новембар\or
    децембар\fi}%
   \def\month@serbianc@gen{\ifcase\month\or
    јануара\or
    фебруара\or
    марта\or
    априла\or
    маја\or
    јуна\or
    јула\or
    августа\or
    септембра\or
    октобра\or
    новембра\or
    децембра\fi}%
    \def\today{\number\day.~\month@serbianc\ \number\year\@ifstar{}{.}}%
    \def\todayRoman{\number\day.~\@Roman\month~\number\year\@ifstar{}{.}}%
    \def\todayGen{\number\day.~\month@serbianc@gen\ \number\year\@ifstar{}{.}}%
    \def\todayArabic{\number\day.~\number\month.~\number\year\@ifstar{}{.}}}
  \let\dateserbianc@datei=\dateserbianc
  \addto\dateserbianc@datei{%
    \def\month@serbianc@datei{\ifnum\month=6 јуни%
    \else\ifnum\month=7 јули\else\month@serbianc\fi\fi}%
    \def\today{\number\day.~\month@serbianc@datei\ \number\year\@ifstar{}{.}}}
\else
  \def\dateserbianc{%
   \def\month@serbianc{\ifcase\month\or
    \cyrje\cyra\cyrn\cyru\cyra\cyrr\or
    \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\or
    \cyrm\cyra\cyrr\cyrt\or
    \cyra\cyrp\cyrr\cyri\cyrl\or
    \cyrm\cyra\cyrje\or
    \cyrje\cyru\cyrn\or
    \cyrje\cyru\cyrl\or
    \cyra\cyrv\cyrg\cyru\cyrs\cyrt\or
    \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyra\cyrr\or
    \cyro\cyrk\cyrt\cyro\cyrb\cyra\cyrr\or
    \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyra\cyrr\or
    \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyra\cyrr\fi}%
   \def\month@serbianc@gen{\ifcase\month\or
    \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra\or
    \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra\or
    \cyrm\cyra\cyrr\cyrt\cyra\or
    \cyra\cyrp\cyrr\cyri\cyrl\cyra\or
    \cyrm\cyra\cyrje\cyra\or
    \cyrje\cyru\cyrn\cyra\or
    \cyrje\cyru\cyrl\cyra\or
    \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra\or
    \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra\or
    \cyro\cyrk\cyrt\cyro\cyrb\cyrr\cyra\or
    \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyrr\cyra\or
    \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyrr\cyra\fi}%
    \def\today{\number\day.~\month@serbianc\ \number\year\@ifstar{}{.}}%
    \def\todayRoman{\number\day.~\@Roman\month~\number\year\@ifstar{}{.}}%
    \def\todayGen{\number\day.~\month@serbianc@gen\ \number\year\@ifstar{}{.}}%
    \def\todayArabic{\number\day.~\number\month.~\number\year\@ifstar{}{.}}}
  \let\dateserbianc@datei=\dateserbianc
  \addto\dateserbianc@datei{%
    \def\month@serbianc@datei{\ifnum\month=6\cyrje\cyru\cyrn\cyri%
    \else\ifnum\month=7\cyrje\cyru\cyrl\cyri\else\month@serbianc\fi\fi}%
    \def\today{\number\day.~\month@serbianc@datei\ \number\year\@ifstar{}{.}}
}
\fi
%    \end{macrocode}
%
%    The Serbian hyphenation patterns can be used with |\lefthyphenmin| and
%    |\righthyphenmin| set to~2. (Actually, the “official” definition allows even one character for |lefthyphen|,
%    but it is recommended to use the value two for the better results.)
%
%    \begin{macrocode}
\providehyphenmins{\CurrentOption}{\tw@\tw@}
\providehyphenmins{serbianc}{\tw@\tw@}
%    \end{macrocode}
%
%    We instruct babel to switch font encoding using earlier defined macros
%	 |\cyrillictext| and |\latintext|.
%
%    \begin{macrocode}
\addto\extrasserbianc{\cyrillictext}
\addto\noextrasserbianc{\latintext}
%    \end{macrocode}
%
%    Also, we specify that the Serbian group of shorthands should be used.
%
%    \begin{macrocode}
\addto\extrasserbianc{\languageshorthands{serbianc}}
\addto\extrasserbianc{\bbl@activate{"}}
\addto\noextrasserbianc{\bbl@deactivate{"}}
%    \end{macrocode}
%
%    Serbian typesetting requires |frenchspacing|. So, we add commands to
%	 |\extrasserbianc| and |\noextrasserbianc| to turn it on and off, respectively.
%
%    \begin{macrocode}
\addto\extrasserbianc{\bbl@frenchspacing}
\addto\noextrasserbianc{\bbl@nonfrenchspacing}
%    \end{macrocode}
%
%    In Serbian, the first paragraph of each section should be indented.
%
%    \begin{macrocode}
\let\@aifORI\@afterindentfalse
\def\bbl@serbiancindent{\let\@afterindentfalse\@afterindenttrue\@afterindenttrue}
\def\bbl@nonserbiancindent{\let\@afterindentfalse\@aifORI\@afterindentfalse}
\addto\extrasserbianc{\bbl@serbiancindent}
\addto\noextrasserbianc{\bbl@nonserbiancindent}
%    \end{macrocode}
%
%    We redefine the macro |\Alph|, which now produces (uppercase) Cyrillic letters instead of Latin
%    ones when Serbian is switched on. Also we will define Serbian Latin and English alphabets so
%    the user can choose which alphabet to use through the commands |\enumCyr|, |\enumLat| and |\enumEng|
%    (or even to switch from one enumeration to another).
%
%    \begin{macrocode}
\newcount\srbc@lettering \srbc@lettering=\z@
\addto\extrasserbianc{\babel@save\@Alph \let\@Alph\srbc@Alph}
\def\srbc@Alph#1{%
\ifcase\srbc@lettering
    \if@srbc@uni@ode
        \ifcase#1\or А\or Б\or В\or Г\or Д\or Ђ\or Е\or Ж\or З\or
        И\or Ј\or К\or Л\or Љ\or М\or Н\or Њ\or О\or П\or Р\or С\or
        Т\or Ћ\or У\or Ф\or Х\or Ц\or Ч\or Џ\or Ш\else\@ctrerr\fi
    \else
        \ifcase#1\or\CYRA\or\CYRB\or\CYRV\or\CYRG\or\CYRD\or\CYRDJE\or
        \CYRE\or\CYRZH\or\CYRZ\or\CYRI\or\CYRJE\or\CYRK\or\CYRL\or
        \CYRLJE\or\CYRM\or\CYRN\or\CYRNJE\or\CYRO\or\CYRP\or\CYRR\or
        \CYRS\or\CYRT\or\CYRTSHE\or\CYRU\or\CYRF\or\CYRH\or\CYRC\or
        \CYRCH\or\CYRDZHE\or\CYRSH\else\@ctrerr\fi
    \fi
\or
    \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or
    J\or K\or L\or M\or N\or O\or P\or R\or S\or T\or U\or V\or
    Z\else\@ctrerr\fi
\or
    \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or
    J\or K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or
    W\or X\or Y\or Z\else\@ctrerr\fi
\fi}%
%    \end{macrocode}
%
%    The same thing will be done with the macro |\alph|.
%
%    \begin{macrocode}
\addto\extrasserbianc{\babel@save\@alph \let\@alph\srbc@alph}
\def\srbc@alph#1{%
\ifcase\srbc@lettering
    \if@srbc@uni@ode
        \ifcase#1\or а\or б\or в\or г\or д\or ђ\or е\or ж\or з\or
        и\or ј\or к\or л\or љ\or м\or н\or њ\or о\or п\or р\or с\or
        т\or ћ\or у\or ф\or х\or ц\or ч\or џ\or ш\else\@ctrerr\fi
    \else
        \ifcase#1\or\cyra\or\cyrb\or\cyrv\or\cyrg\or\cyrd\or\cyrdje\or
        \cyre\or\cyrzh\or\cyrz\or\cyri\or\cyrje\or\cyrk\or\cyrl\or
        \cyrlje\or\cyrm\or\cyrn\or\cyrnje\or\cyro\or\cyrp\or\cyrr\or
        \cyrs\or\cyrt\or\cyrtshe\or\cyru\or\cyrf\or\cyrh\or\cyrc\or
        \cyrch\or\cyrdzhe\or\cyrsh\else\@ctrerr\fi
    \fi
\or
    \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or
    j\or k\or l\or m\or n\or o\or p\or r\or s\or t\or u\or v\or
    z\else\@ctrerr\fi
\or
    \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or
    j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or
    w\or x\or y\or z\else\@ctrerr\fi
\fi}%
\addto\extrasserbianc{%
  \babel@save\enumEng\def\enumEng{\srbc@lettering=\tw@}%
  \babel@save\enumLat\def\enumLat{\srbc@lettering=\@ne}%
  \babel@save\enumCyr\def\enumCyr{\srbc@lettering=\z@}%
}%
%    \end{macrocode}
%
%    An |ijekav| attribute changes the default behavior and activates an
%    alternative set of captions suitable for typesetting in ijekavian dialect.
%    The |quotes| attribute changes the |"'| shorthand to produce '' as closing quotation mark,
%    instead of the traditional `` quotation mark of Serbian language.
%    Also, the |datei| attribute will produce `јуни' and `јули' instead `јун' and `јул'
%    for date.
%
%    \begin{macrocode}
\bbl@declare@ttribute{serbianc}{ijekav}{%
 \PackageInfo{babel}{Serbianc attribute set to ijekav}%
 \let\captionsserbianc=\captionsserbianc@ijekav }
\@onlypreamble\captionsserbianc@ijekav
\bbl@declare@ttribute{serbianc}{quotes}{%
 \PackageInfo{babel}{Serbianc attribute set to quotes}%
 \declare@shorthand{serbianc}{"'}{\textquotedblright} }
\bbl@declare@ttribute{serbianc}{datei}{%
 \PackageInfo{babel}{Serbianc attribute set to datei}%
 \let\dateserbianc=\dateserbianc@datei }
\@onlypreamble\dateserbianc@datei
%    \end{macrocode}
%
%    Some math functions in Serbian math books have other names:
%    e.g. |sinh| in Serbian is written as |sh| etc. So we define a
%    number of new math operators.
%
%    \begin{macrocode}
\def\sh{\mathop{\operator@font sh}\nolimits}
\def\ch{\mathop{\operator@font ch}\nolimits}
\def\tg{\mathop{\operator@font tg}\nolimits}
\def\ctg{\mathop{\operator@font ctg}\nolimits}
\def\arctg{\mathop{\operator@font arctg}\nolimits}
\def\arcctg{\mathop{\operator@font arcctg}\nolimits}
\addto\extrasserbianc{%
  \babel@save{\th}%
  \let\ltx@th\th
  \def\th{\textormath{\ltx@th}%
                     {\mathop{\operator@font th}\nolimits}}%
  }
\def\cth{\mathop{\operator@font cth}\nolimits}
\def\arsh{\mathop{\operator@font arsh}\nolimits}
\def\arch{\mathop{\operator@font arch}\nolimits}
\def\arth{\mathop{\operator@font arth}\nolimits}
\def\arcth{\mathop{\operator@font arcth}\nolimits}
\def\cosec{\mathop{\operator@font cosec}\nolimits}
\def\arcsec{\mathop{\operator@font arcsec}\nolimits}
\def\arccosec{\mathop{\operator@font arccosec}\nolimits}
\def\sech{\mathop{\operator@font sech}\nolimits}
\def\cosech{\mathop{\operator@font cosech}\nolimits}
\def\arsech{\mathop{\operator@font arsech}\nolimits}
\def\arcosech{\mathop{\operator@font arcosech}\nolimits}
\def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits}
\def\Expect{\mathop{\kern\z@\mathsf{E}}\nolimits}
\def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
\addto\extrasserbianc{%
  \babel@save\nzs \babel@save\nzd
  \babel@save\NZS \babel@save\NZD
  \if@srbc@uni@ode
    \def\nzs{\mathop{\mathrm{нзс}}\nolimits}%
    \def\nzd{\mathop{\mathrm{нзд}}\nolimits}%
    \def\NZS{\mathop{\mathrm{НЗС}}\nolimits}%
    \def\NZD{\mathop{\mathrm{НЗД}}\nolimits}%
  \else
    \def\nzs{\mathop{\textnormal{\cyrn\cyrz\cyrs}}\nolimits}%
    \def\nzd{\mathop{\textnormal{\cyrn\cyrz\cyrd}}\nolimits}%
    \def\NZS{\mathop{\textnormal{\CYRN\CYRZ\CYRS}}\nolimits}%
    \def\NZD{\mathop{\textnormal{\CYRN\CYRZ\CYRD}}\nolimits}%
  \fi}
%    \end{macrocode}
%
%    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{serbianc}
%</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