diff options
author | Karl Berry <karl@freefriends.org> | 2020-04-28 21:14:00 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-04-28 21:14:00 +0000 |
commit | 47b05827e36c70484f9a11ecd9677b22537a8910 (patch) | |
tree | 57910a8036fc25acd19f0ce56335dfcc801a484c /Master/texmf-dist/tex/generic/babel/babel.def | |
parent | f5324bd184b19d1e2b0aca934969a4af95f2ed3e (diff) |
babel (28apr20)
git-svn-id: svn://tug.org/texlive/trunk@54930 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/babel/babel.def')
-rw-r--r-- | Master/texmf-dist/tex/generic/babel/babel.def | 1473 |
1 files changed, 966 insertions, 507 deletions
diff --git a/Master/texmf-dist/tex/generic/babel/babel.def b/Master/texmf-dist/tex/generic/babel/babel.def index 8c88c5f619e..3db01a667c0 100644 --- a/Master/texmf-dist/tex/generic/babel/babel.def +++ b/Master/texmf-dist/tex/generic/babel/babel.def @@ -32,20 +32,344 @@ %% extension |.ins|) which are part of the distribution. %% -\ifx\ldf@quit\@undefined -\else - \expandafter\endinput -\fi +\ifx\ldf@quit\@undefined\else +\endinput\fi % Same line! \ifx\ProvidesFile\@undefined \def\ProvidesFile#1[#2 #3 #4]{% \wlog{File: #1 #4 #3 <#2>}% \let\ProvidesFile\@undefined} \fi -\ProvidesFile{babel.def}[2020/03/22 3.42 Babel common definitions] -\ifx\AtBeginDocument\@undefined - \input plain.def\relax +\ProvidesFile{babel.def}[2020/04/28 3.43 Babel common definitions] +\ifx\AtBeginDocument\@undefined % TODO. change test. + % == Code for plain == +\def\@empty{} +\def\loadlocalcfg#1{% + \openin0#1.cfg + \ifeof0 + \closein0 + \else + \closein0 + {\immediate\write16{*************************************}% + \immediate\write16{* Local config file #1.cfg used}% + \immediate\write16{*}% + } + \input #1.cfg\relax + \fi + \@endofldf} +\long\def\@firstofone#1{#1} +\long\def\@firstoftwo#1#2{#1} +\long\def\@secondoftwo#1#2{#2} +\def\@nnil{\@nil} +\def\@gobbletwo#1#2{} +\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} +\def\@star@or@long#1{% + \@ifstar + {\let\l@ngrel@x\relax#1}% + {\let\l@ngrel@x\long#1}} +\let\l@ngrel@x\relax +\def\@car#1#2\@nil{#1} +\def\@cdr#1#2\@nil{#2} +\let\@typeset@protect\relax +\let\protected@edef\edef +\long\def\@gobble#1{} +\edef\@backslashchar{\expandafter\@gobble\string\\} +\def\strip@prefix#1>{} +\def\g@addto@macro#1#2{{% + \toks@\expandafter{#1#2}% + \xdef#1{\the\toks@}}} +\def\@namedef#1{\expandafter\def\csname #1\endcsname} +\def\@nameuse#1{\csname #1\endcsname} +\def\@ifundefined#1{% + \expandafter\ifx\csname#1\endcsname\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +\def\@expandtwoargs#1#2#3{% + \edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +\def\zap@space#1 #2{% + #1% + \ifx#2\@empty\else\expandafter\zap@space\fi + #2} +\let\bbl@trace\@gobble +\ifx\@preamblecmds\@undefined + \def\@preamblecmds{} +\fi +\def\@onlypreamble#1{% + \expandafter\gdef\expandafter\@preamblecmds\expandafter{% + \@preamblecmds\do#1}} +\@onlypreamble\@onlypreamble +\def\begindocument{% + \@begindocumenthook + \global\let\@begindocumenthook\@undefined + \def\do##1{\global\let##1\@undefined}% + \@preamblecmds + \global\let\do\noexpand} +\ifx\@begindocumenthook\@undefined + \def\@begindocumenthook{} +\fi +\@onlypreamble\@begindocumenthook +\def\AtBeginDocument{\g@addto@macro\@begindocumenthook} +\def\AtEndOfPackage#1{\g@addto@macro\@endofldf{#1}} +\@onlypreamble\AtEndOfPackage +\def\@endofldf{} +\@onlypreamble\@endofldf +\let\bbl@afterlang\@empty +\chardef\bbl@opt@hyphenmap\z@ +\catcode`\&=\z@ +\ifx&if@filesw\@undefined + \expandafter\let\csname if@filesw\expandafter\endcsname + \csname iffalse\endcsname +\fi +\catcode`\&=4 +\def\newcommand{\@star@or@long\new@command} +\def\new@command#1{% + \@testopt{\@newcommand#1}0} +\def\@newcommand#1[#2]{% + \@ifnextchar [{\@xargdef#1[#2]}% + {\@argdef#1[#2]}} +\long\def\@argdef#1[#2]#3{% + \@yargdef#1\@ne{#2}{#3}} +\long\def\@xargdef#1[#2][#3]#4{% + \expandafter\def\expandafter#1\expandafter{% + \expandafter\@protected@testopt\expandafter #1% + \csname\string#1\expandafter\endcsname{#3}}% + \expandafter\@yargdef \csname\string#1\endcsname + \tw@{#2}{#4}} +\long\def\@yargdef#1#2#3{% + \@tempcnta#3\relax + \advance \@tempcnta \@ne + \let\@hash@\relax + \edef\reserved@a{\ifx#2\tw@ [\@hash@1]\fi}% + \@tempcntb #2% + \@whilenum\@tempcntb <\@tempcnta + \do{% + \edef\reserved@a{\reserved@a\@hash@\the\@tempcntb}% + \advance\@tempcntb \@ne}% + \let\@hash@##% + \l@ngrel@x\expandafter\def\expandafter#1\reserved@a} +\def\providecommand{\@star@or@long\provide@command} +\def\provide@command#1{% + \begingroup + \escapechar\m@ne\xdef\@gtempa{{\string#1}}% + \endgroup + \expandafter\@ifundefined\@gtempa + {\def\reserved@a{\new@command#1}}% + {\let\reserved@a\relax + \def\reserved@a{\new@command\reserved@a}}% + \reserved@a}% +\def\DeclareRobustCommand{\@star@or@long\declare@robustcommand} +\def\declare@robustcommand#1{% + \edef\reserved@a{\string#1}% + \def\reserved@b{#1}% + \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}% + \edef#1{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect + \noexpand#1% + \fi + \noexpand\protect + \expandafter\noexpand\csname + \expandafter\@gobble\string#1 \endcsname + }% + \expandafter\new@command\csname + \expandafter\@gobble\string#1 \endcsname +} +\def\x@protect#1{% + \ifx\protect\@typeset@protect\else + \@x@protect#1% + \fi +} +\catcode`\&=\z@ % Trick to hide conditionals + \def\@x@protect#1&fi#2#3{&fi\protect#1} + \def\bbl@tempa{\csname newif\endcsname&ifin@} +\catcode`\&=4 +\ifx\in@\@undefined + \def\in@#1#2{% + \def\in@@##1#1##2##3\in@@{% + \ifx\in@##2\in@false\else\in@true\fi}% + \in@@#2#1\in@\in@@} +\else + \let\bbl@tempa\@empty +\fi +\bbl@tempa +\def\@ifpackagewith#1#2#3#4{#3} +\def\@ifl@aded#1#2#3#4{} +\ifx\@tempcnta\@undefined + \csname newcount\endcsname\@tempcnta\relax +\fi +\ifx\@tempcntb\@undefined + \csname newcount\endcsname\@tempcntb\relax +\fi +\ifx\bye\@undefined + \advance\count10 by -2\relax +\fi +\ifx\@ifnextchar\@undefined + \def\@ifnextchar#1#2#3{% + \let\reserved@d=#1% + \def\reserved@a{#2}\def\reserved@b{#3}% + \futurelet\@let@token\@ifnch} + \def\@ifnch{% + \ifx\@let@token\@sptoken + \let\reserved@c\@xifnch + \else + \ifx\@let@token\reserved@d + \let\reserved@c\reserved@a + \else + \let\reserved@c\reserved@b + \fi + \fi + \reserved@c} + \def\:{\let\@sptoken= } \: % this makes \@sptoken a space token + \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch} \fi -\ifx\bbl@ifshorthand\@undefined +\def\@testopt#1#2{% + \@ifnextchar[{#1}{#1[#2]}} +\def\@protected@testopt#1{% + \ifx\protect\@typeset@protect + \expandafter\@testopt + \else + \@x@protect#1% + \fi} +\long\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax + #2\relax}\fi} +\long\def\@iwhilenum#1{\ifnum #1\expandafter\@iwhilenum + \else\expandafter\@gobble\fi{#1}} +\def\DeclareTextCommand{% + \@dec@text@cmd\providecommand +} +\def\ProvideTextCommand{% + \@dec@text@cmd\providecommand +} +\def\DeclareTextSymbol#1#2#3{% + \@dec@text@cmd\chardef#1{#2}#3\relax +} +\def\@dec@text@cmd#1#2#3{% + \expandafter\def\expandafter#2% + \expandafter{% + \csname#3-cmd\expandafter\endcsname + \expandafter#2% + \csname#3\string#2\endcsname + }% + \expandafter#1\csname#3\string#2\endcsname +} +\def\@current@cmd#1{% + \ifx\protect\@typeset@protect\else + \noexpand#1\expandafter\@gobble + \fi +} +\def\@changed@cmd#1#2{% + \ifx\protect\@typeset@protect + \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax + \expandafter\ifx\csname ?\string#1\endcsname\relax + \expandafter\def\csname ?\string#1\endcsname{% + \@changed@x@err{#1}% + }% + \fi + \global\expandafter\let + \csname\cf@encoding \string#1\expandafter\endcsname + \csname ?\string#1\endcsname + \fi + \csname\cf@encoding\string#1% + \expandafter\endcsname + \else + \noexpand#1% + \fi +} +\def\@changed@x@err#1{% + \errhelp{Your command will be ignored, type <return> to proceed}% + \errmessage{Command \protect#1 undefined in encoding \cf@encoding}} +\def\DeclareTextCommandDefault#1{% + \DeclareTextCommand#1?% +} +\def\ProvideTextCommandDefault#1{% + \ProvideTextCommand#1?% +} +\expandafter\let\csname OT1-cmd\endcsname\@current@cmd +\expandafter\let\csname?-cmd\endcsname\@changed@cmd +\def\DeclareTextAccent#1#2#3{% + \DeclareTextCommand#1{#2}[1]{\accent#3 ##1} +} +\def\DeclareTextCompositeCommand#1#2#3#4{% + \expandafter\let\expandafter\reserved@a\csname#2\string#1\endcsname + \edef\reserved@b{\string##1}% + \edef\reserved@c{% + \expandafter\@strip@args\meaning\reserved@a:-\@strip@args}% + \ifx\reserved@b\reserved@c + \expandafter\expandafter\expandafter\ifx + \expandafter\@car\reserved@a\relax\relax\@nil + \@text@composite + \else + \edef\reserved@b##1{% + \def\expandafter\noexpand + \csname#2\string#1\endcsname####1{% + \noexpand\@text@composite + \expandafter\noexpand\csname#2\string#1\endcsname + ####1\noexpand\@empty\noexpand\@text@composite + {##1}% + }% + }% + \expandafter\reserved@b\expandafter{\reserved@a{##1}}% + \fi + \expandafter\def\csname\expandafter\string\csname + #2\endcsname\string#1-\string#3\endcsname{#4} + \else + \errhelp{Your command will be ignored, type <return> to proceed}% + \errmessage{\string\DeclareTextCompositeCommand\space used on + inappropriate command \protect#1} + \fi +} +\def\@text@composite#1#2#3\@text@composite{% + \expandafter\@text@composite@x + \csname\string#1-\string#2\endcsname +} +\def\@text@composite@x#1#2{% + \ifx#1\relax + #2% + \else + #1% + \fi +} +\def\@strip@args#1:#2-#3\@strip@args{#2} +\def\DeclareTextComposite#1#2#3#4{% + \def\reserved@a{\DeclareTextCompositeCommand#1{#2}{#3}}% + \bgroup + \lccode`\@=#4% + \lowercase{% + \egroup + \reserved@a @% + }% +} +\def\UseTextSymbol#1#2{% + #2% +} +\def\UseTextAccent#1#2#3{% +} +\def\@use@text@encoding#1{% +} +\def\DeclareTextSymbolDefault#1#2{% + \DeclareTextCommandDefault#1{\UseTextSymbol{#2}#1}% +} +\def\DeclareTextAccentDefault#1#2{% + \DeclareTextCommandDefault#1{\UseTextAccent{#2}#1}% +} +\def\cf@encoding{OT1} +\DeclareTextAccent{\"}{OT1}{127} +\DeclareTextAccent{\'}{OT1}{19} +\DeclareTextAccent{\^}{OT1}{94} +\DeclareTextAccent{\`}{OT1}{18} +\DeclareTextAccent{\~}{OT1}{126} +\DeclareTextSymbol{\textquotedblleft}{OT1}{92} +\DeclareTextSymbol{\textquotedblright}{OT1}{`\"} +\DeclareTextSymbol{\textquoteleft}{OT1}{`\`} +\DeclareTextSymbol{\textquoteright}{OT1}{`\'} +\DeclareTextSymbol{\i}{OT1}{16} +\DeclareTextSymbol{\ss}{OT1}{25} +\ifx\scriptsize\@undefined + \let\scriptsize\sevenrm +\fi + % End of code for plain + \def\languagename{english}% \let\bbl@opt@shorthands\@nnil \def\bbl@ifshorthand#1#2#3{#2}% \let\bbl@language@opts\@empty @@ -67,32 +391,503 @@ \ifx\bbl@trace\@undefined\def\bbl@trace#1{}\fi \expandafter\newif\csname ifbbl@single\endcsname \fi -\ifx\bbl@switchflag\@undefined % Prevent double input - \let\bbl@switchflag\relax - \input switch.def\relax +\ifx\bbl@trace\@undefined + \let\LdfInit\endinput + \def\ProvidesLanguage#1{\endinput} +\endinput\fi % Same line! +\ifx\language\@undefined + \csname newcount\endcsname\language \fi -\bbl@trace{Compatibility with language.def} -\ifx\bbl@languages\@undefined - \ifx\directlua\@undefined - \openin1 = language.def - \ifeof1 - \closein1 - \message{I couldn't find the file language.def} +\ifx\newlanguage\@undefined + \csname newcount\endcsname\last@language + \def\addlanguage#1{% + \global\advance\last@language\@ne + \ifnum\last@language<\@cclvi \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 + \errmessage{No room for a new \string\language!}% + \fi + \global\chardef#1\last@language + \wlog{\string#1 = \string\language\the\last@language}} +\else + \countdef\last@language=19 + \def\addlanguage{\alloc@9\language\chardef\@cclvi} +\fi +\def\bbl@version{3.43} +\def\bbl@date{2020/04/28} +\def\adddialect#1#2{% + \global\chardef#1#2\relax + \bbl@usehooks{adddialect}{{#1}{#2}}% + \begingroup + \count@#1\relax + \def\bbl@elt##1##2##3##4{% + \ifnum\count@=##2\relax + \bbl@info{\string#1 = using hyphenrules for ##1\\% + (\string\language\the\count@)}% + \def\bbl@elt####1####2####3####4{}% + \fi}% + \bbl@cs{languages}% + \endgroup} +\def\bbl@fixname#1{% + \begingroup + \def\bbl@tempe{l@}% + \edef\bbl@tempd{\noexpand\@ifundefined{\noexpand\bbl@tempe#1}}% + \bbl@tempd + {\lowercase\expandafter{\bbl@tempd}% + {\uppercase\expandafter{\bbl@tempd}% + \@empty + {\edef\bbl@tempd{\def\noexpand#1{#1}}% + \uppercase\expandafter{\bbl@tempd}}}% + {\edef\bbl@tempd{\def\noexpand#1{#1}}% + \lowercase\expandafter{\bbl@tempd}}}% + \@empty + \edef\bbl@tempd{\endgroup\def\noexpand#1{#1}}% + \bbl@tempd + \bbl@exp{\\\bbl@usehooks{languagename}{{\languagename}{#1}}}} +\def\bbl@iflanguage#1{% + \@ifundefined{l@#1}{\@nolanerr{#1}\@gobble}\@firstofone} +\def\bbl@bcpcase#1#2#3#4\@@#5{% + \ifx\@empty#3% + \uppercase{\def#5{#1#2}}% + \else + \uppercase{\def#5{#1}}% + \lowercase{\edef#5{#5#2#3#4}}% + \fi} +\def\bbl@bcplookup#1-#2-#3-#4\@@{% + \let\bbl@bcp\relax + \lowercase{\def\bbl@tempa{#1}}% + \ifx\@empty#2% + \IfFileExists{babel-\bbl@tempa.ini}{\let\bbl@bcp\bbl@tempa}{}% + \else\ifx\@empty#3% + \bbl@bcpcase#2\@empty\@empty\@@\bbl@tempb + \IfFileExists{babel-\bbl@tempa-\bbl@tempb.ini}% + {\edef\bbl@bcp{\bbl@tempa-\bbl@tempb}}% + {}% + \ifx\bbl@bcp\relax + \IfFileExists{babel-\bbl@tempa.ini}{\let\bbl@bcp\bbl@tempa}{}% \fi + \else + \bbl@bcpcase#2\@empty\@empty\@@\bbl@tempb + \bbl@bcpcase#3\@empty\@empty\@@\bbl@tempc + \IfFileExists{babel-\bbl@tempa-\bbl@tempb-\bbl@tempc.ini}% + {\edef\bbl@bcp{\bbl@tempa-\bbl@tempb-\bbl@tempc}}% + {}% + \ifx\bbl@bcp\relax + \IfFileExists{babel-\bbl@tempa-\bbl@tempc.ini}% + {\edef\bbl@bcp{\bbl@tempa-\bbl@tempc}}% + {}% + \fi + \ifx\bbl@bcp\relax + \IfFileExists{babel-\bbl@tempa-\bbl@tempc.ini}% + {\edef\bbl@bcp{\bbl@tempa-\bbl@tempc}}% + {}% + \fi + \ifx\bbl@bcp\relax + \IfFileExists{babel-\bbl@tempa.ini}{\let\bbl@bcp\bbl@tempa}{}% + \fi + \fi\fi} +\let\bbl@autoload@options\@empty +\let\bbl@initoload\relax +\def\bbl@provide@locale{% + \ifx\babelprovide\@undefined + \bbl@error{For a language to be defined on the fly 'base'\\% + is not enough, and the whole package must be\\% + loaded. Either delete the 'base' option or\\% + request the languages explicitly}% + {See the manual for further details.}% \fi - \chardef\l@english\z@ + \let\bbl@auxname\languagename % Still necessary. TODO + \bbl@ifunset{bbl@bcp@map@\languagename}{}% Move uplevel?? + {\edef\languagename{\@nameuse{bbl@bcp@map@\languagename}}}% + \ifbbl@bcpallowed + \expandafter\ifx\csname date\languagename\endcsname\relax + \expandafter + \bbl@bcplookup\languagename-\@empty-\@empty-\@empty\@@ + \ifx\bbl@bcp\relax\else % Returned by \bbl@bcplookup + \edef\languagename{\bbl@bcp@prefix\bbl@bcp}% + \edef\localename{\bbl@bcp@prefix\bbl@bcp}% + \expandafter\ifx\csname date\languagename\endcsname\relax + \let\bbl@initoload\bbl@bcp + \bbl@exp{\\\babelprovide[\bbl@autoload@bcpoptions]{\languagename}}% + \let\bbl@initoload\relax + \fi + \bbl@csarg\xdef{bcp@map@\bbl@bcp}{\localename}% + \fi + \fi + \fi + \expandafter\ifx\csname date\languagename\endcsname\relax + \IfFileExists{babel-\languagename.tex}% + {\bbl@exp{\\\babelprovide[\bbl@autoload@options]{\languagename}}}% + {}% + \fi} +\def\iflanguage#1{% + \bbl@iflanguage{#1}{% + \ifnum\csname l@#1\endcsname=\language + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi}} +\let\bbl@select@type\z@ +\edef\selectlanguage{% + \noexpand\protect + \expandafter\noexpand\csname selectlanguage \endcsname} +\ifx\@undefined\protect\let\protect\relax\fi +\let\xstring\string +\def\bbl@language@stack{} +\def\bbl@push@language{% + \ifx\languagename\@undefined\else + \xdef\bbl@language@stack{\languagename+\bbl@language@stack}% + \fi} +\def\bbl@pop@lang#1+#2{% + \edef\languagename{#1}\xdef#3{#2}} +\let\bbl@ifrestoring\@secondoftwo +\def\bbl@pop@language{% + \expandafter\bbl@pop@lang\bbl@language@stack&\bbl@language@stack + \let\bbl@ifrestoring\@firstoftwo + \expandafter\bbl@set@language\expandafter{\languagename}% + \let\bbl@ifrestoring\@secondoftwo} +\chardef\localeid\z@ +\def\bbl@id@last{0} % No real need for a new counter +\def\bbl@id@assign{% + \bbl@ifunset{bbl@id@@\languagename}% + {\count@\bbl@id@last\relax + \advance\count@\@ne + \bbl@csarg\chardef{id@@\languagename}\count@ + \edef\bbl@id@last{\the\count@}% + \ifcase\bbl@engine\or + \directlua{ + Babel = Babel or {} + Babel.locale_props = Babel.locale_props or {} + Babel.locale_props[\bbl@id@last] = {} + Babel.locale_props[\bbl@id@last].name = '\languagename' + }% + \fi}% + {}% + \chardef\localeid\bbl@cl{id@}} +\expandafter\def\csname selectlanguage \endcsname#1{% + \ifnum\bbl@hymapsel=\@cclv\let\bbl@hymapsel\tw@\fi + \bbl@push@language + \aftergroup\bbl@pop@language + \bbl@set@language{#1}} +\def\BabelContentsFiles{toc,lof,lot} +\def\bbl@set@language#1{% from selectlanguage, pop@ + % The old buggy way. Preserved for compatibility. + \edef\languagename{% + \ifnum\escapechar=\expandafter`\string#1\@empty + \else\string#1\@empty\fi}% + \ifcat\relax\noexpand#1% + \expandafter\ifx\csname date\languagename\endcsname\relax + \edef\languagename{#1}% + \let\localename\languagename + \else + \bbl@info{Using '\string\language' instead of 'language' is\\% + deprecated. If what you want is to use a\\% + macro containing the actual locale, make\\% + sure it does not not match any language.\\% + Reported}% + \ifx\scantokens\@undefined + \def\localename{??}% + \else + \scantokens\expandafter{\expandafter + \def\expandafter\localename\expandafter{\languagename}}% + \fi + \fi + \else + \def\localename{#1}% This one has the correct catcodes + \fi + \select@language{\languagename}% + % write to auxs + \expandafter\ifx\csname date\languagename\endcsname\relax\else + \if@filesw + \ifx\babel@aux\@gobbletwo\else % Set if single in the first, redundant + \protected@write\@auxout{}{\string\babel@aux{\bbl@auxname}{}}% + \fi + \bbl@usehooks{write}{}% + \fi + \fi} +\newif\ifbbl@bcpallowed +\bbl@bcpallowedfalse +\def\select@language#1{% from set@, babel@aux + % set hymap + \ifnum\bbl@hymapsel=\@cclv\chardef\bbl@hymapsel4\relax\fi + % set name + \edef\languagename{#1}% + \bbl@fixname\languagename + % TODO. name@map must be here? + \bbl@provide@locale + \bbl@iflanguage\languagename{% + \expandafter\ifx\csname date\languagename\endcsname\relax + \bbl@error + {Unknown language `\languagename'. Either you have\\% + misspelled its name, it has not been installed,\\% + or you requested it in a previous run. Fix its name,\\% + install it or just rerun the file, respectively. In\\% + some cases, you may need to remove the aux file}% + {You may proceed, but expect wrong results}% + \else + % set type + \let\bbl@select@type\z@ + \expandafter\bbl@switch\expandafter{\languagename}% + \fi}} +\def\babel@aux#1#2{% + \select@language{#1}% + \bbl@foreach\BabelContentsFiles{% + \@writefile{##1}{\babel@toc{#1}{#2}}}}% %% TODO - ok in plain? +\def\babel@toc#1#2{% + \select@language{#1}} +\newif\ifbbl@usedategroup +\def\bbl@switch#1{% from select@, foreign@ + % make sure there is info for the language if so requested + \bbl@ensureinfo{#1}% + % restore + \originalTeX + \expandafter\def\expandafter\originalTeX\expandafter{% + \csname noextras#1\endcsname + \let\originalTeX\@empty + \babel@beginsave}% + \bbl@usehooks{afterreset}{}% + \languageshorthands{none}% + % set the locale id + \bbl@id@assign + % switch captions, date + \ifcase\bbl@select@type + \ifhmode + \hskip\z@skip % trick to ignore spaces + \csname captions#1\endcsname\relax + \csname date#1\endcsname\relax + \loop\ifdim\lastskip>\z@\unskip\repeat\unskip + \else + \csname captions#1\endcsname\relax + \csname date#1\endcsname\relax + \fi + \else + \ifbbl@usedategroup % if \foreign... within \<lang>date + \bbl@usedategroupfalse + \ifhmode + \hskip\z@skip % trick to ignore spaces + \csname date#1\endcsname\relax + \loop\ifdim\lastskip>\z@\unskip\repeat\unskip + \else + \csname date#1\endcsname\relax + \fi + \fi + \fi + % switch extras + \bbl@usehooks{beforeextras}{}% + \csname extras#1\endcsname\relax + \bbl@usehooks{afterextras}{}% + % > babel-ensure + % > babel-sh-<short> + % > babel-bidi + % > babel-fontspec + % hyphenation - case mapping + \ifcase\bbl@opt@hyphenmap\or + \def\BabelLower##1##2{\lccode##1=##2\relax}% + \ifnum\bbl@hymapsel>4\else + \csname\languagename @bbl@hyphenmap\endcsname + \fi + \chardef\bbl@opt@hyphenmap\z@ + \else + \ifnum\bbl@hymapsel>\bbl@opt@hyphenmap\else + \csname\languagename @bbl@hyphenmap\endcsname + \fi + \fi + \global\let\bbl@hymapsel\@cclv + % hyphenation - patterns + \bbl@patterns{#1}% + % hyphenation - mins + \babel@savevariable\lefthyphenmin + \babel@savevariable\righthyphenmin + \expandafter\ifx\csname #1hyphenmins\endcsname\relax + \set@hyphenmins\tw@\thr@@\relax + \else + \expandafter\expandafter\expandafter\set@hyphenmins + \csname #1hyphenmins\endcsname\relax + \fi} +\long\def\otherlanguage#1{% + \ifnum\bbl@hymapsel=\@cclv\let\bbl@hymapsel\thr@@\fi + \csname selectlanguage \endcsname{#1}% + \ignorespaces} +\long\def\endotherlanguage{% + \global\@ignoretrue\ignorespaces} +\expandafter\def\csname otherlanguage*\endcsname#1{% + \ifnum\bbl@hymapsel=\@cclv\chardef\bbl@hymapsel4\relax\fi + \foreign@language{#1}} +\expandafter\let\csname endotherlanguage*\endcsname\relax +\providecommand\bbl@beforeforeign{} +\edef\foreignlanguage{% + \noexpand\protect + \expandafter\noexpand\csname foreignlanguage \endcsname} +\expandafter\def\csname foreignlanguage \endcsname{% + \@ifstar\bbl@foreign@s\bbl@foreign@x} +\def\bbl@foreign@x#1#2{% + \begingroup + \let\BabelText\@firstofone + \bbl@beforeforeign + \foreign@language{#1}% + \bbl@usehooks{foreign}{}% + \BabelText{#2}% Now in horizontal mode! + \endgroup} +\def\bbl@foreign@s#1#2{% TODO - \shapemode, \@setpar, ?\@@par + \begingroup + {\par}% + \let\BabelText\@firstofone + \foreign@language{#1}% + \bbl@usehooks{foreign*}{}% + \bbl@dirparastext + \BabelText{#2}% Still in vertical mode! + {\par}% + \endgroup} +\def\foreign@language#1{% + % set name + \edef\languagename{#1}% + \bbl@fixname\languagename + % TODO. name@map here? + \bbl@provide@locale + \bbl@iflanguage\languagename{% + \expandafter\ifx\csname date\languagename\endcsname\relax + \bbl@warning % TODO - why a warning, not an error? + {Unknown language `#1'. Either you have\\% + misspelled its name, it has not been installed,\\% + or you requested it in a previous run. Fix its name,\\% + install it or just rerun the file, respectively. In\\% + some cases, you may need to remove the aux file.\\% + I'll proceed, but expect wrong results.\\% + Reported}% + \fi + % set type + \let\bbl@select@type\@ne + \expandafter\bbl@switch\expandafter{\languagename}}} +\let\bbl@hyphlist\@empty +\let\bbl@hyphenation@\relax +\let\bbl@pttnlist\@empty +\let\bbl@patterns@\relax +\let\bbl@hymapsel=\@cclv +\def\bbl@patterns#1{% + \language=\expandafter\ifx\csname l@#1:\f@encoding\endcsname\relax + \csname l@#1\endcsname + \edef\bbl@tempa{#1}% + \else + \csname l@#1:\f@encoding\endcsname + \edef\bbl@tempa{#1:\f@encoding}% + \fi + \@expandtwoargs\bbl@usehooks{patterns}{{#1}{\bbl@tempa}}% + % > luatex + \@ifundefined{bbl@hyphenation@}{}{% Can be \relax! + \begingroup + \bbl@xin@{,\number\language,}{,\bbl@hyphlist}% + \ifin@\else + \@expandtwoargs\bbl@usehooks{hyphenation}{{#1}{\bbl@tempa}}% + \hyphenation{% + \bbl@hyphenation@ + \@ifundefined{bbl@hyphenation@#1}% + \@empty + {\space\csname bbl@hyphenation@#1\endcsname}}% + \xdef\bbl@hyphlist{\bbl@hyphlist\number\language,}% + \fi + \endgroup}} +\def\hyphenrules#1{% + \edef\bbl@tempf{#1}% + \bbl@fixname\bbl@tempf + \bbl@iflanguage\bbl@tempf{% + \expandafter\bbl@patterns\expandafter{\bbl@tempf}% + \languageshorthands{none}% + \expandafter\ifx\csname\bbl@tempf hyphenmins\endcsname\relax + \set@hyphenmins\tw@\thr@@\relax + \else + \expandafter\expandafter\expandafter\set@hyphenmins + \csname\bbl@tempf hyphenmins\endcsname\relax + \fi}} +\let\endhyphenrules\@empty +\def\providehyphenmins#1#2{% + \expandafter\ifx\csname #1hyphenmins\endcsname\relax + \@namedef{#1hyphenmins}{#2}% + \fi} +\def\set@hyphenmins#1#2{% + \lefthyphenmin#1\relax + \righthyphenmin#2\relax} +\ifx\ProvidesFile\@undefined + \def\ProvidesLanguage#1[#2 #3 #4]{% + \wlog{Language: #1 #4 #3 <#2>}% + } +\else + \def\ProvidesLanguage#1{% + \begingroup + \catcode`\ 10 % + \@makeother\/% + \@ifnextchar[%] + {\@provideslanguage{#1}}{\@provideslanguage{#1}[]}} + \def\@provideslanguage#1[#2]{% + \wlog{Language: #1 #2}% + \expandafter\xdef\csname ver@#1.ldf\endcsname{#2}% + \endgroup} \fi +\ifx\originalTeX\@undefined\let\originalTeX\@empty\fi +\ifx\babel@beginsave\@undefined\let\babel@beginsave\relax\fi +\providecommand\setlocale{% + \bbl@error + {Not yet available}% + {Find an armchair, sit down and wait}} +\let\uselocale\setlocale +\let\locale\setlocale +\let\selectlocale\setlocale +\let\localename\setlocale +\let\textlocale\setlocale +\let\textlanguage\setlocale +\let\languagetext\setlocale +\edef\bbl@nulllanguage{\string\language=0} +\ifx\PackageError\@undefined % TODO. Move to Plain + \def\bbl@error#1#2{% + \begingroup + \newlinechar=`\^^J + \def\\{^^J(babel) }% + \errhelp{#2}\errmessage{\\#1}% + \endgroup} + \def\bbl@warning#1{% + \begingroup + \newlinechar=`\^^J + \def\\{^^J(babel) }% + \message{\\#1}% + \endgroup} + \let\bbl@infowarn\bbl@warning + \def\bbl@info#1{% + \begingroup + \newlinechar=`\^^J + \def\\{^^J}% + \wlog{#1}% + \endgroup} +\fi +\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}% + \bbl@warning{% + \@backslashchar#2 not set. Please, define\\% + it in the preamble with something like:\\% + \string\renewcommand\@backslashchar#2{..}\\% + 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\\% + could 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}} +\let\bbl@usehooks\@gobbletwo +\ifx\bbl@onlyswitch\@empty\endinput\fi + % Here ended switch.def \ifx\directlua\@undefined\else \ifx\bbl@luapatterns\@undefined \input luababel.def @@ -246,6 +1041,28 @@ \else \@ne \fi +\bbl@trace{Compatibility with language.def} +\ifx\bbl@languages\@undefined + \ifx\directlua\@undefined + \openin1 = language.def % TODO. Remove hardcoded number + \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 \def\addto#1#2{% \ifx#1\@undefined \def#1{#2}% @@ -304,7 +1121,7 @@ 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,% - beforestart=0,languagename=0} + beforestart=0,languagename=2} \bbl@trace{Defining babelensure} \newcommand\babelensure[2][]{% TODO - revise test files \AddBabelHook{babel-ensure}{afterextras}{% @@ -331,7 +1148,7 @@ \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\@undefined % 3.32 - Don't assume the macros exists + \ifx##1\@undefined % 3.32 - Don't assume the macro exists \edef##1{\noexpand\bbl@nocaption {\bbl@stripslash##1}{\languagename\bbl@stripslash##1}}% \fi @@ -370,7 +1187,7 @@ \tablename\partname\enclname\ccname\headtoname\pagename\seename \alsoname\proofname\glossaryname} \bbl@trace{Macros for setting language files up} -\def\bbl@ldfinit{% +\def\bbl@ldfinit{% TODO. Merge into the next macro? Unused elsewhere \let\bbl@screset\@empty \let\BabelStrings\bbl@opt@string \let\BabelOptions\@empty @@ -401,13 +1218,15 @@ \catcode`\@=\atcatcode \let\atcatcode\relax \catcode`\==\eqcatcode \let\eqcatcode\relax \endinput} -\def\bbl@afterldf#1{% +\def\bbl@afterldf#1{% TODO. Merge into the next macro? Unused elsewhere \bbl@afterlang \let\bbl@afterlang\relax \let\BabelModifiers\relax \let\bbl@screset\relax}% \def\ldf@finish#1{% - \loadlocalcfg{#1}% + \ifx\loadlocalcfg\@undefined\else % For LaTeX 209 + \loadlocalcfg{#1}% + \fi \bbl@afterldf{#1}% \expandafter\main@language\expandafter{#1}% \catcode`\@=\atcatcode \let\atcatcode\relax @@ -417,24 +1236,24 @@ \@onlypreamble\ldf@finish \def\main@language#1{% \def\bbl@main@language{#1}% - \let\languagename\bbl@main@language + \let\languagename\bbl@main@language % TODO. Set localename \bbl@id@assign \bbl@patterns{\languagename}} \def\bbl@beforestart{% \bbl@usehooks{beforestart}{}% \global\let\bbl@beforestart\relax} \AtBeginDocument{% - \bbl@cs{beforestart}% + \@nameuse{bbl@beforestart}% \if@filesw - \immediate\write\@mainaux{\string\bbl@cs{beforestart}}% + \immediate\write\@mainaux{\string\@nameuse{bbl@beforestart}}% \fi \expandafter\selectlanguage\expandafter{\bbl@main@language}% - \ifbbl@single % must go after the line above + \ifbbl@single % must go after the line above. \renewcommand\selectlanguage[1]{}% \renewcommand\foreignlanguage[2]{#2}% \global\let\babel@aux\@gobbletwo % Also as flag \fi - \ifcase\bbl@engine\or\pagedir\bodydir\fi} % TODO - a better place + \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}}% @@ -570,7 +1389,7 @@ \bbl@afterfi\csname#1@sh@#2@sel\endcsname \fi} \begingroup -\bbl@ifunset{ifincsname}% +\bbl@ifunset{ifincsname}% TODO. Ugly. Correct? {\gdef\active@prefix#1{% \ifx\protect\@typeset@protect \else @@ -641,7 +1460,7 @@ \expandafter\@firstoftwo \fi} \def\user@group{user} -\def\language@group{english} +\def\language@group{english} % TODO. I don't like defaults \def\system@group{system} \def\useshorthands{% \@ifstar\bbl@usesh@s{\bbl@usesh@x{}}} @@ -947,7 +1766,7 @@ \def\bbl@disc#1#2{\nobreak\discretionary{#2-}{}{#1}\bbl@allowhyphens} \bbl@trace{Multiencoding strings} \def\bbl@toglobal#1{\global\let#1#1} -\def\bbl@recatcode#1{% +\def\bbl@recatcode#1{% TODO. Used only once? \@tempcnta="7F \def\bbl@tempa{% \ifnum\@tempcnta>"FF\else @@ -1190,6 +2009,20 @@ \box\z@\kern-.04em\bbl@allowhyphens}} \ProvideTextCommandDefault{\quotesinglbase}{% \UseTextSymbol{OT1}{\quotesinglbase}} +\ProvideTextCommand{\guillemetleft}{OT1}{% + \ifmmode + \ll + \else + \save@sf@q{\nobreak + \raise.2ex\hbox{$\scriptscriptstyle\ll$}\bbl@allowhyphens}% + \fi} +\ProvideTextCommand{\guillemetright}{OT1}{% + \ifmmode + \gg + \else + \save@sf@q{\nobreak + \raise.2ex\hbox{$\scriptscriptstyle\gg$}\bbl@allowhyphens}% + \fi} \ProvideTextCommand{\guillemotleft}{OT1}{% \ifmmode \ll @@ -1204,6 +2037,10 @@ \save@sf@q{\nobreak \raise.2ex\hbox{$\scriptscriptstyle\gg$}\bbl@allowhyphens}% \fi} +\ProvideTextCommandDefault{\guillemetleft}{% + \UseTextSymbol{OT1}{\guillemetleft}} +\ProvideTextCommandDefault{\guillemetright}{% + \UseTextSymbol{OT1}{\guillemetright}} \ProvideTextCommandDefault{\guillemotleft}{% \UseTextSymbol{OT1}{\guillemotleft}} \ProvideTextCommandDefault{\guillemotright}{% @@ -1287,9 +2124,9 @@ \ProvideTextCommandDefault{\frq}{% \textormath{\guilsinglright}{\mbox{\guilsinglright}}} \ProvideTextCommandDefault{\flqq}{% - \textormath{\guillemotleft}{\mbox{\guillemotleft}}} + \textormath{\guillemetleft}{\mbox{\guillemetleft}}} \ProvideTextCommandDefault{\frqq}{% - \textormath{\guillemotright}{\mbox{\guillemotright}}} + \textormath{\guillemetright}{\mbox{\guillemetright}}} \def\umlauthigh{% \def\bbl@umlauta##1{\leavevmode\bgroup% \expandafter\accent\csname\f@encoding dqpos\endcsname @@ -1329,7 +2166,6 @@ \ifx\l@english\@undefined \chardef\l@english\z@ \fi -\main@language{english} \bbl@trace{Bidi layout} \providecommand\IfBabelLayout[3]{#3}% \newcommand\BabelPatchSection[1]{% @@ -1406,10 +2242,14 @@ % == import, captions == \ifx\bbl@KVP@import\@nil\else \bbl@exp{\\\bbl@ifblank{\bbl@KVP@import}}% - {\begingroup - \def\BabelBeforeIni##1##2{\gdef\bbl@KVP@import{##1}\endinput}% - \InputIfFileExists{babel-#2.tex}{}{}% - \endgroup}% + {\ifx\bbl@initoload\relax + \begingroup + \def\BabelBeforeIni##1##2{\gdef\bbl@KVP@import{##1}\endinput}% + \InputIfFileExists{babel-#2.tex}{}{}% + \endgroup + \else + \xdef\bbl@KVP@import{\bbl@initoload}% + \fi}% {}% \fi \ifx\bbl@KVP@captions\@nil @@ -1433,11 +2273,14 @@ \\\foreignlanguage{\languagename}% {####1}}}}% {}% + \bbl@exp{% + \\\bbl@toglobal\<bbl@ensure@\languagename>% + \\\bbl@toglobal\<bbl@ensure@\languagename\space>}% % At this point all parameters are defined if 'import'. Now we % execute some code depending on them. But what about if nothing was % imported? We just load the very basic parameters: ids and a few % more. - \bbl@ifunset{bbl@lname@#2}% + \bbl@ifunset{bbl@lname@#2}% TODO. Duplicated {\def\BabelBeforeIni##1##2{% \begingroup \catcode`\[=12 \catcode`\]=12 \catcode`\==12 \catcode`\;=12 % @@ -1448,14 +2291,21 @@ \bbl@exportkey{dgnat}{numbers.digits.native}{}% \bbl@exportkey{prehc}{typography.prehyphenchar}{}% \bbl@exportkey{lnbrk}{typography.linebreaking}{h}% + \bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}% + \bbl@exportkey{rgthm}{typography.righthyphenmin}{3}% \bbl@exportkey{hyphr}{typography.hyphenrules}{}% \bbl@exportkey{hyoth}{typography.hyphenate.other}{}% \bbl@exportkey{intsp}{typography.intraspace}{}% - \endinput - \endgroup}% boxed, to avoid extra spaces: - {\setbox\z@\hbox{\InputIfFileExists{babel-#2.tex}{}{}}}}% + \ifx\bbl@initoload\relax\endinput\fi + \endgroup}% + \begingroup % boxed, to avoid extra spaces: + \ifx\bbl@initoload\relax + \setbox\z@\hbox{\InputIfFileExists{babel-#2.tex}{}{}}% + \else + \setbox\z@\hbox{\BabelBeforeIni{\bbl@initoload}{}}% + \fi + \endgroup}% {}% - % - % == script, language == % Override the values from ini or defines them \ifx\bbl@KVP@script\@nil\else @@ -1706,7 +2556,11 @@ \fi}% \expandafter\bbl@tempb\bbl@captionslist\@empty \else - \bbl@read@ini{\bbl@KVP@captions}{data}% Here all letters cat = 11 + \ifx\bbl@initoload\relax + \bbl@read@ini{\bbl@KVP@captions}{data}% Here letters cat = 11 + \else + \bbl@read@ini{\bbl@initoload}{data}% Here all letters cat = 11 + \fi \bbl@after@ini \bbl@savestrings \fi @@ -1719,8 +2573,34 @@ \bbl@savedate \fi \bbl@endcommands + \bbl@ifunset{bbl@lname@#1}% TODO. Duplicated + {\def\BabelBeforeIni##1##2{% + \begingroup + \catcode`\[=12 \catcode`\]=12 \catcode`\==12 \catcode`\;=12 % + \let\bbl@ini@captions@aux\@gobbletwo + \def\bbl@inidate ####1.####2.####3.####4\relax ####5####6{}% + \bbl@read@ini{##1}{basic data}% + \bbl@exportkey{prehc}{typography.prehyphenchar}{}% + \bbl@exportkey{lnbrk}{typography.linebreaking}{h}% + \bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}% + \bbl@exportkey{rgthm}{typography.righthyphenmin}{3}% + \bbl@exportkey{hyphr}{typography.hyphenrules}{}% + \bbl@exportkey{hyoth}{typography.hyphenate.other}{}% + \bbl@exportkey{intsp}{typography.intraspace}{}% + \bbl@exportkey{chrng}{characters.ranges}{}% + \bbl@exportkey{dgnat}{numbers.digits.native}{}% + \ifx\bbl@initoload\relax\endinput\fi + \endgroup}% + \begingroup % boxed, to avoid extra spaces: + \ifx\bbl@initoload\relax + \setbox\z@\hbox{\InputIfFileExists{babel-#1.tex}{}{}}% + \else + \setbox\z@\hbox{\BabelBeforeIni{\bbl@initoload}{}}% + \fi + \endgroup}% + {}% \bbl@exp{% - \def\<#1hyphenmins>{% + \gdef\<#1hyphenmins>{% {\bbl@ifunset{bbl@lfthm@#1}{2}{\bbl@cs{lfthm@#1}}}% {\bbl@ifunset{bbl@rgthm@#1}{3}{\bbl@cs{rgthm@#1}}}}}% \bbl@provide@hyphens{#1}% @@ -1758,7 +2638,14 @@ \fi}% \fi \ifx\bbl@tempa\relax % if no opt or no language in opt found - \ifx\bbl@KVP@import\@nil\else % if importing + \ifx\bbl@KVP@import\@nil + \ifx\bbl@initoload\relax\else + \bbl@exp{% and hyphenrules is not empty + \\\bbl@ifblank{\bbl@cs{hyphr@#1}}% + {}% + {\let\\\bbl@tempa\<l@\bbl@cl{hyphr}>}}% + \fi + \else % if importing \bbl@exp{% and hyphenrules is not empty \\\bbl@ifblank{\bbl@cs{hyphr@#1}}% {}% @@ -1899,13 +2786,13 @@ \in@{.1$}{#1$}% \ifin@ \bbl@replace\bbl@tempc{.1}{}% - \bbl@csarg\xdef{cntr@\bbl@tempc @\languagename}{% + \bbl@csarg\protected@xdef{cntr@\bbl@tempc @\languagename}{% \noexpand\bbl@alphnumeral{\bbl@tempc}}% \fi \in@{.F.}{#1}% \ifin@\else\in@{.S.}{#1}\fi \ifin@ - \bbl@csarg\xdef{cntr@#1@\languagename}{\bbl@tempb*}% + \bbl@csarg\protected@xdef{cntr@#1@\languagename}{\bbl@tempb*}% \else \toks@{}% Required by \bbl@buildifcase, which returns \bbl@tempa \expandafter\bbl@buildifcase\bbl@tempb* \\ % Space after \\ @@ -2117,7 +3004,10 @@ \fi} \newcommand\LocaleForEach{\bbl@foreach\bbl@ini@loaded} \newcommand\babeladjust[1]{% TODO. Error handling. - \bbl@forkv{#1}{\bbl@cs{ADJ@##1@##2}}} + \bbl@forkv{#1}{% + \bbl@ifunset{bbl@ADJ@##1@##2}% + {\bbl@cs{ADJ@##1}{##2}}% + {\bbl@cs{ADJ@##1@##2}}}} \def\bbl@adjust@lua#1#2{% \ifvmode \ifnum\currentgrouplevel=\z@ @@ -2168,455 +3058,24 @@ \bbl@adjust@layout{\let\list\bbl@OL@list}} \@namedef{bbl@ADJ@hyphenation.extra@on}{% \bbl@activateposthyphen} -{\def\format{lplain} -\ifx\fmtname\format -\else - \def\format{LaTeX2e} - \ifx\fmtname\format - \else - \aftergroup\endinput - \fi -\fi} -\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{% - \@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 - \edef\thepage{% - \noexpand\babelsublr{\unexpanded\expandafter{\thepage}}}}% - \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}% - {}}} -\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 -\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 -\bbl@trace{Basic (internal) bidi support} -\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 - \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}% +\@namedef{bbl@ADJ@autoload.bcp47@on}{% + \bbl@bcpallowedtrue} +\@namedef{bbl@ADJ@autoload.bcp47@off}{% + \bbl@bcpallowedfalse} +\@namedef{bbl@ADJ@autoload.bcp47.prefix}#1{% + \def\bbl@bcp@prefix{#1}} +\def\bbl@bcp@prefix{bcp47-} +\@namedef{bbl@ADJ@autoload.options}#1{% + \def\bbl@autoload@options{#1}} +\let\bbl@autoload@bcpoptions\@empty +\@namedef{bbl@ADJ@autoload.bcp47.options}#1{% + \def\bbl@autoload@bcpoptions{#1}} +\ifx\directlua\@undefined\else + \ifx\bbl@luapatterns\@undefined + \input luababel.def \fi - \bbl@textdir{#1}} -\ifodd\bbl@engine % luatex=1 - \AddBabelHook{babel-bidi}{afterextras}{\bbl@switchdir} - \DisableBabelHook{babel-bidi} - \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} -\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}} - \def\bbl@tempb{% - \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}} - \@ifpackagewith{babel}{bidi=bidi}{\bbl@tempb}{}% - \@ifpackagewith{babel}{bidi=bidi-l}{\bbl@tempb}{}% - \@ifpackagewith{babel}{bidi=bidi-r}{\bbl@tempb}{}% -\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 + \endinput %% %% End of file `babel.def'. |