Current File : //usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty |
%%
%% This is file `babel.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% babel.dtx (with options: `package')
%%
%%
%% Copyright (C) 2012-2021 Javier Bezos and Johannes L. Braams.
%% Copyright (C) 1989-2012 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 Javier Bezos.
%%
%% 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.
%%
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{babel}[2021/03/03 3.55 The Babel package]
\@ifpackagewith{babel}{debug}
{\providecommand\bbl@trace[1]{\message{^^J[ #1 ]}}%
\let\bbl@debug\@firstofone
\ifx\directlua\@undefined\else
\directlua{ Babel = Babel or {}
Babel.debug = true }%
\fi}
{\providecommand\bbl@trace[1]{}%
\let\bbl@debug\@gobble
\ifx\directlua\@undefined\else
\directlua{ Babel = Babel or {}
Babel.debug = false }%
\fi}
\bbl@trace{Basic macros}
\def\bbl@stripslash{\expandafter\@gobble\string}
\def\bbl@add#1#2{%
\bbl@ifunset{\bbl@stripslash#1}%
{\def#1{#2}}%
{\expandafter\def\expandafter#1\expandafter{#1#2}}}
\def\bbl@xin@{\@expandtwoargs\in@}
\def\bbl@csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}%
\def\bbl@cs#1{\csname bbl@#1\endcsname}
\def\bbl@cl#1{\csname bbl@#1@\languagename\endcsname}
\def\bbl@loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,}
\def\bbl@loopx#1#2{\expandafter\bbl@loop\expandafter#1\expandafter{#2}}
\def\bbl@@loop#1#2#3,{%
\ifx\@nnil#3\relax\else
\def#1{#3}#2\bbl@afterfi\bbl@@loop#1{#2}%
\fi}
\def\bbl@for#1#2#3{\bbl@loopx#1{#2}{\ifx#1\@empty\else#3\fi}}
\def\bbl@add@list#1#2{%
\edef#1{%
\bbl@ifunset{\bbl@stripslash#1}%
{}%
{\ifx#1\@empty\else#1,\fi}%
#2}}
\long\def\bbl@afterelse#1\else#2\fi{\fi#1}
\long\def\bbl@afterfi#1\fi{\fi#1}
\def\bbl@exp#1{%
\begingroup
\let\\\noexpand
\def\<##1>{\expandafter\noexpand\csname##1\endcsname}%
\edef\bbl@exp@aux{\endgroup#1}%
\bbl@exp@aux}
\def\bbl@tempa#1{%
\long\def\bbl@trim##1##2{%
\futurelet\bbl@trim@a\bbl@trim@c##2\@nil\@nil#1\@nil\relax{##1}}%
\def\bbl@trim@c{%
\ifx\bbl@trim@a\@sptoken
\expandafter\bbl@trim@b
\else
\expandafter\bbl@trim@b\expandafter#1%
\fi}%
\long\def\bbl@trim@b#1##1 \@nil{\bbl@trim@i##1}}
\bbl@tempa{ }
\long\def\bbl@trim@i#1\@nil#2\relax#3{#3{#1}}
\long\def\bbl@trim@def#1{\bbl@trim{\def#1}}
\begingroup
\gdef\bbl@ifunset#1{%
\expandafter\ifx\csname#1\endcsname\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\bbl@ifunset{ifcsname}%
{}%
{\gdef\bbl@ifunset#1{%
\ifcsname#1\endcsname
\expandafter\ifx\csname#1\endcsname\relax
\bbl@afterelse\expandafter\@firstoftwo
\else
\bbl@afterfi\expandafter\@secondoftwo
\fi
\else
\expandafter\@firstoftwo
\fi}}
\endgroup
\def\bbl@ifblank#1{%
\bbl@ifblank@i#1\@nil\@nil\@secondoftwo\@firstoftwo\@nil}
\long\def\bbl@ifblank@i#1#2\@nil#3#4#5\@nil{#4}
\def\bbl@ifset#1#2#3{%
\bbl@ifunset{#1}{#3}{\bbl@exp{\\\bbl@ifblank{#1}}{#3}{#2}}}
\def\bbl@forkv#1#2{%
\def\bbl@kvcmd##1##2##3{#2}%
\bbl@kvnext#1,\@nil,}
\def\bbl@kvnext#1,{%
\ifx\@nil#1\relax\else
\bbl@ifblank{#1}{}{\bbl@forkv@eq#1=\@empty=\@nil{#1}}%
\expandafter\bbl@kvnext
\fi}
\def\bbl@forkv@eq#1=#2=#3\@nil#4{%
\bbl@trim@def\bbl@forkv@a{#1}%
\bbl@trim{\expandafter\bbl@kvcmd\expandafter{\bbl@forkv@a}}{#2}{#4}}
\def\bbl@vforeach#1#2{%
\def\bbl@forcmd##1{#2}%
\bbl@fornext#1,\@nil,}
\def\bbl@fornext#1,{%
\ifx\@nil#1\relax\else
\bbl@ifblank{#1}{}{\bbl@trim\bbl@forcmd{#1}}%
\expandafter\bbl@fornext
\fi}
\def\bbl@foreach#1{\expandafter\bbl@vforeach\expandafter{#1}}
\def\bbl@replace#1#2#3{% in #1 -> repl #2 by #3
\toks@{}%
\def\bbl@replace@aux##1#2##2#2{%
\ifx\bbl@nil##2%
\toks@\expandafter{\the\toks@##1}%
\else
\toks@\expandafter{\the\toks@##1#3}%
\bbl@afterfi
\bbl@replace@aux##2#2%
\fi}%
\expandafter\bbl@replace@aux#1#2\bbl@nil#2%
\edef#1{\the\toks@}}
\ifx\detokenize\@undefined\else % Unused macros if old Plain TeX
\bbl@exp{\def\\\bbl@parsedef##1\detokenize{macro:}}#2->#3\relax{%
\def\bbl@tempa{#1}%
\def\bbl@tempb{#2}%
\def\bbl@tempe{#3}}
\def\bbl@sreplace#1#2#3{%
\begingroup
\expandafter\bbl@parsedef\meaning#1\relax
\def\bbl@tempc{#2}%
\edef\bbl@tempc{\expandafter\strip@prefix\meaning\bbl@tempc}%
\def\bbl@tempd{#3}%
\edef\bbl@tempd{\expandafter\strip@prefix\meaning\bbl@tempd}%
\bbl@xin@{\bbl@tempc}{\bbl@tempe}% If not in macro, do nothing
\ifin@
\bbl@exp{\\\bbl@replace\\\bbl@tempe{\bbl@tempc}{\bbl@tempd}}%
\def\bbl@tempc{% Expanded an executed below as 'uplevel'
\\\makeatletter % "internal" macros with @ are assumed
\\\scantokens{%
\bbl@tempa\\\@namedef{\bbl@stripslash#1}\bbl@tempb{\bbl@tempe}}%
\catcode64=\the\catcode64\relax}% Restore @
\else
\let\bbl@tempc\@empty % Not \relax
\fi
\bbl@exp{% For the 'uplevel' assignments
\endgroup
\bbl@tempc}} % empty or expand to set #1 with changes
\fi
\def\bbl@ifsamestring#1#2{%
\begingroup
\protected@edef\bbl@tempb{#1}%
\edef\bbl@tempb{\expandafter\strip@prefix\meaning\bbl@tempb}%
\protected@edef\bbl@tempc{#2}%
\edef\bbl@tempc{\expandafter\strip@prefix\meaning\bbl@tempc}%
\ifx\bbl@tempb\bbl@tempc
\aftergroup\@firstoftwo
\else
\aftergroup\@secondoftwo
\fi
\endgroup}
\chardef\bbl@engine=%
\ifx\directlua\@undefined
\ifx\XeTeXinputencoding\@undefined
\z@
\else
\tw@
\fi
\else
\@ne
\fi
\def\bbl@bsphack{%
\ifhmode
\hskip\z@skip
\def\bbl@esphack{\loop\ifdim\lastskip>\z@\unskip\repeat\unskip}%
\else
\let\bbl@esphack\@empty
\fi}
\def\bbl@cased{%
\ifx\oe\OE
\expandafter\in@\expandafter
{\expandafter\OE\expandafter}\expandafter{\oe}%
\ifin@
\bbl@afterelse\expandafter\MakeUppercase
\else
\bbl@afterfi\expandafter\MakeLowercase
\fi
\else
\expandafter\@firstofone
\fi}
% Temporarily repeat here the code for errors. TODO.
\def\bbl@error#1#2{%
\begingroup
\def\\{\MessageBreak}%
\PackageError{babel}{#1}{#2}%
\endgroup}
\def\bbl@warning#1{%
\begingroup
\def\\{\MessageBreak}%
\PackageWarning{babel}{#1}%
\endgroup}
\def\bbl@infowarn#1{%
\begingroup
\def\\{\MessageBreak}%
\GenericWarning
{(babel) \@spaces\@spaces\@spaces}%
{Package babel Info: #1}%
\endgroup}
\def\bbl@info#1{%
\begingroup
\def\\{\MessageBreak}%
\PackageInfo{babel}{#1}%
\endgroup}
\def\bbl@nocaption{\protect\bbl@nocaption@i}
\def\bbl@nocaption@i#1#2{% 1: text to be printed 2: caption macro \langXname
\global\@namedef{#2}{\textbf{?#1?}}%
\@nameuse{#2}%
\edef\bbl@tempa{#1}%
\bbl@sreplace\bbl@tempa{name}{}%
\bbl@warning{%
\@backslashchar#1 not set for '\languagename'. Please,\\%
define it after the language has been loaded\\%
(typically in the preamble) with\\%
\string\setlocalecaption{\languagename}{\bbl@tempa}{..}\\%
Reported}}
\def\bbl@tentative{\protect\bbl@tentative@i}
\def\bbl@tentative@i#1{%
\bbl@warning{%
Some functions for '#1' are tentative.\\%
They might not work as expected and their behavior\\%
may change in the future.\\%
Reported}}
\def\@nolanerr#1{%
\bbl@error
{You haven't defined the language #1\space yet.\\%
Perhaps you misspelled it or your installation\\%
is not complete}%
{Your command will be ignored, type <return> to proceed}}
\def\@nopatterns#1{%
\bbl@warning
{No hyphenation patterns were preloaded for\\%
the language `#1' into the format.\\%
Please, configure your TeX system to add them and\\%
rebuild the format. Now I will use the patterns\\%
preloaded for \bbl@nulllanguage\space instead}}
% End of errors
\@ifpackagewith{babel}{silent}
{\let\bbl@info\@gobble
\let\bbl@infowarn\@gobble
\let\bbl@warning\@gobble}
{}
\def\AfterBabelLanguage#1{%
\global\expandafter\bbl@add\csname#1.ldf-h@@k\endcsname}%
\ifx\bbl@languages\@undefined\else
\begingroup
\catcode`\^^I=12
\@ifpackagewith{babel}{showlanguages}{%
\begingroup
\def\bbl@elt#1#2#3#4{\wlog{#2^^I#1^^I#3^^I#4}}%
\wlog{<*languages>}%
\bbl@languages
\wlog{</languages>}%
\endgroup}{}
\endgroup
\def\bbl@elt#1#2#3#4{%
\ifnum#2=\z@
\gdef\bbl@nulllanguage{#1}%
\def\bbl@elt##1##2##3##4{}%
\fi}%
\bbl@languages
\fi%
\bbl@trace{Defining option 'base'}
\@ifpackagewith{babel}{base}{%
\let\bbl@onlyswitch\@empty
\let\bbl@provide@locale\relax
\input babel.def
\let\bbl@onlyswitch\@undefined
\ifx\directlua\@undefined
\DeclareOption*{\bbl@patterns{\CurrentOption}}%
\else
\input luababel.def
\DeclareOption*{\bbl@patterns@lua{\CurrentOption}}%
\fi
\DeclareOption{base}{}%
\DeclareOption{showlanguages}{}%
\ProcessOptions
\global\expandafter\let\csname opt@babel.sty\endcsname\relax
\global\expandafter\let\csname ver@babel.sty\endcsname\relax
\global\let\@ifl@ter@@\@ifl@ter
\def\@ifl@ter#1#2#3#4#5{\global\let\@ifl@ter\@ifl@ter@@}%
\endinput}{}%
\bbl@trace{key=value and another general options}
\bbl@csarg\let{tempa\expandafter}\csname opt@babel.sty\endcsname
\def\bbl@tempb#1.#2{% Remove trailing dot
#1\ifx\@empty#2\else,\bbl@afterfi\bbl@tempb#2\fi}%
\def\bbl@tempd#1.#2\@nnil{% TODO. Refactor lists?
\ifx\@empty#2%
\edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}%
\else
\in@{,provide,}{,#1,}%
\ifin@
\edef\bbl@tempc{%
\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.\bbl@tempb#2}%
\else
\in@{=}{#1}%
\ifin@
\edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.#2}%
\else
\edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}%
\bbl@csarg\edef{mod@#1}{\bbl@tempb#2}%
\fi
\fi
\fi}
\let\bbl@tempc\@empty
\bbl@foreach\bbl@tempa{\bbl@tempd#1.\@empty\@nnil}
\expandafter\let\csname opt@babel.sty\endcsname\bbl@tempc
\DeclareOption{KeepShorthandsActive}{}
\DeclareOption{activeacute}{}
\DeclareOption{activegrave}{}
\DeclareOption{debug}{}
\DeclareOption{noconfigs}{}
\DeclareOption{showlanguages}{}
\DeclareOption{silent}{}
\DeclareOption{mono}{}
\DeclareOption{shorthands=off}{\bbl@tempa shorthands=\bbl@tempa}
\chardef\bbl@iniflag\z@
\DeclareOption{provide=*}{\chardef\bbl@iniflag\@ne} % main -> +1
\DeclareOption{provide+=*}{\chardef\bbl@iniflag\tw@} % add = 2
\DeclareOption{provide*=*}{\chardef\bbl@iniflag\thr@@} % add + main
\let\bbl@autoload@options\@empty
\DeclareOption{provide@=*}{\def\bbl@autoload@options{import}}
\newif\ifbbl@single
\DeclareOption{selectors=off}{\bbl@singletrue}
\DeclareOption{safe=none}{\let\bbl@opt@safe\@empty}
\DeclareOption{safe=bib}{\def\bbl@opt@safe{B}}
\DeclareOption{safe=ref}{\def\bbl@opt@safe{R}}
\DeclareOption{math=active}{}
\DeclareOption{math=normal}{\def\bbl@mathnormal{\noexpand\textormath}}
\DeclareOption{nocase}{}
\let\bbl@opt@strings\@nnil % accept strings=value
\DeclareOption{strings}{\def\bbl@opt@strings{\BabelStringsDefault}}
\DeclareOption{strings=encoded}{\let\bbl@opt@strings\relax}
\def\BabelStringsDefault{generic}
\DeclareOption{hyphenmap=off}{\chardef\bbl@opt@hyphenmap\z@}
\DeclareOption{hyphenmap=first}{\chardef\bbl@opt@hyphenmap\@ne}
\DeclareOption{hyphenmap=select}{\chardef\bbl@opt@hyphenmap\tw@}
\DeclareOption{hyphenmap=other}{\chardef\bbl@opt@hyphenmap\thr@@}
\DeclareOption{hyphenmap=other*}{\chardef\bbl@opt@hyphenmap4\relax}
\chardef\bbl@bidimode\z@
\DeclareOption{bidi=default}{\chardef\bbl@bidimode=\@ne}
\DeclareOption{bidi=basic}{\chardef\bbl@bidimode=101 }
\DeclareOption{bidi=basic-r}{\chardef\bbl@bidimode=102 }
\DeclareOption{bidi=bidi}{\chardef\bbl@bidimode=201 }
\DeclareOption{bidi=bidi-r}{\chardef\bbl@bidimode=202 }
\DeclareOption{bidi=bidi-l}{\chardef\bbl@bidimode=203 }
\let\bbl@opt@shorthands\@nnil
\let\bbl@opt@config\@nnil
\let\bbl@opt@main\@nnil
\let\bbl@opt@headfoot\@nnil
\let\bbl@opt@layout\@nnil
\def\bbl@tempa#1=#2\bbl@tempa{%
\bbl@csarg\ifx{opt@#1}\@nnil
\bbl@csarg\edef{opt@#1}{#2}%
\else
\bbl@error
{Bad option `#1=#2'. Either you have misspelled the\\%
key or there is a previous setting of `#1'. Valid\\%
keys are, among others, `shorthands', `main', `bidi',\\%
`strings', `config', `headfoot', `safe', `math'.}%
{See the manual for further details.}
\fi}
\let\bbl@language@opts\@empty
\DeclareOption*{%
\bbl@xin@{\string=}{\CurrentOption}%
\ifin@
\expandafter\bbl@tempa\CurrentOption\bbl@tempa
\else
\bbl@add@list\bbl@language@opts{\CurrentOption}%
\fi}
\ProcessOptions*
\bbl@trace{Conditional loading of shorthands}
\def\bbl@sh@string#1{%
\ifx#1\@empty\else
\ifx#1t\string~%
\else\ifx#1c\string,%
\else\string#1%
\fi\fi
\expandafter\bbl@sh@string
\fi}
\ifx\bbl@opt@shorthands\@nnil
\def\bbl@ifshorthand#1#2#3{#2}%
\else\ifx\bbl@opt@shorthands\@empty
\def\bbl@ifshorthand#1#2#3{#3}%
\else
\def\bbl@ifshorthand#1{%
\bbl@xin@{\string#1}{\bbl@opt@shorthands}%
\ifin@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\edef\bbl@opt@shorthands{%
\expandafter\bbl@sh@string\bbl@opt@shorthands\@empty}%
\bbl@ifshorthand{'}%
{\PassOptionsToPackage{activeacute}{babel}}{}
\bbl@ifshorthand{`}%
{\PassOptionsToPackage{activegrave}{babel}}{}
\fi\fi
\ifx\bbl@opt@headfoot\@nnil\else
\g@addto@macro\@resetactivechars{%
\set@typeset@protect
\expandafter\select@language@x\expandafter{\bbl@opt@headfoot}%
\let\protect\noexpand}
\fi
\ifx\bbl@opt@safe\@undefined
\def\bbl@opt@safe{BR}
\fi
\ifx\bbl@opt@main\@nnil\else
\edef\bbl@language@opts{%
\ifx\bbl@language@opts\@empty\else\bbl@language@opts,\fi
\bbl@opt@main}
\fi
\bbl@trace{Defining IfBabelLayout}
\ifx\bbl@opt@layout\@nnil
\newcommand\IfBabelLayout[3]{#3}%
\else
\newcommand\IfBabelLayout[1]{%
\@expandtwoargs\in@{.#1.}{.\bbl@opt@layout.}%
\ifin@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\fi
\input babel.def
\bbl@trace{Cross referencing macros}
\ifx\bbl@opt@safe\@empty\else
\def\@newl@bel#1#2#3{%
{\@safe@activestrue
\bbl@ifunset{#1@#2}%
\relax
{\gdef\@multiplelabels{%
\@latex@warning@no@line{There were multiply-defined labels}}%
\@latex@warning@no@line{Label `#2' multiply defined}}%
\global\@namedef{#1@#2}{#3}}}
\CheckCommand*\@testdef[3]{%
\def\reserved@a{#3}%
\expandafter\ifx\csname#1@#2\endcsname\reserved@a
\else
\@tempswatrue
\fi}
\def\@testdef#1#2#3{% TODO. With @samestring?
\@safe@activestrue
\expandafter\let\expandafter\bbl@tempa\csname #1@#2\endcsname
\def\bbl@tempb{#3}%
\@safe@activesfalse
\ifx\bbl@tempa\relax
\else
\edef\bbl@tempa{\expandafter\strip@prefix\meaning\bbl@tempa}%
\fi
\edef\bbl@tempb{\expandafter\strip@prefix\meaning\bbl@tempb}%
\ifx\bbl@tempa\bbl@tempb
\else
\@tempswatrue
\fi}
\fi
\bbl@xin@{R}\bbl@opt@safe
\ifin@
\bbl@redefinerobust\ref#1{%
\@safe@activestrue\org@ref{#1}\@safe@activesfalse}
\bbl@redefinerobust\pageref#1{%
\@safe@activestrue\org@pageref{#1}\@safe@activesfalse}
\else
\let\org@ref\ref
\let\org@pageref\pageref
\fi
\bbl@xin@{B}\bbl@opt@safe
\ifin@
\bbl@redefine\@citex[#1]#2{%
\@safe@activestrue\edef\@tempa{#2}\@safe@activesfalse
\org@@citex[#1]{\@tempa}}
\AtBeginDocument{%
\@ifpackageloaded{natbib}{%
\def\@citex[#1][#2]#3{%
\@safe@activestrue\edef\@tempa{#3}\@safe@activesfalse
\org@@citex[#1][#2]{\@tempa}}%
}{}}
\AtBeginDocument{%
\@ifpackageloaded{cite}{%
\def\@citex[#1]#2{%
\@safe@activestrue\org@@citex[#1]{#2}\@safe@activesfalse}%
}{}}
\bbl@redefine\nocite#1{%
\@safe@activestrue\org@nocite{#1}\@safe@activesfalse}
\bbl@redefine\bibcite{%
\bbl@cite@choice
\bibcite}
\def\bbl@bibcite#1#2{%
\org@bibcite{#1}{\@safe@activesfalse#2}}
\def\bbl@cite@choice{%
\global\let\bibcite\bbl@bibcite
\@ifpackageloaded{natbib}{\global\let\bibcite\org@bibcite}{}%
\@ifpackageloaded{cite}{\global\let\bibcite\org@bibcite}{}%
\global\let\bbl@cite@choice\relax}
\AtBeginDocument{\bbl@cite@choice}
\bbl@redefine\@bibitem#1{%
\@safe@activestrue\org@@bibitem{#1}\@safe@activesfalse}
\else
\let\org@nocite\nocite
\let\org@@citex\@citex
\let\org@bibcite\bibcite
\let\org@@bibitem\@bibitem
\fi
\bbl@trace{Marks}
\IfBabelLayout{sectioning}
{\ifx\bbl@opt@headfoot\@nnil
\g@addto@macro\@resetactivechars{%
\set@typeset@protect
\expandafter\select@language@x\expandafter{\bbl@main@language}%
\let\protect\noexpand
\ifcase\bbl@bidimode\else % Only with bidi. See also above
\edef\thepage{%
\noexpand\babelsublr{\unexpanded\expandafter{\thepage}}}%
\fi}%
\fi}
{\ifbbl@single\else
\bbl@ifunset{markright }\bbl@redefine\bbl@redefinerobust
\markright#1{%
\bbl@ifblank{#1}%
{\org@markright{}}%
{\toks@{#1}%
\bbl@exp{%
\\\org@markright{\\\protect\\\foreignlanguage{\languagename}%
{\\\protect\\\bbl@restore@actives\the\toks@}}}}}%
\ifx\@mkboth\markboth
\def\bbl@tempc{\let\@mkboth\markboth}
\else
\def\bbl@tempc{}
\fi
\bbl@ifunset{markboth }\bbl@redefine\bbl@redefinerobust
\markboth#1#2{%
\protected@edef\bbl@tempb##1{%
\protect\foreignlanguage
{\languagename}{\protect\bbl@restore@actives##1}}%
\bbl@ifblank{#1}%
{\toks@{}}%
{\toks@\expandafter{\bbl@tempb{#1}}}%
\bbl@ifblank{#2}%
{\@temptokena{}}%
{\@temptokena\expandafter{\bbl@tempb{#2}}}%
\bbl@exp{\\\org@markboth{\the\toks@}{\the\@temptokena}}}
\bbl@tempc
\fi} % end ifbbl@single, end \IfBabelLayout
\bbl@trace{Preventing clashes with other packages}
\bbl@xin@{R}\bbl@opt@safe
\ifin@
\AtBeginDocument{%
\@ifpackageloaded{ifthen}{%
\bbl@redefine@long\ifthenelse#1#2#3{%
\let\bbl@temp@pref\pageref
\let\pageref\org@pageref
\let\bbl@temp@ref\ref
\let\ref\org@ref
\@safe@activestrue
\org@ifthenelse{#1}%
{\let\pageref\bbl@temp@pref
\let\ref\bbl@temp@ref
\@safe@activesfalse
#2}%
{\let\pageref\bbl@temp@pref
\let\ref\bbl@temp@ref
\@safe@activesfalse
#3}%
}%
}{}%
}
\AtBeginDocument{%
\@ifpackageloaded{varioref}{%
\bbl@redefine\@@vpageref#1[#2]#3{%
\@safe@activestrue
\org@@@vpageref{#1}[#2]{#3}%
\@safe@activesfalse}%
\bbl@redefine\vrefpagenum#1#2{%
\@safe@activestrue
\org@vrefpagenum{#1}{#2}%
\@safe@activesfalse}%
\expandafter\def\csname Ref \endcsname#1{%
\protected@edef\@tempa{\org@ref{#1}}\expandafter\MakeUppercase\@tempa}
}{}%
}
\fi
\AtEndOfPackage{%
\AtBeginDocument{%
\@ifpackageloaded{hhline}%
{\expandafter\ifx\csname normal@char\string:\endcsname\relax
\else
\makeatletter
\def\@currname{hhline}\input{hhline.sty}\makeatother
\fi}%
{}}}
\DeclareRobustCommand{\FOREIGNLANGUAGE}[1]{%
\lowercase{\foreignlanguage{#1}}}
\def\substitutefontfamily#1#2#3{%
\lowercase{\immediate\openout15=#1#2.fd\relax}%
\immediate\write15{%
\string\ProvidesFile{#1#2.fd}%
[\the\year/\two@digits{\the\month}/\two@digits{\the\day}
\space generated font description file]^^J
\string\DeclareFontFamily{#1}{#2}{}^^J
\string\DeclareFontShape{#1}{#2}{m}{n}{<->ssub * #3/m/n}{}^^J
\string\DeclareFontShape{#1}{#2}{m}{it}{<->ssub * #3/m/it}{}^^J
\string\DeclareFontShape{#1}{#2}{m}{sl}{<->ssub * #3/m/sl}{}^^J
\string\DeclareFontShape{#1}{#2}{m}{sc}{<->ssub * #3/m/sc}{}^^J
\string\DeclareFontShape{#1}{#2}{b}{n}{<->ssub * #3/bx/n}{}^^J
\string\DeclareFontShape{#1}{#2}{b}{it}{<->ssub * #3/bx/it}{}^^J
\string\DeclareFontShape{#1}{#2}{b}{sl}{<->ssub * #3/bx/sl}{}^^J
\string\DeclareFontShape{#1}{#2}{b}{sc}{<->ssub * #3/bx/sc}{}^^J
}%
\closeout15
}
\@onlypreamble\substitutefontfamily
\bbl@trace{Encoding and fonts}
\newcommand\BabelNonASCII{LGR,X2,OT2,OT3,OT6,LHE,LWN,LMA,LMC,LMS,LMU,PU,PD1}
\newcommand\BabelNonText{TS1,T3,TS3}
\let\org@TeX\TeX
\let\org@LaTeX\LaTeX
\let\ensureascii\@firstofone
\AtBeginDocument{%
\in@false
\bbl@foreach\BabelNonASCII{% is there a text non-ascii enc?
\ifin@\else
\lowercase{\bbl@xin@{,#1enc.def,}{,\@filelist,}}%
\fi}%
\ifin@ % if a text non-ascii has been loaded
\def\ensureascii#1{{\fontencoding{OT1}\selectfont#1}}%
\DeclareTextCommandDefault{\TeX}{\org@TeX}%
\DeclareTextCommandDefault{\LaTeX}{\org@LaTeX}%
\def\bbl@tempb#1\@@{\uppercase{\bbl@tempc#1}ENC.DEF\@empty\@@}%
\def\bbl@tempc#1ENC.DEF#2\@@{%
\ifx\@empty#2\else
\bbl@ifunset{T@#1}%
{}%
{\bbl@xin@{,#1,}{,\BabelNonASCII,\BabelNonText,}%
\ifin@
\DeclareTextCommand{\TeX}{#1}{\ensureascii{\org@TeX}}%
\DeclareTextCommand{\LaTeX}{#1}{\ensureascii{\org@LaTeX}}%
\else
\def\ensureascii##1{{\fontencoding{#1}\selectfont##1}}%
\fi}%
\fi}%
\bbl@foreach\@filelist{\bbl@tempb#1\@@}% TODO - \@@ de mas??
\bbl@xin@{,\cf@encoding,}{,\BabelNonASCII,\BabelNonText,}%
\ifin@\else
\edef\ensureascii#1{{%
\noexpand\fontencoding{\cf@encoding}\noexpand\selectfont#1}}%
\fi
\fi}
\AtEndOfPackage{\edef\latinencoding{\cf@encoding}}
\AtBeginDocument{%
\@ifpackageloaded{fontspec}%
{\xdef\latinencoding{%
\ifx\UTFencname\@undefined
EU\ifcase\bbl@engine\or2\or1\fi
\else
\UTFencname
\fi}}%
{\gdef\latinencoding{OT1}%
\ifx\cf@encoding\bbl@t@one
\xdef\latinencoding{\bbl@t@one}%
\else
\ifx\@fontenc@load@list\@undefined
\@ifl@aded{def}{t1enc}{\xdef\latinencoding{\bbl@t@one}}{}%
\else
\def\@elt#1{,#1,}%
\edef\bbl@tempa{\expandafter\@gobbletwo\@fontenc@load@list}%
\let\@elt\relax
\bbl@xin@{,T1,}\bbl@tempa
\ifin@
\xdef\latinencoding{\bbl@t@one}%
\fi
\fi
\fi}}
\DeclareRobustCommand{\latintext}{%
\fontencoding{\latinencoding}\selectfont
\def\encodingdefault{\latinencoding}}
\ifx\@undefined\DeclareTextFontCommand
\DeclareRobustCommand{\textlatin}[1]{\leavevmode{\latintext #1}}
\else
\DeclareTextFontCommand{\textlatin}{\latintext}
\fi
\ifodd\bbl@engine
\def\bbl@activate@preotf{%
\let\bbl@activate@preotf\relax % only once
\directlua{
Babel = Babel or {}
%
function Babel.pre_otfload_v(head)
if Babel.numbers and Babel.digits_mapped then
head = Babel.numbers(head)
end
if Babel.bidi_enabled then
head = Babel.bidi(head, false, dir)
end
return head
end
%
function Babel.pre_otfload_h(head, gc, sz, pt, dir)
if Babel.numbers and Babel.digits_mapped then
head = Babel.numbers(head)
end
if Babel.bidi_enabled then
head = Babel.bidi(head, false, dir)
end
return head
end
%
luatexbase.add_to_callback('pre_linebreak_filter',
Babel.pre_otfload_v,
'Babel.pre_otfload_v',
luatexbase.priority_in_callback('pre_linebreak_filter',
'luaotfload.node_processor') or nil)
%
luatexbase.add_to_callback('hpack_filter',
Babel.pre_otfload_h,
'Babel.pre_otfload_h',
luatexbase.priority_in_callback('hpack_filter',
'luaotfload.node_processor') or nil)
}}
\fi
\bbl@trace{Loading basic (internal) bidi support}
\ifodd\bbl@engine
\ifnum\bbl@bidimode>100 \ifnum\bbl@bidimode<200
\let\bbl@beforeforeign\leavevmode
\AtEndOfPackage{\EnableBabelHook{babel-bidi}}
\RequirePackage{luatexbase}
\bbl@activate@preotf
\directlua{
require('babel-data-bidi.lua')
\ifcase\expandafter\@gobbletwo\the\bbl@bidimode\or
require('babel-bidi-basic.lua')
\or
require('babel-bidi-basic-r.lua')
\fi}
% TODO - to locale_props, not as separate attribute
\newattribute\bbl@attr@dir
% TODO. I don't like it, hackish:
\bbl@exp{\output{\bodydir\pagedir\the\output}}
\AtEndOfPackage{\EnableBabelHook{babel-bidi}}
\fi\fi
\else
\ifnum\bbl@bidimode>100 \ifnum\bbl@bidimode<200
\bbl@error
{The bidi method `basic' is available only in\\%
luatex. I'll continue with `bidi=default', so\\%
expect wrong results}%
{See the manual for further details.}%
\let\bbl@beforeforeign\leavevmode
\AtEndOfPackage{%
\EnableBabelHook{babel-bidi}%
\bbl@xebidipar}
\fi\fi
\def\bbl@loadxebidi#1{%
\ifx\RTLfootnotetext\@undefined
\AtEndOfPackage{%
\EnableBabelHook{babel-bidi}%
\ifx\fontspec\@undefined
\bbl@loadfontspec % bidi needs fontspec
\fi
\usepackage#1{bidi}}%
\fi}
\ifnum\bbl@bidimode>200
\ifcase\expandafter\@gobbletwo\the\bbl@bidimode\or
\bbl@tentative{bidi=bidi}
\bbl@loadxebidi{}
\or
\bbl@loadxebidi{[rldocument]}
\or
\bbl@loadxebidi{}
\fi
\fi
\fi
\ifnum\bbl@bidimode=\@ne
\let\bbl@beforeforeign\leavevmode
\ifodd\bbl@engine
\newattribute\bbl@attr@dir
\bbl@exp{\output{\bodydir\pagedir\the\output}}%
\fi
\AtEndOfPackage{%
\EnableBabelHook{babel-bidi}%
\ifodd\bbl@engine\else
\bbl@xebidipar
\fi}
\fi
\bbl@trace{Macros to switch the text direction}
\def\bbl@alscripts{,Arabic,Syriac,Thaana,}
\def\bbl@rscripts{% TODO. Base on codes ??
,Imperial Aramaic,Avestan,Cypriot,Hatran,Hebrew,%
Old Hungarian,Old Hungarian,Lydian,Mandaean,Manichaean,%
Manichaean,Meroitic Cursive,Meroitic,Old North Arabian,%
Nabataean,N'Ko,Orkhon,Palmyrene,Inscriptional Pahlavi,%
Psalter Pahlavi,Phoenician,Inscriptional Parthian,Samaritan,%
Old South Arabian,}%
\def\bbl@provide@dirs#1{%
\bbl@xin@{\csname bbl@sname@#1\endcsname}{\bbl@alscripts\bbl@rscripts}%
\ifin@
\global\bbl@csarg\chardef{wdir@#1}\@ne
\bbl@xin@{\csname bbl@sname@#1\endcsname}{\bbl@alscripts}%
\ifin@
\global\bbl@csarg\chardef{wdir@#1}\tw@ % useless in xetex
\fi
\else
\global\bbl@csarg\chardef{wdir@#1}\z@
\fi
\ifodd\bbl@engine
\bbl@csarg\ifcase{wdir@#1}%
\directlua{ Babel.locale_props[\the\localeid].textdir = 'l' }%
\or
\directlua{ Babel.locale_props[\the\localeid].textdir = 'r' }%
\or
\directlua{ Babel.locale_props[\the\localeid].textdir = 'al' }%
\fi
\fi}
\def\bbl@switchdir{%
\bbl@ifunset{bbl@lsys@\languagename}{\bbl@provide@lsys{\languagename}}{}%
\bbl@ifunset{bbl@wdir@\languagename}{\bbl@provide@dirs{\languagename}}{}%
\bbl@exp{\\\bbl@setdirs\bbl@cl{wdir}}}
\def\bbl@setdirs#1{% TODO - math
\ifcase\bbl@select@type % TODO - strictly, not the right test
\bbl@bodydir{#1}%
\bbl@pardir{#1}%
\fi
\bbl@textdir{#1}}
\AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir}
\DisableBabelHook{babel-bidi}
\ifodd\bbl@engine % luatex=1
\chardef\bbl@thetextdir\z@
\chardef\bbl@thepardir\z@
\def\bbl@getluadir#1{%
\directlua{
if tex.#1dir == 'TLT' then
tex.sprint('0')
elseif tex.#1dir == 'TRT' then
tex.sprint('1')
end}}
\def\bbl@setluadir#1#2#3{% 1=text/par.. 2=\textdir.. 3=0 lr/1 rl
\ifcase#3\relax
\ifcase\bbl@getluadir{#1}\relax\else
#2 TLT\relax
\fi
\else
\ifcase\bbl@getluadir{#1}\relax
#2 TRT\relax
\fi
\fi}
\def\bbl@textdir#1{%
\bbl@setluadir{text}\textdir{#1}%
\chardef\bbl@thetextdir#1\relax
\setattribute\bbl@attr@dir{\numexpr\bbl@thepardir*3+#1}}
\def\bbl@pardir#1{%
\bbl@setluadir{par}\pardir{#1}%
\chardef\bbl@thepardir#1\relax}
\def\bbl@bodydir{\bbl@setluadir{body}\bodydir}
\def\bbl@pagedir{\bbl@setluadir{page}\pagedir}
\def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%%
% Sadly, we have to deal with boxes in math with basic.
% Activated every math with the package option bidi=:
\def\bbl@mathboxdir{%
\ifcase\bbl@thetextdir\relax
\everyhbox{\textdir TLT\relax}%
\else
\everyhbox{\textdir TRT\relax}%
\fi}
\frozen@everymath\expandafter{%
\expandafter\bbl@mathboxdir\the\frozen@everymath}
\frozen@everydisplay\expandafter{%
\expandafter\bbl@mathboxdir\the\frozen@everydisplay}
\else % pdftex=0, xetex=2
\newcount\bbl@dirlevel
\chardef\bbl@thetextdir\z@
\chardef\bbl@thepardir\z@
\def\bbl@textdir#1{%
\ifcase#1\relax
\chardef\bbl@thetextdir\z@
\bbl@textdir@i\beginL\endL
\else
\chardef\bbl@thetextdir\@ne
\bbl@textdir@i\beginR\endR
\fi}
\def\bbl@textdir@i#1#2{%
\ifhmode
\ifnum\currentgrouplevel>\z@
\ifnum\currentgrouplevel=\bbl@dirlevel
\bbl@error{Multiple bidi settings inside a group}%
{I'll insert a new group, but expect wrong results.}%
\bgroup\aftergroup#2\aftergroup\egroup
\else
\ifcase\currentgrouptype\or % 0 bottom
\aftergroup#2% 1 simple {}
\or
\bgroup\aftergroup#2\aftergroup\egroup % 2 hbox
\or
\bgroup\aftergroup#2\aftergroup\egroup % 3 adj hbox
\or\or\or % vbox vtop align
\or
\bgroup\aftergroup#2\aftergroup\egroup % 7 noalign
\or\or\or\or\or\or % output math disc insert vcent mathchoice
\or
\aftergroup#2% 14 \begingroup
\else
\bgroup\aftergroup#2\aftergroup\egroup % 15 adj
\fi
\fi
\bbl@dirlevel\currentgrouplevel
\fi
#1%
\fi}
\def\bbl@pardir#1{\chardef\bbl@thepardir#1\relax}
\let\bbl@bodydir\@gobble
\let\bbl@pagedir\@gobble
\def\bbl@dirparastext{\chardef\bbl@thepardir\bbl@thetextdir}
\def\bbl@xebidipar{%
\let\bbl@xebidipar\relax
\TeXXeTstate\@ne
\def\bbl@xeeverypar{%
\ifcase\bbl@thepardir
\ifcase\bbl@thetextdir\else\beginR\fi
\else
{\setbox\z@\lastbox\beginR\box\z@}%
\fi}%
\let\bbl@severypar\everypar
\newtoks\everypar
\everypar=\bbl@severypar
\bbl@severypar{\bbl@xeeverypar\the\everypar}}
\ifnum\bbl@bidimode>200
\let\bbl@textdir@i\@gobbletwo
\let\bbl@xebidipar\@empty
\AddBabelHook{bidi}{foreign}{%
\def\bbl@tempa{\def\BabelText####1}%
\ifcase\bbl@thetextdir
\expandafter\bbl@tempa\expandafter{\BabelText{\LR{##1}}}%
\else
\expandafter\bbl@tempa\expandafter{\BabelText{\RL{##1}}}%
\fi}
\def\bbl@pardir#1{\ifcase#1\relax\setLR\else\setRL\fi}
\fi
\fi
\DeclareRobustCommand\babelsublr[1]{\leavevmode{\bbl@textdir\z@#1}}
\AtBeginDocument{%
\ifx\pdfstringdefDisableCommands\@undefined\else
\ifx\pdfstringdefDisableCommands\relax\else
\pdfstringdefDisableCommands{\let\babelsublr\@firstofone}%
\fi
\fi}
\bbl@trace{Local Language Configuration}
\ifx\loadlocalcfg\@undefined
\@ifpackagewith{babel}{noconfigs}%
{\let\loadlocalcfg\@gobble}%
{\def\loadlocalcfg#1{%
\InputIfFileExists{#1.cfg}%
{\typeout{*************************************^^J%
* Local config file #1.cfg used^^J%
*}}%
\@empty}}
\fi
\ifx\@unexpandable@protect\@undefined
\def\@unexpandable@protect{\noexpand\protect\noexpand}
\long\def\protected@write#1#2#3{%
\begingroup
\let\thepage\relax
#2%
\let\protect\@unexpandable@protect
\edef\reserved@a{\write#1{#3}}%
\reserved@a
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi}
\fi
\bbl@trace{Language options}
\let\bbl@afterlang\relax
\let\BabelModifiers\relax
\let\bbl@loaded\@empty
\def\bbl@load@language#1{%
\InputIfFileExists{#1.ldf}%
{\edef\bbl@loaded{\CurrentOption
\ifx\bbl@loaded\@empty\else,\bbl@loaded\fi}%
\expandafter\let\expandafter\bbl@afterlang
\csname\CurrentOption.ldf-h@@k\endcsname
\expandafter\let\expandafter\BabelModifiers
\csname bbl@mod@\CurrentOption\endcsname}%
{\bbl@error{%
Unknown option `\CurrentOption'. Either you misspelled it\\%
or the language definition file \CurrentOption.ldf was not found}{%
Valid options are, among others: shorthands=, KeepShorthandsActive,\\%
activeacute, activegrave, noconfigs, safe=, main=, math=\\%
headfoot=, strings=, config=, hyphenmap=, or a language name.}}}
\def\bbl@try@load@lang#1#2#3{%
\IfFileExists{\CurrentOption.ldf}%
{\bbl@load@language{\CurrentOption}}%
{#1\bbl@load@language{#2}#3}}
\DeclareOption{hebrew}{%
\input{rlbabel.def}%
\bbl@load@language{hebrew}}
\DeclareOption{hungarian}{\bbl@try@load@lang{}{magyar}{}}
\DeclareOption{lowersorbian}{\bbl@try@load@lang{}{lsorbian}{}}
\DeclareOption{nynorsk}{\bbl@try@load@lang{}{norsk}{}}
\DeclareOption{polutonikogreek}{%
\bbl@try@load@lang{}{greek}{\languageattribute{greek}{polutoniko}}}
\DeclareOption{russian}{\bbl@try@load@lang{}{russianb}{}}
\DeclareOption{ukrainian}{\bbl@try@load@lang{}{ukraineb}{}}
\DeclareOption{uppersorbian}{\bbl@try@load@lang{}{usorbian}{}}
\ifx\bbl@opt@config\@nnil
\@ifpackagewith{babel}{noconfigs}{}%
{\InputIfFileExists{bblopts.cfg}%
{\typeout{*************************************^^J%
* Local config file bblopts.cfg used^^J%
*}}%
{}}%
\else
\InputIfFileExists{\bbl@opt@config.cfg}%
{\typeout{*************************************^^J%
* Local config file \bbl@opt@config.cfg used^^J%
*}}%
{\bbl@error{%
Local config file `\bbl@opt@config.cfg' not found}{%
Perhaps you misspelled it.}}%
\fi
\let\bbl@tempc\relax
\bbl@foreach\bbl@language@opts{%
\ifcase\bbl@iniflag % Default
\bbl@ifunset{ds@#1}%
{\DeclareOption{#1}{\bbl@load@language{#1}}}%
{}%
\or % provide=*
\@gobble % case 2 same as 1
\or % provide+=*
\bbl@ifunset{ds@#1}%
{\IfFileExists{#1.ldf}{}%
{\IfFileExists{babel-#1.tex}{}{\@namedef{ds@#1}{}}}}%
{}%
\bbl@ifunset{ds@#1}%
{\def\bbl@tempc{#1}%
\DeclareOption{#1}{%
\ifnum\bbl@iniflag>\@ne
\bbl@ldfinit
\babelprovide[import]{#1}%
\bbl@afterldf{}%
\else
\bbl@load@language{#1}%
\fi}}%
{}%
\or % provide*=*
\def\bbl@tempc{#1}%
\bbl@ifunset{ds@#1}%
{\DeclareOption{#1}{%
\bbl@ldfinit
\babelprovide[import]{#1}%
\bbl@afterldf{}}}%
{}%
\fi}
\let\bbl@tempb\@nnil
\bbl@foreach\@classoptionslist{%
\bbl@ifunset{ds@#1}%
{\IfFileExists{#1.ldf}{}%
{\IfFileExists{babel-#1.tex}{}{\@namedef{ds@#1}{}}}}%
{}%
\bbl@ifunset{ds@#1}%
{\def\bbl@tempb{#1}%
\DeclareOption{#1}{%
\ifnum\bbl@iniflag>\@ne
\bbl@ldfinit
\babelprovide[import]{#1}%
\bbl@afterldf{}%
\else
\bbl@load@language{#1}%
\fi}}%
{}}
\ifnum\bbl@iniflag=\z@\else
\ifx\bbl@opt@main\@nnil
\ifx\bbl@tempc\relax
\let\bbl@opt@main\bbl@tempb
\else
\let\bbl@opt@main\bbl@tempc
\fi
\fi
\fi
\ifx\bbl@opt@main\@nnil\else
\expandafter
\let\expandafter\bbl@loadmain\csname ds@\bbl@opt@main\endcsname
\expandafter\let\csname ds@\bbl@opt@main\endcsname\@empty
\fi
\def\AfterBabelLanguage#1{%
\bbl@ifsamestring\CurrentOption{#1}{\global\bbl@add\bbl@afterlang}{}}
\DeclareOption*{}
\ProcessOptions*
\bbl@trace{Option 'main'}
\ifx\bbl@opt@main\@nnil
\edef\bbl@tempa{\@classoptionslist,\bbl@language@opts}
\let\bbl@tempc\@empty
\bbl@for\bbl@tempb\bbl@tempa{%
\bbl@xin@{,\bbl@tempb,}{,\bbl@loaded,}%
\ifin@\edef\bbl@tempc{\bbl@tempb}\fi}
\def\bbl@tempa#1,#2\@nnil{\def\bbl@tempb{#1}}
\expandafter\bbl@tempa\bbl@loaded,\@nnil
\ifx\bbl@tempb\bbl@tempc\else
\bbl@warning{%
Last declared language option is `\bbl@tempc',\\%
but the last processed one was `\bbl@tempb'.\\%
The main language cannot be set as both a global\\%
and a package option. Use `main=\bbl@tempc' as\\%
option. Reported}%
\fi
\else
\ifodd\bbl@iniflag % case 1,3
\bbl@ldfinit
\let\CurrentOption\bbl@opt@main
\bbl@exp{\\\babelprovide[import,main]{\bbl@opt@main}}
\bbl@afterldf{}%
\else % case 0,2
\chardef\bbl@iniflag\z@ % Force ldf
\expandafter\let\csname ds@\bbl@opt@main\endcsname\bbl@loadmain
\ExecuteOptions{\bbl@opt@main}
\DeclareOption*{}%
\ProcessOptions*
\fi
\fi
\def\AfterBabelLanguage{%
\bbl@error
{Too late for \string\AfterBabelLanguage}%
{Languages have been loaded, so I can do nothing}}
\ifx\bbl@main@language\@undefined
\bbl@info{%
You haven't specified a language. I'll use 'nil'\\%
as the main language. Reported}
\bbl@load@language{nil}
\fi
\endinput
%%
%% End of file `babel.sty'.