diff options
Diffstat (limited to 'macros/latex/required/babel/base/babel.dtx')
-rw-r--r-- | macros/latex/required/babel/base/babel.dtx | 205 |
1 files changed, 117 insertions, 88 deletions
diff --git a/macros/latex/required/babel/base/babel.dtx b/macros/latex/required/babel/base/babel.dtx index 6fe5db94f2..0444c526a7 100644 --- a/macros/latex/required/babel/base/babel.dtx +++ b/macros/latex/required/babel/base/babel.dtx @@ -32,7 +32,7 @@ % % \iffalse %<*filedriver> -\ProvidesFile{babel.dtx}[2021/10/13 v3.64 The Babel package] +\ProvidesFile{babel.dtx}[2021/10/19 v3.65 The Babel package] \documentclass{ltxdoc} \GetFileInfo{babel.dtx} \usepackage{fontspec} @@ -5026,8 +5026,8 @@ help from Bernd Raichle, for which I am grateful. % \section{Tools} % % \begin{macrocode} -%<<version=3.64>> -%<<date=2021/10/13>> +%<<version=3.65>> +%<<date=2021/10/19>> % \end{macrocode} % % \textbf{Do not use the following macros in \texttt{ldf} files. They @@ -5696,11 +5696,7 @@ help from Bernd Raichle, for which I am grateful. \ifin@ \expandafter\bbl@tempa\CurrentOption\bbl@tempa \else - \bbl@xin@{,\CurrentOption,}{,\bbl@language@opts,}% - \ifin@ - \bbl@exp{\\\bbl@replace\\\bbl@language@opts{,\CurrentOption,}{}}% - \fi - \edef\bbl@language@opts{\bbl@language@opts,\CurrentOption,} + \bbl@add@list\bbl@language@opts{\CurrentOption}% \fi} % \end{macrocode} % @@ -5812,7 +5808,9 @@ help from Bernd Raichle, for which I am grateful. % % \begin{macrocode} \ifx\bbl@opt@main\@nnil\else - \edef\bbl@language@opts{\bbl@language@opts,\bbl@opt@main,} + \edef\bbl@language@opts{% + \ifx\bbl@language@opts\@empty\else\bbl@language@opts,\fi + \bbl@opt@main} \fi % \end{macrocode} % @@ -12007,69 +12005,49 @@ help from Bernd Raichle, for which I am grateful. \fi % \end{macrocode} % -% Recognizing global options in packages not having a closed set of -% them is not trivial, as for them to be processed they must be defined -% explicitly. So, package options not yet taken into account and stored -% in |bbl@language@opts| are assumed to be existing languages (note -% this list also contains the language given with |main| as the last -% element). If not declared above, the names of the option and the file -% are the same. There are two steps -- first process option names and -% collect the result, which then do the actual declarations. % -% To allow multiple overlapping replacements, commas in -% |\bbl@language@opts| are doubled. +% Recognizing global options in packages not having a closed set of +% them is not trivial, as for them to be processed they must be +% defined explicitly. So, package options not yet taken into +% account and stored in |bbl@language@opts| are assumed to be +% languages (note this list also contains the language given with +% |main|). If not declared above, the names of the option and the +% file are the same. % % \begin{macrocode} -\let\bbl@elt\relax -\let\bbl@tempe\@empty -\bbl@foreach\@classoptionslist{% - \bbl@xin@{,#1,$}{\bbl@language@opts$}% Match last - \ifin@\else - \bbl@xin@{,#1,}{\bbl@language@opts}% Match non-last - \ifin@ - \bbl@replace\bbl@language@opts{,#1,}{,,}% - \edef\bbl@tempe{\bbl@tempe\bbl@elt{3}{#1}}% - \else - \babel@savecnt\z@ % Use as temp - \ifnum\bbl@iniflag<\thr@@ % Optimization: 3 = always ini - \IfFileExists{#1.ldf}{\advance\babel@savecnt\@ne}{}% - \fi - \ifnum\bbl@iniflag>\z@ % Optimization: 0 = always ldf - \IfFileExists{babel-#1.tex}{\advance\babel@savecnt\tw@}{}% - \fi - \ifnum\babel@savecnt>\z@ - \edef\bbl@tempe{\bbl@tempe\bbl@elt{\the\babel@savecnt}{#1}}% - \fi - \fi - \fi} -% -\let\bbl@savemain\@empty +\let\bbl@tempc\relax \bbl@foreach\bbl@language@opts{% - \edef\bbl@tempe{\bbl@tempe\bbl@elt{3}{#1}}} -\def\bbl@elt#1#2#3{% - \ifx#3\relax % if last - \bbl@ifunset{ds@#2}{}% - {\bbl@exp{\def\\\bbl@savemain{\\\DeclareOption{#2}{\[ds@#2]}}}}% - \bbl@add\bbl@savemain{\bbl@elt{#1}{#2}}% Save main - \DeclareOption{#2}{}% - \else - \ifnum\bbl@iniflag<\tw@ % other as ldf - \ifodd#1\relax % Class: if ldf exists 1,3. Package: always 3 - \bbl@ifunset{ds@#2}% - {\DeclareOption{#2}{\bbl@load@language{#2}}}% - {}% - \fi - \else % other as ini - \ifnum#1>\@ne % % Class: if ini exists 2,3. Package: always 3 - \DeclareOption{#2}{% - \bbl@ldfinit - \babelprovide[import]{#2}% - \bbl@afterldf{}}% - \fi - \fi - \fi - #3} -\bbl@tempe\relax % \relax catches last + \ifcase\bbl@iniflag % Default + \bbl@ifunset{ds@#1}% + {\DeclareOption{#1}{\bbl@load@language{#1}}}% + {}% + \or % provide=* + \@gobble % case 2 same as 1 + \or % provide+=* + \bbl@ifunset{ds@#1}% + {\IfFileExists{#1.ldf}{}% + {\IfFileExists{babel-#1.tex}{}{\@namedef{ds@#1}{}}}}% + {}% + \bbl@ifunset{ds@#1}% + {\def\bbl@tempc{#1}% + \DeclareOption{#1}{% + \ifnum\bbl@iniflag>\@ne + \bbl@ldfinit + \babelprovide[import]{#1}% + \bbl@afterldf{}% + \else + \bbl@load@language{#1}% + \fi}}% + {}% + \or % provide*=* + \def\bbl@tempc{#1}% + \bbl@ifunset{ds@#1}% + {\DeclareOption{#1}{% + \bbl@ldfinit + \babelprovide[import]{#1}% + \bbl@afterldf{}}}% + {}% + \fi} % \end{macrocode} % % Now, we make sure an option is explicitly declared for any language @@ -12078,7 +12056,54 @@ help from Bernd Raichle, for which I am grateful. % accessing the file system just to see if the option could be a % language. % +% \begin{macrocode} +\let\bbl@tempb\@nnil +\let\bbl@clsoptlst\@classoptionslist +\bbl@foreach\@classoptionslist{% + \bbl@ifunset{ds@#1}% + {\IfFileExists{#1.ldf}% + {\def\bbl@tempb{#1}% + \DeclareOption{#1}{% + \ifnum\bbl@iniflag>\@ne + \bbl@ldfinit + \babelprovide[import]{#1}% + \bbl@afterldf{}% + \else + \bbl@load@language{#1}% + \fi}}% + {\IfFileExists{babel-#1.tex}% + {\def\bbl@tempb{#1}% + \ifnum\bbl@iniflag>\z@ + \DeclareOption{#1}{% + \ifnum\bbl@iniflag>\@ne + \bbl@ldfinit + \babelprovide[import]{#1}% + \bbl@afterldf{}% + \fi}% + \fi}% + {}}}% + {}} +% \end{macrocode} +% % If a main language has been set, store it for the third pass. +% +% \begin{macrocode} +\ifnum\bbl@iniflag=\z@\else + \ifx\bbl@opt@main\@nnil + \ifx\bbl@tempc\relax + \let\bbl@opt@main\bbl@tempb + \else + \let\bbl@opt@main\bbl@tempc + \fi + \fi +\fi +\ifx\bbl@opt@main\@nnil\else + \expandafter + \let\expandafter\bbl@loadmain\csname ds@\bbl@opt@main\endcsname + \expandafter\let\csname ds@\bbl@opt@main\endcsname\@empty +\fi +% \end{macrocode} +% % And we are done, because all options for this pass has been % declared. Those already processed in the first pass are just % ignored. @@ -12120,27 +12145,31 @@ help from Bernd Raichle, for which I am grateful. and a package option. Use 'main=\bbl@tempc' as\\% option. Reported}% \fi -\fi -\def\bbl@elt#1#2{% main - \ifodd\bbl@iniflag % as ini = 1(=), 3(*=) - \ifnum#1>\@ne % % Class: if ini exists 2,3. Package: always 3 - \def\CurrentOption{#2}% Directly, because luatexbase - \bbl@ldfinit - \babelprovide[\bbl@opt@provide,main,import]{#2}% - \bbl@afterldf{}% - \DeclareOption{#2}{}% - \fi - \else % as ldf = 0(no), 2(+=) - \ifodd#1\relax % Class: if ldf exists 1,3. Package: always 3 - \bbl@ifunset{ds@#2}% - {\DeclareOption{#2}{\bbl@load@language{#2}}}% - {}% - \ExecuteOptions{#2}% +\else + \ifodd\bbl@iniflag % case 1,3 + \bbl@ldfinit + \let\CurrentOption\bbl@opt@main + \ifx\bbl@opt@provide\@nnil + \bbl@exp{\\\babelprovide[import,main]{\bbl@opt@main}}% + \else + \bbl@exp{\\\bbl@forkv{\@nameuse{@raw@opt@babel.sty}}}{% + \bbl@xin@{,provide,}{,#1,}% + \ifin@ + \def\bbl@opt@provide{#2}% + \bbl@replace\bbl@opt@provide{;}{,}% + \fi}% + \bbl@exp{% + \\\babelprovide[\bbl@opt@provide,import,main]{\bbl@opt@main}}% \fi - \fi} -\bbl@savemain -\DeclareOption*{}% -\ProcessOptions* + \bbl@afterldf{}% + \else % case 0,2 + \chardef\bbl@iniflag\z@ % Force ldf + \expandafter\let\csname ds@\bbl@opt@main\endcsname\bbl@loadmain + \ExecuteOptions{\bbl@opt@main} + \DeclareOption*{}% + \ProcessOptions* + \fi +\fi \def\AfterBabelLanguage{% \bbl@error {Too late for \string\AfterBabelLanguage}% |