Skip to content

Instantly share code, notes, and snippets.

@dginev
Created March 1, 2018 19:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dginev/e87b32ccdfa2e5e6cceeda38ec480e0f to your computer and use it in GitHub Desktop.
Save dginev/e87b32ccdfa2e5e6cceeda38ec480e0f to your computer and use it in GitHub Desktop.
babel.def 2017.20180110-1
%%
%% This is file `babel.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% babel.dtx (with options: `core')
%%
%%
%% Copyright (C) 2012-2017 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.
%%
\ifx\ldf@quit\@undefined
\else
\expandafter\endinput
\fi
\ifx\ProvidesFile\@undefined
\def\ProvidesFile#1[#2 #3 #4]{%
\wlog{File: #1 #4 #3 <#2>}%
\let\ProvidesFile\@undefined}
\fi
\ProvidesFile{babel.def}[2018/01/04 3.16 Babel common definitions]
\ifx\AtBeginDocument\@undefined
\input plain.def\relax
\fi
\ifx\bbl@ifshorthand\@undefined
\def\bbl@ifshorthand#1#2#3{#2}%
\def\bbl@opt@safe{BR}
\def\AfterBabelLanguage#1#2{}
\let\bbl@afterlang\relax
\let\bbl@language@opts\@empty
\fi
\input switch.def\relax
\ifx\bbl@languages\@undefined
\ifx\directlua\@undefined
\openin1 = language.def
\ifeof1
\closein1
\message{I couldn't find the file language.def}
\else
\closein1
\begingroup
\def\addlanguage#1#2#3#4#5{%
\expandafter\ifx\csname lang@#1\endcsname\relax\else
\global\expandafter\let\csname l@#1\expandafter\endcsname
\csname lang@#1\endcsname
\fi}%
\def\uselanguage#1{}%
\input language.def
\endgroup
\fi
\fi
\chardef\l@english\z@
\fi
\ifx\directlua\@undefined\else
\ifx\bbl@luapatterns\@undefined
\input luababel.def
\fi
\fi
\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@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@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}}
\def\bbl@ifunset#1{%
\expandafter\ifx\csname#1\endcsname\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi}
\bbl@ifunset{ifcsname}%
{}%
{\def\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}}
\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@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@}}
\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@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\addto#1#2{%
\ifx#1\@undefined
\def#1{#2}%
\else
\ifx#1\relax
\def#1{#2}%
\else
{\toks@\expandafter{#1#2}%
\xdef#1{\the\toks@}}%
\fi
\fi}
\def\bbl@withactive#1#2{%
\begingroup
\lccode`~=`#2\relax
\lowercase{\endgroup#1~}}
\def\bbl@redefine#1{%
\edef\bbl@tempa{\bbl@stripslash#1}%
\expandafter\let\csname org@\bbl@tempa\endcsname#1%
\expandafter\def\csname\bbl@tempa\endcsname}
\@onlypreamble\bbl@redefine
\def\bbl@redefine@long#1{%
\edef\bbl@tempa{\bbl@stripslash#1}%
\expandafter\let\csname org@\bbl@tempa\endcsname#1%
\expandafter\long\expandafter\def\csname\bbl@tempa\endcsname}
\@onlypreamble\bbl@redefine@long
\def\bbl@redefinerobust#1{%
\edef\bbl@tempa{\bbl@stripslash#1}%
\bbl@ifunset{\bbl@tempa\space}%
{\expandafter\let\csname org@\bbl@tempa\endcsname#1%
\bbl@exp{\def\\#1{\\\protect\<\bbl@tempa\space>}}}%
{\bbl@exp{\let\<org@\bbl@tempa>\<\bbl@tempa\space>}}%
\@namedef{\bbl@tempa\space}}
\@onlypreamble\bbl@redefinerobust
\def\AddBabelHook#1#2{%
\bbl@ifunset{bbl@hk@#1}{\EnableBabelHook{#1}}{}%
\def\bbl@tempa##1,#2=##2,##3\@empty{\def\bbl@tempb{##2}}%
\expandafter\bbl@tempa\bbl@evargs,#2=,\@empty
\bbl@ifunset{bbl@ev@#1@#2}%
{\bbl@csarg\bbl@add{ev@#2}{\bbl@elt{#1}}%
\bbl@csarg\newcommand}%
{\bbl@csarg\let{ev@#1@#2}\relax
\bbl@csarg\newcommand}%
{ev@#1@#2}[\bbl@tempb]}
\def\EnableBabelHook#1{\bbl@csarg\let{hk@#1}\@firstofone}
\def\DisableBabelHook#1{\bbl@csarg\let{hk@#1}\@gobble}
\def\bbl@usehooks#1#2{%
\def\bbl@elt##1{%
\@nameuse{bbl@hk@##1}{\@nameuse{bbl@ev@##1@#1}#2}}%
\@nameuse{bbl@ev@#1}}
\def\bbl@evargs{,% don't delete the comma
everylanguage=1,loadkernel=1,loadpatterns=1,loadexceptions=1,%
adddialect=2,patterns=2,defaultcommands=0,encodedcommands=2,write=0,%
beforeextras=0,afterextras=0,stopcommands=0,stringprocess=0,%
hyphenation=2,initiateactive=3,afterreset=0,foreign=0,foreign*=0}
\newcommand\babelensure[2][]{% TODO - revise test files
\AddBabelHook{babel-ensure}{afterextras}{%
\ifcase\bbl@select@type
\@nameuse{bbl@e@\languagename}%
\fi}%
\begingroup
\let\bbl@ens@include\@empty
\let\bbl@ens@exclude\@empty
\def\bbl@ens@fontenc{\relax}%
\def\bbl@tempb##1{%
\ifx\@empty##1\else\noexpand##1\expandafter\bbl@tempb\fi}%
\edef\bbl@tempa{\bbl@tempb#1\@empty}%
\def\bbl@tempb##1=##2\@@{\@namedef{bbl@ens@##1}{##2}}%
\bbl@foreach\bbl@tempa{\bbl@tempb##1\@@}%
\def\bbl@tempc{\bbl@ensure}%
\expandafter\bbl@add\expandafter\bbl@tempc\expandafter{%
\expandafter{\bbl@ens@include}}%
\expandafter\bbl@add\expandafter\bbl@tempc\expandafter{%
\expandafter{\bbl@ens@exclude}}%
\toks@\expandafter{\bbl@tempc}%
\bbl@exp{%
\endgroup
\def\<bbl@e@#2>{\the\toks@{\bbl@ens@fontenc}}}}
\def\bbl@ensure#1#2#3{% 1: include 2: exclude 3: fontenc
\def\bbl@tempb##1{% elt for (excluding) \bbl@captionslist list
\ifx##1\@empty\else
\in@{##1}{#2}%
\ifin@\else
\bbl@ifunset{bbl@ensure@\languagename}%
{\bbl@exp{%
\\\DeclareRobustCommand\<bbl@ensure@\languagename>[1]{%
\\\foreignlanguage{\languagename}%
{\ifx\relax#3\else
\\\fontencoding{#3}\\\selectfont
\fi
########1}}}}%
{}%
\toks@\expandafter{##1}%
\edef##1{%
\bbl@csarg\noexpand{ensure@\languagename}%
{\the\toks@}}%
\fi
\expandafter\bbl@tempb
\fi}%
\expandafter\bbl@tempb\bbl@captionslist\today\@empty
\def\bbl@tempa##1{% elt for include list
\ifx##1\@empty\else
\bbl@csarg\in@{ensure@\languagename\expandafter}\expandafter{##1}%
\ifin@\else
\bbl@tempb##1\@empty
\fi
\expandafter\bbl@tempa
\fi}%
\bbl@tempa#1\@empty}
\def\bbl@captionslist{%
\prefacename\refname\abstractname\bibname\chaptername\appendixname
\contentsname\listfigurename\listtablename\indexname\figurename
\tablename\partname\enclname\ccname\headtoname\pagename\seename
\alsoname\proofname\glossaryname}
\def\bbl@ldfinit{%
\let\bbl@screset\@empty
\let\BabelStrings\bbl@opt@string
\let\BabelOptions\@empty
\let\BabelLanguages\relax
\ifx\originalTeX\@undefined
\let\originalTeX\@empty
\else
\originalTeX
\fi}
\def\LdfInit#1#2{%
\chardef\atcatcode=\catcode`\@
\catcode`\@=11\relax
\chardef\eqcatcode=\catcode`\=
\catcode`\==12\relax
\expandafter\if\expandafter\@backslashchar
\expandafter\@car\string#2\@nil
\ifx#2\@undefined\else
\ldf@quit{#1}%
\fi
\else
\expandafter\ifx\csname#2\endcsname\relax\else
\ldf@quit{#1}%
\fi
\fi
\bbl@ldfinit}
\def\ldf@quit#1{%
\expandafter\main@language\expandafter{#1}%
\catcode`\@=\atcatcode \let\atcatcode\relax
\catcode`\==\eqcatcode \let\eqcatcode\relax
\endinput}
\def\bbl@afterldf#1{%
\bbl@afterlang
\let\bbl@afterlang\relax
\let\BabelModifiers\relax
\let\bbl@screset\relax}%
\def\ldf@finish#1{%
\loadlocalcfg{#1}%
\bbl@afterldf{#1}%
\expandafter\main@language\expandafter{#1}%
\catcode`\@=\atcatcode \let\atcatcode\relax
\catcode`\==\eqcatcode \let\eqcatcode\relax}
\@onlypreamble\LdfInit
\@onlypreamble\ldf@quit
\@onlypreamble\ldf@finish
\def\main@language#1{%
\def\bbl@main@language{#1}%
\let\languagename\bbl@main@language
\bbl@patterns{\languagename}}
\AtBeginDocument{%
\expandafter\selectlanguage\expandafter{\bbl@main@language}%
\ifcase\bbl@engine\or\pagedir\bodydir\fi} % TODO - a better place
\def\select@language@x#1{%
\ifcase\bbl@select@type
\bbl@ifsamestring\languagename{#1}{}{\select@language{#1}}%
\else
\select@language{#1}%
\fi}
\def\bbl@add@special#1{% 1:a macro like \", \?, etc.
\bbl@add\dospecials{\do#1}% test @sanitize = \relax, for back. compat.
\bbl@ifunset{@sanitize}{}{\bbl@add\@sanitize{\@makeother#1}}%
\ifx\nfss@catcodes\@undefined\else % TODO - same for above
\begingroup
\catcode`#1\active
\nfss@catcodes
\ifnum\catcode`#1=\active
\endgroup
\bbl@add\nfss@catcodes{\@makeother#1}%
\else
\endgroup
\fi
\fi}
\def\bbl@remove@special#1{%
\begingroup
\def\x##1##2{\ifnum`#1=`##2\noexpand\@empty
\else\noexpand##1\noexpand##2\fi}%
\def\do{\x\do}%
\def\@makeother{\x\@makeother}%
\edef\x{\endgroup
\def\noexpand\dospecials{\dospecials}%
\expandafter\ifx\csname @sanitize\endcsname\relax\else
\def\noexpand\@sanitize{\@sanitize}%
\fi}%
\x}
\def\bbl@active@def#1#2#3#4{%
\@namedef{#3#1}{%
\expandafter\ifx\csname#2@sh@#1@\endcsname\relax
\bbl@afterelse\bbl@sh@select#2#1{#3@arg#1}{#4#1}%
\else
\bbl@afterfi\csname#2@sh@#1@\endcsname
\fi}%
\long\@namedef{#3@arg#1}##1{%
\expandafter\ifx\csname#2@sh@#1@\string##1@\endcsname\relax
\bbl@afterelse\csname#4#1\endcsname##1%
\else
\bbl@afterfi\csname#2@sh@#1@\string##1@\endcsname
\fi}}%
\def\initiate@active@char#1{%
\bbl@ifunset{active@char\string#1}%
{\bbl@withactive
{\expandafter\@initiate@active@char\expandafter}#1\string#1#1}%
{}}
\def\@initiate@active@char#1#2#3{%
\bbl@csarg\edef{oricat@#2}{\catcode`#2=\the\catcode`#2\relax}%
\ifx#1\@undefined
\bbl@csarg\edef{oridef@#2}{\let\noexpand#1\noexpand\@undefined}%
\else
\bbl@csarg\let{oridef@@#2}#1%
\bbl@csarg\edef{oridef@#2}{%
\let\noexpand#1%
\expandafter\noexpand\csname bbl@oridef@@#2\endcsname}%
\fi
\ifx#1#3\relax
\expandafter\let\csname normal@char#2\endcsname#3%
\else
\bbl@info{Making #2 an active character}%
\ifnum\mathcode`#2="8000
\@namedef{normal@char#2}{%
\textormath{#3}{\csname bbl@oridef@@#2\endcsname}}%
\else
\@namedef{normal@char#2}{#3}%
\fi
\bbl@restoreactive{#2}%
\AtBeginDocument{%
\catcode`#2\active
\if@filesw
\immediate\write\@mainaux{\catcode`\string#2\active}%
\fi}%
\expandafter\bbl@add@special\csname#2\endcsname
\catcode`#2\active
\fi
\let\bbl@tempa\@firstoftwo
\if\string^#2%
\def\bbl@tempa{\noexpand\textormath}%
\else
\ifx\bbl@mathnormal\@undefined\else
\let\bbl@tempa\bbl@mathnormal
\fi
\fi
\expandafter\edef\csname active@char#2\endcsname{%
\bbl@tempa
{\noexpand\if@safe@actives
\noexpand\expandafter
\expandafter\noexpand\csname normal@char#2\endcsname
\noexpand\else
\noexpand\expandafter
\expandafter\noexpand\csname bbl@doactive#2\endcsname
\noexpand\fi}%
{\expandafter\noexpand\csname normal@char#2\endcsname}}%
\bbl@csarg\edef{doactive#2}{%
\expandafter\noexpand\csname user@active#2\endcsname}%
\bbl@csarg\edef{active@#2}{%
\noexpand\active@prefix\noexpand#1%
\expandafter\noexpand\csname active@char#2\endcsname}%
\bbl@csarg\edef{normal@#2}{%
\noexpand\active@prefix\noexpand#1%
\expandafter\noexpand\csname normal@char#2\endcsname}%
\expandafter\let\expandafter#1\csname bbl@normal@#2\endcsname
\bbl@active@def#2\user@group{user@active}{language@active}%
\bbl@active@def#2\language@group{language@active}{system@active}%
\bbl@active@def#2\system@group{system@active}{normal@char}%
\expandafter\edef\csname\user@group @sh@#2@@\endcsname
{\expandafter\noexpand\csname normal@char#2\endcsname}%
\expandafter\edef\csname\user@group @sh@#2@\string\protect@\endcsname
{\expandafter\noexpand\csname user@active#2\endcsname}%
\if\string'#2%
\let\prim@s\bbl@prim@s
\let\active@math@prime#1%
\fi
\bbl@usehooks{initiateactive}{{#1}{#2}{#3}}}
\@ifpackagewith{babel}{KeepShorthandsActive}%
{\let\bbl@restoreactive\@gobble}%
{\def\bbl@restoreactive#1{%
\bbl@exp{%
\\\AfterBabelLanguage\\\CurrentOption
{\catcode`#1=\the\catcode`#1\relax}%
\\\AtEndOfPackage
{\catcode`#1=\the\catcode`#1\relax}}}%
\AtEndOfPackage{\let\bbl@restoreactive\@gobble}}
\def\bbl@sh@select#1#2{%
\expandafter\ifx\csname#1@sh@#2@sel\endcsname\relax
\bbl@afterelse\bbl@scndcs
\else
\bbl@afterfi\csname#1@sh@#2@sel\endcsname
\fi}
\def\active@prefix#1{%
\ifx\protect\@typeset@protect
\else
\ifx\protect\@unexpandable@protect
\noexpand#1%
\else
\protect#1%
\fi
\expandafter\@gobble
\fi}
\newif\if@safe@actives
\@safe@activesfalse
\def\bbl@restore@actives{\if@safe@actives\@safe@activesfalse\fi}
\def\bbl@activate#1{%
\bbl@withactive{\expandafter\let\expandafter}#1%
\csname bbl@active@\string#1\endcsname}
\def\bbl@deactivate#1{%
\bbl@withactive{\expandafter\let\expandafter}#1%
\csname bbl@normal@\string#1\endcsname}
\def\bbl@firstcs#1#2{\csname#1\endcsname}
\def\bbl@scndcs#1#2{\csname#2\endcsname}
\def\declare@shorthand#1#2{\@decl@short{#1}#2\@nil}
\def\@decl@short#1#2#3\@nil#4{%
\def\bbl@tempa{#3}%
\ifx\bbl@tempa\@empty
\expandafter\let\csname #1@sh@\string#2@sel\endcsname\bbl@scndcs
\bbl@ifunset{#1@sh@\string#2@}{}%
{\def\bbl@tempa{#4}%
\expandafter\ifx\csname#1@sh@\string#2@\endcsname\bbl@tempa
\else
\bbl@info
{Redefining #1 shorthand \string#2\\%
in language \CurrentOption}%
\fi}%
\@namedef{#1@sh@\string#2@}{#4}%
\else
\expandafter\let\csname #1@sh@\string#2@sel\endcsname\bbl@firstcs
\bbl@ifunset{#1@sh@\string#2@\string#3@}{}%
{\def\bbl@tempa{#4}%
\expandafter\ifx\csname#1@sh@\string#2@\string#3@\endcsname\bbl@tempa
\else
\bbl@info
{Redefining #1 shorthand \string#2\string#3\\%
in language \CurrentOption}%
\fi}%
\@namedef{#1@sh@\string#2@\string#3@}{#4}%
\fi}
\def\textormath{%
\ifmmode
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi}
\def\user@group{user}
\def\language@group{english}
\def\system@group{system}
\def\useshorthands{%
\@ifstar\bbl@usesh@s{\bbl@usesh@x{}}}
\def\bbl@usesh@s#1{%
\bbl@usesh@x
{\AddBabelHook{babel-sh-\string#1}{afterextras}{\bbl@activate{#1}}}%
{#1}}
\def\bbl@usesh@x#1#2{%
\bbl@ifshorthand{#2}%
{\def\user@group{user}%
\initiate@active@char{#2}%
#1%
\bbl@activate{#2}}%
{\bbl@error
{Cannot declare a shorthand turned off (\string#2)}
{Sorry, but you cannot use shorthands which have been\\%
turned off in the package options}}}
\def\user@language@group{user@\language@group}
\def\bbl@set@user@generic#1#2{%
\bbl@ifunset{user@generic@active#1}%
{\bbl@active@def#1\user@language@group{user@active}{user@generic@active}%
\bbl@active@def#1\user@group{user@generic@active}{language@active}%
\expandafter\edef\csname#2@sh@#1@@\endcsname{%
\expandafter\noexpand\csname normal@char#1\endcsname}%
\expandafter\edef\csname#2@sh@#1@\string\protect@\endcsname{%
\expandafter\noexpand\csname user@active#1\endcsname}}%
\@empty}
\newcommand\defineshorthand[3][user]{%
\edef\bbl@tempa{\zap@space#1 \@empty}%
\bbl@for\bbl@tempb\bbl@tempa{%
\if*\expandafter\@car\bbl@tempb\@nil
\edef\bbl@tempb{user@\expandafter\@gobble\bbl@tempb}%
\@expandtwoargs
\bbl@set@user@generic{\expandafter\string\@car#2\@nil}\bbl@tempb
\fi
\declare@shorthand{\bbl@tempb}{#2}{#3}}}
\def\languageshorthands#1{\def\language@group{#1}}
\def\aliasshorthand#1#2{%
\bbl@ifshorthand{#2}%
{\expandafter\ifx\csname active@char\string#2\endcsname\relax
\ifx\document\@notprerr
\@notshorthand{#2}%
\else
\initiate@active@char{#2}%
\expandafter\let\csname active@char\string#2\expandafter\endcsname
\csname active@char\string#1\endcsname
\expandafter\let\csname normal@char\string#2\expandafter\endcsname
\csname normal@char\string#1\endcsname
\bbl@activate{#2}%
\fi
\fi}%
{\bbl@error
{Cannot declare a shorthand turned off (\string#2)}
{Sorry, but you cannot use shorthands which have been\\%
turned off in the package options}}}
\def\@notshorthand#1{%
\bbl@error{%
The character `\string #1' should be made a shorthand character;\\%
add the command \string\useshorthands\string{#1\string} to
the preamble.\\%
I will ignore your instruction}%
{You may proceed, but expect unexpected results}}
\newcommand*\shorthandon[1]{\bbl@switch@sh\@ne#1\@nnil}
\DeclareRobustCommand*\shorthandoff{%
\@ifstar{\bbl@shorthandoff\tw@}{\bbl@shorthandoff\z@}}
\def\bbl@shorthandoff#1#2{\bbl@switch@sh#1#2\@nnil}
\def\bbl@switch@sh#1#2{%
\ifx#2\@nnil\else
\bbl@ifunset{bbl@active@\string#2}%
{\bbl@error
{I cannot switch `\string#2' on or off--not a shorthand}%
{This character is not a shorthand. Maybe you made\\%
a typing mistake? I will ignore your instruction}}%
{\ifcase#1%
\catcode`#212\relax
\or
\catcode`#2\active
\or
\csname bbl@oricat@\string#2\endcsname
\csname bbl@oridef@\string#2\endcsname
\fi}%
\bbl@afterfi\bbl@switch@sh#1%
\fi}
\def\babelshorthand{\active@prefix\babelshorthand\bbl@putsh}
\def\bbl@putsh#1{%
\bbl@ifunset{bbl@active@\string#1}%
{\bbl@putsh@i#1\@empty\@nnil}%
{\csname bbl@active@\string#1\endcsname}}
\def\bbl@putsh@i#1#2\@nnil{%
\csname\languagename @sh@\string#1@%
\ifx\@empty#2\else\string#2@\fi\endcsname}
\ifx\bbl@opt@shorthands\@nnil\else
\let\bbl@s@initiate@active@char\initiate@active@char
\def\initiate@active@char#1{%
\bbl@ifshorthand{#1}{\bbl@s@initiate@active@char{#1}}{}}
\let\bbl@s@switch@sh\bbl@switch@sh
\def\bbl@switch@sh#1#2{%
\ifx#2\@nnil\else
\bbl@afterfi
\bbl@ifshorthand{#2}{\bbl@s@switch@sh#1{#2}}{\bbl@switch@sh#1}%
\fi}
\let\bbl@s@activate\bbl@activate
\def\bbl@activate#1{%
\bbl@ifshorthand{#1}{\bbl@s@activate{#1}}{}}
\let\bbl@s@deactivate\bbl@deactivate
\def\bbl@deactivate#1{%
\bbl@ifshorthand{#1}{\bbl@s@deactivate{#1}}{}}
\fi
\def\bbl@prim@s{%
\prime\futurelet\@let@token\bbl@pr@m@s}
\def\bbl@if@primes#1#2{%
\ifx#1\@let@token
\expandafter\@firstoftwo
\else\ifx#2\@let@token
\bbl@afterelse\expandafter\@firstoftwo
\else
\bbl@afterfi\expandafter\@secondoftwo
\fi\fi}
\begingroup
\catcode`\^=7 \catcode`\*=\active \lccode`\*=`\^
\catcode`\'=12 \catcode`\"=\active \lccode`\"=`\'
\lowercase{%
\gdef\bbl@pr@m@s{%
\bbl@if@primes"'%
\pr@@@s
{\bbl@if@primes*^\pr@@@t\egroup}}}
\endgroup
\initiate@active@char{~}
\declare@shorthand{system}{~}{\leavevmode\nobreak\ }
\bbl@activate{~}
\expandafter\def\csname OT1dqpos\endcsname{127}
\expandafter\def\csname T1dqpos\endcsname{4}
\ifx\f@encoding\@undefined
\def\f@encoding{OT1}
\fi
\newcommand\languageattribute[2]{%
\def\bbl@tempc{#1}%
\bbl@fixname\bbl@tempc
\bbl@iflanguage\bbl@tempc{%
\bbl@vforeach{#2}{%
\ifx\bbl@known@attribs\@undefined
\in@false
\else
\bbl@xin@{,\bbl@tempc-##1,}{,\bbl@known@attribs,}%
\fi
\ifin@
\bbl@warning{%
You have more than once selected the attribute '##1'\\%
for language #1}%
\else
\bbl@exp{%
\\\bbl@add@list\\\bbl@known@attribs{\bbl@tempc-##1}}%
\edef\bbl@tempa{\bbl@tempc-##1}%
\expandafter\bbl@ifknown@ttrib\expandafter{\bbl@tempa}\bbl@attributes%
{\csname\bbl@tempc @attr@##1\endcsname}%
{\@attrerr{\bbl@tempc}{##1}}%
\fi}}}
\@onlypreamble\languageattribute
\newcommand*{\@attrerr}[2]{%
\bbl@error
{The attribute #2 is unknown for language #1.}%
{Your command will be ignored, type <return> to proceed}}
\def\bbl@declare@ttribute#1#2#3{%
\bbl@xin@{,#2,}{,\BabelModifiers,}%
\ifin@
\AfterBabelLanguage{#1}{\languageattribute{#1}{#2}}%
\fi
\bbl@add@list\bbl@attributes{#1-#2}%
\expandafter\def\csname#1@attr@#2\endcsname{#3}}
\def\bbl@ifattributeset#1#2#3#4{%
\ifx\bbl@known@attribs\@undefined
\in@false
\else
\bbl@xin@{,#1-#2,}{,\bbl@known@attribs,}%
\fi
\ifin@
\bbl@afterelse#3%
\else
\bbl@afterfi#4%
\fi
}
\def\bbl@ifknown@ttrib#1#2{%
\let\bbl@tempa\@secondoftwo
\bbl@loopx\bbl@tempb{#2}{%
\expandafter\in@\expandafter{\expandafter,\bbl@tempb,}{,#1,}%
\ifin@
\let\bbl@tempa\@firstoftwo
\else
\fi}%
\bbl@tempa
}
\def\bbl@clear@ttribs{%
\ifx\bbl@attributes\@undefined\else
\bbl@loopx\bbl@tempa{\bbl@attributes}{%
\expandafter\bbl@clear@ttrib\bbl@tempa.
}%
\let\bbl@attributes\@undefined
\fi}
\def\bbl@clear@ttrib#1-#2.{%
\expandafter\let\csname#1@attr@#2\endcsname\@undefined}
\AtBeginDocument{\bbl@clear@ttribs}
\def\babel@beginsave{\babel@savecnt\z@}
\newcount\babel@savecnt
\babel@beginsave
\def\babel@save#1{%
\expandafter\let\csname babel@\number\babel@savecnt\endcsname#1\relax
\toks@\expandafter{\originalTeX\let#1=}%
\bbl@exp{%
\def\\\originalTeX{\the\toks@\<babel@\number\babel@savecnt>\relax}}%
\advance\babel@savecnt\@ne}
\def\babel@savevariable#1{%
\toks@\expandafter{\originalTeX #1=}%
\bbl@exp{\def\\\originalTeX{\the\toks@\the#1\relax}}}
\def\bbl@frenchspacing{%
\ifnum\the\sfcode`\.=\@m
\let\bbl@nonfrenchspacing\relax
\else
\frenchspacing
\let\bbl@nonfrenchspacing\nonfrenchspacing
\fi}
\let\bbl@nonfrenchspacing\nonfrenchspacing
\def\babeltags#1{%
\edef\bbl@tempa{\zap@space#1 \@empty}%
\def\bbl@tempb##1=##2\@@{%
\edef\bbl@tempc{%
\noexpand\newcommand
\expandafter\noexpand\csname ##1\endcsname{%
\noexpand\protect
\expandafter\noexpand\csname otherlanguage*\endcsname{##2}}
\noexpand\newcommand
\expandafter\noexpand\csname text##1\endcsname{%
\noexpand\foreignlanguage{##2}}}
\bbl@tempc}%
\bbl@for\bbl@tempa\bbl@tempa{%
\expandafter\bbl@tempb\bbl@tempa\@@}}
\@onlypreamble\babelhyphenation
\AtEndOfPackage{%
\newcommand\babelhyphenation[2][\@empty]{%
\ifx\bbl@hyphenation@\relax
\let\bbl@hyphenation@\@empty
\fi
\ifx\bbl@hyphlist\@empty\else
\bbl@warning{%
You must not intermingle \string\selectlanguage\space and\\%
\string\babelhyphenation\space or some exceptions will not\\%
be taken into account. Reported}%
\fi
\ifx\@empty#1%
\protected@edef\bbl@hyphenation@{\bbl@hyphenation@\space#2}%
\else
\bbl@vforeach{#1}{%
\def\bbl@tempa{##1}%
\bbl@fixname\bbl@tempa
\bbl@iflanguage\bbl@tempa{%
\bbl@csarg\protected@edef{hyphenation@\bbl@tempa}{%
\bbl@ifunset{bbl@hyphenation@\bbl@tempa}%
\@empty
{\csname bbl@hyphenation@\bbl@tempa\endcsname\space}%
#2}}}%
\fi}}
\def\bbl@allowhyphens{\ifvmode\else\nobreak\hskip\z@skip\fi}
\def\bbl@t@one{T1}
\def\allowhyphens{\ifx\cf@encoding\bbl@t@one\else\bbl@allowhyphens\fi}
\newcommand\babelnullhyphen{\char\hyphenchar\font}
\def\babelhyphen{\active@prefix\babelhyphen\bbl@hyphen}
\def\bbl@hyphen{%
\@ifstar{\bbl@hyphen@i @}{\bbl@hyphen@i\@empty}}
\def\bbl@hyphen@i#1#2{%
\bbl@ifunset{bbl@hy@#1#2\@empty}%
{\csname bbl@#1usehyphen\endcsname{\discretionary{#2}{}{#2}}}%
{\csname bbl@hy@#1#2\@empty\endcsname}}
\def\bbl@usehyphen#1{%
\leavevmode
\ifdim\lastskip>\z@\mbox{#1}\else\nobreak#1\fi
\nobreak\hskip\z@skip}
\def\bbl@@usehyphen#1{%
\leavevmode\ifdim\lastskip>\z@\mbox{#1}\else#1\fi}
\def\bbl@hyphenchar{%
\ifnum\hyphenchar\font=\m@ne
\babelnullhyphen
\else
\char\hyphenchar\font
\fi}
\def\bbl@hy@soft{\bbl@usehyphen{\discretionary{\bbl@hyphenchar}{}{}}}
\def\bbl@hy@@soft{\bbl@@usehyphen{\discretionary{\bbl@hyphenchar}{}{}}}
\def\bbl@hy@hard{\bbl@usehyphen\bbl@hyphenchar}
\def\bbl@hy@@hard{\bbl@@usehyphen\bbl@hyphenchar}
\def\bbl@hy@nobreak{\bbl@usehyphen{\mbox{\bbl@hyphenchar}}}
\def\bbl@hy@@nobreak{\mbox{\bbl@hyphenchar}}
\def\bbl@hy@repeat{%
\bbl@usehyphen{%
\discretionary{\bbl@hyphenchar}{\bbl@hyphenchar}{\bbl@hyphenchar}}}
\def\bbl@hy@@repeat{%
\bbl@@usehyphen{%
\discretionary{\bbl@hyphenchar}{\bbl@hyphenchar}{\bbl@hyphenchar}}}
\def\bbl@hy@empty{\hskip\z@skip}
\def\bbl@hy@@empty{\discretionary{}{}{}}
\def\bbl@disc#1#2{\nobreak\discretionary{#2-}{}{#1}\bbl@allowhyphens}
\def\bbl@toglobal#1{\global\let#1#1}
\def\bbl@recatcode#1{%
\@tempcnta="7F
\def\bbl@tempa{%
\ifnum\@tempcnta>"FF\else
\catcode\@tempcnta=#1\relax
\advance\@tempcnta\@ne
\expandafter\bbl@tempa
\fi}%
\bbl@tempa}
\@ifpackagewith{babel}{nocase}%
{\let\bbl@patchuclc\relax}%
{\def\bbl@patchuclc{%
\global\let\bbl@patchuclc\relax
\g@addto@macro\@uclclist{\reserved@b{\reserved@b\bbl@uclc}}%
\gdef\bbl@uclc##1{%
\let\bbl@encoded\bbl@encoded@uclc
\bbl@ifunset{\languagename @bbl@uclc}% and resumes it
{##1}%
{\let\bbl@tempa##1\relax % Used by LANG@bbl@uclc
\csname\languagename @bbl@uclc\endcsname}%
{\bbl@tolower\@empty}{\bbl@toupper\@empty}}%
\gdef\bbl@tolower{\csname\languagename @bbl@lc\endcsname}%
\gdef\bbl@toupper{\csname\languagename @bbl@uc\endcsname}}}
\@onlypreamble\StartBabelCommands
\def\StartBabelCommands{%
\begingroup
\bbl@recatcode{11}%
\def\SetStringLoop##1##2{%
\def\bbl@templ####1{\expandafter\noexpand\csname##1\endcsname}%
\count@\z@
\bbl@loop\bbl@tempa{##2}{% empty items and spaces are ok
\advance\count@\@ne
\toks@\expandafter{\bbl@tempa}%
\bbl@exp{%
\\\SetString\bbl@templ{\romannumeral\count@}{\the\toks@}%
\count@=\the\count@\relax}}}%
\newcommand\SetCase[3][]{%
\bbl@patchuclc
\bbl@forlang\bbl@tempa{%
\expandafter\bbl@encstring
\csname\bbl@tempa @bbl@uclc\endcsname{\bbl@tempa##1}%
\expandafter\bbl@encstring
\csname\bbl@tempa @bbl@uc\endcsname{##2}%
\expandafter\bbl@encstring
\csname\bbl@tempa @bbl@lc\endcsname{##3}}}%
\newcommand\SetHyphenMap[1]{%
\bbl@forlang\bbl@tempa{%
\expandafter\bbl@stringdef
\csname\bbl@tempa @bbl@hyphenmap\endcsname{##1}}}
\def\bbl@provstring##1##2{%
\providecommand##1{##2}%
\bbl@toglobal##1}%
\global\let\bbl@scafter\@empty
\let\StartBabelCommands\bbl@startcmds
\ifx\BabelLanguages\relax
\let\BabelLanguages\CurrentOption
\fi
\begingroup
\let\bbl@screset\@nnil % local flag - disable 1st stopcommands
\StartBabelCommands}
\def\bbl@startcmds{%
\ifx\bbl@screset\@nnil\else
\bbl@usehooks{stopcommands}{}%
\fi
\endgroup
\begingroup
\@ifstar
{\ifx\bbl@opt@strings\@nnil
\let\bbl@opt@strings\BabelStringsDefault
\fi
\bbl@startcmds@i}%
\bbl@startcmds@i}
\def\bbl@startcmds@i#1#2{%
\edef\bbl@L{\zap@space#1 \@empty}%
\edef\bbl@G{\zap@space#2 \@empty}%
\bbl@startcmds@ii}
\newcommand\bbl@startcmds@ii[1][\@empty]{%
\let\SetString\@gobbletwo
\let\bbl@stringdef\@gobbletwo
\let\AfterBabelCommands\@gobble
\ifx\@empty#1%
\def\bbl@sc@label{generic}%
\def\bbl@encstring##1##2{%
\ProvideTextCommandDefault##1{##2}%
\bbl@toglobal##1%
\expandafter\bbl@toglobal\csname\string?\string##1\endcsname}%
\let\bbl@sctest\in@true
\else
\let\bbl@sc@charset\space % <- zapped below
\let\bbl@sc@fontenc\space % <- " "
\def\bbl@tempa##1=##2\@nil{%
\bbl@csarg\edef{sc@\zap@space##1 \@empty}{##2 }}%
\bbl@vforeach{label=#1}{\bbl@tempa##1\@nil}%
\def\bbl@tempa##1 ##2{% space -> comma
##1%
\ifx\@empty##2\else\ifx,##1,\else,\fi\bbl@afterfi\bbl@tempa##2\fi}%
\edef\bbl@sc@fontenc{\expandafter\bbl@tempa\bbl@sc@fontenc\@empty}%
\edef\bbl@sc@label{\expandafter\zap@space\bbl@sc@label\@empty}%
\edef\bbl@sc@charset{\expandafter\zap@space\bbl@sc@charset\@empty}%
\def\bbl@encstring##1##2{%
\bbl@foreach\bbl@sc@fontenc{%
\bbl@ifunset{T@####1}%
{}%
{\ProvideTextCommand##1{####1}{##2}%
\bbl@toglobal##1%
\expandafter
\bbl@toglobal\csname####1\string##1\endcsname}}}%
\def\bbl@sctest{%
\bbl@xin@{,\bbl@opt@strings,}{,\bbl@sc@label,\bbl@sc@fontenc,}}%
\fi
\ifx\bbl@opt@strings\@nnil % ie, no strings key -> defaults
\else\ifx\bbl@opt@strings\relax % ie, strings=encoded
\let\AfterBabelCommands\bbl@aftercmds
\let\SetString\bbl@setstring
\let\bbl@stringdef\bbl@encstring
\else % ie, strings=value
\bbl@sctest
\ifin@
\let\AfterBabelCommands\bbl@aftercmds
\let\SetString\bbl@setstring
\let\bbl@stringdef\bbl@provstring
\fi\fi\fi
\bbl@scswitch
\ifx\bbl@G\@empty
\def\SetString##1##2{%
\bbl@error{Missing group for string \string##1}%
{You must assign strings to some category, typically\\%
captions or extras, but you set none}}%
\fi
\ifx\@empty#1%
\bbl@usehooks{defaultcommands}{}%
\else
\@expandtwoargs
\bbl@usehooks{encodedcommands}{{\bbl@sc@charset}{\bbl@sc@fontenc}}%
\fi}
\def\bbl@forlang#1#2{%
\bbl@for#1\bbl@L{%
\bbl@xin@{,#1,}{,\BabelLanguages,}%
\ifin@#2\relax\fi}}
\def\bbl@scswitch{%
\bbl@forlang\bbl@tempa{%
\ifx\bbl@G\@empty\else
\ifx\SetString\@gobbletwo\else
\edef\bbl@GL{\bbl@G\bbl@tempa}%
\bbl@xin@{,\bbl@GL,}{,\bbl@screset,}%
\ifin@\else
\global\expandafter\let\csname\bbl@GL\endcsname\@undefined
\xdef\bbl@screset{\bbl@screset,\bbl@GL}%
\fi
\fi
\fi}}
\AtEndOfPackage{%
\def\bbl@forlang#1#2{\bbl@for#1\bbl@L{\bbl@ifunset{date#1}{}{#2}}}%
\let\bbl@scswitch\relax}
\@onlypreamble\EndBabelCommands
\def\EndBabelCommands{%
\bbl@usehooks{stopcommands}{}%
\endgroup
\endgroup
\bbl@scafter}
\def\bbl@setstring#1#2{%
\bbl@forlang\bbl@tempa{%
\edef\bbl@LC{\bbl@tempa\bbl@stripslash#1}%
\bbl@ifunset{\bbl@LC}% eg, \germanchaptername
{\global\expandafter % TODO - con \bbl@exp ?
\bbl@add\csname\bbl@G\bbl@tempa\expandafter\endcsname\expandafter
{\expandafter\bbl@scset\expandafter#1\csname\bbl@LC\endcsname}}%
{}%
\def\BabelString{#2}%
\bbl@usehooks{stringprocess}{}%
\expandafter\bbl@stringdef
\csname\bbl@LC\expandafter\endcsname\expandafter{\BabelString}}}
\ifx\bbl@opt@strings\relax
\def\bbl@scset#1#2{\def#1{\bbl@encoded#2}}
\bbl@patchuclc
\let\bbl@encoded\relax
\def\bbl@encoded@uclc#1{%
\@inmathwarn#1%
\expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
\expandafter\ifx\csname ?\string#1\endcsname\relax
\TextSymbolUnavailable#1%
\else
\csname ?\string#1\endcsname
\fi
\else
\csname\cf@encoding\string#1\endcsname
\fi}
\else
\def\bbl@scset#1#2{\def#1{#2}}
\fi
\def\bbl@aftercmds#1{%
\toks@\expandafter{\bbl@scafter#1}%
\xdef\bbl@scafter{\the\toks@}}
\newcommand\BabelLower[2]{% one to one.
\ifnum\lccode#1=#2\else
\babel@savevariable{\lccode#1}%
\lccode#1=#2\relax
\fi}
\newcommand\BabelLowerMM[4]{% many-to-many
\@tempcnta=#1\relax
\@tempcntb=#4\relax
\def\bbl@tempa{%
\ifnum\@tempcnta>#2\else
\@expandtwoargs\BabelLower{\the\@tempcnta}{\the\@tempcntb}%
\advance\@tempcnta#3\relax
\advance\@tempcntb#3\relax
\expandafter\bbl@tempa
\fi}%
\bbl@tempa}
\newcommand\BabelLowerMO[4]{% many-to-one
\@tempcnta=#1\relax
\def\bbl@tempa{%
\ifnum\@tempcnta>#2\else
\@expandtwoargs\BabelLower{\the\@tempcnta}{#4}%
\advance\@tempcnta#3
\expandafter\bbl@tempa
\fi}%
\bbl@tempa}
\AtEndOfPackage{%
\ifx\bbl@opt@hyphenmap\@undefined
\bbl@xin@{,}{\bbl@language@opts}%
\chardef\bbl@opt@hyphenmap\ifin@4\else\@ne\fi
\fi}
\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}%
\dimen\z@\ht\z@ \advance\dimen\z@ -\ht\tw@%
\setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@}
\def\save@sf@q#1{\leavevmode
\begingroup
\edef\@SF{\spacefactor\the\spacefactor}#1\@SF
\endgroup}
\ProvideTextCommand{\quotedblbase}{OT1}{%
\save@sf@q{\set@low@box{\textquotedblright\/}%
\box\z@\kern-.04em\bbl@allowhyphens}}
\ProvideTextCommandDefault{\quotedblbase}{%
\UseTextSymbol{OT1}{\quotedblbase}}
\ProvideTextCommand{\quotesinglbase}{OT1}{%
\save@sf@q{\set@low@box{\textquoteright\/}%
\box\z@\kern-.04em\bbl@allowhyphens}}
\ProvideTextCommandDefault{\quotesinglbase}{%
\UseTextSymbol{OT1}{\quotesinglbase}}
\ProvideTextCommand{\guillemotleft}{OT1}{%
\ifmmode
\ll
\else
\save@sf@q{\nobreak
\raise.2ex\hbox{$\scriptscriptstyle\ll$}\bbl@allowhyphens}%
\fi}
\ProvideTextCommand{\guillemotright}{OT1}{%
\ifmmode
\gg
\else
\save@sf@q{\nobreak
\raise.2ex\hbox{$\scriptscriptstyle\gg$}\bbl@allowhyphens}%
\fi}
\ProvideTextCommandDefault{\guillemotleft}{%
\UseTextSymbol{OT1}{\guillemotleft}}
\ProvideTextCommandDefault{\guillemotright}{%
\UseTextSymbol{OT1}{\guillemotright}}
\ProvideTextCommand{\guilsinglleft}{OT1}{%
\ifmmode
<%
\else
\save@sf@q{\nobreak
\raise.2ex\hbox{$\scriptscriptstyle<$}\bbl@allowhyphens}%
\fi}
\ProvideTextCommand{\guilsinglright}{OT1}{%
\ifmmode
>%
\else
\save@sf@q{\nobreak
\raise.2ex\hbox{$\scriptscriptstyle>$}\bbl@allowhyphens}%
\fi}
\ProvideTextCommandDefault{\guilsinglleft}{%
\UseTextSymbol{OT1}{\guilsinglleft}}
\ProvideTextCommandDefault{\guilsinglright}{%
\UseTextSymbol{OT1}{\guilsinglright}}
\DeclareTextCommand{\ij}{OT1}{%
i\kern-0.02em\bbl@allowhyphens j}
\DeclareTextCommand{\IJ}{OT1}{%
I\kern-0.02em\bbl@allowhyphens J}
\DeclareTextCommand{\ij}{T1}{\char188}
\DeclareTextCommand{\IJ}{T1}{\char156}
\ProvideTextCommandDefault{\ij}{%
\UseTextSymbol{OT1}{\ij}}
\ProvideTextCommandDefault{\IJ}{%
\UseTextSymbol{OT1}{\IJ}}
\def\crrtic@{\hrule height0.1ex width0.3em}
\def\crttic@{\hrule height0.1ex width0.33em}
\def\ddj@{%
\setbox0\hbox{d}\dimen@=\ht0
\advance\dimen@1ex
\dimen@.45\dimen@
\dimen@ii\expandafter\rem@pt\the\fontdimen\@ne\font\dimen@
\advance\dimen@ii.5ex
\leavevmode\rlap{\raise\dimen@\hbox{\kern\dimen@ii\vbox{\crrtic@}}}}
\def\DDJ@{%
\setbox0\hbox{D}\dimen@=.55\ht0
\dimen@ii\expandafter\rem@pt\the\fontdimen\@ne\font\dimen@
\advance\dimen@ii.15ex % correction for the dash position
\advance\dimen@ii-.15\fontdimen7\font % correction for cmtt font
\dimen\thr@@\expandafter\rem@pt\the\fontdimen7\font\dimen@
\leavevmode\rlap{\raise\dimen@\hbox{\kern\dimen@ii\vbox{\crttic@}}}}
\DeclareTextCommand{\dj}{OT1}{\ddj@ d}
\DeclareTextCommand{\DJ}{OT1}{\DDJ@ D}
\ProvideTextCommandDefault{\dj}{%
\UseTextSymbol{OT1}{\dj}}
\ProvideTextCommandDefault{\DJ}{%
\UseTextSymbol{OT1}{\DJ}}
\DeclareTextCommand{\SS}{OT1}{SS}
\ProvideTextCommandDefault{\SS}{\UseTextSymbol{OT1}{\SS}}
\ProvideTextCommandDefault{\glq}{%
\textormath{\quotesinglbase}{\mbox{\quotesinglbase}}}
\ProvideTextCommand{\grq}{T1}{%
\textormath{\textquoteleft}{\mbox{\textquoteleft}}}
\ProvideTextCommand{\grq}{TU}{%
\textormath{\textquoteleft}{\mbox{\textquoteleft}}}
\ProvideTextCommand{\grq}{OT1}{%
\save@sf@q{\kern-.0125em
\textormath{\textquoteleft}{\mbox{\textquoteleft}}%
\kern.07em\relax}}
\ProvideTextCommandDefault{\grq}{\UseTextSymbol{OT1}\grq}
\ProvideTextCommandDefault{\glqq}{%
\textormath{\quotedblbase}{\mbox{\quotedblbase}}}
\ProvideTextCommand{\grqq}{T1}{%
\textormath{\textquotedblleft}{\mbox{\textquotedblleft}}}
\ProvideTextCommand{\grqq}{TU}{%
\textormath{\textquotedblleft}{\mbox{\textquotedblleft}}}
\ProvideTextCommand{\grqq}{OT1}{%
\save@sf@q{\kern-.07em
\textormath{\textquotedblleft}{\mbox{\textquotedblleft}}%
\kern.07em\relax}}
\ProvideTextCommandDefault{\grqq}{\UseTextSymbol{OT1}\grqq}
\ProvideTextCommandDefault{\flq}{%
\textormath{\guilsinglleft}{\mbox{\guilsinglleft}}}
\ProvideTextCommandDefault{\frq}{%
\textormath{\guilsinglright}{\mbox{\guilsinglright}}}
\ProvideTextCommandDefault{\flqq}{%
\textormath{\guillemotleft}{\mbox{\guillemotleft}}}
\ProvideTextCommandDefault{\frqq}{%
\textormath{\guillemotright}{\mbox{\guillemotright}}}
\def\umlauthigh{%
\def\bbl@umlauta##1{\leavevmode\bgroup%
\expandafter\accent\csname\f@encoding dqpos\endcsname
##1\bbl@allowhyphens\egroup}%
\let\bbl@umlaute\bbl@umlauta}
\def\umlautlow{%
\def\bbl@umlauta{\protect\lower@umlaut}}
\def\umlautelow{%
\def\bbl@umlaute{\protect\lower@umlaut}}
\umlauthigh
\expandafter\ifx\csname U@D\endcsname\relax
\csname newdimen\endcsname\U@D
\fi
\def\lower@umlaut#1{%
\leavevmode\bgroup
\U@D 1ex%
{\setbox\z@\hbox{%
\expandafter\char\csname\f@encoding dqpos\endcsname}%
\dimen@ -.45ex\advance\dimen@\ht\z@
\ifdim 1ex<\dimen@ \fontdimen5\font\dimen@ \fi}%
\expandafter\accent\csname\f@encoding dqpos\endcsname
\fontdimen5\font\U@D #1%
\egroup}
\AtBeginDocument{%
\DeclareTextCompositeCommand{\"}{OT1}{a}{\bbl@umlauta{a}}%
\DeclareTextCompositeCommand{\"}{OT1}{e}{\bbl@umlaute{e}}%
\DeclareTextCompositeCommand{\"}{OT1}{i}{\bbl@umlaute{\i}}%
\DeclareTextCompositeCommand{\"}{OT1}{\i}{\bbl@umlaute{\i}}%
\DeclareTextCompositeCommand{\"}{OT1}{o}{\bbl@umlauta{o}}%
\DeclareTextCompositeCommand{\"}{OT1}{u}{\bbl@umlauta{u}}%
\DeclareTextCompositeCommand{\"}{OT1}{A}{\bbl@umlauta{A}}%
\DeclareTextCompositeCommand{\"}{OT1}{E}{\bbl@umlaute{E}}%
\DeclareTextCompositeCommand{\"}{OT1}{I}{\bbl@umlaute{I}}%
\DeclareTextCompositeCommand{\"}{OT1}{O}{\bbl@umlauta{O}}%
\DeclareTextCompositeCommand{\"}{OT1}{U}{\bbl@umlauta{U}}%
}
\ifx\l@english\@undefined
\chardef\l@english\z@
\fi
\main@language{english}
\providecommand\IfBabelLayout[3]{#3}%
\newcommand\BabelPatchSection[1]{%
\@ifundefined{#1}{}{%
\bbl@exp{\let\<bbl@ss@#1>\<#1>}%
\@namedef{#1}{%
\@ifstar{\bbl@presec@s{#1}}%
{\@dblarg{\bbl@presec@x{#1}}}}}}
\def\bbl@presec@x#1[#2]#3{%
\bbl@exp{%
\\\select@language@x{\bbl@main@language}%
\\\@nameuse{bbl@ss@#1}%
[\\\foreignlanguage{\languagename}{\unexpanded{#2}}]%
{\\\foreignlanguage{\languagename}{\unexpanded{#3}}}%
\\\select@language@x{\languagename}}}
\def\bbl@presec@s#1#2{%
\bbl@exp{%
\\\select@language@x{\bbl@main@language}%
\\\@nameuse{bbl@ss@#1}*%
{\\\foreignlanguage{\languagename}{\unexpanded{#2}}}%
\\\select@language@x{\languagename}}}
\IfBabelLayout{sectioning}% at begin document ???
{\BabelPatchSection{part}%
\BabelPatchSection{chapter}%
\BabelPatchSection{section}%
\BabelPatchSection{subsection}%
\BabelPatchSection{subsubsection}%
\BabelPatchSection{paragraph}%
\BabelPatchSection{subparagraph}%
\def\babel@toc#1{%
\select@language@x{\bbl@main@language}}}{}
\ifcase\bbl@engine
\input txtbabel.def
\or
\input luababel.def
\or
\input xebabel.def
\fi
{\def\format{lplain}
\ifx\fmtname\format
\else
\def\format{LaTeX2e}
\ifx\fmtname\format
\else
\aftergroup\endinput
\fi
\fi}
\newcommand\babelprovide[2][]{%
\let\bbl@savelangname\languagename
\def\languagename{#2}%
\let\bbl@KVP@captions\@nil
\let\bbl@KVP@import\@nil
\let\bbl@KVP@main\@nil
\let\bbl@KVP@script\@nil
\let\bbl@KVP@language\@nil
\let\bbl@KVP@dir\@nil
\let\bbl@KVP@hyphenrules\@nil
\bbl@forkv{#1}{\bbl@csarg\def{KVP@##1}{##2}}% TODO - error handling
\ifx\bbl@KVP@captions\@nil
\let\bbl@KVP@captions\bbl@KVP@import
\fi
\bbl@ifunset{date#2}%
{\bbl@provide@new{#2}}%
{\bbl@ifblank{#1}%
{\bbl@error
{If you want to modify `#2' you must tell how in\\%
the optional argument. Currently there are three\\%
options: captions=lang-tag, hyphenrules=lang-list\\%
import=lang-tag}%
{Use this macro as documented}}%
{\bbl@provide@renew{#2}}}%
\bbl@exp{\\\babelensure[exclude=\\\today]{#2}}%
\bbl@ifunset{bbl@ensure@\languagename}%
{\bbl@exp{%
\\\DeclareRobustCommand\<bbl@ensure@\languagename>[1]{%
\\\foreignlanguage{\languagename}%
{####1}}}}%
{}%
\ifx\bbl@KVP@script\@nil\else
\bbl@csarg\edef{sname@#2}{\bbl@KVP@script}%
\fi
\ifx\bbl@KVP@language\@nil\else
\bbl@csarg\edef{lname@#2}{\bbl@KVP@language}%
\fi
\let\languagename\bbl@savelangname}
\def\bbl@provide@new#1{%
\@namedef{date#1}{}% marks lang exists - required by \StartBabelCommands
\@namedef{extras#1}{}%
\@namedef{noextras#1}{}%
\StartBabelCommands*{#1}{captions}%
\ifx\bbl@KVP@captions\@nil % and also if import, implicit
\def\bbl@tempb##1{% elt for \bbl@captionslist
\ifx##1\@empty\else
\bbl@exp{%
\\\SetString\\##1{%
\\\bbl@nocaption{\bbl@stripslash##1}{\<#1\bbl@stripslash##1>}}}%
\expandafter\bbl@tempb
\fi}%
\expandafter\bbl@tempb\bbl@captionslist\@empty
\else
\bbl@read@ini{\bbl@KVP@captions}% Here all letters cat = 11
\bbl@after@ini
\bbl@savestrings
\fi
\StartBabelCommands*{#1}{date}%
\ifx\bbl@KVP@import\@nil
\bbl@exp{%
\\\SetString\\\today{\\\bbl@nocaption{today}{\<#1today>}}}%
\else
\bbl@savetoday
\bbl@savedate
\fi
\EndBabelCommands
\bbl@exp{%
\def\<#1hyphenmins>{%
{\bbl@ifunset{bbl@lfthm@#1}{2}{\@nameuse{bbl@lfthm@#1}}}%
{\bbl@ifunset{bbl@rgthm@#1}{3}{\@nameuse{bbl@rgthm@#1}}}}}%
\bbl@provide@hyphens{#1}%
\ifx\bbl@KVP@main\@nil\else
\expandafter\main@language\expandafter{#1}%
\fi}
\def\bbl@provide@renew#1{%
\ifx\bbl@KVP@captions\@nil\else
\StartBabelCommands*{#1}{captions}%
\bbl@read@ini{\bbl@KVP@captions}% Here all letters cat = 11
\bbl@after@ini
\bbl@savestrings
\EndBabelCommands
\fi
\ifx\bbl@KVP@import\@nil\else
\StartBabelCommands*{#1}{date}%
\bbl@savetoday
\bbl@savedate
\EndBabelCommands
\fi
\bbl@provide@hyphens{#1}}
\def\bbl@provide@hyphens#1{%
\let\bbl@tempa\relax
\ifx\bbl@KVP@hyphenrules\@nil\else
\bbl@replace\bbl@KVP@hyphenrules{ }{,}%
\bbl@foreach\bbl@KVP@hyphenrules{%
\ifx\bbl@tempa\relax % if not yet found
\bbl@ifsamestring{##1}{+}%
{{\bbl@exp{\\\addlanguage\<l@##1>}}}%
{}%
\bbl@ifunset{l@##1}%
{}%
{\bbl@exp{\let\bbl@tempa\<l@##1>}}%
\fi}%
\fi
\ifx\bbl@tempa\relax % if no opt or no language in opt found
\ifx\bbl@KVP@import\@nil\else % if importing
\bbl@exp{% and hyphenrules is not empty
\\\bbl@ifblank{\@nameuse{bbl@hyphr@#1}}%
{}%
{\let\\\bbl@tempa\<l@\@nameuse{bbl@hyphr@\languagename}>}}%
\fi
\fi
\bbl@ifunset{bbl@tempa}% ie, relax or undefined
{\bbl@ifunset{l@#1}% no hyphenrules found - fallback
{\bbl@exp{\\\adddialect\<l@#1>\language}}%
{}}% so, l@<lang> is ok - nothing to do
{\bbl@exp{\\\adddialect\<l@#1>\bbl@tempa}}}% found in opt list or ini
\def\bbl@read@ini#1{%
\openin1=babel-#1.ini
\ifeof1
\bbl@error
{There is no ini file for the requested language\\%
(#1). Perhaps you misspelled it or your installation\\%
is not complete.}%
{Fix the name or reinstall babel.}%
\else
\let\bbl@section\@empty
\let\bbl@savestrings\@empty
\let\bbl@savetoday\@empty
\let\bbl@savedate\@empty
\let\bbl@inireader\bbl@iniskip
\bbl@info{Importing data from babel-#1.ini for \languagename}%
\loop
\if T\ifeof1F\fi T\relax % Trick, because inside \loop
\endlinechar\m@ne
\read1 to \bbl@line
\endlinechar`\^^M
\ifx\bbl@line\@empty\else
\expandafter\bbl@iniline\bbl@line\bbl@iniline
\fi
\repeat
\fi}
\def\bbl@iniline#1\bbl@iniline{%
\@ifnextchar[\bbl@inisec{\@ifnextchar;\bbl@iniskip\bbl@inireader}#1\@@}% ]
\def\bbl@iniskip#1\@@{}% if starts with ;
\def\bbl@inisec[#1]#2\@@{% if starts with opening bracket
\@nameuse{bbl@secpost@\bbl@section}% ends previous section
\def\bbl@section{#1}%
\@nameuse{bbl@secpre@\bbl@section}% starts current section
\bbl@ifunset{bbl@secline@#1}%
{\let\bbl@inireader\bbl@iniskip}%
{\bbl@exp{\let\\\bbl@inireader\<bbl@secline@#1>}}}
\def\bbl@inikv#1=#2\@@{% key=value
\bbl@trim@def\bbl@tempa{#1}%
\bbl@trim\toks@{#2}%
\bbl@csarg\edef{@kv@\bbl@section.\bbl@tempa}{\the\toks@}}
\def\bbl@exportkey#1#2#3{%
\bbl@ifunset{bbl@@kv@#2}%
{\bbl@csarg\gdef{#1@\languagename}{#3}}%
{\expandafter\ifx\csname bbl@@kv@#2\endcsname\@empty
\bbl@csarg\gdef{#1@\languagename}{#3}%
\else
\bbl@exp{\global\let\<bbl@#1@\languagename>\<bbl@@kv@#2>}%
\fi}}
\let\bbl@secline@identification\bbl@inikv
\def\bbl@secpost@identification{%
\bbl@exportkey{lname}{identification.name.english}{}%
\bbl@exportkey{lbcp}{identification.tag.bcp47}{}%
\bbl@exportkey{lotf}{identification.tag.opentype}{dflt}%
\bbl@exportkey{sname}{identification.script.name}{}%
\bbl@exportkey{sbcp}{identification.script.tag.bcp47}{}%
\bbl@exportkey{sotf}{identification.script.tag.opentype}{DFLT}}
\let\bbl@secline@typography\bbl@inikv
\def\bbl@after@ini{%
\bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}%
\bbl@exportkey{rgthm}{typography.righthyphenmin}{3}%
\bbl@exportkey{hyphr}{typography.hyphenrules}{}%
\def\bbl@tempa{0.9}%
\bbl@csarg\ifx{@kv@identification.version}\bbl@tempa
\bbl@warning{%
The `\languagename' date format may not be suitable\\%
for proper typesetting, and therefore it very likely will\\%
change in a future release. Reported}%
\fi
\bbl@toglobal\bbl@savetoday
\bbl@toglobal\bbl@savedate}
\ifcase\bbl@engine
\bbl@csarg\def{secline@captions.licr}#1=#2\@@{%
\bbl@ini@captions@aux{#1}{#2}}
\bbl@csarg\def{secline@date.gregorian}#1=#2\@@{% for defaults
\bbl@ini@dategreg#1...\relax{#2}}
\bbl@csarg\def{secline@date.gregorian.licr}#1=#2\@@{% override
\bbl@ini@dategreg#1...\relax{#2}}
\else
\def\bbl@secline@captions#1=#2\@@{%
\bbl@ini@captions@aux{#1}{#2}}
\bbl@csarg\def{secline@date.gregorian}#1=#2\@@{%
\bbl@ini@dategreg#1...\relax{#2}}
\fi
\def\bbl@ini@captions@aux#1#2{%
\bbl@trim@def\bbl@tempa{#1}%
\bbl@ifblank{#2}%
{\bbl@exp{%
\toks@{\\\bbl@nocaption{\bbl@tempa}\<\languagename\bbl@tempa name>}}}%
{\bbl@trim\toks@{#2}}%
\bbl@exp{%
\\\bbl@add\\\bbl@savestrings{%
\\\SetString\<\bbl@tempa name>{\the\toks@}}}}
\bbl@csarg\def{secpre@date.gregorian.licr}{%
\ifcase\bbl@engine\let\bbl@savedate\@empty\fi}
\def\bbl@ini@dategreg#1.#2.#3.#4\relax#5{% TODO - ignore with 'captions'
\bbl@trim@def\bbl@tempa{#1.#2}%
\bbl@ifsamestring{\bbl@tempa}{months.wide}%
{\bbl@trim@def\bbl@tempa{#3}%
\bbl@trim\toks@{#5}%
\bbl@exp{%
\\\bbl@add\\\bbl@savedate{%
\\\SetString\<month\romannumeral\bbl@tempa name>{\the\toks@}}}}%
{\bbl@ifsamestring{\bbl@tempa}{date.long}%
{\bbl@trim@def\bbl@toreplace{#5}%
\bbl@TG@@date
\global\bbl@csarg\let{date@\languagename}\bbl@toreplace
\bbl@exp{%
\gdef\<\languagename date>{\\\protect\<\languagename date >}%
\gdef\<\languagename date >####1####2####3{%
\\\bbl@usedategrouptrue
\<bbl@ensure@\languagename>{%
\<bbl@date@\languagename>{####1}{####2}{####3}}}%
\\\bbl@add\\\bbl@savetoday{%
\\\SetString\\\today{%
\<\languagename date>{\\\the\year}{\\\the\month}{\\\the\day}}}}}}%
{}}
\newcommand\BabelDateSpace{\nobreakspace}
\newcommand\BabelDateDot{.\@}
\newcommand\BabelDated[1]{{\number#1}}
\newcommand\BabelDatedd[1]{{\ifnum#1<10 0\fi\number#1}}
\newcommand\BabelDateM[1]{{\number#1}}
\newcommand\BabelDateMM[1]{{\ifnum#1<10 0\fi\number#1}}
\newcommand\BabelDateMMMM[1]{{%
\csname month\romannumeral#1name\endcsname}}%
\newcommand\BabelDatey[1]{{\number#1}}%
\newcommand\BabelDateyy[1]{{%
\ifnum#1<10 0\number#1 %
\else\ifnum#1<100 \number#1 %
\else\ifnum#1<1000 \expandafter\@gobble\number#1 %
\else\ifnum#1<10000 \expandafter\@gobbletwo\number#1 %
\else
\bbl@error
{Currently two-digit years are restricted to the\\
range 0-9999.}%
{There is little you can do. Sorry.}%
\fi\fi\fi\fi}}
\newcommand\BabelDateyyyy[1]{{\number#1}}
\def\bbl@replace@finish@iii#1{%
\bbl@exp{\def\\#1####1####2####3{\the\toks@}}}
\def\bbl@TG@@date{%
\bbl@replace\bbl@toreplace{[ ]}{\BabelDateSpace{}}%
\bbl@replace\bbl@toreplace{[.]}{\BabelDateDot{}}%
\bbl@replace\bbl@toreplace{[d]}{\BabelDated{####3}}%
\bbl@replace\bbl@toreplace{[dd]}{\BabelDatedd{####3}}%
\bbl@replace\bbl@toreplace{[M]}{\BabelDateM{####2}}%
\bbl@replace\bbl@toreplace{[MM]}{\BabelDateMM{####2}}%
\bbl@replace\bbl@toreplace{[MMMM]}{\BabelDateMMMM{####2}}%
\bbl@replace\bbl@toreplace{[y]}{\BabelDatey{####1}}%
\bbl@replace\bbl@toreplace{[yy]}{\BabelDateyy{####1}}%
\bbl@replace\bbl@toreplace{[yyyy]}{\BabelDateyyyy{####1}}%
\bbl@replace@finish@iii\bbl@toreplace}
\def\bbl@provide@lsys#1{%
\bbl@ifunset{bbl@lname@#1}%
{\bbl@ini@ids{#1}}%
{}%
\bbl@csarg\let{lsys@#1}\@empty
\bbl@ifunset{bbl@sname@#1}{\bbl@csarg\gdef{sname@#1}{Default}}{}%
\bbl@ifunset{bbl@sotf#1}{\bbl@csarg\gdef{sotf@#1}{DFLT}}{}%
\bbl@csarg\bbl@add@list{lsys@#1}{Script=\bbl@cs{sname@#1}}%
\bbl@ifunset{bbl@lname@#1}{}%
{\bbl@csarg\bbl@add@list{lsys@#1}{Language=\bbl@cs{lname@#1}}}%
\bbl@csarg\bbl@toglobal{lsys@#1}}%
% \bbl@exp{% TODO - should be global
% \<keys_if_exist:nnF>{fontspec-opentype/Script}{\bbl@cs{sname@#1}}%
% {\\\newfontscript{\bbl@cs{sname@#1}}{\bbl@cs{sotf@#1}}}%
% \<keys_if_exist:nnF>{fontspec-opentype/Language}{\bbl@cs{lname@#1}}%
% {\\\newfontlanguage{\bbl@cs{lname@#1}}{\bbl@cs{lotf@#1}}}}}
\def\bbl@ini@ids#1{%
\def\BabelBeforeIni##1##2{%
\begingroup
\bbl@add\bbl@secpost@identification{\closein1 }%
\catcode`\[=12 \catcode`\]=12 \catcode`\==12
\bbl@read@ini{##1}%
\endgroup}% boxed, to avoid extra spaces:
{\setbox\z@\hbox{\InputIfFileExists{babel-#1.tex}{}{}}}}
\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{%
\@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
\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}%
\fi}
{\bbl@redefine\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@redefine\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} % end \IfBabelLayout
\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}%
{}}}
\AtBeginDocument{%
\ifx\pdfstringdefDisableCommands\@undefined\else
\pdfstringdefDisableCommands{\languageshorthands{system}}%
\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
\newcommand\BabelNonASCII{LGR,X2,OT2,OT3,OT6,LHE,LWN,LMA,LMC,LMS,LMU,}
\let\org@TeX\TeX
\let\org@LaTeX\LaTeX
\let\ensureascii\@firstofone
\AtBeginDocument{%
\in@false
\bbl@foreach\BabelNonASCII{% is there a non-ascii enc?
\ifin@\else
\lowercase{\bbl@xin@{,#1enc.def,}{,\@filelist,}}%
\fi}%
\ifin@ % if a 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,}%
\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,}%
\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
\@ifl@aded{def}{t1enc}{\xdef\latinencoding{\bbl@t@one}}{}%
\fi}}
\DeclareRobustCommand{\latintext}{%
\fontencoding{\latinencoding}\selectfont
\def\encodingdefault{\latinencoding}}
\ifx\@undefined\DeclareTextFontCommand
\DeclareRobustCommand{\textlatin}[1]{\leavevmode{\latintext #1}}
\else
\DeclareTextFontCommand{\textlatin}{\latintext}
\fi
\def\bbl@alscripts{,Arabic,Syriac,Thaana,}
\def\bbl@rscripts{%
,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}
\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@cs{wdir@\languagename}}}
\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}}
\ifodd\bbl@engine % luatex=1
\AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir}
\DisableBabelHook{babel-bidi}
\def\bbl@getluadir#1{%
\directlua{
if tex.#1dir == 'TLT' then
tex.sprint('0')
elseif tex.#1dir == 'TRT' then
tex.sprint('1')
end}}
\def\bbl@setdir#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@setdir{text}\textdir{#1}% TODO - ?\linedir
\setattribute\bbl@attr@dir{#1}}
\def\bbl@pardir{\bbl@setdir{par}\pardir}
\def\bbl@bodydir{\bbl@setdir{body}\bodydir}
\def\bbl@pagedir{\bbl@setdir{page}\pagedir}
\def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%%
\else % pdftex=0, xetex=2
\AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir}
\DisableBabelHook{babel-bidi}
\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}}
\fi
\DeclareRobustCommand\babelsublr[1]{\leavevmode{\bbl@textdir\z@#1}}
\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
\endinput
%%
%% End of file `babel.def'.
```
The ```\ifcase``` calls up ```txtbabel.def```, which may well be the source of the problem, so here it is:
```
%%
%% This is file `txtbabel.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% babel.dtx (with options: `texxet')
%%
%%
%% Copyright (C) 2012-2017 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.
%%
\ifx\bbl@opt@layout\@nnil\endinput\fi % No layout
\def\bbl@startskip{\ifcase\bbl@thepardir\leftskip\else\rightskip\fi}
\def\bbl@endskip{\ifcase\bbl@thepardir\rightskip\else\leftskip\fi}
\ifx\bbl@beforeforeign\leavevmode % A poor test for bidi=
\def\@hangfrom#1{%
\setbox\@tempboxa\hbox{{#1}}%
\hangindent\ifcase\bbl@thepardir\wd\@tempboxa\else-\wd\@tempboxa\fi
\noindent\box\@tempboxa}
\def\raggedright{%
\let\\\@centercr
\bbl@startskip\z@skip
\@rightskip\@flushglue
\bbl@endskip\@rightskip
\parindent\z@
\parfillskip\bbl@startskip}
\def\raggedleft{%
\let\\\@centercr
\bbl@startskip\@flushglue
\bbl@endskip\z@skip
\parindent\z@
\parfillskip\bbl@endskip}
\fi
\IfBabelLayout{lists}
{\def\list#1#2{%
\ifnum \@listdepth >5\relax
\@toodeep
\else
\global\advance\@listdepth\@ne
\fi
\rightmargin\z@
\listparindent\z@
\itemindent\z@
\csname @list\romannumeral\the\@listdepth\endcsname
\def\@itemlabel{#1}%
\let\makelabel\@mklab
\@nmbrlistfalse
#2\relax
\@trivlist
\parskip\parsep
\parindent\listparindent
\advance\linewidth-\rightmargin
\advance\linewidth-\leftmargin
\advance\@totalleftmargin
\ifcase\bbl@thepardir\leftmargin\else\rightmargin\fi
\parshape\@ne\@totalleftmargin\linewidth
\ignorespaces}%
\def\labelenumii{)\theenumii(}%
\def\p@enumiii{\p@enumii)\theenumii(}}
{}
\IfBabelLayout{contents}
{\def\@dottedtocline#1#2#3#4#5{%
\ifnum#1>\c@tocdepth\else
\vskip \z@ \@plus.2\p@
{\bbl@startskip#2\relax
\bbl@endskip\@tocrmarg
\parfillskip-\bbl@endskip
\parindent#2\relax
\@afterindenttrue
\interlinepenalty\@M
\leavevmode
\@tempdima#3\relax
\advance\bbl@startskip\@tempdima
\null\nobreak\hskip-\bbl@startskip
{#4}\nobreak
\leaders\hbox{%
$\m@th\mkern\@dotsep mu\hbox{.}\mkern\@dotsep mu$}%
\hfill\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont\normalcolor#5}%
\par}%
\fi}}
{}
\IfBabelLayout{columns}
{\def\@outputdblcol{%
\if@firstcolumn
\global\@firstcolumnfalse
\global\setbox\@leftcolumn\copy\@outputbox
\splitmaxdepth\maxdimen
\vbadness\maxdimen
\setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
\setbox\@outputbox\vsplit\@outputbox to\maxdimen
\toks@\expandafter{\topmark}%
\xdef\@firstcoltopmark{\the\toks@}%
\toks@\expandafter{\splitfirstmark}%
\xdef\@firstcolfirstmark{\the\toks@}%
\ifx\@firstcolfirstmark\@empty
\global\let\@setmarks\relax
\else
\gdef\@setmarks{%
\let\firstmark\@firstcolfirstmark
\let\topmark\@firstcoltopmark}%
\fi
\else
\global\@firstcolumntrue
\setbox\@outputbox\vbox{%
\hb@xt@\textwidth{%
\hskip\columnwidth
\hfil
{\normalcolor\vrule \@width\columnseprule}%
\hfil
\hb@xt@\columnwidth{\box\@leftcolumn \hss}%
\hskip-\textwidth
\hb@xt@\columnwidth{\box\@outputbox \hss}%
\hskip\columnsep
\hskip\columnwidth}}%
\@combinedblfloats
\@setmarks
\@outputpage
\begingroup
\@dblfloatplacement
\@startdblcolumn
\@whilesw\if@fcolmade \fi{\@outputpage
\@startdblcolumn}%
\endgroup
\fi}}%
{}
\IfBabelLayout{counters}% Global or language dependent? At begin doc?
{\let\bbl@latinarabic=\@arabic
\def\@arabic#1{\babelsublr{\bbl@latinarabic#1}}%
\let\bbl@asciiroman=\@roman
\def\@roman#1{\babelsublr{\ensureascii{\bbl@asciiroman#1}}}%
\let\bbl@asciiRoman=\@Roman
\def\@Roman#1{\babelsublr{\ensureascii{\bbl@asciiRoman#1}}}}{}
\endinput
%%
%% End of file `txtbabel.def'.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment