%% %% This is file `babel.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% babel.dtx (with options: `package') %% %% %% Copyright (C) 2012-2020 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}[2020/02/28 3.41 The Babel package] \@ifpackagewith{babel}{debug} {\providecommand\bbl@trace[1]{\message{^^J[ #1 ]}}% \let\bbl@debug\@firstofone} {\providecommand\bbl@trace[1]{}% \let\bbl@debug\@gobble} \ifx\bbl@switchflag\@undefined % Prevent double input \let\bbl@switchflag\relax \input switch.def\relax \fi \ifx\directlua\@undefined\else \ifx\bbl@luapatterns\@undefined \input luababel.def \fi \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@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@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\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{}% \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 \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) }} \let\bbl@tempa\relax \@ifpackagewith{babel}{bidi=basic}% {\def\bbl@tempa{basic}}% {\@ifpackagewith{babel}{bidi=basic-r}% {\def\bbl@tempa{basic-r}}% {}} \ifx\bbl@tempa\relax\else \let\bbl@beforeforeign\leavevmode \AtEndOfPackage{\EnableBabelHook{babel-bidi}}% \RequirePackage{luatexbase}% \directlua{ require('babel-data-bidi.lua') require('babel-bidi-\bbl@tempa.lua') } \bbl@activate@preotf \fi \fi \bbl@trace{Defining option 'base'} \@ifpackagewith{babel}{base}{% \ifx\directlua\@undefined \DeclareOption*{\bbl@patterns{\CurrentOption}}% \else \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{% #1\ifx\@empty#2\else,\bbl@afterfi\bbl@tempb#2\fi}% \def\bbl@tempd#1.#2\@nnil{% \ifx\@empty#2% \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}% \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} \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} \newif\ifbbl@single \DeclareOption{selectors=off}{\bbl@singletrue} \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} \DeclareOption{safe=none}{\let\bbl@opt@safe\@empty} \DeclareOption{safe=bib}{\def\bbl@opt@safe{B}} \DeclareOption{safe=ref}{\def\bbl@opt@safe{R}} \ifodd\bbl@engine \DeclareOption{bidi=basic-r}% {\ExecuteOptions{bidi=basic}} \DeclareOption{bidi=basic}% {\let\bbl@beforeforeign\leavevmode % TODO - to locale_props, not as separate attribute \newattribute\bbl@attr@dir % I don't like it, hackish: \frozen@everymath\expandafter{% \expandafter\bbl@mathboxdir\the\frozen@everymath}% \frozen@everydisplay\expandafter{% \expandafter\bbl@mathboxdir\the\frozen@everydisplay}% \bbl@exp{\output{\bodydir\pagedir\the\output}}% \AtEndOfPackage{\EnableBabelHook{babel-bidi}}} \else \DeclareOption{bidi=basic-r}% {\ExecuteOptions{bidi=basic}} \DeclareOption{bidi=basic}% {\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}} \def\bbl@loadxebidi#1{% \ifx\RTLfootnotetext\@undefined \AtEndOfPackage{% \EnableBabelHook{babel-bidi}% \ifx\fontspec\@undefined \usepackage{fontspec}% bidi needs fontspec \fi \usepackage#1{bidi}}% \fi} \DeclareOption{bidi=bidi}% {\bbl@tentative{bidi=bidi}% \bbl@loadxebidi{}} \DeclareOption{bidi=bidi-r}% {\bbl@tentative{bidi=bidi-r}% \bbl@loadxebidi{[rldocument]}} \DeclareOption{bidi=bidi-l}% {\bbl@tentative{bidi=bidi-l}% \bbl@loadxebidi{}} \fi \DeclareOption{bidi=default}% {\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}} \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 `shorthands', `config', `strings', `main',\\% `headfoot', `safe', `math', among others.} \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 \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: 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{afrikaans}{\bbl@try@load@lang{}{dutch}{}} \DeclareOption{brazil}{\bbl@try@load@lang{}{portuges}{}} \DeclareOption{brazilian}{\bbl@try@load@lang{}{portuges}{}} \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{portuguese}{\bbl@try@load@lang{}{portuges}{}} \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 \bbl@for\bbl@tempa\bbl@language@opts{% \bbl@ifunset{ds@\bbl@tempa}% {\edef\bbl@tempb{% \noexpand\DeclareOption {\bbl@tempa}% {\noexpand\bbl@load@language{\bbl@tempa}}}% \bbl@tempb}% \@empty} \bbl@foreach\@classoptionslist{% \bbl@ifunset{ds@#1}% {\IfFileExists{#1.ldf}% {\DeclareOption{#1}{\bbl@load@language{#1}}}% {}}% {}} \ifx\bbl@opt@main\@nnil\else \expandafter \let\expandafter\bbl@loadmain\csname ds@\bbl@opt@main\endcsname \DeclareOption{\bbl@opt@main}{} \fi \def\AfterBabelLanguage#1{% \bbl@ifsamestring\CurrentOption{#1}{\global\bbl@add\bbl@afterlang}{}} \DeclareOption*{} \ProcessOptions* \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 \DeclareOption{\bbl@opt@main}{\bbl@loadmain} \ExecuteOptions{\bbl@opt@main} \DeclareOption*{} \ProcessOptions* \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'.