texlive[67073] Master/texmf-dist: babel (11may23)

commits+karl at tug.org commits+karl at tug.org
Thu May 11 22:11:40 CEST 2023


Revision: 67073
          http://tug.org/svn/texlive?view=revision&revision=67073
Author:   karl
Date:     2023-05-11 22:11:39 +0200 (Thu, 11 May 2023)
Log Message:
-----------
babel (11may23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/babel/README.md
    trunk/Master/texmf-dist/doc/latex/babel/babel.pdf
    trunk/Master/texmf-dist/source/latex/babel/babel.dtx
    trunk/Master/texmf-dist/source/latex/babel/babel.ins
    trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx
    trunk/Master/texmf-dist/source/latex/babel/locale.zip
    trunk/Master/texmf-dist/tex/generic/babel/babel.def
    trunk/Master/texmf-dist/tex/generic/babel/babel.sty
    trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg
    trunk/Master/texmf-dist/tex/generic/babel/locale/se/babel-se.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-BA.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-ME.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-XK.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-BA.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ME.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-XK.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr.ini
    trunk/Master/texmf-dist/tex/generic/babel/luababel.def
    trunk/Master/texmf-dist/tex/generic/babel/nil.ldf

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf
    trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-acadian.tex
    trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-fr-x-acadian.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-ijekavsk.tex
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-latn-ijekavsk.tex
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ijekavsk.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-ijekavsk.ini

Modified: trunk/Master/texmf-dist/doc/latex/babel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/babel/README.md	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/doc/latex/babel/README.md	2023-05-11 20:11:39 UTC (rev 67073)
@@ -1,6 +1,6 @@
-## Babel 3.88
+## Babel 3.89
 
-2023-04-18
+2023-05-11
 
 This package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages. Many
@@ -10,9 +10,9 @@
 
 The latest stable version is available on <https://ctan.org/pkg/babel>.
 
-Changes in version 3.88 are described in:
+Changes in version 3.89 are described in:
 
-https://latex3.github.io/babel/news/whats-new-in-babel-3.88.html
+https://latex3.github.io/babel/news/whats-new-in-babel-3.89.html
 
 Apart from the manual, you can find information on some aspects of babel at:
 
@@ -48,18 +48,14 @@
 
 ### Summary of latest changes
 ```
-3.88  2023-04-18
-      * 37 new locale files: Abkhazian, Afar, Atsam, Baluchi, Bhojpuri,
-        Blin, Corsican, Erzya, Ga, Geez, Guarani, Haryanvi, Inuktitut,
-        Jju, Ligurian, Muscogee, Northern Sotho, Nyanja, N’Ko,
-        Papiamento, Prussian, Rajasthani, Saho, Sicilian, Silesian,
-        South Ndebele, Southern Sotho, Swati, Taroko, Tigre, Tok Pisin,
-        Tsonga, Tswana, Tyap, Venda, Volapük, Wolaytta.
-      * Fixed a few month names in Greek locales (thanks to Günter Milde).
-      * New hook 'begindocument'.
-      * Feature preview: option 'casing' in '\babelprovide' (requires a
-        future change in the LaTeX kernel).
-      * Some minor changes.
+3.89  2023-05-11
+      * Deprecating \SetCase, \aliasshorthands, and 'strings' package
+        options in the manual.
+      * The manual has been split in two documents: 'babel.pdf' is the
+        user guide, and 'babel-code.pdf' is the code.
+      * Alternative syntax to pass 'modifiers' to babel languages.
+      * Code cleaned up: babel.def has been shortened dramatically,
+        and babel.sty is a bit smaller.
 ```
 
 ### Previous changes

Added: trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf	2023-05-11 20:11:39 UTC (rev 67073)

Property changes on: trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/babel/babel.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/babel/babel.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/babel.dtx	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.dtx	2023-05-11 20:11:39 UTC (rev 67073)
@@ -32,7 +32,7 @@
 %
 % \iffalse
 %<*filedriver>
-\ProvidesFile{babel.dtx}[2023/04/18 v3.88 The Babel package]
+\ProvidesFile{babel.dtx}[2023/05/11 v3.89 The Babel package]
 \documentclass{ltxdoc}
 \GetFileInfo{babel.dtx}
 \usepackage{fontspec}
@@ -48,7 +48,11 @@
      ItalicFont = NotoSans-Italic.ttf,
      BoldItalicFont = NotoSans-BoldItalic.ttf]
   {NotoSans-Regular.ttf}
-\setmonofont[Scale=.88,FakeStretch=.95]{NotoMono-Regular.ttf}
+\setmonofont[
+  Scale=.88, FakeStretch=.95,
+  BoldFont = NotoMono-Regular.ttf,
+  ItalicFont = NotoMono-Regular.ttf,
+  BoldItalicFont = NotoMono-Regular.ttf]{NotoMono-Regular.ttf}
 \raggedright
 \addtolength{\textwidth}{25pt}
 \addtolength{\textheight}{3.5cm}
@@ -97,7 +101,7 @@
 \makeatletter
 \def\@begintheorem#1#2{%
   \list{}{}%
-  \small
+  % \small
   \global\advance\@listdepth\m at ne
   \item[{\sffamily\bfseries\color{messages}\hspace*{1.3em}%
         \MakeUppercase{#1}}]}%
@@ -204,7 +208,15 @@
 \cellcolor[rgb]{.95,.95,.95}
 \vspace{2cm}\hspace{1.5cm}
 \begin{minipage}{5cm}
+\Huge
+\ifx\babelcode\undefined
+User guide
+\else
+Code
+\fi
+
 \Large
+\vspace{1.2cm}
 Version \csname @gobble\expandafter\endcsname\fileversion\newline
 \filedate
 
@@ -236,17 +248,18 @@
 \end{titlepage}
 
 \tableofcontents
-\listoftroubles
+\ifx\babelcode\undefined
+  \listoftroubles
+\fi
 \clearpage
 
-\part{User guide}
+\ifx\babelcode\undefined
 
 \begin{description}
 \item[\sffamily\color{messages}What is this document about?] This user
 guide focuses on internationalization and localization with \LaTeX{}
 and \pdftex, \xetex{} and \luatex{} with the \babel{} package. There
-are also some notes on its use with e-Plain and pdf-Plain \TeX . Part II
-describes the code, and usually it can be ignored.
+are also some notes on its use with e-Plain and pdf-Plain \TeX.
 
 \item[\sffamily\color{messages}What if I’m interested only in the
 latest changes?] Changes and new features with relation to version 3.8
@@ -287,6 +300,9 @@
   there are many
   \href{https://github.com/latex3/babel/tree/master/samples}{sample
   files}.
+  
+\item[\sffamily\color{messages}Where is the code?]
+  Run |lualatex --jobname=babel-code \let\babelcode\relax\input{babel.dtx}|.
 \end{description}
 
 \section{The user interface}\label{U-I}
@@ -409,11 +425,10 @@
 (babel)                preloaded for \language=0 instead on input line 57.
 \end{verbatim}
   The document will be typeset, but very likely the text will not be
-  correctly hyphenated. Some languages may be raising this warning
-  wrongly (because they are not hyphenated); it is a bug to be fixed
-  -- just ignore it. See the manual of your distribution (Mac\TeX,
-  Mik\TeX, \TeX Live, etc.) for further info about how to configure
-  it.
+  correctly hyphenated. Some languages in some system may be raising
+  this warning wrongly (because they are not hyphenated) -- just ignore
+  it. See the manual of your distribution (Mac\TeX, Mik\TeX, \TeX Live,
+  etc.) for further info about how to configure it.
 \end{troubleshooting}
 
 \begin{note}
@@ -560,7 +575,7 @@
 rules and, perhaps, the font. In such a case, \babel{} now does not
 require declaring these secondary languages explicitly, because the
 basic settings are loaded on the fly when the language is selected (and
-also when provided in the optional argument of |\babelfont|, if used.)
+also when provided in the optional argument of |\babelfont|, if used).
 
 This is particularly useful, too, when there are short texts of this
 kind coming from an external source whose contents are not known on
@@ -589,18 +604,19 @@
 
 \begin{note}
   Instead of its name, you may prefer to select the language with the
-corresponding BCP47 tag. This alternative, however, must be activated
-explicitly, because a two- or tree-letter word is a valid name for a
-language (eg, |lu| can be the locale name with tag |khb| or the tag for
-|lubakatanga|). See section \ref{bcp47} for further details.
+  corresponding BCP47 tag. This alternative, however, must be activated
+  explicitly, because a two- or tree-letter word is a valid name for a
+  language (eg, |lu| can be the locale name with tag |khb| or the tag
+  for |lubakatanga|). See section \ref{bcp47} for further details.
 \end{note}
 
 \New{3.84} With \pdftex, when a language is loaded on the fly
-(actually, with |\babelprovide|) selectors now set the font encoding
-based on the list provided when loading |fontenc|. Not all scripts have
-an associated encoding, so this feature works only with Latin,
-Cyrillic, Greek, Arabic, Hebrew, Cherokee, Armenian, and Georgian,
-provided a suitable font is found.
+(actually, with |\babelprovide|, because this is the macro used
+internally to load it) selectors now set the font encoding based on the
+list provided when loading |fontenc|. Not all scripts have an
+associated encoding, so this feature works only with Latin, Cyrillic,
+Greek, Arabic, Hebrew, Cherokee, Armenian, and Georgian, provided a
+suitable font is found.
 
 \subsection{Modifiers}
 
@@ -617,9 +633,18 @@
 \end{verbatim}
 
 Attributes (described below) are considered modifiers, ie, you can
-set an attribute by including it in the list of modifiers. However,
-modifiers are a more general mechanism.
+set an attribute by including it in the list of modifiers.
 
+\New{3.89} Alternatively, modifiers can be set with a separate option,
+with the keyword |modifiers| followed by a dot and the language name
+(note the language is not selected or loaded with this option). It is
+useful to activate some feature when the language is declared as a
+class option:
+\begin{verbatim}
+\documentclass[spanish]{report}
+\usepackage[_modifiers.spanish = notilde.lcroman_]{babel}
+\end{verbatim}
+
 \subsection{Troubleshooting}
 
 \begin{itemize}
@@ -1123,37 +1148,6 @@
 
 \New{3.23} Tests if a character has been made a shorthand.
 
-\Describe{\aliasshorthand}{\marg{original}\marg{alias}}
-
-The command |\aliasshorthand| can be used to let another character
-perform the same functions as the default shorthand character. If one
-prefers for example to use the character |/| over |"| in typing Polish
-texts, this can be achieved by entering |\aliasshorthand{"}{/}|. For
-the reasons in the warning below, usage of this macro is not
-recommended.
-
-\begin{note}
-  The substitute character must \textit{not} have been declared before
-  as shorthand (in such a case, |\aliashorthands| is ignored).
-\end{note}
-
-\begin{example}
-  The following example shows how to replace a shorthand by another
-\begin{verbatim}
-\aliasshorthand{~}{^}
-\AtBeginDocument{\shorthandoff*{~}}
-\end{verbatim}
-\end{example}
-
-\begin{warning}
-  Shorthands remember somehow the original character, and the fallback
-  value is that of the latter. So, in this example, if no shorthand if
-  found, |^| expands to a non-breaking space, because this is the
-  value of |~| (internally, |^| still calls |\active at char~| or
-  |\normal at char~|). Furthermore, if you change the |system| value of
-  |^| with |\defineshorthand| nothing happens.
-\end{warning}
-
 \subsection{Package options}
 
 \New{3.9a}
@@ -1233,9 +1227,9 @@
 loaded when the format was created: number (remember dialects can
 share it), name, hyphenation file and exceptions file.
 
-\Describe{nocase}{} \New{3.9l} Language settings for uppercase and
-lowercase mapping (as set by |\SetCase|) are ignored. Use only if there
-are incompatibilities with other packages.
+% \Describe{nocase}{} \New{3.9l} Language settings for uppercase and
+% lowercase mapping (as set by |\SetCase|) are ignored. Use only if there
+% are incompatibilities with other packages.
 
 \Describe{silent}{} \New{3.9l} No warnings and no \textit{infos} are
 written to the log file.\footnote{You can use alternatively the
@@ -1359,7 +1353,7 @@
 following section shows how to make use of them by means of
 |\babelprovide|. In other words, |\babelprovide| is mainly meant
 for auxiliary tasks, and as alternative when the |ldf|, for some
-reason, does work as expected.
+reason, does not work as expected.
 
 \begin{example}
   Although Georgian has its own \texttt{ldf} file, here is how to
@@ -2552,9 +2546,10 @@
 \begin{verbatim}
 \babelprovide[_hyphenrules=chavacano spanish italian_]{chavacano}
 \end{verbatim}
-If none of the listed hyphenrules exist, the default behavior
-applies. Note in this example we set |chavacano| as first option --
-without it, it would select |spanish| even if |chavacano| exists.
+If none of the listed hyphenrules exist, the default behavior applies.
+Note in this example we set |chavacano| as first option, which can seem
+redundant, but without it, it would select |spanish| even if
+|chavacano| exists.
 
 A special value is |+|, which allocates a new language (in the \TeX{}
 sense). It only makes sense as the last value (or the only one; the
@@ -3168,8 +3163,8 @@
 
 The environment \Lenv{hyphenrules} can be used to select \emph{only} the
 hyphenation rules to be used (it can be used as command, too). This can
-for instance be used to select `nohyphenation', provided that in
-\file{language.dat} the `language' \textsf{nohyphenation} is defined by
+for instance be used to select ‘nohyphenation’, provided that in
+\file{language.dat} the ‘language’ \textsf{nohyphenation} is defined by
 loading \file{zerohyph.tex}. It deactivates language shorthands, too
 (but not user shorthands).
 
@@ -3177,7 +3172,7 @@
 |otherlanguage*| (the starred version) is preferred, because the former
 does not take into account possible changes in encodings of characters
 like, say, |'| done by some languages (eg, \textsf{italian},
-\textsf{french}, \textsf{ukraineb}).
+\textsf{french}, \textsf{ukrainian}).
 
 \Describe{\babelpatterns}{\texttt{[}\langlist\texttt{]}%
     \marg{patterns}}
@@ -3233,8 +3228,8 @@
 previouly loaded as a class or package option, as the following example
 illustrates:
 \begin{verbatim}
-  \usepackage[magyar]{babel}
-  \babelprovide[_transforms = digraphs.hyphen_]{magyar}
+  \usepackage[hungarian]{babel}
+  \babelprovide[_transforms = digraphs.hyphen_]{hungarian}
 \end{verbatim}
 \New{3.67} Transforms predefined in the |ini| locale files can be made
 attribute-dependent, too. When an attribute between parenthesis is
@@ -4099,7 +4094,9 @@
 In the following table most of the languages supported by \babel{} with
 and |.ldf| file are listed, together with the names of the option which
 you can load \babel\ with for each language. Note this list is open and
-the current options may be different. It does not include |ini| files.
+the current options may be different. It does not include |ini| files
+(see below). Except in a few cases (eg, |ngerman|, |serbianc|,
+|acadien|) names are those of the Unicode CLDR (or based on them).
 
 \begin{description}
 \itemsep=-\parskip
@@ -4114,33 +4111,31 @@
 \item[Czech] czech
 \item[Danish] danish
 \item[Dutch] dutch
-\item[English] english, USenglish, american, UKenglish,
-     british, canadian, australian, newzealand
+\item[English] english, american (\textit{preferred to} USenglish), british (\textit{preferred to} 
+  UKenglish), canadian, australian, newzealand
 \item[Esperanto] esperanto
 \item[Estonian] estonian
 \item[Finnish] finnish
-\item[French] french, francais, canadien, acadian
+\item[French] french, acadian
 \item[Galician] galician
-\item[German] austrian, german, germanb, ngerman, naustrian
+\item[German] ngerman, naustrian, german, austrian
 \item[Greek] greek, polutonikogreek
 \item[Hebrew] hebrew
 \item[Icelandic] icelandic
-\item[Indonesian] indonesian (bahasa, indon, bahasai)
+\item[Indonesian] indonesian
 \item[Interlingua] interlingua
 \item[Irish Gaelic] irish
 \item[Italian] italian
 \item[Latin] latin
 \item[Lower Sorbian] lowersorbian
-\item[Malay] malay, melayu (bahasam)
-\item[North Sami] samin
+\item[Malay] malay (\textit{preferred to} melayu)
+\item[Northern Sami] northernsami
 \item[Norwegian] norsk, nynorsk
 \item[Polish] polish
-\item[Portuguese] portuguese, brazilian (portuges, brazil)\footnote{The
-two last name comes from the times when they had to be shortened to 8
-characters}
+\item[Portuguese] portuguese, brazilian
 \item[Romanian] romanian
 \item[Russian] russian
-\item[Scottish Gaelic] scottish
+\item[Scottish Gaelic] scottishgaelic (\textit{preferred to} scottish)
 \item[Spanish]  spanish
 \item[Slovakian] slovak
 \item[Slovenian]  slovene
@@ -4157,6 +4152,21 @@
 lithuanian, spanglish, vietnamese, japanese, pinyin, arabic, farsi,
 ibygreek, bgreek, serbianc, frenchle, ethiop} and \textsf{friulan}.
 
+\begin{note}
+  There are also some deprecated names (a few has been even removed):
+  \textsf{frenchb} or \textsf{francais}, as well as \textsf{canadien}
+  (\textsf{french}), \textsf{germanb} (\textsf{german}),
+  \textsf{bahasa}, \textsf{indon} or \textsf{bahasai}
+  (\textsf{indonesian}), \textsf{lsorbian} (\textsf{lowersorbian}),
+  \textsf{bahasam} (\textsf{malay}), \textsf{portuges}
+  (\textsf{portuguese}), \textsf{brazil} (\textsf{brazilian}),
+  \textsf{russianb} (\textsf{russian}), \textsf{usorbian}
+  (\textsf{uppersorbian}), \textsf{vietnam} (\textsf{vietnamese}),
+  \textsf{northernsami} (\textsf{samin}), \textsf{ukraineb}
+  (\textsf{ukrainian}). Deprecated names come in many cases from the
+  times when they had to be shortened to 8 characters.
+\end{note}
+
 Most of them work out of the box, but some may require extra fonts,
 encoding files, a preprocessor or even a complete framework (like
 \textsf{CJK} or \textsf{luatexja}). For example, if you have got the
@@ -4214,33 +4224,45 @@
 \Describe{\babeladjust}{\marg{key-value-list}}
 
 \New{3.36} Sometimes you might need to disable some \babel{} features.
-Currently this macro understands the following keys [to be documented],
-with values |on| or |off|:
+Currently this macro understands the following keys, with values |on|
+or |off|:
 \begin{multicols}{3}
 \ttfamily
+autoload.bcp47\\
+bcp47.toname\\
 bidi.mirroring\\
 bidi.text\\
-bidi.math\\%*
+bidi.math\\%
 % bidi.mapdigits\\
-linebreak.sea\\%*
-linebreak.cjk\\%*
-justify.arabic\\%*
-layout.tabular\\%*
-layout.lists\\%*
-autoload.bcp47\\
-bcp47.toname
+linebreak.sea\\
+linebreak.cjk\\
+justify.arabic\\
+layout.tabular\\
+layout.lists
 \end{multicols}
+The first four are documented elsewhere. The following are by default
+|on|, but with |off| can disable some features: |bidi.math| (only
+preamble) changes for math or \textsf{amsmath}, |linebreak.sea|,
+|linebreak.sea| and |justify.arabic| the corresponding algorithms,
+|layout.tabular| and |layout.lists| changes for tabular and lists.
+Some of the are reverted only to some extent.
 
-Other keys [to be documented] are:
+Other keys are:
 \begin{multicols}{3}
 \ttfamily
-autoload.options\\%*
+autoload.options\\
 autoload.bcp47.prefix\\
 autoload.bcp47.options\\
-prehyphenation.disable\\%*
+prehyphenation.disable\\
 select.write\\
-select.encoding\\%*
+select.encoding\\
 \end{multicols}
+Most of them are documented elsewhere. With |select.encoding=off|, the
+encoding is not set when loading a language on the fly with \pdftex{}
+(only |off|). |prehyphenation.disable| is by default |nohyphenation|,
+which means prehyphenation transforms are not applied if the current
+hyphenation rules are |nohyphenation|; with |off| they are never
+disabled.
 
 For example, you can set |\babeladjust{bidi.text=off}| if you are using
 an alternative algorithm or with large sections not requiring it. Use
@@ -4690,13 +4712,6 @@
 configuration file has been loaded. This macro is called by
 |\ldf at finish|.
 
-\DescribeMacro{\substitutefontfamily}
-(Deprecated.) This command takes three arguments, a font encoding and
-two font family names. It creates a font description file for the
-first font in the given encoding. This \file{.fd} file will instruct
-\LaTeX\ to use a font from the second family when a font from the
-first family in the given encoding seems to be needed.
-
 \subsection{Skeleton}
 
 Here is the basic structure of an |ldf| file, with a language, a
@@ -4888,16 +4903,9 @@
 \label{s:strings}
 
 \New{3.9a} Babel 3.9 provides a way of defining strings in several
-encodings, intended mainly for \luatex{} and \xetex. This is the only new
-feature requiring changes in language files if you want to make use of
-it.
+encodings, intended mainly for \luatex{} and \xetex, although the old
+way of defining/switching strings still works and it's used by default.
 
-Furthermore, it must be activated explicitly, with the package option
-|strings|. If there is no |strings|, these blocks are ignored, except
-|\SetCase|s (and except if forced as described below). In other words,
-the old way of defining/switching strings still works and it's used by
-default.
-
 It consist is a series of blocks started with
 |\StartBabelCommands|. The last block is closed with
 |\EndBabelCommands|. Each block is a single group (ie, local
@@ -4905,9 +4913,11 @@
 |\EndBabelCommands|). An |ldf| may contain several series of this
 kind.
 
-Thanks to this new feature, string values and string language
-switching are not mixed any more. No need of |\addto|. If the language
-is |french|, just redefine |\frenchchaptername|.
+Thanks to this new feature, string values and string language switching
+are not mixed any more. Furthermore, strings do no need to be wrapped
+with formatting commands (eg, to select the writing direction)
+because \babel{} takes care of it automatically. (See also
+|\setlocalecaption|.)
 
 \Describe\StartBabelCommands
   {\marg{language-list}\marg{category}\oarg{selector}}
@@ -4921,11 +4931,11 @@
 but this is discouraged -- a explicit name (or names) is much better
 and clearer.
 
-A ``selector'' is a name to be used as value in package option
-|strings|, optionally followed by extra info about the encodings to be
-used. The name |unicode| must be used for \xetex{} and \luatex{} (the
-key |strings| has also other two special values: |generic| and
-|encoded|).
+A ``selector'' selects a group of definition are to be used, optionally
+followed by extra info about the encodings to be used. The name
+|unicode| must be used for \xetex{} and \luatex{}. Without a selector,
+the LICR representation (ie, with macros like |\~{n}| instead of |ñ|)
+is assumed.
 
 If a string is set several times (because several blocks are read),
 the first one takes precedence (ie, it works much like
@@ -4943,25 +4953,18 @@
 recommended, but not mandatory, although blocks without this key are
 not taken into account if you have requested |strings=encoded|.
 
-Blocks without a selector are read always if the key |strings| has
-been used.  They provide fallback values, and therefore must be the
-last blocks; they should be provided always if possible and all
-strings should be defined somehow inside it; they can be the only
-blocks (mainly LGC scripts using the LICR). Blocks without a selector
-can be activated explicitly with |strings=generic| (no block is taken
-into account except those). With |strings=encoded|, strings in those
-blocks are set as default (internally, |?|). With |strings=encoded|
-strings are protected, but they are correctly expanded in
-|\MakeUppercase| and the like. If there is no key |strings|, string
-definitions are ignored, but |\SetCase|s are still honored (in a
-|encoded| way).
+Blocks without a selector are read always. They provide fallback
+values, and therefore they must be the last ones; they should be
+provided always if possible and all strings should be defined somehow
+inside it; they can be the only blocks (mainly LGC scripts using the
+LICR).
 
 The \m{category} is either |captions|, |date| or |extras|. You must
 stick to these three categories, even if no error is raised when using
-other name.\footnote{In future releases further categories may be
+other names.\footnote{In future releases further categories may be
 added.\nb{like `monetary', `time', `address', `name', `case' or
 `numeric'}} It may be empty, too, but in such a case using
-|\SetString| is an error (but not |\SetCase|).
+|\SetString| is an error.
 
 \begin{verbatim}
 \StartBabelCommands{language}{captions}
@@ -4974,14 +4977,14 @@
 \EndBabelCommands
 \end{verbatim}
 
-A real example is:
+A real example can be:
 \begin{verbatim}
 \StartBabelCommands{austrian}{date}
-  [unicode, fontenc=TU EU1 EU2, charset=utf8]
+  [unicode, fontenc=TU, charset=utf8]
   \SetString\monthiname{Jänner}
 
 \StartBabelCommands{german,austrian}{date}
-  [unicode, fontenc=TU EU1 EU2, charset=utf8]
+  [unicode, fontenc=TU, charset=utf8]
   \SetString\monthiiiname{März}
 
 \StartBabelCommands{austrian}{date}
@@ -5020,17 +5023,28 @@
 package, new settings are added to the previous ones, if the language
 exists (in the \babel{} sense, ie, if |\date|\m{language} exists).
 
+\begin{note}
+  The package option |strings| introduced in version 3.9 (around 2013)
+  when Unicode engines were still of marginal use, is now deprecated.
+\end{note}
+
+\begin{note}
+  Captions and other strings defined in |ini| files (in other words,
+  when a locale is loaded with |\babelprovide|) are internally set
+  with the help of these macros.
+\end{note}
+
 \Describe\StartBabelCommands{%
   \colorbox{thegrey}{\ttfamily\hskip-.2em*\hskip-.2em}%
   \marg{language-list}\marg{category}\oarg{selector}}
 The starred version just forces |strings| to take a value -- if not set
-as package option, then the default for the engine is used. This is
-not done by default to prevent backward incompatibilities, but if you
-are creating a new language this version is better. It's up to
-the maintainers of the current languages to decide if using it is
-appropriate.\footnote{This replaces in 3.9g a short-lived
-\texttt{\string\UseStrings} which has been removed because it did
-not work.}
+as package option (which is now deprecated), then the default for the
+engine is used. This is not done by default to prevent backward
+incompatibilities, but if you are creating a new language this version
+is better. It's up to the maintainers of the current languages to
+decide if using it is appropriate.\footnote{This replaces in 3.9g a
+short-lived \texttt{\string\UseStrings} which has been removed because
+it did not work.}
 
 \Describe{\EndBabelCommands}{}
 Marks the end of the series of blocks.
@@ -5059,52 +5073,18 @@
 \end{verbatim}
 |#1| is replaced by the roman numeral.
 
-\Describe\SetCase{\oarg{map-list}\marg{toupper-code}\marg{tolower-code}}
-Sets globally code to be executed at |\MakeUppercase| and
-|\MakeLowercase|. The code would typically be things like |\let\BB\bb|
-and |\uccode| or |\lccode| (although for the reasons explained above,
-changes in lc/uc codes may not work). A \meta{map-list} is a series of
-macros using the internal format of |\@uclclist| (eg,
-|\bb\BB\cc\CC|). The mandatory arguments take precedence over the
-optional one. This command, unlike |\SetString|, is executed always
-(even without |strings|), and it is intended for minor readjustments
-only.
+\Describe\SetCase{\oarg{map-list}\marg{toupper-code}\marg{tolower-code}\qquad\textit{Deprecated}}
 
-For example, as |T1| is the default case mapping in \LaTeX, we can
-set for Turkish:
-\begin{verbatim}
-\StartBabelCommands{turkish}{}[ot1enc, fontenc=OT1]
-\SetCase
-  {\uccode"10=`I\relax}
-  {\lccode`I="10\relax}
+\begin{warning}
+This feature doesn’t work any longer after some changes in the \LaTeX{}
+kernel. It’s now deprecated and an alternative is on the way.
+\end{warning}
 
-\StartBabelCommands{turkish}{}[unicode, fontenc=TU EU1 EU2, charset=utf8]
-\SetCase
-  {\uccode`i=`İ\relax
-   \uccode`ı=`I\relax}
-  {\lccode`İ=`i\relax
-   \lccode`I=`ı\relax}
-
-\StartBabelCommands{turkish}{}
-\SetCase
-  {\uccode`i="9D\relax
-   \uccode"19=`I\relax}
-  {\lccode"9D=`i\relax
-   \lccode`I="19\relax}
-
-\EndBabelCommands
-\end{verbatim}
-(Note the mapping for |OT1| is not complete.)
-
 \Describe{\SetHyphenMap}{\marg{to-lower-macros}}
-\New{3.9g} Case mapping serves in \TeX{} for two unrelated purposes: case
-transforms (upper/lower) and hyphenation. |\SetCase| handles the
-former, while hyphenation is handled by |\SetHyphenMap| and controlled
-with the package option |hyphenmap|. So, even if internally they are based
-on the same \TeX{} primitive (|\lccode|), \babel{} sets them separately.
+\New{3.9g} Case mapping for hyphenation is handled with |\SetHyphenMap|
+and controlled with the package option |hyphenmap|.
 
-There are three helper macros to
-be used inside |\SetHyphenMap|:
+There are three helper macros to be used inside |\SetHyphenMap|:
 \begin{itemize}
 \item |\BabelLower|\marg{uccode}\marg{lccode} is
   similar to |\lccode| but it's ignored if the char has been set and
@@ -5125,9 +5105,11 @@
 \SetHyphenMap{\BabelLowerMM{"100}{"11F}{2}{"101}}
 \end{verbatim}
 
-This macro is not intended to fix wrong mappings done by Unicode
-(which are the default in both \xetex{} and \luatex{}) -- if an
-assignment is wrong, fix it directly.
+\begin{note}
+  This macro is not intended to fix wrong mappings done by Unicode
+  (which are the default in both \xetex{} and \luatex{}) -- if an
+  assignment is wrong, fix it directly.
+\end{note}
 
 \subsection{Executing code based on the selector}
 
@@ -5140,22 +5122,30 @@
 \begin{verbatim}
 \IfBabelSelectorTF{other, other*}{A}{B}
 \end{verbatim}
-is true with these two environment selectors.
+is true with any of these two environment selectors.
 
 Its natural place of use is in hooks or in |\extras|\m{language}.
 
+\else
+
 \DocInput{babel.dtx}
 
+\fi
+
+
 \section{Acknowledgements}
 
 I would like to thank all who volunteered as $\beta$-testers for their
 time. Michel Goossens supplied contributions for most of the other
-languages.  Nico Poppelier helped polish the text of the documentation
-and supplied parts of the macros for the Dutch language.  Paul Wackers
-and Werenfried Spit helped find and repair bugs.
+languages. Nico Poppelier helped polish the text of the documentation
+and supplied parts of the macros for the Dutch language. Paul Wackers
+and Werenfried Spit helped find and repair bugs. During the further
+development of the babel system I received much help from Bernd
+Raichle, for which I am grateful.
 
-During the further development of the babel system I received much
-help from Bernd Raichle, for which I am grateful.
+There are also many contributors for specific languages, which are
+mentioned in the respective files. Without them, \babel{} just
+wouldn’t exist.
 
 \begin{thebibliography}{9}
  \bibitem{AT} Huda Smitshuijzen Abifares, \textit{Arabic Typography},
@@ -5199,6 +5189,9 @@
 %
 % \fi
 %
+% \addtolength{\oddsidemargin}{-15pt}
+% \addtolength{\textwidth}{50pt}
+%
 %\begingroup
 %  \catcode`<=\active%
 %  \catcode`>=\active
@@ -5212,96 +5205,67 @@
 %  \global\let\check at percent\saved at check@percent
 %\endgroup
 %
-% \part{Source code}
-%
 % \small
 %
-% \babel{} is being developed incrementally, which means parts of the
-% code are under development and therefore incomplete. Only documented
-% features are considered complete. In other words, use \babel{} only
-% as documented (except, of course, if you want to explore and test
-% them -- you can post suggestions about multilingual issues to
-% |kadingira at tug.org| on |http://tug.org/mailman/listinfo/kadingira|).
+% The \babel{} package is being developed incrementally, which means
+% parts of the code are under development and therefore incomplete.
+% Only documented features are considered complete. In other words, use
+% \babel{} in real documents only as documented (except, of course, if
+% you want to explore and test them).
 %
 % \section{Identification and loading of required files}
 %
 % \textit{Code documentation is still under revision.}
-%
-% \textbf{The following description is no longer valid, because switch
-% and plain have been merged into babel.def.}
-%
+
 % The \babel{} package after unpacking consists of the following files:
 % \begin{description}
 % \itemsep=-\parskip
-% \item[switch.def] defines macros to set and switch languages.
-% \item[babel.def] defines the rest of macros. It has tow parts: a
-%   generic one and a second one only for LaTeX{}.
 % \item[babel.sty] is the \LaTeX{} package, which set options and
 %   load language styles.
-% \item[plain.def] defines some \LaTeX{} macros required by
-%   \file{babel.def} and provides a few tools for Plain.
+% \item[babel.def] is loaded by Plain.
+% \item[switch.def] defines macros to set and switch languages (it loads
+%   part |babel.def|).
+% \item[plain.def] is not used, and just loads babel.def, for
+%   compatibility.
 % \item[hyphen.cfg] is the file to be used when generating the
 %   formats to load hyphenation patterns.
 % \end{description}
+% There some additional |tex|, |def| and |lua| files
 %
 % The \babel{} installer extends \textsf{docstrip} with a few
 % ``pseudo-guards'' to set ``variables'' used at installation time.
 % They are used with |<||@name@>| at the appropiated places in the
-% source code and shown below with
-% $\langle\langle$\textit{name}$\rangle\rangle$. That brings a little
-% bit of literate programming.
+% source code and defined with either
+% $\langle\langle$\textit{name}=\textit{value}$\rangle\rangle$, or with
+% a series of lines between
+% $\langle\langle$|*|\textit{name}$\rangle\rangle$ and
+% $\langle\langle$|/|\textit{name}$\rangle\rangle$. The latter is
+% cumulative (eg, with \textit{More package options}). That brings a
+% little bit of literate programming. The guards |<-name>| and
+% |<+name>| have been redefined, too. See |babel.ins| for further
+% details.
 %
 % \section{\texttt{locale} directory}
 %
-% A required component of \babel{} is a set of |ini| files
-% with basic definitions for about 200 languages. They are distributed
-% as a separate |zip| file, not packed as |dtx|. With them, babel
-% will fully support Unicode engines.
-
-% Most of them are essentially finished (except bugs and mistakes, of
-% course). Some of them are still incomplete (but they will be usable),
-% and there are some omissions (eg, Latin and polytonic Greek, and
-% there are no geographic areas in Spanish). Hindi, French, Occitan and
-% Breton will show a warning related to dates. Not all include LICR
-% variants.
+% A required component of \babel{} is a set of |ini| files with basic
+% definitions for about 250 languages. They are distributed as a
+% separate |zip| file, not packed as |dtx|. Most of them are
+% essentially finished (except bugs and mistakes, of course). Some of
+% them are still incomplete (but they will be usable), and there are
+% some omissions (eg, there are no geographic areas in Spanish). Not
+% all include LICR variants.
 %
-% This is a preliminary documentation.
+% |babel-*.ini| files contain the actual data; |babel-*.tex| files are
+% basically proxies to the corresponding ini files.
 %
-% |ini| files contain the actual data; |tex| files are currently just
-% proxies to the corresponding ini files.
+% See \href{https://latex3.github.io/babel/guides/keys-in-ini-files.html}{Keys
+% in \texttt{ini} files} in the the \babel{} site.
 %
-% Most keys are self-explanatory.
-% \begin{description}
-% \itemsep=-\parskip
-% \item[charset] the encoding used in the ini file.
-% \item[version] of the ini file
-% \item[level] ``version'' of the ini specification . which keys are
-%   available (they may grow in a compatible way) and how they should be
-%   read.
-% \item[encodings] a descriptive list of font encondings.
-% \item[{[captions]}] section of captions in the file charset
-% \item[{[captions.licr]}] same, but in pure ASCII using the LICR
-% \item[date.long] fields are as in the CLDR, but the syntax is
-%   different. Anything inside brackets is a date field (eg, |MMMM| for
-%   the month name) and anything outside is text. In addition, |[ ]| is a
-%   non breakable space and |[.]| is an abbreviation dot.
-% \end{description}
-%
-% Keys may be further qualified in a particular language with a suffix
-% starting with a uppercase letter. It can be just a letter (eg,
-% |babel.name.A|, |babel.name.B|) or a name (eg,
-% |date.long.Nominative|, |date.long.Formal|, but no language is
-% currently using the latter). \textit{Multi-letter} qualifiers are
-% forward compatible in the sense they won’t conflict with new
-% ``global'' keys (which start always with a lowercase case). There is
-% an exception, however: the section |counters| has been devised to
-% have arbitrary keys, so you can add lowercased keys if you want.
-%
 % \section{Tools}
 %
 %    \begin{macrocode}
-%<<version=3.88>>
-%<<date=2023/04/18>>
+%<<version=3.89>>
+%<<date=2023/05/11>>
 %    \end{macrocode}
 %
 % \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -5726,7 +5690,7 @@
 %    \begin{macrocode}
 %<*package>
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{babel}[<@date@> <@version@> The Babel package]
+\ProvidesPackage{babel}[<@date@> v<@version@> The Babel package]
 %    \end{macrocode}
 % 
 % Start with some “private” debugging tool, and then define macros for
@@ -5866,6 +5830,8 @@
 \bbl at csarg\let{tempa\expandafter}\csname opt at babel.sty\endcsname
 \def\bbl at tempb#1.#2{%  Remove trailing dot
    #1\ifx\@empty#2\else,\bbl at afterfi\bbl at tempb#2\fi}%
+\def\bbl at tempe#1=#2\@@{%
+  \bbl at csarg\edef{mod@#1}{\bbl at tempb#2}}
 \def\bbl at tempd#1.#2\@nnil{%  TODO. Refactor lists?
   \ifx\@empty#2%
     \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1}%
@@ -5875,12 +5841,17 @@
       \edef\bbl at tempc{%
         \ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1.\bbl at tempb#2}%
     \else
-      \in@{=}{#1}%
+      \in@{$modifiers$}{$#1$}% TODO. Allow spaces.
       \ifin@
-        \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1.#2}%
-      \else    
-        \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1}%
-        \bbl at csarg\edef{mod@#1}{\bbl at tempb#2}%
+        \bbl at tempe#2\@@
+      \else   
+        \in@{=}{#1}%
+        \ifin@
+          \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1.#2}%
+        \else
+          \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1}%
+          \bbl at csarg\edef{mod@#1}{\bbl at tempb#2}%
+        \fi
       \fi
     \fi
   \fi}
@@ -6113,10 +6084,11 @@
 \ifx\ldf at quit\@undefined\else
 \endinput\fi % Same line!
 <@Make sure ProvidesFile is defined@>
-\ProvidesFile{babel.def}[<@date@> <@version@> Babel common definitions]
+\ProvidesFile{babel.def}[<@date@> v<@version@> Babel common definitions]
 \ifx\AtBeginDocument\@undefined  % TODO. change test.
   <@Emulate LaTeX@>
 \fi
+<@Basic macros@>
 %    \end{macrocode}
 %
 % That is all for the moment. Now follows some common stuff, for both
@@ -6252,6 +6224,7 @@
     \fi
   \fi\fi}
 \let\bbl at initoload\relax
+%<-core>
 \def\bbl at provide@locale{%
   \ifx\babelprovide\@undefined
     \bbl at error{For a language to be defined on the fly 'base'\\%
@@ -6284,6 +6257,7 @@
       {\bbl at exp{\\\babelprovide[\bbl at autoload@options]{\languagename}}}%
       {}%
   \fi}
+%<+core>
 %    \end{macrocode}
 %
 %  \begin{macro}{\iflanguage}
@@ -6393,6 +6367,7 @@
 % Retrieving information from the stack is a little bit less simple, as
 % we need to remove the element from the stack while storing it in the
 % macro |\languagename|. For this we first define a helper function.
+%
 %  \begin{macro}{\bbl at pop@lang}
 %    This macro stores its first element (which is delimited by the
 %    `+'-sign) in |\languagename| and stores the rest of the string
@@ -6588,6 +6563,9 @@
 % current values, then we check if |\|\langvar|hyphenmins| is
 % defined. If it is not, we set default values (2 and 3), otherwise
 % the values in |\|\langvar|hyphenmins| will be used.
+% 
+% No text is supposed to be added with switching captions and date, so
+% we remove any spurious spaces with |\bbl at bsphack| and |\bbl at esphack|.
 %
 %    \begin{macrocode}
 \newif\ifbbl at usedategroup
@@ -6606,8 +6584,6 @@
   % set the locale id
   \bbl at id@assign
   % switch captions, date
-  % No text is supposed to be added here, so we remove any
-  % spurious spaces.
   \bbl at bsphack
     \ifcase\bbl at select@type
       \csname captions#1\endcsname\relax
@@ -6678,6 +6654,7 @@
     \expandafter\expandafter\expandafter\set at hyphenmins
       \csname #1hyphenmins\endcsname\relax
   \fi
+  % reset selector name
   \let\bbl at selectorname\@empty}
 %    \end{macrocode}
 %
@@ -7091,7 +7068,6 @@
     \input luababel.def
   \fi
 \fi
-<@Basic macros@>
 \bbl at trace{Compatibility with language.def}
 \ifx\bbl at languages\@undefined
   \ifx\directlua\@undefined
@@ -7228,7 +7204,7 @@
 \newcommand\EnableBabelHook[1]{\bbl at csarg\let{hk@#1}\@firstofone}
 \newcommand\DisableBabelHook[1]{\bbl at csarg\let{hk@#1}\@gobble}
 \def\bbl at usehooks{\bbl at usehooks@lang\languagename}
-\def\bbl at usehooks@lang#1#2#3{%
+\def\bbl at usehooks@lang#1#2#3{% Test for Plain
   \ifx\UseHook\@undefined\else\UseHook{babel/*/#2}\fi
   \def\bbl at elth##1{%
     \bbl at cs{hk@##1}{\bbl at cs{ev@##1@#2@}#3}}%
@@ -7254,7 +7230,7 @@
   beforeextras=0,afterextras=0,stopcommands=0,stringprocess=0,%
   hyphenation=2,initiateactive=3,afterreset=0,foreign=0,foreign*=0,%
   beforestart=0,languagename=2,begindocument=1}
-\ifx\NewHook\@undefined\else
+\ifx\NewHook\@undefined\else % Test for Plain (?)
   \def\bbl at tempa#1=#2\@@{\NewHook{babel/#1}}
   \bbl at foreach\bbl at evargs{\bbl at tempa#1\@@}
 \fi
@@ -8140,12 +8116,12 @@
 %  \end{macro}
 %
 %  \begin{macro}{\aliasshorthand}
-%    First the new shorthand needs to be initialized. Then, we define
-%    the new shorthand in terms of the original one, but note with
-%    |\aliasshorthands{"}{/}| is |\active at prefix /\active at char/|, so we
-%    still need to let the lattest to |\active at char"|.
-%
-%
+%    \textit{Deprecated}. First the new shorthand needs to be
+%    initialized. Then, we define the new shorthand in terms of the
+%    original one, but note with |\aliasshorthands{"}{/}| is
+%    |\active at prefix /\active at char/|, so we still need to let the
+%    lattest to |\active at char"|.
+%    
 %    \begin{macrocode}
 \def\aliasshorthand#1#2{%
   \bbl at ifshorthand{#2}%
@@ -8841,7 +8817,7 @@
 %    \begin{macrocode}
 \@ifpackagewith{babel}{nocase}%
   {\let\bbl at patchuclc\relax}%
-  {\def\bbl at patchuclc{%
+  {\def\bbl at patchuclc{% TODO. Delete. Doesn’t work any more.
     \global\let\bbl at patchuclc\relax
     \g at addto@macro\@uclclist{\reserved at b{\reserved at b\bbl at uclc}}%
     \gdef\bbl at uclc##1{%
@@ -9128,7 +9104,7 @@
 %
 % The command |\SetCase| provides a way to change the behavior of
 % |\MakeUppercase| and |\MakeLowercase|. |\bbl at tempa| is set by the
-% patched |\@uclclist| to the parsing command.
+% patched |\@uclclist| to the parsing command. \textit{Deprecated.}
 %
 %    \begin{macrocode}
 %<<*Macros local to BabelCommands>>
@@ -9198,7 +9174,7 @@
 %<</More package options>>
 %    \end{macrocode}
 %
-%    Initial setup to provide a default behavior if |hypenmap|
+%    Initial setup to provide a default behavior if |hyphenmap|
 %    is not set.
 %
 %    \begin{macrocode}
@@ -9745,6 +9721,7 @@
 %    \begin{macrocode}
 \bbl at trace{Bidi layout}
 \providecommand\IfBabelLayout[3]{#3}%
+%<-core>
 \newcommand\BabelPatchSection[1]{%
   \@ifundefined{#1}{}{%
     \bbl at exp{\let\<bbl at ss@#1>\<#1>}%
@@ -9778,6 +9755,7 @@
      \select at language@x{\bbl at main@language}}}{}
 \IfBabelLayout{captions}%
   {\BabelPatchSection{caption}}{}
+%<+core>
 %    \end{macrocode}
 %
 % \subsection{Load engine specific macros}
@@ -9811,6 +9789,8 @@
 %
 % \subsection{Creating and modifying languages}
 %
+% Continue with \LaTeX{} only.
+%
 % |\babelprovide| is a general purpose tool for creating and modifying
 % languages. It creates the language infrastructure, and loads, if
 % requested, an |ini| file. It may be used in conjunction to previouly
@@ -9817,6 +9797,8 @@
 % loaded |ldf| files.
 %
 %    \begin{macrocode}
+%</package|core>
+%<*package>
 \bbl at trace{Creating languages and reading ini files}
 \let\bbl at extend@ini\@gobble
 \newcommand\babelprovide[2][]{%
@@ -9835,6 +9817,7 @@
   \let\bbl at calendars\@empty
   \global\let\bbl at inidata\@empty
   \global\let\bbl at extend@ini\@gobble
+  \global\let\bbl at included@inis\@empty
   \gdef\bbl at key@list{;}% 
   \bbl at forkv{#1}{%
     \in@{/}{##1}% With /, (re)sets a value in the ini
@@ -9900,6 +9883,14 @@
       {}%  With \bbl at load@basic below
       {\bbl at provide@renew{#2}}%
   \fi
+  % == include == TODO
+  % \ifx\bbl at included@inis\@empty\else
+  %   \bbl at replace\bbl at included@inis{ }{,}%
+  %   \bbl at foreach\bbl at included@inis{%
+  %     \openin\bbl at readstream=babel-##1.ini
+  %     \bbl at extend@ini{#2}}%
+  %   \closein\bbl at readstream
+  % \fi
   % Post tasks
   % ----------
   % == subsequent calls after the first provide for a locale ==
@@ -9922,11 +9913,14 @@
        \\\bbl at toglobal\<bbl at ensure@\languagename>%
        \\\bbl at toglobal\<bbl at ensure@\languagename\space>}%
   \fi
-  % ==
-  % 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 set the basic parameters, but still loading the
-  % whole ini file.
+%    \end{macrocode}
+%
+% 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 set the basic parameters, but still loading the
+% whole ini file.
+%
+%    \begin{macrocode}
   \bbl at load@basic{#2}%
   % == script, language ==
   % Override the values from ini or defines them
@@ -10376,9 +10370,9 @@
   \bbl at trim\toks@{#2}%
   \bbl at xin@{;\bbl at section/\bbl at tempa;}{\bbl at key@list}%
   \ifin@\else
-    \bbl at xin@{,identification/include.}%
+    \bbl at xin@{,identification/include.}% 
              {,\bbl at section/\bbl at tempa}%
-    \ifin@\edef\bbl at required@inis{\the\toks@}\fi
+    \ifin@\xdef\bbl at included@inis{\the\toks@}\fi
     \bbl at exp{%
       \\\g at addto@macro\\\bbl at inidata{%
         \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}%
@@ -10439,16 +10433,9 @@
       \let\bbl at inistore\bbl at inistore@min    % Remember it's local
     \fi
     \def\bbl at section{identification}%
-    \let\bbl at required@inis\@empty
     \bbl at exp{\\\bbl at inistore tag.ini=#1\\\@@}%
     \bbl at inistore load.level=#2\@@
     \bbl at loop@ini
-    \ifx\bbl at required@inis\@empty\else
-      \bbl at replace\bbl at required@inis{ }{,}%
-      \bbl at foreach\bbl at required@inis{%
-        \openin\bbl at readstream=babel-##1.ini
-        \bbl at loop@ini}%
-    \fi
     % == Process stored data ==
     \bbl at csarg\xdef{lini@\languagename}{#1}%
     \bbl at read@ini at aux
@@ -11262,13 +11249,18 @@
 %    \begin{macrocode}
 \providecommand\BCPdata{}
 \ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
-  \renewcommand\BCPdata[1]{%
+  \renewcommand\BCPdata[1]{\bbl at bcpdata@i#1\@empty}
+  \def\bbl at bcpdata@i#1#2#3#4#5#6\@empty{%
+    \@nameuse{str_if_eq:nnTF}{#1#2#3#4#5}{main.}%
+      {\bbl at bcpdata@ii{#6}\bbl at main@language}%
+      {\bbl at bcpdata@ii{#1#2#3#4#5#6}\languagename}}%   
+  \def\bbl at bcpdata@ii#1#2{%
     \bbl at ifunset{bbl at info@#1.tag.bcp47}%
       {\bbl at error{Unknown field '#1' in \string\BCPdata.\\%
                   Perhaps you misspelled it.}%
                  {See the manual for details.}}%
-      {\bbl at ifunset{bbl@\csname bbl at info@#1.tag.bcp47\endcsname @\languagename}{}%
-        {\bbl at cs{\csname bbl at info@#1.tag.bcp47\endcsname @\languagename}}}}
+      {\bbl at ifunset{bbl@\csname bbl at info@#1.tag.bcp47\endcsname @#2}{}%
+        {\bbl at cs{\csname bbl at info@#1.tag.bcp47\endcsname @#2}}}}
 \fi
 % Still somewhat hackish:
 \@namedef{bbl at info@casing.tag.bcp47}{casing}
@@ -11281,7 +11273,6 @@
 %<<*More package options>>
 \DeclareOption{ensureinfo=off}{}
 %<</More package options>>
-%
 \let\bbl at ensureinfo\@gobble
 \newcommand\BabelEnsureInfo{%
   \ifx\InputIfFileExists\@undefined\else
@@ -11457,23 +11448,6 @@
   \let\bbl at encoding@select at off\@empty}
 %    \end{macrocode}
 %
-% As the final task, load the code for lua. TODO: use babel name, override 
-%
-%    \begin{macrocode}
-\ifx\directlua\@undefined\else
-  \ifx\bbl at luapatterns\@undefined
-    \input luababel.def
-  \fi
-\fi
-%    \end{macrocode}
-%
-% Continue with \LaTeX{}.
-%
-%    \begin{macrocode}
-%</package|core>
-%<*package>
-%    \end{macrocode}
-%
 % \subsection{Cross referencing macros}
 %
 % The \LaTeX\ book states:
@@ -11962,7 +11936,7 @@
 %
 % \begin{macro}{\substitutefontfamily}
 %
-% Deprecated. Use the tools provides by \LaTeX. The command
+% \textit{Deprecated.} Use the tools provides by \LaTeX. The command
 % |\substitutefontfamily| creates an \file{.fd} file on the fly. The
 % first argument is an encoding mnemonic, the second and third
 % arguments are font family names.
@@ -12432,10 +12406,12 @@
   \bbl at load@language{hebrew}}
 \DeclareOption{hungarian}{\bbl at try@load at lang{}{magyar}{}}
 \DeclareOption{lowersorbian}{\bbl at try@load at lang{}{lsorbian}{}}
+\DeclareOption{northernsami}{\bbl at try@load at lang{}{samin}{}}
 \DeclareOption{nynorsk}{\bbl at try@load at lang{}{norsk}{}}
 \DeclareOption{polutonikogreek}{%
   \bbl at try@load at lang{}{greek}{\languageattribute{greek}{polutoniko}}}
 \DeclareOption{russian}{\bbl at try@load at lang{}{russianb}{}}
+\DeclareOption{scottishgaelic}{\bbl at try@load at lang{}{scottish}{}}
 \DeclareOption{ukrainian}{\bbl at try@load at lang{}{ukraineb}{}}
 \DeclareOption{uppersorbian}{\bbl at try@load at lang{}{usorbian}{}}
 %    \end{macrocode}
@@ -12684,7 +12660,7 @@
 %
 %    \begin{macrocode}
 <@Make sure ProvidesFile is defined@>
-\ProvidesFile{hyphen.cfg}[<@date@> <@version@> Babel hyphens]
+\ProvidesFile{hyphen.cfg}[<@date@> v<@version@> Babel hyphens]
 \xdef\bbl at format{\jobname}
 \def\bbl at version{<@version@>}
 \def\bbl at date{<@date@>}
@@ -15104,7 +15080,7 @@
       \else
         \let\bbl at ams@lap\llap
       \fi
-      \ExplSyntaxOn
+      \ExplSyntaxOn % Required by \bbl at sreplace with \intertext@
       \bbl at sreplace\intertext@{\normalbaselines}%
         {\normalbaselines
          \ifx\bbl at eqnodir\relax\else\bbl at pardir\@ne\bbl at eqnodir\fi}%
@@ -23138,7 +23114,7 @@
 %
 %    \begin{macrocode}
 %<*nil>
-\ProvidesLanguage{nil}[<@date@> <@version@> Nil language]
+\ProvidesLanguage{nil}[<@date@> v<@version@> Nil language]
 \LdfInit{nil}{datenil}
 %    \end{macrocode}
 %
@@ -23345,7 +23321,7 @@
 %</ca-islamic>
 %    \end{macrocode}
 %
-% \section{Hebrew}
+% \subsection{Hebrew}
 %
 % This is basically the set of macros written by Michail Rozman in
 % 1991, with corrections and adaptions by Rama Porrat, Misha, Dan Haran
@@ -23610,7 +23586,7 @@
 %</ca-hebrew>
 %    \end{macrocode}
 %
-% \section{Persian}
+% \subsection{Persian}
 %
 % There is an algorithm written in TeX by Jabri, Abolhassani, Pournader
 % and Esfahbod, created for the first versions of the FarsiTeX system
@@ -23653,7 +23629,7 @@
 %</ca-persian>
 %    \end{macrocode}
 %
-% \section{Coptic and Ethiopic}
+% \subsection{Coptic and Ethiopic}
 %
 % Adapted from \texttt{jquery.calendars.package-1.1.4}, written by Keith
 % Wood, 2010. Dual license: GPL and MIT. The only difference is the
@@ -23690,7 +23666,7 @@
 %</ca-ethiopic>
 %    \end{macrocode}
 %
-% \section{Buddhist}
+% \subsection{Buddhist}
 %
 % That’s very simple.
 %
@@ -24275,6 +24251,8 @@
 \let\bbl at opt@shorthands\@nnil
 \def\bbl at ifshorthand#1#2#3{#2}%
 \let\bbl at language@opts\@empty
+\let\bbl at ensureinfo\@gobble
+\let\bbl at provide@locale\relax
 \ifx\babeloptionstrings\@undefined
   \let\bbl at opt@strings\@nnil
 \else

Modified: trunk/Master/texmf-dist/source/latex/babel/babel.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/babel.ins	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.ins	2023-05-11 20:11:39 UTC (rev 67073)
@@ -26,7 +26,7 @@
 %% and covered by LPPL is defined by the unpacking scripts (with
 %% extension .ins) which are part of the distribution.
 %%
-\def\filedate{2023/04/18}
+\def\filedate{2023/05/11}
 \def\batchfile{babel.ins}
 \input docstrip.tex
 
@@ -74,7 +74,7 @@
   \else
     \activefiles
   \fi}
-  
+
 \newif\ifcollect
 \newif\ifsaving
 
@@ -105,6 +105,32 @@
     \expandafter\gdef\csname #1Var\endcsname{#2}%
   \fi}
 
+% The following is somewhat hackish, but it does the job for babel, and
+% must be used in the following way: <-name> starts a block to be
+% ignored if 'name' is active, and <+name> ends the block (in this
+% order). Used to exclude some parts from babel.def. With the original
+% definitions, some code goes 'visually' in comments/documentation, but
+% with this change they are in the real code. However, it must be
+% considered temporal, because the solution must be to reorganize the
+% code.
+
+\let\bblMinus\minusOption
+\def\minusOption-#1>#2\endLine{%
+  \global\let\bblactivefiles\activefiles
+  \def\tempa{}%
+  \def\do##1##2##3{%
+    \def\tempb{#1}\def\tempc{##2}%
+    \ifx\tempb\tempc\else
+      \expandafter\def\expandafter\tempa\expandafter{%
+        \tempa\do##1{##2}##3}%
+    \fi}%
+  \activefiles
+  \let\activefiles\tempa}
+
+\let\bblPlus\plusOption
+\def\plusOption+#1>#2\endLine{%
+  \let\activefiles\bblactivefiles}
+
 % Preambles
 
 \declarepreamble\mainpreamble
@@ -153,6 +179,9 @@
          }
 
 % compatibility files
+
+\let\minusOption\bblMinus
+\let\plusOption\bblPlus
 \def\compatfile#1{\file{#1.sty}{\from{bbcompat.dtx}{styfile,#1}}}
 
 \generate{%
@@ -252,5 +281,3 @@
 \Msg{* Happy TeXing}
 \Msg{*}
 \Msg{***********************************************************}
-
-

Modified: trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2023-05-11 20:11:39 UTC (rev 67073)
@@ -30,7 +30,7 @@
 %
 % \iffalse
 %<*dtx>
-\ProvidesFile{bbcompat.dtx}[2023/04/18 v3.88]
+\ProvidesFile{bbcompat.dtx}[2023/05/11 v3.89]
 %</dtx>
 %
 %% File 'bbcompat.dtx'

Modified: trunk/Master/texmf-dist/source/latex/babel/locale.zip
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.def	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.def	2023-05-11 20:11:39 UTC (rev 67073)
@@ -40,7 +40,7 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{babel.def}[2023/04/18 3.88 Babel common definitions]
+\ProvidesFile{babel.def}[2023/05/11 v3.89 Babel common definitions]
 \ifx\AtBeginDocument\@undefined  % TODO. change test.
   \def\@empty{}
 \def\loadlocalcfg#1{%
@@ -387,6 +387,8 @@
 \let\bbl at opt@shorthands\@nnil
 \def\bbl at ifshorthand#1#2#3{#2}%
 \let\bbl at language@opts\@empty
+\let\bbl at ensureinfo\@gobble
+\let\bbl at provide@locale\relax
 \ifx\babeloptionstrings\@undefined
   \let\bbl at opt@strings\@nnil
 \else
@@ -406,8 +408,195 @@
 \expandafter\newif\csname ifbbl at single\endcsname
 \chardef\bbl at bidimode\z@
 \fi
-\def\bbl at version{3.88}
-\def\bbl at date{2023/04/18}
+\bbl at trace{Basic macros}
+\def\bbl at stripslash{\expandafter\@gobble\string}
+\def\bbl at add#1#2{%
+  \bbl at ifunset{\bbl at stripslash#1}%
+    {\def#1{#2}}%
+    {\expandafter\def\expandafter#1\expandafter{#1#2}}}
+\def\bbl at xin@{\@expandtwoargs\in@}
+\def\bbl at carg#1#2{\expandafter#1\csname#2\endcsname}%
+\def\bbl at ncarg#1#2#3{\expandafter#1\expandafter#2\csname#3\endcsname}%
+\def\bbl at ccarg#1#2#3{%
+  \expandafter#1\csname#2\expandafter\endcsname\csname#3\endcsname}%
+\def\bbl at csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}%
+\def\bbl at cs#1{\csname bbl@#1\endcsname}
+\def\bbl at cl#1{\csname bbl@#1@\languagename\endcsname}
+\def\bbl at loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,}
+\def\bbl at loopx#1#2{\expandafter\bbl at loop\expandafter#1\expandafter{#2}}
+\def\bbl@@loop#1#2#3,{%
+  \ifx\@nnil#3\relax\else
+    \def#1{#3}#2\bbl at afterfi\bbl@@loop#1{#2}%
+  \fi}
+\def\bbl at for#1#2#3{\bbl at loopx#1{#2}{\ifx#1\@empty\else#3\fi}}
+\def\bbl at add@list#1#2{%
+  \edef#1{%
+    \bbl at ifunset{\bbl at stripslash#1}%
+      {}%
+      {\ifx#1\@empty\else#1,\fi}%
+    #2}}
+\long\def\bbl at afterelse#1\else#2\fi{\fi#1}
+\long\def\bbl at afterfi#1\fi{\fi#1}
+\def\bbl at exp#1{%
+  \begingroup
+    \let\\\noexpand
+    \let\<\bbl at exp@en
+    \let\[\bbl at exp@ue
+    \edef\bbl at exp@aux{\endgroup#1}%
+  \bbl at exp@aux}
+\def\bbl at exp@en#1>{\expandafter\noexpand\csname#1\endcsname}%
+\def\bbl at exp@ue#1]{%
+  \unexpanded\expandafter\expandafter\expandafter{\csname#1\endcsname}}%
+\def\bbl at tempa#1{%
+  \long\def\bbl at trim##1##2{%
+    \futurelet\bbl at trim@a\bbl at trim@c##2\@nil\@nil#1\@nil\relax{##1}}%
+  \def\bbl at trim@c{%
+    \ifx\bbl at trim@a\@sptoken
+      \expandafter\bbl at trim@b
+    \else
+      \expandafter\bbl at trim@b\expandafter#1%
+    \fi}%
+  \long\def\bbl at trim@b#1##1 \@nil{\bbl at trim@i##1}}
+\bbl at tempa{ }
+\long\def\bbl at trim@i#1\@nil#2\relax#3{#3{#1}}
+\long\def\bbl at trim@def#1{\bbl at trim{\def#1}}
+\begingroup
+  \gdef\bbl at ifunset#1{%
+    \expandafter\ifx\csname#1\endcsname\relax
+      \expandafter\@firstoftwo
+    \else
+      \expandafter\@secondoftwo
+    \fi}
+  \bbl at ifunset{ifcsname}%
+    {}%
+    {\gdef\bbl at ifunset#1{%
+       \ifcsname#1\endcsname
+         \expandafter\ifx\csname#1\endcsname\relax
+           \bbl at afterelse\expandafter\@firstoftwo
+         \else
+           \bbl at afterfi\expandafter\@secondoftwo
+         \fi
+       \else
+         \expandafter\@firstoftwo
+       \fi}}
+\endgroup
+\def\bbl at ifblank#1{%
+  \bbl at ifblank@i#1\@nil\@nil\@secondoftwo\@firstoftwo\@nil}
+\long\def\bbl at ifblank@i#1#2\@nil#3#4#5\@nil{#4}
+\def\bbl at ifset#1#2#3{%
+  \bbl at ifunset{#1}{#3}{\bbl at exp{\\\bbl at ifblank{\@nameuse{#1}}}{#3}{#2}}}
+\def\bbl at forkv#1#2{%
+  \def\bbl at kvcmd##1##2##3{#2}%
+  \bbl at kvnext#1,\@nil,}
+\def\bbl at kvnext#1,{%
+  \ifx\@nil#1\relax\else
+    \bbl at ifblank{#1}{}{\bbl at forkv@eq#1=\@empty=\@nil{#1}}%
+    \expandafter\bbl at kvnext
+  \fi}
+\def\bbl at forkv@eq#1=#2=#3\@nil#4{%
+  \bbl at trim@def\bbl at forkv@a{#1}%
+  \bbl at trim{\expandafter\bbl at kvcmd\expandafter{\bbl at forkv@a}}{#2}{#4}}
+\def\bbl at vforeach#1#2{%
+  \def\bbl at forcmd##1{#2}%
+  \bbl at fornext#1,\@nil,}
+\def\bbl at fornext#1,{%
+  \ifx\@nil#1\relax\else
+    \bbl at ifblank{#1}{}{\bbl at trim\bbl at forcmd{#1}}%
+    \expandafter\bbl at fornext
+  \fi}
+\def\bbl at foreach#1{\expandafter\bbl at vforeach\expandafter{#1}}
+\def\bbl at replace#1#2#3{% in #1 -> repl #2 by #3
+  \toks@{}%
+  \def\bbl at replace@aux##1#2##2#2{%
+    \ifx\bbl at nil##2%
+      \toks@\expandafter{\the\toks@##1}%
+    \else
+      \toks@\expandafter{\the\toks@##1#3}%
+      \bbl at afterfi
+      \bbl at replace@aux##2#2%
+    \fi}%
+  \expandafter\bbl at replace@aux#1#2\bbl at nil#2%
+  \edef#1{\the\toks@}}
+\ifx\detokenize\@undefined\else % Unused macros if old Plain TeX
+  \bbl at exp{\def\\\bbl at parsedef##1\detokenize{macro:}}#2->#3\relax{%
+    \def\bbl at tempa{#1}%
+    \def\bbl at tempb{#2}%
+    \def\bbl at tempe{#3}}
+  \def\bbl at sreplace#1#2#3{%
+    \begingroup
+      \expandafter\bbl at parsedef\meaning#1\relax
+      \def\bbl at tempc{#2}%
+      \edef\bbl at tempc{\expandafter\strip at prefix\meaning\bbl at tempc}%
+      \def\bbl at tempd{#3}%
+      \edef\bbl at tempd{\expandafter\strip at prefix\meaning\bbl at tempd}%
+      \bbl at xin@{\bbl at tempc}{\bbl at tempe}% If not in macro, do nothing
+      \ifin@
+        \bbl at exp{\\\bbl at replace\\\bbl at tempe{\bbl at tempc}{\bbl at tempd}}%
+        \def\bbl at tempc{%     Expanded an executed below as 'uplevel'
+           \\\makeatletter % "internal" macros with @ are assumed
+           \\\scantokens{%
+             \bbl at tempa\\\@namedef{\bbl at stripslash#1}\bbl at tempb{\bbl at tempe}}%
+           \catcode64=\the\catcode64\relax}%  Restore @
+      \else
+        \let\bbl at tempc\@empty  % Not \relax
+      \fi
+      \bbl at exp{%      For the 'uplevel' assignments
+    \endgroup
+      \bbl at tempc}}  % empty or expand to set #1 with changes
+\fi
+\def\bbl at ifsamestring#1#2{%
+  \begingroup
+    \protected at edef\bbl at tempb{#1}%
+    \edef\bbl at tempb{\expandafter\strip at prefix\meaning\bbl at tempb}%
+    \protected at edef\bbl at tempc{#2}%
+    \edef\bbl at tempc{\expandafter\strip at prefix\meaning\bbl at tempc}%
+    \ifx\bbl at tempb\bbl at tempc
+      \aftergroup\@firstoftwo
+    \else
+      \aftergroup\@secondoftwo
+    \fi
+  \endgroup}
+\chardef\bbl at engine=%
+  \ifx\directlua\@undefined
+    \ifx\XeTeXinputencoding\@undefined
+      \z@
+    \else
+      \tw@
+    \fi
+  \else
+    \@ne
+  \fi
+\def\bbl at bsphack{%
+  \ifhmode
+    \hskip\z at skip
+    \def\bbl at esphack{\loop\ifdim\lastskip>\z@\unskip\repeat\unskip}%
+  \else
+    \let\bbl at esphack\@empty
+  \fi}
+\def\bbl at cased{%
+  \ifx\oe\OE
+    \expandafter\in@\expandafter
+      {\expandafter\OE\expandafter}\expandafter{\oe}%
+    \ifin@
+      \bbl at afterelse\expandafter\MakeUppercase
+    \else
+      \bbl at afterfi\expandafter\MakeLowercase
+    \fi
+  \else
+    \expandafter\@firstofone
+  \fi}
+\def\bbl at extras@wrap#1#2#3{% 1:in-test, 2:before, 3:after
+  \toks@\expandafter\expandafter\expandafter{%
+    \csname extras\languagename\endcsname}%
+  \bbl at exp{\\\in@{#1}{\the\toks@}}%
+  \ifin@\else
+    \@temptokena{#2}%
+    \edef\bbl at tempc{\the\@temptokena\the\toks@}%
+    \toks@\expandafter{\bbl at tempc#3}%
+    \expandafter\edef\csname extras\languagename\endcsname{\the\toks@}%
+  \fi}
+\def\bbl at version{3.89}
+\def\bbl at date{2023/05/11}
 \ifx\language\@undefined
   \csname newcount\endcsname\language
 \fi
@@ -487,38 +676,6 @@
     \fi
   \fi\fi}
 \let\bbl at initoload\relax
-\def\bbl at provide@locale{%
-  \ifx\babelprovide\@undefined
-    \bbl at 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
-  \let\bbl at auxname\languagename % Still necessary. TODO
-  \bbl at ifunset{bbl at bcp@map@\languagename}{}% Move uplevel??
-    {\edef\languagename{\@nameuse{bbl at bcp@map@\languagename}}}%
-  \ifbbl at bcpallowed
-    \expandafter\ifx\csname date\languagename\endcsname\relax
-      \expandafter
-      \bbl at bcplookup\languagename-\@empty-\@empty-\@empty\@@
-      \ifx\bbl at bcp\relax\else  % Returned by \bbl at bcplookup
-        \edef\languagename{\bbl at bcp@prefix\bbl at bcp}%
-        \edef\localename{\bbl at bcp@prefix\bbl at bcp}%
-        \expandafter\ifx\csname date\languagename\endcsname\relax
-          \let\bbl at initoload\bbl at bcp
-          \bbl at exp{\\\babelprovide[\bbl at autoload@bcpoptions]{\languagename}}%
-          \let\bbl at initoload\relax
-        \fi
-        \bbl at csarg\xdef{bcp at map@\bbl at bcp}{\localename}%
-      \fi
-    \fi
-  \fi
-  \expandafter\ifx\csname date\languagename\endcsname\relax
-    \IfFileExists{babel-\languagename.tex}%
-      {\bbl at exp{\\\babelprovide[\bbl at autoload@options]{\languagename}}}%
-      {}%
-  \fi}
 \def\iflanguage#1{%
   \bbl at iflanguage{#1}{%
     \ifnum\csname l@#1\endcsname=\language
@@ -655,8 +812,6 @@
   % set the locale id
   \bbl at id@assign
   % switch captions, date
-  % No text is supposed to be added here, so we remove any
-  % spurious spaces.
   \bbl at bsphack
     \ifcase\bbl at select@type
       \csname captions#1\endcsname\relax
@@ -727,6 +882,7 @@
     \expandafter\expandafter\expandafter\set at hyphenmins
       \csname #1hyphenmins\endcsname\relax
   \fi
+  % reset selector name
   \let\bbl at selectorname\@empty}
 \long\def\otherlanguage#1{%
   \def\bbl at selectorname{other}%
@@ -911,193 +1067,6 @@
     \input luababel.def
   \fi
 \fi
-\bbl at trace{Basic macros}
-\def\bbl at stripslash{\expandafter\@gobble\string}
-\def\bbl at add#1#2{%
-  \bbl at ifunset{\bbl at stripslash#1}%
-    {\def#1{#2}}%
-    {\expandafter\def\expandafter#1\expandafter{#1#2}}}
-\def\bbl at xin@{\@expandtwoargs\in@}
-\def\bbl at carg#1#2{\expandafter#1\csname#2\endcsname}%
-\def\bbl at ncarg#1#2#3{\expandafter#1\expandafter#2\csname#3\endcsname}%
-\def\bbl at ccarg#1#2#3{%
-  \expandafter#1\csname#2\expandafter\endcsname\csname#3\endcsname}%
-\def\bbl at csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}%
-\def\bbl at cs#1{\csname bbl@#1\endcsname}
-\def\bbl at cl#1{\csname bbl@#1@\languagename\endcsname}
-\def\bbl at loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,}
-\def\bbl at loopx#1#2{\expandafter\bbl at loop\expandafter#1\expandafter{#2}}
-\def\bbl@@loop#1#2#3,{%
-  \ifx\@nnil#3\relax\else
-    \def#1{#3}#2\bbl at afterfi\bbl@@loop#1{#2}%
-  \fi}
-\def\bbl at for#1#2#3{\bbl at loopx#1{#2}{\ifx#1\@empty\else#3\fi}}
-\def\bbl at add@list#1#2{%
-  \edef#1{%
-    \bbl at ifunset{\bbl at stripslash#1}%
-      {}%
-      {\ifx#1\@empty\else#1,\fi}%
-    #2}}
-\long\def\bbl at afterelse#1\else#2\fi{\fi#1}
-\long\def\bbl at afterfi#1\fi{\fi#1}
-\def\bbl at exp#1{%
-  \begingroup
-    \let\\\noexpand
-    \let\<\bbl at exp@en
-    \let\[\bbl at exp@ue
-    \edef\bbl at exp@aux{\endgroup#1}%
-  \bbl at exp@aux}
-\def\bbl at exp@en#1>{\expandafter\noexpand\csname#1\endcsname}%
-\def\bbl at exp@ue#1]{%
-  \unexpanded\expandafter\expandafter\expandafter{\csname#1\endcsname}}%
-\def\bbl at tempa#1{%
-  \long\def\bbl at trim##1##2{%
-    \futurelet\bbl at trim@a\bbl at trim@c##2\@nil\@nil#1\@nil\relax{##1}}%
-  \def\bbl at trim@c{%
-    \ifx\bbl at trim@a\@sptoken
-      \expandafter\bbl at trim@b
-    \else
-      \expandafter\bbl at trim@b\expandafter#1%
-    \fi}%
-  \long\def\bbl at trim@b#1##1 \@nil{\bbl at trim@i##1}}
-\bbl at tempa{ }
-\long\def\bbl at trim@i#1\@nil#2\relax#3{#3{#1}}
-\long\def\bbl at trim@def#1{\bbl at trim{\def#1}}
-\begingroup
-  \gdef\bbl at ifunset#1{%
-    \expandafter\ifx\csname#1\endcsname\relax
-      \expandafter\@firstoftwo
-    \else
-      \expandafter\@secondoftwo
-    \fi}
-  \bbl at ifunset{ifcsname}%
-    {}%
-    {\gdef\bbl at ifunset#1{%
-       \ifcsname#1\endcsname
-         \expandafter\ifx\csname#1\endcsname\relax
-           \bbl at afterelse\expandafter\@firstoftwo
-         \else
-           \bbl at afterfi\expandafter\@secondoftwo
-         \fi
-       \else
-         \expandafter\@firstoftwo
-       \fi}}
-\endgroup
-\def\bbl at ifblank#1{%
-  \bbl at ifblank@i#1\@nil\@nil\@secondoftwo\@firstoftwo\@nil}
-\long\def\bbl at ifblank@i#1#2\@nil#3#4#5\@nil{#4}
-\def\bbl at ifset#1#2#3{%
-  \bbl at ifunset{#1}{#3}{\bbl at exp{\\\bbl at ifblank{\@nameuse{#1}}}{#3}{#2}}}
-\def\bbl at forkv#1#2{%
-  \def\bbl at kvcmd##1##2##3{#2}%
-  \bbl at kvnext#1,\@nil,}
-\def\bbl at kvnext#1,{%
-  \ifx\@nil#1\relax\else
-    \bbl at ifblank{#1}{}{\bbl at forkv@eq#1=\@empty=\@nil{#1}}%
-    \expandafter\bbl at kvnext
-  \fi}
-\def\bbl at forkv@eq#1=#2=#3\@nil#4{%
-  \bbl at trim@def\bbl at forkv@a{#1}%
-  \bbl at trim{\expandafter\bbl at kvcmd\expandafter{\bbl at forkv@a}}{#2}{#4}}
-\def\bbl at vforeach#1#2{%
-  \def\bbl at forcmd##1{#2}%
-  \bbl at fornext#1,\@nil,}
-\def\bbl at fornext#1,{%
-  \ifx\@nil#1\relax\else
-    \bbl at ifblank{#1}{}{\bbl at trim\bbl at forcmd{#1}}%
-    \expandafter\bbl at fornext
-  \fi}
-\def\bbl at foreach#1{\expandafter\bbl at vforeach\expandafter{#1}}
-\def\bbl at replace#1#2#3{% in #1 -> repl #2 by #3
-  \toks@{}%
-  \def\bbl at replace@aux##1#2##2#2{%
-    \ifx\bbl at nil##2%
-      \toks@\expandafter{\the\toks@##1}%
-    \else
-      \toks@\expandafter{\the\toks@##1#3}%
-      \bbl at afterfi
-      \bbl at replace@aux##2#2%
-    \fi}%
-  \expandafter\bbl at replace@aux#1#2\bbl at nil#2%
-  \edef#1{\the\toks@}}
-\ifx\detokenize\@undefined\else % Unused macros if old Plain TeX
-  \bbl at exp{\def\\\bbl at parsedef##1\detokenize{macro:}}#2->#3\relax{%
-    \def\bbl at tempa{#1}%
-    \def\bbl at tempb{#2}%
-    \def\bbl at tempe{#3}}
-  \def\bbl at sreplace#1#2#3{%
-    \begingroup
-      \expandafter\bbl at parsedef\meaning#1\relax
-      \def\bbl at tempc{#2}%
-      \edef\bbl at tempc{\expandafter\strip at prefix\meaning\bbl at tempc}%
-      \def\bbl at tempd{#3}%
-      \edef\bbl at tempd{\expandafter\strip at prefix\meaning\bbl at tempd}%
-      \bbl at xin@{\bbl at tempc}{\bbl at tempe}% If not in macro, do nothing
-      \ifin@
-        \bbl at exp{\\\bbl at replace\\\bbl at tempe{\bbl at tempc}{\bbl at tempd}}%
-        \def\bbl at tempc{%     Expanded an executed below as 'uplevel'
-           \\\makeatletter % "internal" macros with @ are assumed
-           \\\scantokens{%
-             \bbl at tempa\\\@namedef{\bbl at stripslash#1}\bbl at tempb{\bbl at tempe}}%
-           \catcode64=\the\catcode64\relax}%  Restore @
-      \else
-        \let\bbl at tempc\@empty  % Not \relax
-      \fi
-      \bbl at exp{%      For the 'uplevel' assignments
-    \endgroup
-      \bbl at tempc}}  % empty or expand to set #1 with changes
-\fi
-\def\bbl at ifsamestring#1#2{%
-  \begingroup
-    \protected at edef\bbl at tempb{#1}%
-    \edef\bbl at tempb{\expandafter\strip at prefix\meaning\bbl at tempb}%
-    \protected at edef\bbl at tempc{#2}%
-    \edef\bbl at tempc{\expandafter\strip at prefix\meaning\bbl at tempc}%
-    \ifx\bbl at tempb\bbl at tempc
-      \aftergroup\@firstoftwo
-    \else
-      \aftergroup\@secondoftwo
-    \fi
-  \endgroup}
-\chardef\bbl at engine=%
-  \ifx\directlua\@undefined
-    \ifx\XeTeXinputencoding\@undefined
-      \z@
-    \else
-      \tw@
-    \fi
-  \else
-    \@ne
-  \fi
-\def\bbl at bsphack{%
-  \ifhmode
-    \hskip\z at skip
-    \def\bbl at esphack{\loop\ifdim\lastskip>\z@\unskip\repeat\unskip}%
-  \else
-    \let\bbl at esphack\@empty
-  \fi}
-\def\bbl at cased{%
-  \ifx\oe\OE
-    \expandafter\in@\expandafter
-      {\expandafter\OE\expandafter}\expandafter{\oe}%
-    \ifin@
-      \bbl at afterelse\expandafter\MakeUppercase
-    \else
-      \bbl at afterfi\expandafter\MakeLowercase
-    \fi
-  \else
-    \expandafter\@firstofone
-  \fi}
-\def\bbl at extras@wrap#1#2#3{% 1:in-test, 2:before, 3:after
-  \toks@\expandafter\expandafter\expandafter{%
-    \csname extras\languagename\endcsname}%
-  \bbl at exp{\\\in@{#1}{\the\toks@}}%
-  \ifin@\else
-    \@temptokena{#2}%
-    \edef\bbl at tempc{\the\@temptokena\the\toks@}%
-    \toks@\expandafter{\bbl at tempc#3}%
-    \expandafter\edef\csname extras\languagename\endcsname{\the\toks@}%
-  \fi}
 \bbl at trace{Compatibility with language.def}
 \ifx\bbl at languages\@undefined
   \ifx\directlua\@undefined
@@ -1165,7 +1134,7 @@
 \newcommand\EnableBabelHook[1]{\bbl at csarg\let{hk@#1}\@firstofone}
 \newcommand\DisableBabelHook[1]{\bbl at csarg\let{hk@#1}\@gobble}
 \def\bbl at usehooks{\bbl at usehooks@lang\languagename}
-\def\bbl at usehooks@lang#1#2#3{%
+\def\bbl at usehooks@lang#1#2#3{% Test for Plain
   \ifx\UseHook\@undefined\else\UseHook{babel/*/#2}\fi
   \def\bbl at elth##1{%
     \bbl at cs{hk@##1}{\bbl at cs{ev@##1@#2@}#3}}%
@@ -1182,7 +1151,7 @@
   beforeextras=0,afterextras=0,stopcommands=0,stringprocess=0,%
   hyphenation=2,initiateactive=3,afterreset=0,foreign=0,foreign*=0,%
   beforestart=0,languagename=2,begindocument=1}
-\ifx\NewHook\@undefined\else
+\ifx\NewHook\@undefined\else % Test for Plain (?)
   \def\bbl at tempa#1=#2\@@{\NewHook{babel/#1}}
   \bbl at foreach\bbl at evargs{\bbl at tempa#1\@@}
 \fi
@@ -1891,7 +1860,7 @@
 \def\bbl at toglobal#1{\global\let#1#1}
 \@ifpackagewith{babel}{nocase}%
   {\let\bbl at patchuclc\relax}%
-  {\def\bbl at patchuclc{%
+  {\def\bbl at patchuclc{% TODO. Delete. Doesn’t work any more.
     \global\let\bbl at patchuclc\relax
     \g at addto@macro\@uclclist{\reserved at b{\reserved at b\bbl at uclc}}%
     \gdef\bbl at uclc##1{%
@@ -2341,39 +2310,6 @@
 \fi
 \bbl at trace{Bidi layout}
 \providecommand\IfBabelLayout[3]{#3}%
-\newcommand\BabelPatchSection[1]{%
-  \@ifundefined{#1}{}{%
-    \bbl at exp{\let\<bbl at ss@#1>\<#1>}%
-    \@namedef{#1}{%
-      \@ifstar{\bbl at presec@s{#1}}%
-              {\@dblarg{\bbl at presec@x{#1}}}}}}
-\def\bbl at presec@x#1[#2]#3{%
-  \bbl at exp{%
-    \\\select at language@x{\bbl at main@language}%
-    \\\bbl at cs{sspre@#1}%
-    \\\bbl at cs{ss@#1}%
-      [\\\foreignlanguage{\languagename}{\unexpanded{#2}}]%
-      {\\\foreignlanguage{\languagename}{\unexpanded{#3}}}%
-    \\\select at language@x{\languagename}}}
-\def\bbl at presec@s#1#2{%
-  \bbl at exp{%
-    \\\select at language@x{\bbl at main@language}%
-    \\\bbl at cs{sspre@#1}%
-    \\\bbl at cs{ss@#1}*%
-      {\\\foreignlanguage{\languagename}{\unexpanded{#2}}}%
-    \\\select at language@x{\languagename}}}
-\IfBabelLayout{sectioning}%
-  {\BabelPatchSection{part}%
-   \BabelPatchSection{chapter}%
-   \BabelPatchSection{section}%
-   \BabelPatchSection{subsection}%
-   \BabelPatchSection{subsubsection}%
-   \BabelPatchSection{paragraph}%
-   \BabelPatchSection{subparagraph}%
-   \def\babel at toc#1{%
-     \select at language@x{\bbl at main@language}}}{}
-\IfBabelLayout{captions}%
-  {\BabelPatchSection{caption}}{}
 \bbl at trace{Input engine specific macros}
 \ifcase\bbl at engine
   \input txtbabel.def
@@ -2395,1396 +2331,6 @@
   \let\babelpatterns\babelprehyphenation
   \let\babelcharproperty\babelprehyphenation
 \fi
-\bbl at trace{Creating languages and reading ini files}
-\let\bbl at extend@ini\@gobble
-\newcommand\babelprovide[2][]{%
-  \let\bbl at savelangname\languagename
-  \edef\bbl at savelocaleid{\the\localeid}%
-  % Set name and locale id
-  \edef\languagename{#2}%
-  \bbl at id@assign
-  % Initialize keys
-  \bbl at vforeach{captions,date,import,main,script,language,%
-      hyphenrules,linebreaking,justification,mapfont,maparabic,%
-      mapdigits,intraspace,intrapenalty,onchar,transforms,alph,%
-      Alph,labels,labels*,calendar,date,casing}%
-    {\bbl at csarg\let{KVP@##1}\@nnil}%
-  \global\let\bbl at release@transforms\@empty
-  \let\bbl at calendars\@empty
-  \global\let\bbl at inidata\@empty
-  \global\let\bbl at extend@ini\@gobble
-  \gdef\bbl at key@list{;}%
-  \bbl at forkv{#1}{%
-    \in@{/}{##1}% With /, (re)sets a value in the ini
-    \ifin@
-      \global\let\bbl at extend@ini\bbl at extend@ini at aux
-      \bbl at renewinikey##1\@@{##2}%
-    \else
-      \bbl at csarg\ifx{KVP@##1}\@nnil\else
-        \bbl at error
-          {Unknown key '##1' in \string\babelprovide}%
-          {See the manual for valid keys}%
-      \fi
-      \bbl at csarg\def{KVP@##1}{##2}%
-    \fi}%
-  \chardef\bbl at howloaded=% 0:none; 1:ldf without ini; 2:ini
-    \bbl at ifunset{date#2}\z@{\bbl at ifunset{bbl at llevel@#2}\@ne\tw@}%
-  % == init ==
-  \ifx\bbl at screset\@undefined
-    \bbl at ldfinit
-  \fi
-  % == date (as option) ==
-  % \ifx\bbl at KVP@date\@nnil\else
-  % \fi
-  % ==
-  \let\bbl at lbkflag\relax % \@empty = do setup linebreak, only in 3 cases:
-  \ifcase\bbl at howloaded
-    \let\bbl at lbkflag\@empty % new
-  \else
-    \ifx\bbl at KVP@hyphenrules\@nnil\else
-       \let\bbl at lbkflag\@empty
-    \fi
-    \ifx\bbl at KVP@import\@nnil\else
-      \let\bbl at lbkflag\@empty
-    \fi
-  \fi
-  % == import, captions ==
-  \ifx\bbl at KVP@import\@nnil\else
-    \bbl at exp{\\\bbl at ifblank{\bbl at KVP@import}}%
-      {\ifx\bbl at initoload\relax
-         \begingroup
-           \def\BabelBeforeIni##1##2{\gdef\bbl at KVP@import{##1}\endinput}%
-           \bbl at input@texini{#2}%
-         \endgroup
-       \else
-         \xdef\bbl at KVP@import{\bbl at initoload}%
-       \fi}%
-      {}%
-    \let\bbl at KVP@date\@empty
-  \fi
-  \let\bbl at KVP@captions@@\bbl at KVP@captions % TODO. A dirty hack
-  \ifx\bbl at KVP@captions\@nnil
-    \let\bbl at KVP@captions\bbl at KVP@import
-  \fi
-  % ==
-  \ifx\bbl at KVP@transforms\@nnil\else
-    \bbl at replace\bbl at KVP@transforms{ }{,}%
-  \fi
-  % == Load ini ==
-  \ifcase\bbl at howloaded
-    \bbl at provide@new{#2}%
-  \else
-    \bbl at ifblank{#1}%
-      {}%  With \bbl at load@basic below
-      {\bbl at provide@renew{#2}}%
-  \fi
-  % Post tasks
-  % ----------
-  % == subsequent calls after the first provide for a locale ==
-  \ifx\bbl at inidata\@empty\else
-    \bbl at extend@ini{#2}%
-  \fi
-  % == ensure captions ==
-  \ifx\bbl at KVP@captions\@nnil\else
-    \bbl at ifunset{bbl at extracaps@#2}%
-      {\bbl at exp{\\\babelensure[exclude=\\\today]{#2}}}%
-      {\bbl at exp{\\\babelensure[exclude=\\\today,
-                include=\[bbl at extracaps@#2]}]{#2}}%
-    \bbl at ifunset{bbl at ensure@\languagename}%
-      {\bbl at exp{%
-        \\\DeclareRobustCommand\<bbl at ensure@\languagename>[1]{%
-          \\\foreignlanguage{\languagename}%
-          {####1}}}}%
-      {}%
-    \bbl at exp{%
-       \\\bbl at toglobal\<bbl at ensure@\languagename>%
-       \\\bbl at toglobal\<bbl at ensure@\languagename\space>}%
-  \fi
-  % ==
-  % 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 set the basic parameters, but still loading the
-  % whole ini file.
-  \bbl at load@basic{#2}%
-  % == script, language ==
-  % Override the values from ini or defines them
-  \ifx\bbl at KVP@script\@nnil\else
-    \bbl at csarg\edef{sname@#2}{\bbl at KVP@script}%
-  \fi
-  \ifx\bbl at KVP@language\@nnil\else
-    \bbl at csarg\edef{lname@#2}{\bbl at KVP@language}%
-  \fi
-  \ifcase\bbl at engine\or
-    \bbl at ifunset{bbl at chrng@\languagename}{}%
-      {\directlua{
-         Babel.set_chranges_b('\bbl at cl{sbcp}', '\bbl at cl{chrng}') }}%
-  \fi
-   % == onchar ==
-  \ifx\bbl at KVP@onchar\@nnil\else
-    \bbl at luahyphenate
-    \bbl at exp{%
-      \\\AddToHook{env/document/before}{{\\\select at language{#2}{}}}}%
-    \directlua{
-      if Babel.locale_mapped == nil then
-        Babel.locale_mapped = true
-        Babel.linebreaking.add_before(Babel.locale_map, 1)
-        Babel.loc_to_scr = {}
-        Babel.chr_to_loc = Babel.chr_to_loc or {}
-      end
-      Babel.locale_props[\the\localeid].letters = false
-    }%
-    \bbl at xin@{ letters }{ \bbl at KVP@onchar\space}%
-    \ifin@
-      \directlua{
-        Babel.locale_props[\the\localeid].letters = true
-      }%
-    \fi
-    \bbl at xin@{ ids }{ \bbl at KVP@onchar\space}%
-    \ifin@
-      \ifx\bbl at starthyphens\@undefined % Needed if no explicit selection
-        \AddBabelHook{babel-onchar}{beforestart}{{\bbl at starthyphens}}%
-      \fi
-      \bbl at exp{\\\bbl at add\\\bbl at starthyphens
-        {\\\bbl at patterns@lua{\languagename}}}%
-      % TODO - error/warning if no script
-      \directlua{
-        if Babel.script_blocks['\bbl at cl{sbcp}'] then
-          Babel.loc_to_scr[\the\localeid] =
-            Babel.script_blocks['\bbl at cl{sbcp}']
-          Babel.locale_props[\the\localeid].lc = \the\localeid\space
-          Babel.locale_props[\the\localeid].lg = \the\@nameuse{l@\languagename}\space
-        end
-      }%
-    \fi
-    \bbl at xin@{ fonts }{ \bbl at KVP@onchar\space}%
-    \ifin@
-      \bbl at ifunset{bbl at lsys@\languagename}{\bbl at provide@lsys{\languagename}}{}%
-      \bbl at ifunset{bbl at wdir@\languagename}{\bbl at provide@dirs{\languagename}}{}%
-      \directlua{
-        if Babel.script_blocks['\bbl at cl{sbcp}'] then
-          Babel.loc_to_scr[\the\localeid] =
-            Babel.script_blocks['\bbl at cl{sbcp}']
-        end}%
-      \ifx\bbl at mapselect\@undefined  % TODO. almost the same as mapfont
-        \AtBeginDocument{%
-          \bbl at patchfont{{\bbl at mapselect}}%
-          {\selectfont}}%
-        \def\bbl at mapselect{%
-          \let\bbl at mapselect\relax
-          \edef\bbl at prefontid{\fontid\font}}%
-        \def\bbl at mapdir##1{%
-          {\def\languagename{##1}%
-           \let\bbl at ifrestoring\@firstoftwo % To avoid font warning
-           \bbl at switchfont
-           \ifnum\fontid\font>\z@ % A hack, for the pgf nullfont hack
-             \directlua{
-               Babel.locale_props[\the\csname bbl at id@@##1\endcsname]%
-                       ['/\bbl at prefontid'] = \fontid\font\space}%
-           \fi}}%
-      \fi
-      \bbl at exp{\\\bbl at add\\\bbl at mapselect{\\\bbl at mapdir{\languagename}}}%
-    \fi
-    % TODO - catch non-valid values
-  \fi
-  % == mapfont ==
-  % For bidi texts, to switch the font based on direction
-  \ifx\bbl at KVP@mapfont\@nnil\else
-    \bbl at ifsamestring{\bbl at KVP@mapfont}{direction}{}%
-      {\bbl at error{Option '\bbl at KVP@mapfont' unknown for\\%
-                  mapfont. Use 'direction'.%
-                 {See the manual for details.}}}%
-    \bbl at ifunset{bbl at lsys@\languagename}{\bbl at provide@lsys{\languagename}}{}%
-    \bbl at ifunset{bbl at wdir@\languagename}{\bbl at provide@dirs{\languagename}}{}%
-    \ifx\bbl at mapselect\@undefined % TODO. See onchar.
-      \AtBeginDocument{%
-        \bbl at patchfont{{\bbl at mapselect}}%
-        {\selectfont}}%
-      \def\bbl at mapselect{%
-        \let\bbl at mapselect\relax
-        \edef\bbl at prefontid{\fontid\font}}%
-      \def\bbl at mapdir##1{%
-        {\def\languagename{##1}%
-         \let\bbl at ifrestoring\@firstoftwo % avoid font warning
-         \bbl at switchfont
-         \directlua{Babel.fontmap
-           [\the\csname bbl at wdir@##1\endcsname]%
-           [\bbl at prefontid]=\fontid\font}}}%
-    \fi
-    \bbl at exp{\\\bbl at add\\\bbl at mapselect{\\\bbl at mapdir{\languagename}}}%
-  \fi
-  % == Line breaking: intraspace, intrapenalty ==
-  % For CJK, East Asian, Southeast Asian, if interspace in ini
-  \ifx\bbl at KVP@intraspace\@nnil\else % We can override the ini or set
-    \bbl at csarg\edef{intsp@#2}{\bbl at KVP@intraspace}%
-  \fi
-  \bbl at provide@intraspace
-  % == Line breaking: CJK quotes == TODO -> @extras
-  \ifcase\bbl at engine\or
-    \bbl at xin@{/c}{/\bbl at cl{lnbrk}}%
-    \ifin@
-      \bbl at ifunset{bbl at quote@\languagename}{}%
-        {\directlua{
-           Babel.locale_props[\the\localeid].cjk_quotes = {}
-           local cs = 'op'
-           for c in string.utfvalues(%
-               [[\csname bbl at quote@\languagename\endcsname]]) do
-             if Babel.cjk_characters[c].c == 'qu' then
-               Babel.locale_props[\the\localeid].cjk_quotes[c] = cs
-             end
-             cs = ( cs == 'op') and 'cl' or 'op'
-           end
-        }}%
-    \fi
-  \fi
-  % == Line breaking: justification ==
-  \ifx\bbl at KVP@justification\@nnil\else
-     \let\bbl at KVP@linebreaking\bbl at KVP@justification
-  \fi
-  \ifx\bbl at KVP@linebreaking\@nnil\else
-    \bbl at xin@{,\bbl at KVP@linebreaking,}%
-      {,elongated,kashida,cjk,padding,unhyphenated,}%
-    \ifin@
-      \bbl at csarg\xdef
-        {lnbrk@\languagename}{\expandafter\@car\bbl at KVP@linebreaking\@nil}%
-    \fi
-  \fi
-  \bbl at xin@{/e}{/\bbl at cl{lnbrk}}%
-  \ifin@\else\bbl at xin@{/k}{/\bbl at cl{lnbrk}}\fi
-  \ifin@\bbl at arabicjust\fi
-  \bbl at xin@{/p}{/\bbl at cl{lnbrk}}%
-  \ifin@\AtBeginDocument{\@nameuse{bbl at tibetanjust}}\fi
-  % == Line breaking: hyphenate.other.(locale|script) ==
-  \ifx\bbl at lbkflag\@empty
-    \bbl at ifunset{bbl at hyotl@\languagename}{}%
-      {\bbl at csarg\bbl at replace{hyotl@\languagename}{ }{,}%
-       \bbl at startcommands*{\languagename}{}%
-         \bbl at csarg\bbl at foreach{hyotl@\languagename}{%
-           \ifcase\bbl at engine
-             \ifnum##1<257
-               \SetHyphenMap{\BabelLower{##1}{##1}}%
-             \fi
-           \else
-             \SetHyphenMap{\BabelLower{##1}{##1}}%
-           \fi}%
-       \bbl at endcommands}%
-    \bbl at ifunset{bbl at hyots@\languagename}{}%
-      {\bbl at csarg\bbl at replace{hyots@\languagename}{ }{,}%
-       \bbl at csarg\bbl at foreach{hyots@\languagename}{%
-         \ifcase\bbl at engine
-           \ifnum##1<257
-             \global\lccode##1=##1\relax
-           \fi
-         \else
-           \global\lccode##1=##1\relax
-         \fi}}%
-  \fi
-  % == Counters: maparabic ==
-  % Native digits, if provided in ini (TeX level, xe and lua)
-  \ifcase\bbl at engine\else
-    \bbl at ifunset{bbl at dgnat@\languagename}{}%
-      {\expandafter\ifx\csname bbl at dgnat@\languagename\endcsname\@empty\else
-        \expandafter\expandafter\expandafter
-        \bbl at setdigits\csname bbl at dgnat@\languagename\endcsname
-        \ifx\bbl at KVP@maparabic\@nnil\else
-          \ifx\bbl at latinarabic\@undefined
-            \expandafter\let\expandafter\@arabic
-              \csname bbl at counter@\languagename\endcsname
-          \else    % ie, if layout=counters, which redefines \@arabic
-            \expandafter\let\expandafter\bbl at latinarabic
-              \csname bbl at counter@\languagename\endcsname
-          \fi
-        \fi
-      \fi}%
-  \fi
-  % == Counters: mapdigits ==
-  % > luababel.def
-  % == Counters: alph, Alph ==
-  \ifx\bbl at KVP@alph\@nnil\else
-    \bbl at exp{%
-      \\\bbl at add\<bbl at preextras@\languagename>{%
-        \\\babel at save\\\@alph
-        \let\\\@alph\<bbl at cntr@\bbl at KVP@alph @\languagename>}}%
-  \fi
-  \ifx\bbl at KVP@Alph\@nnil\else
-    \bbl at exp{%
-      \\\bbl at add\<bbl at preextras@\languagename>{%
-        \\\babel at save\\\@Alph
-        \let\\\@Alph\<bbl at cntr@\bbl at KVP@Alph @\languagename>}}%
-  \fi
-  % == Casing ==
-  \bbl at exp{\def\<bbl at casing@\languagename>%
-    {\<bbl at lbcp@\languagename>%
-     \ifx\bbl at KVP@casing\@nnil\else-x-\bbl at KVP@casing\fi}}%
-  % == Calendars ==
-  \ifx\bbl at KVP@calendar\@nnil
-    \edef\bbl at KVP@calendar{\bbl at cl{calpr}}%
-  \fi
-  \def\bbl at tempe##1 ##2\@@{% Get first calendar
-    \def\bbl at tempa{##1}}%
-    \bbl at exp{\\\bbl at tempe\bbl at KVP@calendar\space\\\@@}%
-  \def\bbl at tempe##1.##2.##3\@@{%
-    \def\bbl at tempc{##1}%
-    \def\bbl at tempb{##2}}%
-  \expandafter\bbl at tempe\bbl at tempa..\@@
-  \bbl at csarg\edef{calpr@\languagename}{%
-    \ifx\bbl at tempc\@empty\else
-      calendar=\bbl at tempc
-    \fi
-    \ifx\bbl at tempb\@empty\else
-      ,variant=\bbl at tempb
-    \fi}%
-  % == engine specific extensions ==
-  % Defined in XXXbabel.def
-  \bbl at provide@extra{#2}%
-  % == require.babel in ini ==
-  % To load or reaload the babel-*.tex, if require.babel in ini
-  \ifx\bbl at beforestart\relax\else  % But not in doc aux or body
-    \bbl at ifunset{bbl at rqtex@\languagename}{}%
-      {\expandafter\ifx\csname bbl at rqtex@\languagename\endcsname\@empty\else
-         \let\BabelBeforeIni\@gobbletwo
-         \chardef\atcatcode=\catcode`\@
-         \catcode`\@=11\relax
-         \bbl at input@texini{\bbl at cs{rqtex@\languagename}}%
-         \catcode`\@=\atcatcode
-         \let\atcatcode\relax
-         \global\bbl at csarg\let{rqtex@\languagename}\relax
-       \fi}%
-    \bbl at foreach\bbl at calendars{%
-      \bbl at ifunset{bbl at ca@##1}{%
-        \chardef\atcatcode=\catcode`\@
-        \catcode`\@=11\relax
-        \InputIfFileExists{babel-ca-##1.tex}{}{}%
-        \catcode`\@=\atcatcode
-        \let\atcatcode\relax}%
-      {}}%
-  \fi
-  % == frenchspacing ==
-  \ifcase\bbl at howloaded\in at true\else\in at false\fi
-  \ifin@\else\bbl at xin@{typography/frenchspacing}{\bbl at key@list}\fi
-  \ifin@
-    \bbl at extras@wrap{\\\bbl at pre@fs}%
-      {\bbl at pre@fs}%
-      {\bbl at post@fs}%
-  \fi
-  % == transforms ==
-  % > luababel.def
-  % == main ==
-  \ifx\bbl at KVP@main\@nnil  % Restore only if not 'main'
-    \let\languagename\bbl at savelangname
-    \chardef\localeid\bbl at savelocaleid\relax
-  \fi
-  % == hyphenrules (apply if current) ==
-  \ifx\bbl at KVP@hyphenrules\@nnil\else
-    \ifnum\bbl at savelocaleid=\localeid
-      \language\@nameuse{l@\languagename}%
-    \fi
-  \fi}
-\def\bbl at provide@new#1{%
-  \@namedef{date#1}{}% marks lang exists - required by \StartBabelCommands
-  \@namedef{extras#1}{}%
-  \@namedef{noextras#1}{}%
-  \bbl at startcommands*{#1}{captions}%
-    \ifx\bbl at KVP@captions\@nnil %      and also if import, implicit
-      \def\bbl at tempb##1{%             elt for \bbl at captionslist
-        \ifx##1\@empty\else
-          \bbl at exp{%
-            \\\SetString\\##1{%
-              \\\bbl at nocaption{\bbl at stripslash##1}{#1\bbl at stripslash##1}}}%
-          \expandafter\bbl at tempb
-        \fi}%
-      \expandafter\bbl at tempb\bbl at captionslist\@empty
-    \else
-      \ifx\bbl at initoload\relax
-        \bbl at read@ini{\bbl at KVP@captions}2%  % Here letters cat = 11
-      \else
-        \bbl at read@ini{\bbl at initoload}2%     % Same
-      \fi
-    \fi
-  \StartBabelCommands*{#1}{date}%
-    \ifx\bbl at KVP@date\@nnil
-      \bbl at exp{%
-        \\\SetString\\\today{\\\bbl at nocaption{today}{#1today}}}%
-    \else
-      \bbl at savetoday
-      \bbl at savedate
-    \fi
-  \bbl at endcommands
-  \bbl at load@basic{#1}%
-  % == hyphenmins == (only if new)
-  \bbl at exp{%
-    \gdef\<#1hyphenmins>{%
-      {\bbl at ifunset{bbl at lfthm@#1}{2}{\bbl at cs{lfthm@#1}}}%
-      {\bbl at ifunset{bbl at rgthm@#1}{3}{\bbl at cs{rgthm@#1}}}}}%
-  % == hyphenrules (also in renew) ==
-  \bbl at provide@hyphens{#1}%
-  \ifx\bbl at KVP@main\@nnil\else
-     \expandafter\main at language\expandafter{#1}%
-  \fi}
-\def\bbl at provide@renew#1{%
-  \ifx\bbl at KVP@captions\@nnil\else
-    \StartBabelCommands*{#1}{captions}%
-      \bbl at read@ini{\bbl at KVP@captions}2%   % Here all letters cat = 11
-    \EndBabelCommands
-  \fi
-  \ifx\bbl at KVP@date\@nnil\else
-    \StartBabelCommands*{#1}{date}%
-      \bbl at savetoday
-      \bbl at savedate
-    \EndBabelCommands
-  \fi
-  % == hyphenrules (also in new) ==
-  \ifx\bbl at lbkflag\@empty
-    \bbl at provide@hyphens{#1}%
-  \fi}
-\def\bbl at load@basic#1{%
-  \ifcase\bbl at howloaded\or\or
-    \ifcase\csname bbl at llevel@\languagename\endcsname
-      \bbl at csarg\let{lname@\languagename}\relax
-    \fi
-  \fi
-  \bbl at ifunset{bbl at lname@#1}%
-    {\def\BabelBeforeIni##1##2{%
-       \begingroup
-         \let\bbl at ini@captions at aux\@gobbletwo
-         \def\bbl at inidate ####1.####2.####3.####4\relax ####5####6{}%
-         \bbl at read@ini{##1}1%
-         \ifx\bbl at initoload\relax\endinput\fi
-       \endgroup}%
-     \begingroup       % boxed, to avoid extra spaces:
-       \ifx\bbl at initoload\relax
-         \bbl at input@texini{#1}%
-       \else
-         \setbox\z@\hbox{\BabelBeforeIni{\bbl at initoload}{}}%
-       \fi
-     \endgroup}%
-    {}}
-\def\bbl at provide@hyphens#1{%
-  \@tempcnta\m at ne  % a flag
-  \ifx\bbl at KVP@hyphenrules\@nnil\else
-    \bbl at replace\bbl at KVP@hyphenrules{ }{,}%
-    \bbl at foreach\bbl at KVP@hyphenrules{%
-      \ifnum\@tempcnta=\m at ne   % if not yet found
-        \bbl at ifsamestring{##1}{+}%
-          {\bbl at carg\addlanguage{l@##1}}%
-          {}%
-        \bbl at ifunset{l@##1}% After a possible +
-          {}%
-          {\@tempcnta\@nameuse{l@##1}}%
-      \fi}%
-    \ifnum\@tempcnta=\m at ne
-      \bbl at warning{%
-        Requested 'hyphenrules' for '\languagename' not found:\\%
-        \bbl at KVP@hyphenrules.\\%
-        Using the default value. Reported}%
-    \fi
-  \fi
-  \ifnum\@tempcnta=\m at ne          % if no opt or no language in opt found
-    \ifx\bbl at KVP@captions@@\@nnil % TODO. Hackish. See above.
-      \bbl at ifunset{bbl at hyphr@#1}{}% use value in ini, if exists
-        {\bbl at exp{\\\bbl at ifblank{\bbl at cs{hyphr@#1}}}%
-           {}%
-           {\bbl at ifunset{l@\bbl at cl{hyphr}}%
-             {}%                   if hyphenrules found:
-             {\@tempcnta\@nameuse{l@\bbl at cl{hyphr}}}}}%
-    \fi
-  \fi
-  \bbl at ifunset{l@#1}%
-    {\ifnum\@tempcnta=\m at ne
-       \bbl at carg\adddialect{l@#1}\language
-     \else
-       \bbl at carg\adddialect{l@#1}\@tempcnta
-     \fi}%
-    {\ifnum\@tempcnta=\m at ne\else
-       \global\bbl at carg\chardef{l@#1}\@tempcnta
-     \fi}}
-\def\bbl at input@texini#1{%
-  \bbl at bsphack
-    \bbl at exp{%
-      \catcode`\\\%=14 \catcode`\\\\=0
-      \catcode`\\\{=1  \catcode`\\\}=2
-      \lowercase{\\\InputIfFileExists{babel-#1.tex}{}{}}%
-      \catcode`\\\%=\the\catcode`\%\relax
-      \catcode`\\\\=\the\catcode`\\\relax
-      \catcode`\\\{=\the\catcode`\{\relax
-      \catcode`\\\}=\the\catcode`\}\relax}%
-  \bbl at esphack}
-\def\bbl at iniline#1\bbl at iniline{%
-  \@ifnextchar[\bbl at inisect{\@ifnextchar;\bbl at iniskip\bbl at inistore}#1\@@}% ]
-\def\bbl at inisect[#1]#2\@@{\def\bbl at section{#1}}
-\def\bbl at iniskip#1\@@{}%      if starts with ;
-\def\bbl at inistore#1=#2\@@{%      full (default)
-  \bbl at trim@def\bbl at tempa{#1}%
-  \bbl at trim\toks@{#2}%
-  \bbl at xin@{;\bbl at section/\bbl at tempa;}{\bbl at key@list}%
-  \ifin@\else
-    \bbl at xin@{,identification/include.}%
-             {,\bbl at section/\bbl at tempa}%
-    \ifin@\edef\bbl at required@inis{\the\toks@}\fi
-    \bbl at exp{%
-      \\\g at addto@macro\\\bbl at inidata{%
-        \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}%
-  \fi}
-\def\bbl at inistore@min#1=#2\@@{%  minimal (maybe set in \bbl at read@ini)
-  \bbl at trim@def\bbl at tempa{#1}%
-  \bbl at trim\toks@{#2}%
-  \bbl at xin@{.identification.}{.\bbl at section.}%
-  \ifin@
-    \bbl at exp{\\\g at addto@macro\\\bbl at inidata{%
-      \\\bbl at elt{identification}{\bbl at tempa}{\the\toks@}}}%
-  \fi}
-\def\bbl at loop@ini{%
-  \loop
-    \if T\ifeof\bbl at readstream F\fi T\relax % Trick, because inside \loop
-      \endlinechar\m at ne
-      \read\bbl at readstream to \bbl at line
-      \endlinechar`\^^M
-      \ifx\bbl at line\@empty\else
-        \expandafter\bbl at iniline\bbl at line\bbl at iniline
-      \fi
-    \repeat}
-\ifx\bbl at readstream\@undefined
-  \csname newread\endcsname\bbl at readstream
-\fi
-\def\bbl at read@ini#1#2{%
-  \global\let\bbl at extend@ini\@gobble
-  \openin\bbl at readstream=babel-#1.ini
-  \ifeof\bbl at readstream
-    \bbl at error
-      {There is no ini file for the requested language\\%
-       (#1: \languagename). Perhaps you misspelled it or your\\%
-       installation is not complete.}%
-      {Fix the name or reinstall babel.}%
-  \else
-    % == Store ini data in \bbl at inidata ==
-    \catcode`\[=12 \catcode`\]=12 \catcode`\==12 \catcode`\&=12
-    \catcode`\;=12 \catcode`\|=12 \catcode`\%=14 \catcode`\-=12
-    \bbl at info{Importing
-                \ifcase#2font and identification \or basic \fi
-                 data for \languagename\\%
-              from babel-#1.ini. Reported}%
-    \ifnum#2=\z@
-      \global\let\bbl at inidata\@empty
-      \let\bbl at inistore\bbl at inistore@min    % Remember it's local
-    \fi
-    \def\bbl at section{identification}%
-    \let\bbl at required@inis\@empty
-    \bbl at exp{\\\bbl at inistore tag.ini=#1\\\@@}%
-    \bbl at inistore load.level=#2\@@
-    \bbl at loop@ini
-    \ifx\bbl at required@inis\@empty\else
-      \bbl at replace\bbl at required@inis{ }{,}%
-      \bbl at foreach\bbl at required@inis{%
-        \openin\bbl at readstream=babel-##1.ini
-        \bbl at loop@ini}%
-    \fi
-    % == Process stored data ==
-    \bbl at csarg\xdef{lini@\languagename}{#1}%
-    \bbl at read@ini at aux
-    % == 'Export' data ==
-    \bbl at ini@exports{#2}%
-    \global\bbl at csarg\let{inidata@\languagename}\bbl at inidata
-    \global\let\bbl at inidata\@empty
-    \bbl at exp{\\\bbl at add@list\\\bbl at ini@loaded{\languagename}}%
-    \bbl at toglobal\bbl at ini@loaded
-  \fi
-  \closein\bbl at readstream}
-\def\bbl at read@ini at aux{%
-  \let\bbl at savestrings\@empty
-  \let\bbl at savetoday\@empty
-  \let\bbl at savedate\@empty
-  \def\bbl at elt##1##2##3{%
-    \def\bbl at section{##1}%
-    \in@{=date.}{=##1}% Find a better place
-    \ifin@
-      \bbl at ifunset{bbl at inikv@##1}%
-        {\bbl at ini@calendar{##1}}%
-        {}%
-    \fi
-    \bbl at ifunset{bbl at inikv@##1}{}%
-      {\csname bbl at inikv@##1\endcsname{##2}{##3}}}%
-  \bbl at inidata}
-\def\bbl at extend@ini at aux#1{%
-  \bbl at startcommands*{#1}{captions}%
-    % Activate captions/... and modify exports
-    \bbl at csarg\def{inikv at captions.licr}##1##2{%
-      \setlocalecaption{#1}{##1}{##2}}%
-    \def\bbl at inikv@captions##1##2{%
-      \bbl at ini@captions at aux{##1}{##2}}%
-    \def\bbl at stringdef##1##2{\gdef##1{##2}}%
-    \def\bbl at exportkey##1##2##3{%
-      \bbl at ifunset{bbl@@kv@##2}{}%
-        {\expandafter\ifx\csname bbl@@kv@##2\endcsname\@empty\else
-           \bbl at exp{\global\let\<bbl@##1@\languagename>\<bbl@@kv@##2>}%
-         \fi}}%
-    % As with \bbl at read@ini, but with some changes
-    \bbl at read@ini at aux
-    \bbl at ini@exports\tw@
-    % Update inidata at lang by pretending the ini is read.
-    \def\bbl at elt##1##2##3{%
-      \def\bbl at section{##1}%
-      \bbl at iniline##2=##3\bbl at iniline}%
-    \csname bbl at inidata@#1\endcsname
-    \global\bbl at csarg\let{inidata@#1}\bbl at inidata
-  \StartBabelCommands*{#1}{date}% And from the import stuff
-    \def\bbl at stringdef##1##2{\gdef##1{##2}}%
-    \bbl at savetoday
-    \bbl at savedate
-  \bbl at endcommands}
-\def\bbl at ini@calendar#1{%
- \lowercase{\def\bbl at tempa{=#1=}}%
- \bbl at replace\bbl at tempa{=date.gregorian}{}%
- \bbl at replace\bbl at tempa{=date.}{}%
- \in@{.licr=}{#1=}%
- \ifin@
-   \ifcase\bbl at engine
-     \bbl at replace\bbl at tempa{.licr=}{}%
-   \else
-     \let\bbl at tempa\relax
-   \fi
- \fi
- \ifx\bbl at tempa\relax\else
-   \bbl at replace\bbl at tempa{=}{}%
-   \ifx\bbl at tempa\@empty\else
-     \xdef\bbl at calendars{\bbl at calendars,\bbl at tempa}%
-   \fi
-   \bbl at exp{%
-     \def\<bbl at inikv@#1>####1####2{%
-       \\\bbl at inidate####1...\relax{####2}{\bbl at tempa}}}%
- \fi}
-\def\bbl at renewinikey#1/#2\@@#3{%
-  \edef\bbl at tempa{\zap at space #1 \@empty}%   section
-  \edef\bbl at tempb{\zap at space #2 \@empty}%   key
-  \bbl at trim\toks@{#3}%                      value
-  \bbl at exp{%
-    \edef\\\bbl at key@list{\bbl at key@list \bbl at tempa/\bbl at tempb;}%
-    \\\g at addto@macro\\\bbl at inidata{%
-       \\\bbl at elt{\bbl at tempa}{\bbl at tempb}{\the\toks@}}}}%
-\def\bbl at exportkey#1#2#3{%
-  \bbl at ifunset{bbl@@kv@#2}%
-    {\bbl at csarg\gdef{#1@\languagename}{#3}}%
-    {\expandafter\ifx\csname bbl@@kv@#2\endcsname\@empty
-       \bbl at csarg\gdef{#1@\languagename}{#3}%
-     \else
-       \bbl at exp{\global\let\<bbl@#1@\languagename>\<bbl@@kv@#2>}%
-     \fi}}
-\def\bbl at iniwarning#1{%
-  \bbl at ifunset{bbl@@kv at identification.warning#1}{}%
-    {\bbl at warning{%
-       From babel-\bbl at cs{lini@\languagename}.ini:\\%
-       \bbl at cs{@kv at identification.warning#1}\\%
-       Reported }}}
-\let\bbl at release@transforms\@empty
-\def\bbl at ini@exports#1{%
-  % Identification always exported
-  \bbl at iniwarning{}%
-  \ifcase\bbl at engine
-    \bbl at iniwarning{.pdflatex}%
-  \or
-    \bbl at iniwarning{.lualatex}%
-  \or
-    \bbl at iniwarning{.xelatex}%
-  \fi%
-  \bbl at exportkey{llevel}{identification.load.level}{}%
-  \bbl at exportkey{elname}{identification.name.english}{}%
-  \bbl at exp{\\\bbl at exportkey{lname}{identification.name.opentype}%
-    {\csname bbl at elname@\languagename\endcsname}}%
-  \bbl at exportkey{tbcp}{identification.tag.bcp47}{}%
-  \bbl at exportkey{lbcp}{identification.language.tag.bcp47}{}%
-  % Somewhat hackish. TODO
-  \bbl at exportkey{casing}{identification.language.tag.bcp47}{}%
-  \bbl at exportkey{lotf}{identification.tag.opentype}{dflt}%
-  \bbl at exportkey{esname}{identification.script.name}{}%
-  \bbl at exp{\\\bbl at exportkey{sname}{identification.script.name.opentype}%
-    {\csname bbl at esname@\languagename\endcsname}}%
-  \bbl at exportkey{sbcp}{identification.script.tag.bcp47}{}%
-  \bbl at exportkey{sotf}{identification.script.tag.opentype}{DFLT}%
-  \bbl at exportkey{rbcp}{identification.region.tag.bcp47}{}%
-  \bbl at exportkey{vbcp}{identification.variant.tag.bcp47}{}%
-  \bbl at exportkey{extt}{identification.extension.t.tag.bcp47}{}%
-  \bbl at exportkey{extu}{identification.extension.u.tag.bcp47}{}%
-  \bbl at exportkey{extx}{identification.extension.x.tag.bcp47}{}%
-  % Also maps bcp47 -> languagename
-  \ifbbl at bcptoname
-    \bbl at csarg\xdef{bcp at map@\bbl at cl{tbcp}}{\languagename}%
-  \fi
-  % Conditional
-  \ifnum#1>\z@         % 0 = only info, 1, 2 = basic, (re)new
-    \bbl at exportkey{calpr}{date.calendar.preferred}{}%
-    \bbl at exportkey{lnbrk}{typography.linebreaking}{h}%
-    \bbl at exportkey{hyphr}{typography.hyphenrules}{}%
-    \bbl at exportkey{lfthm}{typography.lefthyphenmin}{2}%
-    \bbl at exportkey{rgthm}{typography.righthyphenmin}{3}%
-    \bbl at exportkey{prehc}{typography.prehyphenchar}{}%
-    \bbl at exportkey{hyotl}{typography.hyphenate.other.locale}{}%
-    \bbl at exportkey{hyots}{typography.hyphenate.other.script}{}%
-    \bbl at exportkey{intsp}{typography.intraspace}{}%
-    \bbl at exportkey{frspc}{typography.frenchspacing}{u}%
-    \bbl at exportkey{chrng}{characters.ranges}{}%
-    \bbl at exportkey{quote}{characters.delimiters.quotes}{}%
-    \bbl at exportkey{dgnat}{numbers.digits.native}{}%
-    \ifnum#1=\tw@           % only (re)new
-      \bbl at exportkey{rqtex}{identification.require.babel}{}%
-      \bbl at toglobal\bbl at savetoday
-      \bbl at toglobal\bbl at savedate
-      \bbl at savestrings
-    \fi
-  \fi}
-\def\bbl at inikv#1#2{%     key=value
-  \toks@{#2}%            This hides #'s from ini values
-  \bbl at csarg\edef{@kv@\bbl at section.#1}{\the\toks@}}
-\let\bbl at inikv@identification\bbl at inikv
-\let\bbl at inikv@date\bbl at inikv
-\let\bbl at inikv@typography\bbl at inikv
-\let\bbl at inikv@characters\bbl at inikv
-\let\bbl at inikv@numbers\bbl at inikv
-\def\bbl at inikv@counters#1#2{%
-  \bbl at ifsamestring{#1}{digits}%
-    {\bbl at error{The counter name 'digits' is reserved for mapping\\%
-                decimal digits}%
-               {Use another name.}}%
-    {}%
-  \def\bbl at tempc{#1}%
-  \bbl at trim@def{\bbl at tempb*}{#2}%
-  \in@{.1$}{#1$}%
-  \ifin@
-    \bbl at replace\bbl at tempc{.1}{}%
-    \bbl at csarg\protected at xdef{cntr@\bbl at tempc @\languagename}{%
-      \noexpand\bbl at alphnumeral{\bbl at tempc}}%
-  \fi
-  \in@{.F.}{#1}%
-  \ifin@\else\in@{.S.}{#1}\fi
-  \ifin@
-    \bbl at csarg\protected at xdef{cntr@#1@\languagename}{\bbl at tempb*}%
-  \else
-    \toks@{}% Required by \bbl at buildifcase, which returns \bbl at tempa
-    \expandafter\bbl at buildifcase\bbl at tempb* \\ % Space after \\
-    \bbl at csarg{\global\expandafter\let}{cntr@#1@\languagename}\bbl at tempa
-  \fi}
-\ifcase\bbl at engine
-  \bbl at csarg\def{inikv at captions.licr}#1#2{%
-    \bbl at ini@captions at aux{#1}{#2}}
-\else
-  \def\bbl at inikv@captions#1#2{%
-    \bbl at ini@captions at aux{#1}{#2}}
-\fi
-\def\bbl at ini@captions at template#1#2{% string language tempa=capt-name
-  \bbl at replace\bbl at tempa{.template}{}%
-  \def\bbl at toreplace{#1{}}%
-  \bbl at replace\bbl at toreplace{[ ]}{\nobreakspace{}}%
-  \bbl at replace\bbl at toreplace{[[}{\csname}%
-  \bbl at replace\bbl at toreplace{[}{\csname the}%
-  \bbl at replace\bbl at toreplace{]]}{name\endcsname{}}%
-  \bbl at replace\bbl at toreplace{]}{\endcsname{}}%
-  \bbl at xin@{,\bbl at tempa,}{,chapter,appendix,part,}%
-  \ifin@
-    \@nameuse{bbl at patch\bbl at tempa}%
-    \global\bbl at csarg\let{\bbl at tempa fmt@#2}\bbl at toreplace
-  \fi
-  \bbl at xin@{,\bbl at tempa,}{,figure,table,}%
-  \ifin@
-    \global\bbl at csarg\let{\bbl at tempa fmt@#2}\bbl at toreplace
-    \bbl at exp{\gdef\<fnum@\bbl at tempa>{%
-      \\\bbl at ifunset{bbl@\bbl at tempa fmt@\\\languagename}%
-        {\[fnum@\bbl at tempa]}%
-        {\\\@nameuse{bbl@\bbl at tempa fmt@\\\languagename}}}}%
-  \fi}
-\def\bbl at ini@captions at aux#1#2{%
-  \bbl at trim@def\bbl at tempa{#1}%
-  \bbl at xin@{.template}{\bbl at tempa}%
-  \ifin@
-    \bbl at ini@captions at template{#2}\languagename
-  \else
-    \bbl at ifblank{#2}%
-      {\bbl at exp{%
-         \toks@{\\\bbl at nocaption{\bbl at tempa}{\languagename\bbl at tempa name}}}}%
-      {\bbl at trim\toks@{#2}}%
-    \bbl at exp{%
-      \\\bbl at add\\\bbl at savestrings{%
-        \\\SetString\<\bbl at tempa name>{\the\toks@}}}%
-    \toks@\expandafter{\bbl at captionslist}%
-    \bbl at exp{\\\in@{\<\bbl at tempa name>}{\the\toks@}}%
-    \ifin@\else
-      \bbl at exp{%
-        \\\bbl at add\<bbl at extracaps@\languagename>{\<\bbl at tempa name>}%
-        \\\bbl at toglobal\<bbl at extracaps@\languagename>}%
-    \fi
-  \fi}
-\def\bbl at list@the{%
-  part,chapter,section,subsection,subsubsection,paragraph,%
-  subparagraph,enumi,enumii,enumiii,enumiv,equation,figure,%
-  table,page,footnote,mpfootnote,mpfn}
-\def\bbl at map@cnt#1{%  #1:roman,etc, // #2:enumi,etc
-  \bbl at ifunset{bbl at map@#1@\languagename}%
-    {\@nameuse{#1}}%
-    {\@nameuse{bbl at map@#1@\languagename}}}
-\def\bbl at inikv@labels#1#2{%
-  \in@{.map}{#1}%
-  \ifin@
-    \ifx\bbl at KVP@labels\@nnil\else
-      \bbl at xin@{ map }{ \bbl at KVP@labels\space}%
-      \ifin@
-        \def\bbl at tempc{#1}%
-        \bbl at replace\bbl at tempc{.map}{}%
-        \in@{,#2,}{,arabic,roman,Roman,alph,Alph,fnsymbol,}%
-        \bbl at exp{%
-          \gdef\<bbl at map@\bbl at tempc @\languagename>%
-            {\ifin@\<#2>\else\\\localecounter{#2}\fi}}%
-        \bbl at foreach\bbl at list@the{%
-          \bbl at ifunset{the##1}{}%
-            {\bbl at exp{\let\\\bbl at tempd\<the##1>}%
-             \bbl at exp{%
-               \\\bbl at sreplace\<the##1>%
-                 {\<\bbl at tempc>{##1}}{\\\bbl at map@cnt{\bbl at tempc}{##1}}%
-               \\\bbl at sreplace\<the##1>%
-                 {\<\@empty @\bbl at tempc>\<c@##1>}{\\\bbl at map@cnt{\bbl at tempc}{##1}}}%
-             \expandafter\ifx\csname the##1\endcsname\bbl at tempd\else
-               \toks@\expandafter\expandafter\expandafter{%
-                 \csname the##1\endcsname}%
-               \expandafter\xdef\csname the##1\endcsname{{\the\toks@}}%
-             \fi}}%
-      \fi
-    \fi
-  %
-  \else
-    %
-    % The following code is still under study. You can test it and make
-    % suggestions. Eg, enumerate.2 = ([enumi]).([enumii]). It's
-    % language dependent.
-    \in@{enumerate.}{#1}%
-    \ifin@
-      \def\bbl at tempa{#1}%
-      \bbl at replace\bbl at tempa{enumerate.}{}%
-      \def\bbl at toreplace{#2}%
-      \bbl at replace\bbl at toreplace{[ ]}{\nobreakspace{}}%
-      \bbl at replace\bbl at toreplace{[}{\csname the}%
-      \bbl at replace\bbl at toreplace{]}{\endcsname{}}%
-      \toks@\expandafter{\bbl at toreplace}%
-      % TODO. Execute only once:
-      \bbl at exp{%
-        \\\bbl at add\<extras\languagename>{%
-          \\\babel at save\<labelenum\romannumeral\bbl at tempa>%
-          \def\<labelenum\romannumeral\bbl at tempa>{\the\toks@}}%
-        \\\bbl at toglobal\<extras\languagename>}%
-    \fi
-  \fi}
-\def\bbl at chaptype{chapter}
-\ifx\@makechapterhead\@undefined
-  \let\bbl at patchchapter\relax
-\else\ifx\thechapter\@undefined
-  \let\bbl at patchchapter\relax
-\else\ifx\ps at headings\@undefined
-  \let\bbl at patchchapter\relax
-\else
-  \def\bbl at patchchapter{%
-    \global\let\bbl at patchchapter\relax
-    \gdef\bbl at chfmt{%
-      \bbl at ifunset{bbl@\bbl at chaptype fmt@\languagename}%
-        {\@chapapp\space\thechapter}
-        {\@nameuse{bbl@\bbl at chaptype fmt@\languagename}}}
-    \bbl at add\appendix{\def\bbl at chaptype{appendix}}% Not harmful, I hope
-    \bbl at sreplace\ps at headings{\@chapapp\ \thechapter}{\bbl at chfmt}%
-    \bbl at sreplace\chaptermark{\@chapapp\ \thechapter}{\bbl at chfmt}%
-    \bbl at sreplace\@makechapterhead{\@chapapp\space\thechapter}{\bbl at chfmt}%
-    \bbl at toglobal\appendix
-    \bbl at toglobal\ps at headings
-    \bbl at toglobal\chaptermark
-    \bbl at toglobal\@makechapterhead}
-  \let\bbl at patchappendix\bbl at patchchapter
-\fi\fi\fi
-\ifx\@part\@undefined
-  \let\bbl at patchpart\relax
-\else
-  \def\bbl at patchpart{%
-    \global\let\bbl at patchpart\relax
-    \gdef\bbl at partformat{%
-      \bbl at ifunset{bbl at partfmt@\languagename}%
-        {\partname\nobreakspace\thepart}
-        {\@nameuse{bbl at partfmt@\languagename}}}
-    \bbl at sreplace\@part{\partname\nobreakspace\thepart}{\bbl at partformat}%
-    \bbl at toglobal\@part}
-\fi
-\let\bbl at calendar\@empty
-\DeclareRobustCommand\localedate[1][]{\bbl at localedate{#1}}
-\def\bbl at localedate#1#2#3#4{%
-  \begingroup
-    \edef\bbl at they{#2}%
-    \edef\bbl at them{#3}%
-    \edef\bbl at thed{#4}%
-    \edef\bbl at tempe{%
-      \bbl at ifunset{bbl at calpr@\languagename}{}{\bbl at cl{calpr}},%
-      #1}%
-    \bbl at replace\bbl at tempe{ }{}%
-    \bbl at replace\bbl at tempe{CONVERT}{convert=}% Hackish
-    \bbl at replace\bbl at tempe{convert}{convert=}%
-    \let\bbl at ld@calendar\@empty
-    \let\bbl at ld@variant\@empty
-    \let\bbl at ld@convert\relax
-    \def\bbl at tempb##1=##2\@@{\@namedef{bbl at ld@##1}{##2}}%
-    \bbl at foreach\bbl at tempe{\bbl at tempb##1\@@}%
-    \bbl at replace\bbl at ld@calendar{gregorian}{}%
-    \ifx\bbl at ld@calendar\@empty\else
-      \ifx\bbl at ld@convert\relax\else
-        \babelcalendar[\bbl at they-\bbl at them-\bbl at thed]%
-          {\bbl at ld@calendar}\bbl at they\bbl at them\bbl at thed
-      \fi
-    \fi
-    \@nameuse{bbl at precalendar}% Remove, eg, +, -civil (-ca-islamic)
-    \edef\bbl at calendar{% Used in \month..., too
-      \bbl at ld@calendar
-      \ifx\bbl at ld@variant\@empty\else
-        .\bbl at ld@variant
-      \fi}%
-    \bbl at cased
-      {\@nameuse{bbl at date@\languagename @\bbl at calendar}%
-         \bbl at they\bbl at them\bbl at thed}%
-  \endgroup}
-\def\bbl at inidate#1.#2.#3.#4\relax#5#6{% TODO - ignore with 'captions'
-  \bbl at trim@def\bbl at tempa{#1.#2}%
-  \bbl at ifsamestring{\bbl at tempa}{months.wide}%      to savedate
-    {\bbl at trim@def\bbl at tempa{#3}%
-     \bbl at trim\toks@{#5}%
-     \@temptokena\expandafter{\bbl at savedate}%
-     \bbl at exp{%   Reverse order - in ini last wins
-       \def\\\bbl at savedate{%
-         \\\SetString\<month\romannumeral\bbl at tempa#6name>{\the\toks@}%
-         \the\@temptokena}}}%
-    {\bbl at ifsamestring{\bbl at tempa}{date.long}%     defined now
-      {\lowercase{\def\bbl at tempb{#6}}%
-       \bbl at trim@def\bbl at toreplace{#5}%
-       \bbl at TG@@date
-       \global\bbl at csarg\let{date@\languagename @\bbl at tempb}\bbl at toreplace
-       \ifx\bbl at savetoday\@empty
-         \bbl at exp{% TODO. Move to a better place.
-           \\\AfterBabelCommands{%
-             \def\<\languagename date>{\\\protect\<\languagename date >}%
-             \\\newcommand\<\languagename date >[4][]{%
-               \\\bbl at usedategrouptrue
-               \<bbl at ensure@\languagename>{%
-                 \\\localedate[####1]{####2}{####3}{####4}}}}%
-           \def\\\bbl at savetoday{%
-             \\\SetString\\\today{%
-               \<\languagename date>[convert]%
-                  {\\\the\year}{\\\the\month}{\\\the\day}}}}%
-       \fi}%
-      {}}}
-\let\bbl at calendar\@empty
-\newcommand\babelcalendar[2][\the\year-\the\month-\the\day]{%
-  \@nameuse{bbl at ca@#2}#1\@@}
-\newcommand\BabelDateSpace{\nobreakspace}
-\newcommand\BabelDateDot{.\@}  % TODO. \let instead of repeating
-\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#1\bbl at calendar name\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 at 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}} % TODO - add leading 0
-\def\bbl at replace@finish at iii#1{%
-  \bbl at exp{\def\\#1####1####2####3{\the\toks@}}}
-\def\bbl at TG@@date{%
-  \bbl at replace\bbl at toreplace{[ ]}{\BabelDateSpace{}}%
-  \bbl at replace\bbl at toreplace{[.]}{\BabelDateDot{}}%
-  \bbl at replace\bbl at toreplace{[d]}{\BabelDated{####3}}%
-  \bbl at replace\bbl at toreplace{[dd]}{\BabelDatedd{####3}}%
-  \bbl at replace\bbl at toreplace{[M]}{\BabelDateM{####2}}%
-  \bbl at replace\bbl at toreplace{[MM]}{\BabelDateMM{####2}}%
-  \bbl at replace\bbl at toreplace{[MMMM]}{\BabelDateMMMM{####2}}%
-  \bbl at replace\bbl at toreplace{[y]}{\BabelDatey{####1}}%
-  \bbl at replace\bbl at toreplace{[yy]}{\BabelDateyy{####1}}%
-  \bbl at replace\bbl at toreplace{[yyyy]}{\BabelDateyyyy{####1}}%
-  \bbl at replace\bbl at toreplace{[y|}{\bbl at datecntr[####1|}%
-  \bbl at replace\bbl at toreplace{[m|}{\bbl at datecntr[####2|}%
-  \bbl at replace\bbl at toreplace{[d|}{\bbl at datecntr[####3|}%
-  \bbl at replace@finish at iii\bbl at toreplace}
-\def\bbl at datecntr{\expandafter\bbl at xdatecntr\expandafter}
-\def\bbl at xdatecntr[#1|#2]{\localenumeral{#2}{#1}}
-\let\bbl at release@transforms\@empty
-\bbl at csarg\let{inikv at transforms.prehyphenation}\bbl at inikv
-\bbl at csarg\let{inikv at transforms.posthyphenation}\bbl at inikv
-\def\bbl at transforms@aux#1#2#3#4,#5\relax{%
-  #1[#2]{#3}{#4}{#5}}
-\begingroup %  A hack. TODO. Don't require an specific order
-  \catcode`\%=12
-  \catcode`\&=14
-  \gdef\bbl at transforms#1#2#3{&%
-    \directlua{
-       local str = [==[#2]==]
-       str = str:gsub('%.%d+%.%d+$', '')
-       token.set_macro('babeltempa', str)
-    }&%
-    \def\babeltempc{}&%
-    \bbl at xin@{,\babeltempa,}{,\bbl at KVP@transforms,}&%
-    \ifin@\else
-      \bbl at xin@{:\babeltempa,}{,\bbl at KVP@transforms,}&%
-    \fi
-    \ifin@
-      \bbl at foreach\bbl at KVP@transforms{&%
-        \bbl at xin@{:\babeltempa,}{,##1,}&%
-        \ifin@  &% font:font:transform syntax
-          \directlua{
-            local t = {}
-            for m in string.gmatch('##1'..':', '(.-):') do
-              table.insert(t, m)
-            end
-            table.remove(t)
-            token.set_macro('babeltempc', ',fonts=' .. table.concat(t, ' '))
-          }&%
-        \fi}&%
-      \in@{.0$}{#2$}&%
-      \ifin@
-        \directlua{&% (\attribute) syntax
-          local str = string.match([[\bbl at KVP@transforms]],
-                        '%(([^%(]-)%)[^%)]-\babeltempa')
-          if str == nil then
-            token.set_macro('babeltempb', '')
-          else
-            token.set_macro('babeltempb', ',attribute=' .. str)
-          end
-        }&%
-        \toks@{#3}&%
-        \bbl at exp{&%
-          \\\g at addto@macro\\\bbl at release@transforms{&%
-            \relax  &% Closes previous \bbl at transforms@aux
-            \\\bbl at transforms@aux
-              \\#1{label=\babeltempa\babeltempb\babeltempc}&%
-                 {\languagename}{\the\toks@}}}&%
-      \else
-        \g at addto@macro\bbl at release@transforms{, {#3}}&%
-      \fi
-    \fi}
-\endgroup
-\def\bbl at provide@lsys#1{%
-  \bbl at ifunset{bbl at lname@#1}%
-    {\bbl at load@info{#1}}%
-    {}%
-  \bbl at csarg\let{lsys@#1}\@empty
-  \bbl at ifunset{bbl at sname@#1}{\bbl at csarg\gdef{sname@#1}{Default}}{}%
-  \bbl at ifunset{bbl at sotf@#1}{\bbl at csarg\gdef{sotf@#1}{DFLT}}{}%
-  \bbl at csarg\bbl at add@list{lsys@#1}{Script=\bbl at cs{sname@#1}}%
-  \bbl at ifunset{bbl at lname@#1}{}%
-    {\bbl at csarg\bbl at add@list{lsys@#1}{Language=\bbl at cs{lname@#1}}}%
-  \ifcase\bbl at engine\or\or
-    \bbl at ifunset{bbl at prehc@#1}{}%
-      {\bbl at exp{\\\bbl at ifblank{\bbl at cs{prehc@#1}}}%
-        {}%
-        {\ifx\bbl at xenohyph\@undefined
-           \global\let\bbl at xenohyph\bbl at xenohyph@d
-           \ifx\AtBeginDocument\@notprerr
-             \expandafter\@secondoftwo  % to execute right now
-           \fi
-           \AtBeginDocument{%
-             \bbl at patchfont{\bbl at xenohyph}%
-             \expandafter\select at language\expandafter{\languagename}}%
-        \fi}}%
-  \fi
-  \bbl at csarg\bbl at toglobal{lsys@#1}}
-\def\bbl at xenohyph@d{%
-  \bbl at ifset{bbl at prehc@\languagename}%
-    {\ifnum\hyphenchar\font=\defaulthyphenchar
-       \iffontchar\font\bbl at cl{prehc}\relax
-         \hyphenchar\font\bbl at cl{prehc}\relax
-       \else\iffontchar\font"200B
-         \hyphenchar\font"200B
-       \else
-         \bbl at warning
-           {Neither 0 nor ZERO WIDTH SPACE are available\\%
-            in the current font, and therefore the hyphen\\%
-            will be printed. Try changing the fontspec's\\%
-            'HyphenChar' to another value, but be aware\\%
-            this setting is not safe (see the manual).\\%
-            Reported}%
-         \hyphenchar\font\defaulthyphenchar
-       \fi\fi
-     \fi}%
-    {\hyphenchar\font\defaulthyphenchar}}
-  % \fi}
-\def\bbl at load@info#1{%
-  \def\BabelBeforeIni##1##2{%
-    \begingroup
-      \bbl at read@ini{##1}0%
-      \endinput          % babel- .tex may contain onlypreamble's
-    \endgroup}%            boxed, to avoid extra spaces:
-  {\bbl at input@texini{#1}}}
-\def\bbl at setdigits#1#2#3#4#5{%
-  \bbl at exp{%
-    \def\<\languagename digits>####1{%       ie, \langdigits
-      \<bbl at digits@\languagename>####1\\\@nil}%
-    \let\<bbl at cntr@digits@\languagename>\<\languagename digits>%
-    \def\<\languagename counter>####1{%      ie, \langcounter
-      \\\expandafter\<bbl at counter@\languagename>%
-      \\\csname c@####1\endcsname}%
-    \def\<bbl at counter@\languagename>####1{% ie, \bbl at counter@lang
-      \\\expandafter\<bbl at digits@\languagename>%
-      \\\number####1\\\@nil}}%
-  \def\bbl at tempa##1##2##3##4##5{%
-    \bbl at exp{%    Wow, quite a lot of hashes! :-(
-      \def\<bbl at digits@\languagename>########1{%
-       \\\ifx########1\\\@nil              % ie, \bbl at digits@lang
-       \\\else
-         \\\ifx0########1#1%
-         \\\else\\\ifx1########1#2%
-         \\\else\\\ifx2########1#3%
-         \\\else\\\ifx3########1#4%
-         \\\else\\\ifx4########1#5%
-         \\\else\\\ifx5########1##1%
-         \\\else\\\ifx6########1##2%
-         \\\else\\\ifx7########1##3%
-         \\\else\\\ifx8########1##4%
-         \\\else\\\ifx9########1##5%
-         \\\else########1%
-         \\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi
-         \\\expandafter\<bbl at digits@\languagename>%
-       \\\fi}}}%
-  \bbl at tempa}
-\def\bbl at buildifcase#1 {% Returns \bbl at tempa, requires \toks@={}
-  \ifx\\#1%             % \\ before, in case #1 is multiletter
-    \bbl at exp{%
-      \def\\\bbl at tempa####1{%
-        \<ifcase>####1\space\the\toks@\<else>\\\@ctrerr\<fi>}}%
-  \else
-    \toks@\expandafter{\the\toks@\or #1}%
-    \expandafter\bbl at buildifcase
-  \fi}
-\newcommand\localenumeral[2]{\bbl at cs{cntr@#1@\languagename}{#2}}
-\def\bbl at localecntr#1#2{\localenumeral{#2}{#1}}
-\newcommand\localecounter[2]{%
-  \expandafter\bbl at localecntr
-  \expandafter{\number\csname c@#2\endcsname}{#1}}
-\def\bbl at alphnumeral#1#2{%
-  \expandafter\bbl at alphnumeral@i\number#2 76543210\@@{#1}}
-\def\bbl at alphnumeral@i#1#2#3#4#5#6#7#8\@@#9{%
-  \ifcase\@car#8\@nil\or   % Currenty <10000, but prepared for bigger
-    \bbl at alphnumeral@ii{#9}000000#1\or
-    \bbl at alphnumeral@ii{#9}00000#1#2\or
-    \bbl at alphnumeral@ii{#9}0000#1#2#3\or
-    \bbl at alphnumeral@ii{#9}000#1#2#3#4\else
-    \bbl at alphnum@invalid{>9999}%
-  \fi}
-\def\bbl at alphnumeral@ii#1#2#3#4#5#6#7#8{%
-  \bbl at ifunset{bbl at cntr@#1.F.\number#5#6#7#8@\languagename}%
-    {\bbl at cs{cntr@#1.4@\languagename}#5%
-     \bbl at cs{cntr@#1.3@\languagename}#6%
-     \bbl at cs{cntr@#1.2@\languagename}#7%
-     \bbl at cs{cntr@#1.1@\languagename}#8%
-     \ifnum#6#7#8>\z@ % TODO. An ad hoc rule for Greek. Ugly.
-       \bbl at ifunset{bbl at cntr@#1.S.321@\languagename}{}%
-         {\bbl at cs{cntr@#1.S.321@\languagename}}%
-     \fi}%
-    {\bbl at cs{cntr@#1.F.\number#5#6#7#8@\languagename}}}
-\def\bbl at alphnum@invalid#1{%
-  \bbl at error{Alphabetic numeral too large (#1)}%
-    {Currently this is the limit.}}
-\def\bbl at localeinfo#1#2{%
-  \bbl at ifunset{bbl at info@#2}{#1}%
-    {\bbl at ifunset{bbl@\csname bbl at info@#2\endcsname @\languagename}{#1}%
-      {\bbl at cs{\csname bbl at info@#2\endcsname @\languagename}}}}
-\newcommand\localeinfo[1]{%
-  \ifx*#1\@empty   % TODO. A bit hackish to make it expandable.
-    \bbl at afterelse\bbl at localeinfo{}%
-  \else
-    \bbl at localeinfo
-      {\bbl at error{I've found no info for the current locale.\\%
-                  The corresponding ini file has not been loaded\\%
-                  Perhaps it doesn't exist}%
-                 {See the manual for details.}}%
-      {#1}%
-  \fi}
-\@namedef{bbl at info@tag.ini}{lini}
-\@namedef{bbl at info@name.english}{elname}
-\@namedef{bbl at info@name.opentype}{lname}
-\@namedef{bbl at info@tag.bcp47}{tbcp}
-\@namedef{bbl at info@language.tag.bcp47}{lbcp}
-\@namedef{bbl at info@tag.opentype}{lotf}
-\@namedef{bbl at info@script.name}{esname}
-\@namedef{bbl at info@script.name.opentype}{sname}
-\@namedef{bbl at info@script.tag.bcp47}{sbcp}
-\@namedef{bbl at info@script.tag.opentype}{sotf}
-\@namedef{bbl at info@region.tag.bcp47}{rbcp}
-\@namedef{bbl at info@variant.tag.bcp47}{vbcp}
-\@namedef{bbl at info@extension.t.tag.bcp47}{extt}
-\@namedef{bbl at info@extension.u.tag.bcp47}{extu}
-\@namedef{bbl at info@extension.x.tag.bcp47}{extx}
-\providecommand\BCPdata{}
-\ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
-  \renewcommand\BCPdata[1]{%
-    \bbl at ifunset{bbl at info@#1.tag.bcp47}%
-      {\bbl at error{Unknown field '#1' in \string\BCPdata.\\%
-                  Perhaps you misspelled it.}%
-                 {See the manual for details.}}%
-      {\bbl at ifunset{bbl@\csname bbl at info@#1.tag.bcp47\endcsname @\languagename}{}%
-        {\bbl at cs{\csname bbl at info@#1.tag.bcp47\endcsname @\languagename}}}}
-\fi
-\@namedef{bbl at info@casing.tag.bcp47}{casing}
-\let\bbl at ensureinfo\@gobble
-\newcommand\BabelEnsureInfo{%
-  \ifx\InputIfFileExists\@undefined\else
-    \def\bbl at ensureinfo##1{%
-      \bbl at ifunset{bbl at lname@##1}{\bbl at load@info{##1}}{}}%
-  \fi
-  \bbl at foreach\bbl at loaded{{%
-    \let\bbl at ensuring\@empty % Flag used in a couple of babel-*.tex files
-    \def\languagename{##1}%
-    \bbl at ensureinfo{##1}}}}
-\@ifpackagewith{babel}{ensureinfo=off}{}%
-  {\AtEndOfPackage{% Test for plain.
-    \ifx\@undefined\bbl at loaded\else\BabelEnsureInfo\fi}}
-\newcommand\getlocaleproperty{%
-  \@ifstar\bbl at getproperty@s\bbl at getproperty@x}
-\def\bbl at getproperty@s#1#2#3{%
-  \let#1\relax
-  \def\bbl at elt##1##2##3{%
-    \bbl at ifsamestring{##1/##2}{#3}%
-      {\providecommand#1{##3}%
-       \def\bbl at elt####1####2####3{}}%
-      {}}%
-  \bbl at cs{inidata@#2}}%
-\def\bbl at getproperty@x#1#2#3{%
-  \bbl at getproperty@s{#1}{#2}{#3}%
-  \ifx#1\relax
-    \bbl at error
-      {Unknown key for locale '#2':\\%
-       #3\\%
-       \string#1 will be set to \relax}%
-      {Perhaps you misspelled it.}%
-  \fi}
-\let\bbl at ini@loaded\@empty
-\newcommand\LocaleForEach{\bbl at foreach\bbl at ini@loaded}
-\newcommand\babeladjust[1]{%  TODO. Error handling.
-  \bbl at forkv{#1}{%
-    \bbl at ifunset{bbl at ADJ@##1@##2}%
-      {\bbl at cs{ADJ@##1}{##2}}%
-      {\bbl at cs{ADJ@##1@##2}}}}
-\def\bbl at adjust@lua#1#2{%
-  \ifvmode
-    \ifnum\currentgrouplevel=\z@
-      \directlua{ Babel.#2 }%
-      \expandafter\expandafter\expandafter\@gobble
-    \fi
-  \fi
-  {\bbl at error   % The error is gobbled if everything went ok.
-     {Currently, #1 related features can be adjusted only\\%
-      in the main vertical list.}%
-     {Maybe things change in the future, but this is what it is.}}}
-\@namedef{bbl at ADJ@bidi.mirroring at on}{%
-  \bbl at adjust@lua{bidi}{mirroring_enabled=true}}
-\@namedef{bbl at ADJ@bidi.mirroring at off}{%
-  \bbl at adjust@lua{bidi}{mirroring_enabled=false}}
-\@namedef{bbl at ADJ@bidi.text at on}{%
-  \bbl at adjust@lua{bidi}{bidi_enabled=true}}
-\@namedef{bbl at ADJ@bidi.text at off}{%
-  \bbl at adjust@lua{bidi}{bidi_enabled=false}}
-\@namedef{bbl at ADJ@bidi.math at on}{%
-  \let\bbl at noamsmath\@empty}
-\@namedef{bbl at ADJ@bidi.math at off}{%
-  \let\bbl at noamsmath\relax}
-\@namedef{bbl at ADJ@bidi.mapdigits at on}{%
-  \bbl at adjust@lua{bidi}{digits_mapped=true}}
-\@namedef{bbl at ADJ@bidi.mapdigits at off}{%
-  \bbl at adjust@lua{bidi}{digits_mapped=false}}
-\@namedef{bbl at ADJ@linebreak.sea at on}{%
-  \bbl at adjust@lua{linebreak}{sea_enabled=true}}
-\@namedef{bbl at ADJ@linebreak.sea at off}{%
-  \bbl at adjust@lua{linebreak}{sea_enabled=false}}
-\@namedef{bbl at ADJ@linebreak.cjk at on}{%
-  \bbl at adjust@lua{linebreak}{cjk_enabled=true}}
-\@namedef{bbl at ADJ@linebreak.cjk at off}{%
-  \bbl at adjust@lua{linebreak}{cjk_enabled=false}}
-\@namedef{bbl at ADJ@justify.arabic at on}{%
-  \bbl at adjust@lua{linebreak}{arabic.justify_enabled=true}}
-\@namedef{bbl at ADJ@justify.arabic at off}{%
-  \bbl at adjust@lua{linebreak}{arabic.justify_enabled=false}}
-\def\bbl at adjust@layout#1{%
-  \ifvmode
-    #1%
-    \expandafter\@gobble
-  \fi
-  {\bbl at error   % The error is gobbled if everything went ok.
-     {Currently, layout related features can be adjusted only\\%
-      in vertical mode.}%
-     {Maybe things change in the future, but this is what it is.}}}
-\@namedef{bbl at ADJ@layout.tabular at on}{%
-  \ifnum\bbl at tabular@mode=\tw@
-    \bbl at adjust@layout{\let\@tabular\bbl at NL@@tabular}%
-  \else
-    \chardef\bbl at tabular@mode\@ne
-  \fi}
-\@namedef{bbl at ADJ@layout.tabular at off}{%
-  \ifnum\bbl at tabular@mode=\tw@
-    \bbl at adjust@layout{\let\@tabular\bbl at OL@@tabular}%
-  \else
-    \chardef\bbl at tabular@mode\z@
-  \fi}
-\@namedef{bbl at ADJ@layout.lists at on}{%
-  \bbl at adjust@layout{\let\list\bbl at NL@list}}
-\@namedef{bbl at ADJ@layout.lists at off}{%
-  \bbl at adjust@layout{\let\list\bbl at OL@list}}
-\@namedef{bbl at ADJ@autoload.bcp47 at on}{%
-  \bbl at bcpallowedtrue}
-\@namedef{bbl at ADJ@autoload.bcp47 at off}{%
-  \bbl at bcpallowedfalse}
-\@namedef{bbl at ADJ@autoload.bcp47.prefix}#1{%
-  \def\bbl at bcp@prefix{#1}}
-\def\bbl at bcp@prefix{bcp47-}
-\@namedef{bbl at ADJ@autoload.options}#1{%
-  \def\bbl at autoload@options{#1}}
-\let\bbl at autoload@bcpoptions\@empty
-\@namedef{bbl at ADJ@autoload.bcp47.options}#1{%
-  \def\bbl at autoload@bcpoptions{#1}}
-\newif\ifbbl at bcptoname
-\@namedef{bbl at ADJ@bcp47.toname at on}{%
-  \bbl at bcptonametrue
-  \BabelEnsureInfo}
-\@namedef{bbl at ADJ@bcp47.toname at off}{%
-  \bbl at bcptonamefalse}
-\@namedef{bbl at ADJ@prehyphenation.disable at nohyphenation}{%
-  \directlua{ Babel.ignore_pre_char = function(node)
-      return (node.lang == \the\csname l at nohyphenation\endcsname)
-    end }}
-\@namedef{bbl at ADJ@prehyphenation.disable at off}{%
-  \directlua{ Babel.ignore_pre_char = function(node)
-      return false
-    end }}
-\@namedef{bbl at ADJ@select.write at shift}{%
-  \let\bbl at restorelastskip\relax
-  \def\bbl at savelastskip{%
-    \let\bbl at restorelastskip\relax
-    \ifvmode
-      \ifdim\lastskip=\z@
-        \let\bbl at restorelastskip\nobreak
-      \else
-        \bbl at exp{%
-          \def\\\bbl at restorelastskip{%
-            \skip@=\the\lastskip
-            \\\nobreak \vskip-\skip@ \vskip\skip@}}%
-      \fi
-    \fi}}
-\@namedef{bbl at ADJ@select.write at keep}{%
-  \let\bbl at restorelastskip\relax
-  \let\bbl at savelastskip\relax}
-\@namedef{bbl at ADJ@select.write at omit}{%
-  \AddBabelHook{babel-select}{beforestart}{%
-    \expandafter\babel at aux\expandafter{\bbl at main@language}{}}%
-  \let\bbl at restorelastskip\relax
-  \def\bbl at savelastskip##1\bbl at restorelastskip{}}
-\@namedef{bbl at ADJ@select.encoding at off}{%
-  \let\bbl at encoding@select at off\@empty}
-\ifx\directlua\@undefined\else
-  \ifx\bbl at luapatterns\@undefined
-    \input luababel.def
-  \fi
-\fi
 \endinput
 %%
 %% End of file `babel.def'.

Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.sty	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.sty	2023-05-11 20:11:39 UTC (rev 67073)
@@ -34,7 +34,7 @@
 %%
 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{babel}[2023/04/18 3.88 The Babel package]
+\ProvidesPackage{babel}[2023/05/11 v3.89 The Babel package]
 \@ifpackagewith{babel}{debug}
   {\providecommand\bbl at trace[1]{\message{^^J[ #1 ]}}%
    \let\bbl at debug\@firstofone
@@ -305,6 +305,8 @@
 \bbl at csarg\let{tempa\expandafter}\csname opt at babel.sty\endcsname
 \def\bbl at tempb#1.#2{%  Remove trailing dot
    #1\ifx\@empty#2\else,\bbl at afterfi\bbl at tempb#2\fi}%
+\def\bbl at tempe#1=#2\@@{%
+  \bbl at csarg\edef{mod@#1}{\bbl at tempb#2}}
 \def\bbl at tempd#1.#2\@nnil{%  TODO. Refactor lists?
   \ifx\@empty#2%
     \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1}%
@@ -314,12 +316,17 @@
       \edef\bbl at tempc{%
         \ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1.\bbl at tempb#2}%
     \else
-      \in@{=}{#1}%
+      \in@{$modifiers$}{$#1$}% TODO. Allow spaces.
       \ifin@
-        \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1.#2}%
+        \bbl at tempe#2\@@
       \else
-        \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1}%
-        \bbl at csarg\edef{mod@#1}{\bbl at tempb#2}%
+        \in@{=}{#1}%
+        \ifin@
+          \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1.#2}%
+        \else
+          \edef\bbl at tempc{\ifx\bbl at tempc\@empty\else\bbl at tempc,\fi#1}%
+          \bbl at csarg\edef{mod@#1}{\bbl at tempb#2}%
+        \fi
       \fi
     \fi
   \fi}
@@ -463,8 +470,8 @@
       \expandafter\@secondoftwo
     \fi}
 \fi
-\def\bbl at version{3.88}
-\def\bbl at date{2023/04/18}
+\def\bbl at version{3.89}
+\def\bbl at date{2023/05/11}
 \ifx\language\@undefined
   \csname newcount\endcsname\language
 \fi
@@ -712,8 +719,6 @@
   % set the locale id
   \bbl at id@assign
   % switch captions, date
-  % No text is supposed to be added here, so we remove any
-  % spurious spaces.
   \bbl at bsphack
     \ifcase\bbl at select@type
       \csname captions#1\endcsname\relax
@@ -784,6 +789,7 @@
     \expandafter\expandafter\expandafter\set at hyphenmins
       \csname #1hyphenmins\endcsname\relax
   \fi
+  % reset selector name
   \let\bbl at selectorname\@empty}
 \long\def\otherlanguage#1{%
   \def\bbl at selectorname{other}%
@@ -968,193 +974,6 @@
     \input luababel.def
   \fi
 \fi
-\bbl at trace{Basic macros}
-\def\bbl at stripslash{\expandafter\@gobble\string}
-\def\bbl at add#1#2{%
-  \bbl at ifunset{\bbl at stripslash#1}%
-    {\def#1{#2}}%
-    {\expandafter\def\expandafter#1\expandafter{#1#2}}}
-\def\bbl at xin@{\@expandtwoargs\in@}
-\def\bbl at carg#1#2{\expandafter#1\csname#2\endcsname}%
-\def\bbl at ncarg#1#2#3{\expandafter#1\expandafter#2\csname#3\endcsname}%
-\def\bbl at ccarg#1#2#3{%
-  \expandafter#1\csname#2\expandafter\endcsname\csname#3\endcsname}%
-\def\bbl at csarg#1#2{\expandafter#1\csname bbl@#2\endcsname}%
-\def\bbl at cs#1{\csname bbl@#1\endcsname}
-\def\bbl at cl#1{\csname bbl@#1@\languagename\endcsname}
-\def\bbl at loop#1#2#3{\bbl@@loop#1{#3}#2,\@nnil,}
-\def\bbl at loopx#1#2{\expandafter\bbl at loop\expandafter#1\expandafter{#2}}
-\def\bbl@@loop#1#2#3,{%
-  \ifx\@nnil#3\relax\else
-    \def#1{#3}#2\bbl at afterfi\bbl@@loop#1{#2}%
-  \fi}
-\def\bbl at for#1#2#3{\bbl at loopx#1{#2}{\ifx#1\@empty\else#3\fi}}
-\def\bbl at add@list#1#2{%
-  \edef#1{%
-    \bbl at ifunset{\bbl at stripslash#1}%
-      {}%
-      {\ifx#1\@empty\else#1,\fi}%
-    #2}}
-\long\def\bbl at afterelse#1\else#2\fi{\fi#1}
-\long\def\bbl at afterfi#1\fi{\fi#1}
-\def\bbl at exp#1{%
-  \begingroup
-    \let\\\noexpand
-    \let\<\bbl at exp@en
-    \let\[\bbl at exp@ue
-    \edef\bbl at exp@aux{\endgroup#1}%
-  \bbl at exp@aux}
-\def\bbl at exp@en#1>{\expandafter\noexpand\csname#1\endcsname}%
-\def\bbl at exp@ue#1]{%
-  \unexpanded\expandafter\expandafter\expandafter{\csname#1\endcsname}}%
-\def\bbl at tempa#1{%
-  \long\def\bbl at trim##1##2{%
-    \futurelet\bbl at trim@a\bbl at trim@c##2\@nil\@nil#1\@nil\relax{##1}}%
-  \def\bbl at trim@c{%
-    \ifx\bbl at trim@a\@sptoken
-      \expandafter\bbl at trim@b
-    \else
-      \expandafter\bbl at trim@b\expandafter#1%
-    \fi}%
-  \long\def\bbl at trim@b#1##1 \@nil{\bbl at trim@i##1}}
-\bbl at tempa{ }
-\long\def\bbl at trim@i#1\@nil#2\relax#3{#3{#1}}
-\long\def\bbl at trim@def#1{\bbl at trim{\def#1}}
-\begingroup
-  \gdef\bbl at ifunset#1{%
-    \expandafter\ifx\csname#1\endcsname\relax
-      \expandafter\@firstoftwo
-    \else
-      \expandafter\@secondoftwo
-    \fi}
-  \bbl at ifunset{ifcsname}%
-    {}%
-    {\gdef\bbl at ifunset#1{%
-       \ifcsname#1\endcsname
-         \expandafter\ifx\csname#1\endcsname\relax
-           \bbl at afterelse\expandafter\@firstoftwo
-         \else
-           \bbl at afterfi\expandafter\@secondoftwo
-         \fi
-       \else
-         \expandafter\@firstoftwo
-       \fi}}
-\endgroup
-\def\bbl at ifblank#1{%
-  \bbl at ifblank@i#1\@nil\@nil\@secondoftwo\@firstoftwo\@nil}
-\long\def\bbl at ifblank@i#1#2\@nil#3#4#5\@nil{#4}
-\def\bbl at ifset#1#2#3{%
-  \bbl at ifunset{#1}{#3}{\bbl at exp{\\\bbl at ifblank{\@nameuse{#1}}}{#3}{#2}}}
-\def\bbl at forkv#1#2{%
-  \def\bbl at kvcmd##1##2##3{#2}%
-  \bbl at kvnext#1,\@nil,}
-\def\bbl at kvnext#1,{%
-  \ifx\@nil#1\relax\else
-    \bbl at ifblank{#1}{}{\bbl at forkv@eq#1=\@empty=\@nil{#1}}%
-    \expandafter\bbl at kvnext
-  \fi}
-\def\bbl at forkv@eq#1=#2=#3\@nil#4{%
-  \bbl at trim@def\bbl at forkv@a{#1}%
-  \bbl at trim{\expandafter\bbl at kvcmd\expandafter{\bbl at forkv@a}}{#2}{#4}}
-\def\bbl at vforeach#1#2{%
-  \def\bbl at forcmd##1{#2}%
-  \bbl at fornext#1,\@nil,}
-\def\bbl at fornext#1,{%
-  \ifx\@nil#1\relax\else
-    \bbl at ifblank{#1}{}{\bbl at trim\bbl at forcmd{#1}}%
-    \expandafter\bbl at fornext
-  \fi}
-\def\bbl at foreach#1{\expandafter\bbl at vforeach\expandafter{#1}}
-\def\bbl at replace#1#2#3{% in #1 -> repl #2 by #3
-  \toks@{}%
-  \def\bbl at replace@aux##1#2##2#2{%
-    \ifx\bbl at nil##2%
-      \toks@\expandafter{\the\toks@##1}%
-    \else
-      \toks@\expandafter{\the\toks@##1#3}%
-      \bbl at afterfi
-      \bbl at replace@aux##2#2%
-    \fi}%
-  \expandafter\bbl at replace@aux#1#2\bbl at nil#2%
-  \edef#1{\the\toks@}}
-\ifx\detokenize\@undefined\else % Unused macros if old Plain TeX
-  \bbl at exp{\def\\\bbl at parsedef##1\detokenize{macro:}}#2->#3\relax{%
-    \def\bbl at tempa{#1}%
-    \def\bbl at tempb{#2}%
-    \def\bbl at tempe{#3}}
-  \def\bbl at sreplace#1#2#3{%
-    \begingroup
-      \expandafter\bbl at parsedef\meaning#1\relax
-      \def\bbl at tempc{#2}%
-      \edef\bbl at tempc{\expandafter\strip at prefix\meaning\bbl at tempc}%
-      \def\bbl at tempd{#3}%
-      \edef\bbl at tempd{\expandafter\strip at prefix\meaning\bbl at tempd}%
-      \bbl at xin@{\bbl at tempc}{\bbl at tempe}% If not in macro, do nothing
-      \ifin@
-        \bbl at exp{\\\bbl at replace\\\bbl at tempe{\bbl at tempc}{\bbl at tempd}}%
-        \def\bbl at tempc{%     Expanded an executed below as 'uplevel'
-           \\\makeatletter % "internal" macros with @ are assumed
-           \\\scantokens{%
-             \bbl at tempa\\\@namedef{\bbl at stripslash#1}\bbl at tempb{\bbl at tempe}}%
-           \catcode64=\the\catcode64\relax}%  Restore @
-      \else
-        \let\bbl at tempc\@empty  % Not \relax
-      \fi
-      \bbl at exp{%      For the 'uplevel' assignments
-    \endgroup
-      \bbl at tempc}}  % empty or expand to set #1 with changes
-\fi
-\def\bbl at ifsamestring#1#2{%
-  \begingroup
-    \protected at edef\bbl at tempb{#1}%
-    \edef\bbl at tempb{\expandafter\strip at prefix\meaning\bbl at tempb}%
-    \protected at edef\bbl at tempc{#2}%
-    \edef\bbl at tempc{\expandafter\strip at prefix\meaning\bbl at tempc}%
-    \ifx\bbl at tempb\bbl at tempc
-      \aftergroup\@firstoftwo
-    \else
-      \aftergroup\@secondoftwo
-    \fi
-  \endgroup}
-\chardef\bbl at engine=%
-  \ifx\directlua\@undefined
-    \ifx\XeTeXinputencoding\@undefined
-      \z@
-    \else
-      \tw@
-    \fi
-  \else
-    \@ne
-  \fi
-\def\bbl at bsphack{%
-  \ifhmode
-    \hskip\z at skip
-    \def\bbl at esphack{\loop\ifdim\lastskip>\z@\unskip\repeat\unskip}%
-  \else
-    \let\bbl at esphack\@empty
-  \fi}
-\def\bbl at cased{%
-  \ifx\oe\OE
-    \expandafter\in@\expandafter
-      {\expandafter\OE\expandafter}\expandafter{\oe}%
-    \ifin@
-      \bbl at afterelse\expandafter\MakeUppercase
-    \else
-      \bbl at afterfi\expandafter\MakeLowercase
-    \fi
-  \else
-    \expandafter\@firstofone
-  \fi}
-\def\bbl at extras@wrap#1#2#3{% 1:in-test, 2:before, 3:after
-  \toks@\expandafter\expandafter\expandafter{%
-    \csname extras\languagename\endcsname}%
-  \bbl at exp{\\\in@{#1}{\the\toks@}}%
-  \ifin@\else
-    \@temptokena{#2}%
-    \edef\bbl at tempc{\the\@temptokena\the\toks@}%
-    \toks@\expandafter{\bbl at tempc#3}%
-    \expandafter\edef\csname extras\languagename\endcsname{\the\toks@}%
-  \fi}
 \bbl at trace{Compatibility with language.def}
 \ifx\bbl at languages\@undefined
   \ifx\directlua\@undefined
@@ -1222,7 +1041,7 @@
 \newcommand\EnableBabelHook[1]{\bbl at csarg\let{hk@#1}\@firstofone}
 \newcommand\DisableBabelHook[1]{\bbl at csarg\let{hk@#1}\@gobble}
 \def\bbl at usehooks{\bbl at usehooks@lang\languagename}
-\def\bbl at usehooks@lang#1#2#3{%
+\def\bbl at usehooks@lang#1#2#3{% Test for Plain
   \ifx\UseHook\@undefined\else\UseHook{babel/*/#2}\fi
   \def\bbl at elth##1{%
     \bbl at cs{hk@##1}{\bbl at cs{ev@##1@#2@}#3}}%
@@ -1239,7 +1058,7 @@
   beforeextras=0,afterextras=0,stopcommands=0,stringprocess=0,%
   hyphenation=2,initiateactive=3,afterreset=0,foreign=0,foreign*=0,%
   beforestart=0,languagename=2,begindocument=1}
-\ifx\NewHook\@undefined\else
+\ifx\NewHook\@undefined\else % Test for Plain (?)
   \def\bbl at tempa#1=#2\@@{\NewHook{babel/#1}}
   \bbl at foreach\bbl at evargs{\bbl at tempa#1\@@}
 \fi
@@ -1948,7 +1767,7 @@
 \def\bbl at toglobal#1{\global\let#1#1}
 \@ifpackagewith{babel}{nocase}%
   {\let\bbl at patchuclc\relax}%
-  {\def\bbl at patchuclc{%
+  {\def\bbl at patchuclc{% TODO. Delete. Doesn’t work any more.
     \global\let\bbl at patchuclc\relax
     \g at addto@macro\@uclclist{\reserved at b{\reserved at b\bbl at uclc}}%
     \gdef\bbl at uclc##1{%
@@ -2470,6 +2289,7 @@
   \let\bbl at calendars\@empty
   \global\let\bbl at inidata\@empty
   \global\let\bbl at extend@ini\@gobble
+  \global\let\bbl at included@inis\@empty
   \gdef\bbl at key@list{;}%
   \bbl at forkv{#1}{%
     \in@{/}{##1}% With /, (re)sets a value in the ini
@@ -2535,6 +2355,14 @@
       {}%  With \bbl at load@basic below
       {\bbl at provide@renew{#2}}%
   \fi
+  % == include == TODO
+  % \ifx\bbl at included@inis\@empty\else
+  %   \bbl at replace\bbl at included@inis{ }{,}%
+  %   \bbl at foreach\bbl at included@inis{%
+  %     \openin\bbl at readstream=babel-##1.ini
+  %     \bbl at extend@ini{#2}}%
+  %   \closein\bbl at readstream
+  % \fi
   % Post tasks
   % ----------
   % == subsequent calls after the first provide for a locale ==
@@ -2557,11 +2385,6 @@
        \\\bbl at toglobal\<bbl at ensure@\languagename>%
        \\\bbl at toglobal\<bbl at ensure@\languagename\space>}%
   \fi
-  % ==
-  % 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 set the basic parameters, but still loading the
-  % whole ini file.
   \bbl at load@basic{#2}%
   % == script, language ==
   % Override the values from ini or defines them
@@ -2976,7 +2799,7 @@
   \ifin@\else
     \bbl at xin@{,identification/include.}%
              {,\bbl at section/\bbl at tempa}%
-    \ifin@\edef\bbl at required@inis{\the\toks@}\fi
+    \ifin@\xdef\bbl at included@inis{\the\toks@}\fi
     \bbl at exp{%
       \\\g at addto@macro\\\bbl at inidata{%
         \\\bbl at elt{\bbl at section}{\bbl at tempa}{\the\toks@}}}%
@@ -3024,16 +2847,9 @@
       \let\bbl at inistore\bbl at inistore@min    % Remember it's local
     \fi
     \def\bbl at section{identification}%
-    \let\bbl at required@inis\@empty
     \bbl at exp{\\\bbl at inistore tag.ini=#1\\\@@}%
     \bbl at inistore load.level=#2\@@
     \bbl at loop@ini
-    \ifx\bbl at required@inis\@empty\else
-      \bbl at replace\bbl at required@inis{ }{,}%
-      \bbl at foreach\bbl at required@inis{%
-        \openin\bbl at readstream=babel-##1.ini
-        \bbl at loop@ini}%
-    \fi
     % == Process stored data ==
     \bbl at csarg\xdef{lini@\languagename}{#1}%
     \bbl at read@ini at aux
@@ -3675,13 +3491,18 @@
 \@namedef{bbl at info@extension.x.tag.bcp47}{extx}
 \providecommand\BCPdata{}
 \ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
-  \renewcommand\BCPdata[1]{%
+  \renewcommand\BCPdata[1]{\bbl at bcpdata@i#1\@empty}
+  \def\bbl at bcpdata@i#1#2#3#4#5#6\@empty{%
+    \@nameuse{str_if_eq:nnTF}{#1#2#3#4#5}{main.}%
+      {\bbl at bcpdata@ii{#6}\bbl at main@language}%
+      {\bbl at bcpdata@ii{#1#2#3#4#5#6}\languagename}}%
+  \def\bbl at bcpdata@ii#1#2{%
     \bbl at ifunset{bbl at info@#1.tag.bcp47}%
       {\bbl at error{Unknown field '#1' in \string\BCPdata.\\%
                   Perhaps you misspelled it.}%
                  {See the manual for details.}}%
-      {\bbl at ifunset{bbl@\csname bbl at info@#1.tag.bcp47\endcsname @\languagename}{}%
-        {\bbl at cs{\csname bbl at info@#1.tag.bcp47\endcsname @\languagename}}}}
+      {\bbl at ifunset{bbl@\csname bbl at info@#1.tag.bcp47\endcsname @#2}{}%
+        {\bbl at cs{\csname bbl at info@#1.tag.bcp47\endcsname @#2}}}}
 \fi
 \@namedef{bbl at info@casing.tag.bcp47}{casing}
 \let\bbl at ensureinfo\@gobble
@@ -3837,11 +3658,6 @@
   \def\bbl at savelastskip##1\bbl at restorelastskip{}}
 \@namedef{bbl at ADJ@select.encoding at off}{%
   \let\bbl at encoding@select at off\@empty}
-\ifx\directlua\@undefined\else
-  \ifx\bbl at luapatterns\@undefined
-    \input luababel.def
-  \fi
-\fi
 \bbl at trace{Cross referencing macros}
 \ifx\bbl at opt@safe\@empty\else % ie, if 'ref' and/or 'bib'
   \def\@newl at bel#1#2#3{%
@@ -4309,10 +4125,12 @@
   \bbl at load@language{hebrew}}
 \DeclareOption{hungarian}{\bbl at try@load at lang{}{magyar}{}}
 \DeclareOption{lowersorbian}{\bbl at try@load at lang{}{lsorbian}{}}
+\DeclareOption{northernsami}{\bbl at try@load at lang{}{samin}{}}
 \DeclareOption{nynorsk}{\bbl at try@load at lang{}{norsk}{}}
 \DeclareOption{polutonikogreek}{%
   \bbl at try@load at lang{}{greek}{\languageattribute{greek}{polutoniko}}}
 \DeclareOption{russian}{\bbl at try@load at lang{}{russianb}{}}
+\DeclareOption{scottishgaelic}{\bbl at try@load at lang{}{scottish}{}}
 \DeclareOption{ukrainian}{\bbl at try@load at lang{}{ukraineb}{}}
 \DeclareOption{uppersorbian}{\bbl at try@load at lang{}{usorbian}{}}
 \ifx\bbl at opt@config\@nnil

Modified: trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2023-05-11 20:11:39 UTC (rev 67073)
@@ -38,10 +38,10 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{hyphen.cfg}[2023/04/18 3.88 Babel hyphens]
+\ProvidesFile{hyphen.cfg}[2023/05/11 v3.89 Babel hyphens]
 \xdef\bbl at format{\jobname}
-\def\bbl at version{3.88}
-\def\bbl at date{2023/04/18}
+\def\bbl at version{3.89}
+\def\bbl at date{2023/05/11}
 \ifx\AtBeginDocument\@undefined
   \def\@empty{}
 \fi

Added: trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-acadian.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-acadian.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-acadian.tex	2023-05-11 20:11:39 UTC (rev 67073)
@@ -0,0 +1,12 @@
+% This file is part of babel. For further details see:
+% https://www.ctan.org/pkg/babel
+\ifx\BabelBeforeIni\undefined
+  \PackageError{babel}%
+    {This file is a component of babel and cannot\MessageBreak
+     be loaded directly. I'll stop immediately}%
+    {Just use babel as documented.}%
+  \stop
+\fi
+\BabelBeforeIni{fr-x-acadian}{%
+}
+\endinput
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-acadian.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-fr-x-acadian.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-fr-x-acadian.ini	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-fr-x-acadian.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -0,0 +1,186 @@
+; This file is part of babel. For further details see:
+;   https://www.ctan.org/pkg/babel
+; Data has been collected mainly from the following sources:
+; * babel language styles (license LPPL):
+;   https://www.ctan.org/pkg/babel-contrib
+; * Common Locale Data Repository (license Unicode):
+;   http://cldr.unicode.org/
+;   http://unicode.org/copyright.html
+
+[identification]
+charset = utf8
+version = 0.9
+date = 2023-05-11
+name.local = acadien
+; Name from Glottolog. Note Acadian is *not* Canadian French
+name.english = Acadian
+name.babel = acadian
+tag.bcp47 = fr-x-acadian
+language.tag.bcp47 = fr
+tag.opentype = FRA
+script.name = Latin
+script.tag.bcp47 = Latn
+script.tag.opentype = latn
+extension.x.tag.bcp47 = acadian
+level = 1
+encodings = T1 OT1 LY1
+derivate = no
+
+[captions]
+preface = Préface
+ref = Références
+abstract = Résumé
+bib = Bibliographie
+chapter = Chapitre
+appendix = Annexe
+contents = Table des matières
+listfigure = Table des figures
+listtable = Liste des tableaux
+index = Index
+figure = Figure
+table = Table
+part = partie
+encl = P.~J.
+cc = Copie à
+headto = 
+page = page
+see = voir
+also = voir aussi
+proof = Démonstration
+glossary = Glossaire
+
+[captions.licr]
+preface = Pr\'eface
+ref = R\'ef\'erences
+abstract = R\'esum\'e
+bib = Bibliographie
+chapter = Chapitre
+appendix = Annexe
+contents = Table des mati\`eres
+listfigure = Table des figures
+listtable = Liste des tableaux
+index = Index
+figure = Figure
+table = Table
+part = partie
+encl = P.~J.
+cc = Copie \`a
+headto = 
+page = page
+see = voir
+also = voir aussi
+proof = D\'emonstration
+glossary = Glossaire
+
+[date.gregorian]
+date.long = [d|date.day] [MMMM] [y]
+date.short = [dd]/[MM]/[y]
+months.wide.1 = janvier
+months.wide.2 = février
+months.wide.3 = mars
+months.wide.4 = avril
+months.wide.5 = mai
+months.wide.6 = juin
+months.wide.7 = juillet
+months.wide.8 = août
+months.wide.9 = septembre
+months.wide.10 = octobre
+months.wide.11 = novembre
+months.wide.12 = décembre
+months.narrow.1 = J
+months.narrow.2 = F
+months.narrow.3 = M
+months.narrow.4 = A
+months.narrow.5 = M
+months.narrow.6 = J
+months.narrow.7 = J
+months.narrow.8 = A
+months.narrow.9 = S
+months.narrow.10 = O
+months.narrow.11 = N
+months.narrow.12 = D
+days.wide.mon = lundi
+days.wide.tue = mardi
+days.wide.wed = mercredi
+days.wide.thu = jeudi
+days.wide.fri = vendredi
+days.wide.sat = samedi
+days.wide.sun = dimanche
+days.abbreviated.mon = lun.
+days.abbreviated.tue = mar.
+days.abbreviated.wed = mer.
+days.abbreviated.thu = jeu.
+days.abbreviated.fri = ven.
+days.abbreviated.sat = sam.
+days.abbreviated.sun = dim.
+days.narrow.mon = L
+days.narrow.tue = M
+days.narrow.wed = M
+days.narrow.thu = J
+days.narrow.fri = V
+days.narrow.sat = S
+days.narrow.sun = D
+dayPeriods.abbreviated.am = AM
+dayPeriods.abbreviated.pm = PM
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
+
+[date.gregorian.licr]
+months.wide.1 = janvier
+months.wide.2 = f\'evrier
+months.wide.3 = mars
+months.wide.4 = avril
+months.wide.5 = mai
+months.wide.6 = juin
+months.wide.7 = juillet
+months.wide.8 = ao\^ut
+months.wide.9 = septembre
+months.wide.10 = octobre
+months.wide.11 = novembre
+months.wide.12 = d\'ecembre
+
+[time.gregorian]
+time.medium = [HH]:[mm]:[ss]
+time.short = [HH]:[mm]
+
+[typography]
+frenchspacing = yes
+hyphenrules = french
+lefthyphenmin = 2
+righthyphenmin = 3
+hyphenchar = 
+prehyphenchar = 
+posthyphenchar = 
+exhyphenchar = 
+preexhyphenchar = 
+postexhyphenchar = 
+hyphenationmin = 
+; The syntax is liable to change in 'other' values
+hyphenate.other.locale = "27
+
+[characters]
+delimiters.quotes = «»«»
+auxiliary = [á å ä ã ā ć ē í ì ī ij ñ ó ò ö õ ø ř š ſ ß ú ǔ]
+exemplarCharacters = [a à â æ b c ç d e é è ê ë f g h i î ï j k l m n o ô œ p q r s t u ù û ü v w x y ÿ z]
+index = [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ’ \" “ ” « » ( ) \\[ \\] § @ * / \\& # † ‡]
+
+[numbers]
+defaultNumberingSystem = latn
+minimumGroupingDigits = 1
+decimal = ,
+exponential = E
+group = .
+infinity = ∞
+list = ;
+minusSign = -
+nan = NaN
+perMille = ‰
+percentSign = %
+plusSign = +
+superscriptingExponent = ×
+
+[counters]
+date.day = 1\textsuperscript{er} 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31


Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/fr/babel-fr-x-acadian.ini
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/se/babel-se.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/se/babel-se.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/se/babel-se.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -9,11 +9,11 @@
 
 [identification]
 charset = utf8
-version = 1.2
-date = 2020-06-30
+version = 1.3
+date = 2023-05-02
 name.local = davvisámegiella
 name.english = Northern Sami
-name.babel = samin northernsami
+name.babel = northernsami samin 
 name.polyglossia = sami
 tag.bcp47 = se
 language.tag.bcp47 = se

Added: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-ijekavsk.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-ijekavsk.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-ijekavsk.tex	2023-05-11 20:11:39 UTC (rev 67073)
@@ -0,0 +1,12 @@
+% This file is part of babel. For further details see:
+% https://www.ctan.org/pkg/babel
+\ifx\BabelBeforeIni\undefined
+  \PackageError{babel}%
+    {This file is a component of babel and cannot\MessageBreak
+     be loaded directly. I'll stop immediately}%
+    {Just use babel as documented.}%
+  \stop
+\fi
+\BabelBeforeIni{sr-ijekavsk}{%
+}
+\endinput
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-ijekavsk.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-latn-ijekavsk.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-latn-ijekavsk.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-latn-ijekavsk.tex	2023-05-11 20:11:39 UTC (rev 67073)
@@ -0,0 +1,12 @@
+% This file is part of babel. For further details see:
+% https://www.ctan.org/pkg/babel
+\ifx\BabelBeforeIni\undefined
+  \PackageError{babel}%
+    {This file is a component of babel and cannot\MessageBreak
+     be loaded directly. I'll stop immediately}%
+    {Just use babel as documented.}%
+  \stop
+\fi
+\BabelBeforeIni{sr-Latn-ijekavsk}{%
+}
+\endinput
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-serbian-latn-ijekavsk.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-BA.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-BA.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-BA.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,11 +6,12 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2021-09-29
+version = 1.6
+date = 2023-04-31
 name.local = српски
 name.english = Serbian
 name.babel = serbian-cyrillic-bosniaherzegovina serbian-cyrl-ba
@@ -30,14 +31,14 @@
 [captions]
 preface = Предговор
 ref = Литература
-abstract = Абстракт
+abstract = Сажетак
 bib = Библиографиjа
 chapter = Глава
 appendix = Додатак
 contents = Садржаj
-listfigure = Листаслика
-listtable = Листатабела
-index = Индекспоjмова
+listfigure = Списак слика
+listtable = Списак табела
+index = Индекс
 figure = Слика
 table = Табела
 part = Део
@@ -53,26 +54,42 @@
 [captions.licr]
 preface = \CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr
 ref = \CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra
-abstract = \CYRA\cyrb\cyrs\cyrt\cyrr\cyra\cyrk\cyrt
-bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri j\cyra
+abstract = \CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk
+bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra
 chapter = \CYRG\cyrl\cyra\cyrv\cyra
 appendix = \CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk
-contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra j
-listfigure = \CYRL\cyri\cyrs\cyrt\cyra\cyrs\cyrl\cyri\cyrk\cyra
-listtable = \CYRL\cyri\cyrs\cyrt\cyra\cyrt\cyra\cyrb\cyre\cyrl\cyra
-index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs\cyrp\cyro j\cyrm\cyro\cyrv\cyra
+contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje
+listfigure = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra
+listtable = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra
+index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs
 figure = \CYRS\cyrl\cyri\cyrk\cyra
 table = \CYRT\cyra\cyrb\cyre\cyrl\cyra
 part = \CYRD\cyre\cyro
 encl = \CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri
-cc = \CYRK\cyro\cyrp\cyri j\cyre
+cc = \CYRK\cyro\cyrp\cyri\cyrje\cyre
 headto = \CYRP\cyrr\cyri\cyrm\cyra
 page = \cyrs\cyrt\cyrr\cyra\cyrn\cyra
 see = \cyrv\cyri\cyrd\cyri
-also = \cyrv\cyri\cyrd\cyri\cyrt\cyra\cyrk\cyro\cyrdje\cyre
+also = \cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre
 proof = \CYRD\cyro\cyrk\cyra\cyrz
 glossary = \CYRR\cyre\cyrch\cyrn\cyri\cyrk
 
+[date.gregorian.Genitive]
+date.long = [d].[ ][MMMM] [y].
+date.short = [d].[M].[yy].
+months.wide.1 = јануара
+months.wide.2 = фебруара
+months.wide.3 = марта
+months.wide.4 = априла
+months.wide.5 = маја
+months.wide.6 = јуна
+months.wide.7 = јула
+months.wide.8 = августа
+months.wide.9 = септембра
+months.wide.10 = октобра
+months.wide.11 = новембра
+months.wide.12 = децембра
+
 [date.gregorian]
 date.long = [d].[ ][MMMM] [y].
 date.short = [d].[M].[yy].
@@ -100,7 +117,7 @@
 months.narrow.10 = о
 months.narrow.11 = н
 months.narrow.12 = д
-days.wide.mon = понедељак
+days.wide.mon = понедјељак
 days.wide.tue = уторак
 days.wide.wed = сриједа
 days.wide.thu = четвртак
@@ -107,13 +124,13 @@
 days.wide.fri = петак
 days.wide.sat = субота
 days.wide.sun = недјеља
-days.abbreviated.mon = пон.
-days.abbreviated.tue = ут.
-days.abbreviated.wed = ср.
-days.abbreviated.thu = чет.
-days.abbreviated.fri = пет.
-days.abbreviated.sat = суб.
-days.abbreviated.sun = нед.
+days.abbreviated.mon = пон
+days.abbreviated.tue = уто
+days.abbreviated.wed = сри
+days.abbreviated.thu = чет
+days.abbreviated.fri = пет
+days.abbreviated.sat = суб
+days.abbreviated.sun = нед
 days.narrow.mon = п
 days.narrow.tue = у
 days.narrow.wed = с
@@ -121,13 +138,27 @@
 days.narrow.fri = п
 days.narrow.sat = с
 days.narrow.sun = н
-dayPeriods.abbreviated.am = прије подне
-dayPeriods.abbreviated.pm = по подне
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
+dayPeriods.abbreviated.am = прије подне
+dayPeriods.abbreviated.pm = по подне
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
 dayPeriods.wide.am = прије подне
 dayPeriods.wide.pm = по подне
 
+[date.gregorian.Genitive.licr]
+months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra
+months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra
+months.wide.3 = \cyrm\cyra\cyrr\cyrt\cyra
+months.wide.4 = \cyra\cyrp\cyrr\cyri\cyrl\cyra
+months.wide.5 = \cyrm\cyra\cyrje\cyra
+months.wide.6 = \cyrje\cyru\cyrn\cyra
+months.wide.7 = \cyrje\cyru\cyrl\cyra
+months.wide.8 = \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra
+months.wide.9 = \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.10 = \cyro\cyrk\cyrt\cyro\cyrb\cyrr\cyra
+months.wide.11 = \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.12 = \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyrr\cyra
+
 [date.gregorian.licr]
 months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr
 months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr
@@ -147,10 +178,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbianc
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -160,11 +191,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
-auxiliary = [ё й щ ъ ы ь э ю я]
+delimiters.quotes = „“’’
+auxiliary = [{а\u0302} {е\u0302} {и\u0302} {о\u0302} {у\u0302}]
 exemplarCharacters = [а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш]
 index = [А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn
@@ -190,7 +221,7 @@
 transliteration.gajica.1.0 = { ([ln])j }
 transliteration.gajica.1.1 =   { string = {1|ln|љњ} }
 transliteration.gajica.2.0 = { ([LN])[jJ] }
-transliteration.gajica.2.1 =   { string = {1|LN|ЉЉ} }
+transliteration.gajica.2.1 =   { string = {1|LN|ЉЊ} }
 transliteration.gajica.3.0 = { dž }
 transliteration.gajica.3.1 =   { string = џ }
 transliteration.gajica.4.0 = { D[žŽ] }

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-ME.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-ME.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-ME.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,20 +6,18 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2021-09-29
+version = 1.6
+date = 2023-04-31
 name.local = српски
-name.english = Serbian
+name.english = Montenegrin
 name.babel = serbian-cyrillic-montenegro serbian-cyrl-me
 tag.bcp47 = sr-Cyrl-ME
 language.tag.bcp47 = sr
 tag.opentype = SRB
-region.local = Црна Гора
-region.english = Montenegro
-region.tag.bcp47 = ME
 script.name = Cyrillic
 script.tag.bcp47 = Cyrl
 script.tag.opentype = cyrl
@@ -30,14 +28,14 @@
 [captions]
 preface = Предговор
 ref = Литература
-abstract = Абстракт
+abstract = Сажетак
 bib = Библиографиjа
 chapter = Глава
 appendix = Додатак
 contents = Садржаj
-listfigure = Листаслика
-listtable = Листатабела
-index = Индекспоjмова
+listfigure = Списак слика
+listtable = Списак табела
+index = Индекс
 figure = Слика
 table = Табела
 part = Део
@@ -53,26 +51,42 @@
 [captions.licr]
 preface = \CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr
 ref = \CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra
-abstract = \CYRA\cyrb\cyrs\cyrt\cyrr\cyra\cyrk\cyrt
-bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri j\cyra
+abstract = \CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk
+bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra
 chapter = \CYRG\cyrl\cyra\cyrv\cyra
 appendix = \CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk
-contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra j
-listfigure = \CYRL\cyri\cyrs\cyrt\cyra\cyrs\cyrl\cyri\cyrk\cyra
-listtable = \CYRL\cyri\cyrs\cyrt\cyra\cyrt\cyra\cyrb\cyre\cyrl\cyra
-index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs\cyrp\cyro j\cyrm\cyro\cyrv\cyra
+contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje
+listfigure = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra
+listtable = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra
+index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs
 figure = \CYRS\cyrl\cyri\cyrk\cyra
 table = \CYRT\cyra\cyrb\cyre\cyrl\cyra
 part = \CYRD\cyre\cyro
 encl = \CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri
-cc = \CYRK\cyro\cyrp\cyri j\cyre
+cc = \CYRK\cyro\cyrp\cyri\cyrje\cyre
 headto = \CYRP\cyrr\cyri\cyrm\cyra
 page = \cyrs\cyrt\cyrr\cyra\cyrn\cyra
 see = \cyrv\cyri\cyrd\cyri
-also = \cyrv\cyri\cyrd\cyri\cyrt\cyra\cyrk\cyro\cyrdje\cyre
+also = \cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre
 proof = \CYRD\cyro\cyrk\cyra\cyrz
 glossary = \CYRR\cyre\cyrch\cyrn\cyri\cyrk
 
+[date.gregorian.Genitive]
+date.long = [d].[ ][MMMM] [y].
+date.short = [d].[M].[yy].
+months.wide.1 = јануара
+months.wide.2 = фебруара
+months.wide.3 = марта
+months.wide.4 = априла
+months.wide.5 = маја
+months.wide.6 = јуна
+months.wide.7 = јула
+months.wide.8 = августа
+months.wide.9 = септембра
+months.wide.10 = октобра
+months.wide.11 = новембра
+months.wide.12 = децембра
+
 [date.gregorian]
 date.long = [d].[ ][MMMM] [y].
 date.short = [d].[M].[yy].
@@ -107,13 +121,13 @@
 days.wide.fri = петак
 days.wide.sat = субота
 days.wide.sun = недјеља
-days.abbreviated.mon = пон.
-days.abbreviated.tue = ут.
-days.abbreviated.wed = ср.
-days.abbreviated.thu = чет.
-days.abbreviated.fri = пет.
-days.abbreviated.sat = суб.
-days.abbreviated.sun = нед.
+days.abbreviated.mon = пон
+days.abbreviated.tue = уто
+days.abbreviated.wed = сре
+days.abbreviated.thu = чет
+days.abbreviated.fri = пет
+days.abbreviated.sat = суб
+days.abbreviated.sun = нед
 days.narrow.mon = п
 days.narrow.tue = у
 days.narrow.wed = с
@@ -121,13 +135,27 @@
 days.narrow.fri = п
 days.narrow.sat = с
 days.narrow.sun = н
-dayPeriods.abbreviated.am = прије подне
-dayPeriods.abbreviated.pm = по подне
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
+dayPeriods.abbreviated.am = прије подне
+dayPeriods.abbreviated.pm = по подне
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
 dayPeriods.wide.am = прије подне
 dayPeriods.wide.pm = по подне
 
+[date.gregorian.Genitive.licr]
+months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra
+months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra
+months.wide.3 = \cyrm\cyra\cyrr\cyrt\cyra
+months.wide.4 = \cyra\cyrp\cyrr\cyri\cyrl\cyra
+months.wide.5 = \cyrm\cyra\cyrje\cyra
+months.wide.6 = \cyrje\cyru\cyrn\cyra
+months.wide.7 = \cyrje\cyru\cyrl\cyra
+months.wide.8 = \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra
+months.wide.9 = \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.10 = \cyro\cyrk\cyrt\cyro\cyrb\cyrr\cyra
+months.wide.11 = \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.12 = \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyrr\cyra
+
 [date.gregorian.licr]
 months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr
 months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr
@@ -147,10 +175,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbianc
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -160,11 +188,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
-auxiliary = [ё й щ ъ ы ь э ю я]
+delimiters.quotes = „“’’
+auxiliary = [{а\u0302} {е\u0302} {и\u0302} {о\u0302} {у\u0302}]
 exemplarCharacters = [а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш]
 index = [А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-XK.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-XK.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl-XK.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,11 +6,12 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2021-09-29
+version = 1.6
+date = 2023-04-31
 name.local = српски
 name.english = Serbian
 name.babel = serbian-cyrillic-kosovo serbian-cyrl-xk
@@ -17,9 +18,6 @@
 tag.bcp47 = sr-Cyrl-XK
 language.tag.bcp47 = sr
 tag.opentype = SRB
-region.local = Косово
-region.english = Kosovo
-region.tag.bcp47 = XK
 script.name = Cyrillic
 script.tag.bcp47 = Cyrl
 script.tag.opentype = cyrl
@@ -30,14 +28,14 @@
 [captions]
 preface = Предговор
 ref = Литература
-abstract = Абстракт
+abstract = Сажетак
 bib = Библиографиjа
 chapter = Глава
 appendix = Додатак
 contents = Садржаj
-listfigure = Листаслика
-listtable = Листатабела
-index = Индекспоjмова
+listfigure = Списак слика
+listtable = Списак табела
+index = Индекс
 figure = Слика
 table = Табела
 part = Део
@@ -53,26 +51,42 @@
 [captions.licr]
 preface = \CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr
 ref = \CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra
-abstract = \CYRA\cyrb\cyrs\cyrt\cyrr\cyra\cyrk\cyrt
-bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri j\cyra
+abstract = \CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk
+bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra
 chapter = \CYRG\cyrl\cyra\cyrv\cyra
 appendix = \CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk
-contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra j
-listfigure = \CYRL\cyri\cyrs\cyrt\cyra\cyrs\cyrl\cyri\cyrk\cyra
-listtable = \CYRL\cyri\cyrs\cyrt\cyra\cyrt\cyra\cyrb\cyre\cyrl\cyra
-index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs\cyrp\cyro j\cyrm\cyro\cyrv\cyra
+contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje
+listfigure = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra
+listtable = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra
+index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs
 figure = \CYRS\cyrl\cyri\cyrk\cyra
 table = \CYRT\cyra\cyrb\cyre\cyrl\cyra
 part = \CYRD\cyre\cyro
 encl = \CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri
-cc = \CYRK\cyro\cyrp\cyri j\cyre
+cc = \CYRK\cyro\cyrp\cyri\cyrje\cyre
 headto = \CYRP\cyrr\cyri\cyrm\cyra
 page = \cyrs\cyrt\cyrr\cyra\cyrn\cyra
 see = \cyrv\cyri\cyrd\cyri
-also = \cyrv\cyri\cyrd\cyri\cyrt\cyra\cyrk\cyro\cyrdje\cyre
+also = \cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre
 proof = \CYRD\cyro\cyrk\cyra\cyrz
 glossary = \CYRR\cyre\cyrch\cyrn\cyri\cyrk
 
+[date.gregorian.Genitive]
+date.long = [d].[ ][MMMM] [y].
+date.short = [d].[M].[yy].
+months.wide.1 = јануара
+months.wide.2 = фебруара
+months.wide.3 = марта
+months.wide.4 = априла
+months.wide.5 = маја
+months.wide.6 = јуна
+months.wide.7 = јула
+months.wide.8 = августа
+months.wide.9 = септембра
+months.wide.10 = октобра
+months.wide.11 = новембра
+months.wide.12 = децембра
+
 [date.gregorian]
 date.long = [d].[ ][MMMM] [y].
 date.short = [d].[M].[yy].
@@ -107,13 +121,13 @@
 days.wide.fri = петак
 days.wide.sat = субота
 days.wide.sun = недеља
-days.abbreviated.mon = пон.
-days.abbreviated.tue = ут.
-days.abbreviated.wed = ср.
-days.abbreviated.thu = чет.
-days.abbreviated.fri = пет.
-days.abbreviated.sat = суб.
-days.abbreviated.sun = нед.
+days.abbreviated.mon = пон
+days.abbreviated.tue = уто
+days.abbreviated.wed = сре
+days.abbreviated.thu = чет
+days.abbreviated.fri = пет
+days.abbreviated.sat = суб
+days.abbreviated.sun = нед
 days.narrow.mon = п
 days.narrow.tue = у
 days.narrow.wed = с
@@ -123,11 +137,25 @@
 days.narrow.sun = н
 dayPeriods.abbreviated.am = пре подне
 dayPeriods.abbreviated.pm = по подне
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
-dayPeriods.wide.am = пре подне
-dayPeriods.wide.pm = по подне
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
 
+[date.gregorian.Genitive.licr]
+months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra
+months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra
+months.wide.3 = \cyrm\cyra\cyrr\cyrt\cyra
+months.wide.4 = \cyra\cyrp\cyrr\cyri\cyrl\cyra
+months.wide.5 = \cyrm\cyra\cyrje\cyra
+months.wide.6 = \cyrje\cyru\cyrn\cyra
+months.wide.7 = \cyrje\cyru\cyrl\cyra
+months.wide.8 = \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra
+months.wide.9 = \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.10 = \cyro\cyrk\cyrt\cyro\cyrb\cyrr\cyra
+months.wide.11 = \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.12 = \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyrr\cyra
+
 [date.gregorian.licr]
 months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr
 months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr
@@ -147,10 +175,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbianc
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -160,11 +188,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
-auxiliary = [ё й щ ъ ы ь э ю я]
+delimiters.quotes = „“’’
+auxiliary = [{а\u0302} {е\u0302} {и\u0302} {о\u0302} {у\u0302}]
 exemplarCharacters = [а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш]
 index = [А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Cyrl.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,11 +6,12 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2021-09-29
+version = 1.6
+date = 2023-04-31
 name.local = српски
 name.english = Serbian
 name.babel = serbian-cyrillic serbian-cyrl
@@ -27,14 +28,14 @@
 [captions]
 preface = Предговор
 ref = Литература
-abstract = Абстракт
+abstract = Сажетак
 bib = Библиографиjа
 chapter = Глава
 appendix = Додатак
 contents = Садржаj
-listfigure = Листаслика
-listtable = Листатабела
-index = Индекспоjмова
+listfigure = Списак слика
+listtable = Списак табела
+index = Индекс
 figure = Слика
 table = Табела
 part = Део
@@ -50,26 +51,42 @@
 [captions.licr]
 preface = \CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr
 ref = \CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra
-abstract = \CYRA\cyrb\cyrs\cyrt\cyrr\cyra\cyrk\cyrt
-bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri j\cyra
+abstract = \CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk
+bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra
 chapter = \CYRG\cyrl\cyra\cyrv\cyra
 appendix = \CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk
-contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra j
-listfigure = \CYRL\cyri\cyrs\cyrt\cyra\cyrs\cyrl\cyri\cyrk\cyra
-listtable = \CYRL\cyri\cyrs\cyrt\cyra\cyrt\cyra\cyrb\cyre\cyrl\cyra
-index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs\cyrp\cyro j\cyrm\cyro\cyrv\cyra
+contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje
+listfigure = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra
+listtable = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra
+index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs
 figure = \CYRS\cyrl\cyri\cyrk\cyra
 table = \CYRT\cyra\cyrb\cyre\cyrl\cyra
 part = \CYRD\cyre\cyro
 encl = \CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri
-cc = \CYRK\cyro\cyrp\cyri j\cyre
+cc = \CYRK\cyro\cyrp\cyri\cyrje\cyre
 headto = \CYRP\cyrr\cyri\cyrm\cyra
 page = \cyrs\cyrt\cyrr\cyra\cyrn\cyra
 see = \cyrv\cyri\cyrd\cyri
-also = \cyrv\cyri\cyrd\cyri\cyrt\cyra\cyrk\cyro\cyrdje\cyre
+also = \cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre
 proof = \CYRD\cyro\cyrk\cyra\cyrz
 glossary = \CYRR\cyre\cyrch\cyrn\cyri\cyrk
 
+[date.gregorian.Genitive]
+date.long = [d].[ ][MMMM] [y].
+date.short = [d].[M].[yy].
+months.wide.1 = јануара
+months.wide.2 = фебруара
+months.wide.3 = марта
+months.wide.4 = априла
+months.wide.5 = маја
+months.wide.6 = јуна
+months.wide.7 = јула
+months.wide.8 = августа
+months.wide.9 = септембра
+months.wide.10 = октобра
+months.wide.11 = новембра
+months.wide.12 = децембра
+
 [date.gregorian]
 date.long = [d].[ ][MMMM] [y].
 date.short = [d].[M].[yy].
@@ -120,11 +137,25 @@
 days.narrow.sun = н
 dayPeriods.abbreviated.am = пре подне
 dayPeriods.abbreviated.pm = по подне
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
-dayPeriods.wide.am = пре подне
-dayPeriods.wide.pm = по подне
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
 
+[date.gregorian.Genitive.licr]
+months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra
+months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra
+months.wide.3 = \cyrm\cyra\cyrr\cyrt\cyra
+months.wide.4 = \cyra\cyrp\cyrr\cyri\cyrl\cyra
+months.wide.5 = \cyrm\cyra\cyrje\cyra
+months.wide.6 = \cyrje\cyru\cyrn\cyra
+months.wide.7 = \cyrje\cyru\cyrl\cyra
+months.wide.8 = \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra
+months.wide.9 = \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.10 = \cyro\cyrk\cyrt\cyro\cyrb\cyrr\cyra
+months.wide.11 = \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.12 = \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyrr\cyra
+
 [date.gregorian.licr]
 months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr
 months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr
@@ -144,10 +175,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbianc
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -157,11 +188,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
-auxiliary = [ё й щ ъ ы ь э ю я]
+delimiters.quotes = „“’’
+auxiliary = [{а\u0302} {е\u0302} {и\u0302} {о\u0302} {у\u0302}]
 exemplarCharacters = [а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш]
 index = [А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn
@@ -187,7 +218,7 @@
 transliteration.gajica.1.0 = { ([ln])j }
 transliteration.gajica.1.1 =   { string = {1|ln|љњ} }
 transliteration.gajica.2.0 = { ([LN])[jJ] }
-transliteration.gajica.2.1 =   { string = {1|LN|ЉЉ} }
+transliteration.gajica.2.1 =   { string = {1|LN|ЉЊ} }
 transliteration.gajica.3.0 = { dž }
 transliteration.gajica.3.1 =   { string = џ }
 transliteration.gajica.4.0 = { D[žŽ] }

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-BA.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-BA.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-BA.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,11 +6,12 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.2
-date = 2020-06-30
+version = 1.3
+date = 2023-04-31
 name.local = srpski
 name.english = Serbian
 name.babel = serbian-latin-bosniaherzegovina serbian-latn-ba
@@ -18,8 +19,6 @@
 language.tag.bcp47 = sr
 tag.opentype = SRB
 region.local = Bosna i Hercegovina
-region.english = Bosnia & Herzegovina
-region.tag.bcp47 = BA
 script.name = Latin
 script.tag.bcp47 = Latn
 script.tag.opentype = latn
@@ -35,8 +34,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadržaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -44,11 +43,11 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi takođe
+page = strana
+see = vidi
+also = vidi takođe
 proof = Dokaz
-glossary = Glossary
+glossary = Rečnik
 
 [captions.licr]
 preface = Predgovor
@@ -58,8 +57,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadr\v zaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -67,14 +66,14 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi tako\dj e
+page = strana
+see = vidi
+also = vidi tako\dj e
 proof = Dokaz
-glossary = Glossary
+glossary = Re\v cnik
 
 [date.gregorian]
-date.long = [d].[ ][MMMM] [y]
+date.long = [d]. [MMMM] [y].
 date.short = [d].[M].[yy].
 months.wide.1 = januar
 months.wide.2 = februar
@@ -100,7 +99,7 @@
 months.narrow.10 = o
 months.narrow.11 = n
 months.narrow.12 = d
-days.wide.mon = ponedeljak
+days.wide.mon = ponedjeljak
 days.wide.tue = utorak
 days.wide.wed = srijeda
 days.wide.thu = četvrtak
@@ -107,13 +106,13 @@
 days.wide.fri = petak
 days.wide.sat = subota
 days.wide.sun = nedjelja
-days.abbreviated.mon = pon.
-days.abbreviated.tue = ut.
-days.abbreviated.wed = sr.
-days.abbreviated.thu = čet.
-days.abbreviated.fri = pet.
-days.abbreviated.sat = sub.
-days.abbreviated.sun = ned.
+days.abbreviated.mon = pon
+days.abbreviated.tue = uto
+days.abbreviated.wed = sri
+days.abbreviated.thu = čet
+days.abbreviated.fri = pet
+days.abbreviated.sat = sub
+days.abbreviated.sun = ned
 days.narrow.mon = p
 days.narrow.tue = u
 days.narrow.wed = s
@@ -121,10 +120,10 @@
 days.narrow.fri = p
 days.narrow.sat = s
 days.narrow.sun = n
-dayPeriods.abbreviated.am = prije podne
-dayPeriods.abbreviated.pm = po podne
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
+dayPeriods.abbreviated.am = prije podne
+dayPeriods.abbreviated.pm = po podne
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
 dayPeriods.wide.am = prije podne
 dayPeriods.wide.pm = po podne
 
@@ -147,10 +146,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbian
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -160,11 +159,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
+delimiters.quotes = „“’’
 auxiliary = [å q w x y]
 exemplarCharacters = [a b c č ć d {dž} đ e f g h i j k l {lj} m n {nj} o p r s š t u v z ž]
 index = [A B C Č Ć D {DŽ} E F G H I J K L {LJ} M N {NJ} O P Q R S Š T U V W X Y Z Ž]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ME.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ME.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ME.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,13 +6,14 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.3
-date = 2021-09-29
+version = 1.4
+date = 2023-04-31
 name.local = srpski
-name.english = Serbian
+name.english = Montenegrin
 name.babel = serbian-latin-montenegro serbian-latn-me
 tag.bcp47 = sr-Latn-ME
 language.tag.bcp47 = sr
@@ -35,8 +36,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadržaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -44,11 +45,11 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi takođe
+page = strana
+see = vidi
+also = vidi takođe
 proof = Dokaz
-glossary = Glossary
+glossary = Rečnik
 
 [captions.licr]
 preface = Predgovor
@@ -58,8 +59,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadr\v zaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -67,14 +68,14 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi tako\dj e
+page = strana
+see = vidi
+also = vidi tako\dj e
 proof = Dokaz
-glossary = Glossary
+glossary = Re\v cnik
 
 [date.gregorian]
-date.long = [d].[ ][MMMM] [y]
+date.long = [d]. [MMMM] [y].
 date.short = [d].[M].[yy].
 months.wide.1 = januar
 months.wide.2 = februar
@@ -107,13 +108,13 @@
 days.wide.fri = petak
 days.wide.sat = subota
 days.wide.sun = nedjelja
-days.abbreviated.mon = pon.
-days.abbreviated.tue = ut.
-days.abbreviated.wed = sr.
-days.abbreviated.thu = čet.
-days.abbreviated.fri = pet.
-days.abbreviated.sat = sub.
-days.abbreviated.sun = ned.
+days.abbreviated.mon = pon
+days.abbreviated.tue = uto
+days.abbreviated.wed = sre
+days.abbreviated.thu = čet
+days.abbreviated.fri = pet
+days.abbreviated.sat = sub
+days.abbreviated.sun = ned
 days.narrow.mon = p
 days.narrow.tue = u
 days.narrow.wed = s
@@ -121,10 +122,10 @@
 days.narrow.fri = p
 days.narrow.sat = s
 days.narrow.sun = n
-dayPeriods.abbreviated.am = prije podne
-dayPeriods.abbreviated.pm = po podne
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
+dayPeriods.abbreviated.am = prije podne
+dayPeriods.abbreviated.pm = po podne
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
 dayPeriods.wide.am = prije podne
 dayPeriods.wide.pm = po podne
 
@@ -147,10 +148,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbian
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -160,11 +161,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
+delimiters.quotes = „“’’
 auxiliary = [å q w x y]
 exemplarCharacters = [a b c č ć d {dž} đ e f g h i j k l {lj} m n {nj} o p r s š t u v z ž]
 index = [A B C Č Ć D {DŽ} E F G H I J K L {LJ} M N {NJ} O P Q R S Š T U V W X Y Z Ž]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-XK.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-XK.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-XK.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,11 +6,12 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.3
-date = 2021-09-29
+version = 1.4
+date = 2023-04-31
 name.local = srpski
 name.english = Serbian
 name.babel = serbian-latin-kosovo serbian-latn-xk
@@ -18,8 +19,6 @@
 language.tag.bcp47 = sr
 tag.opentype = SRB
 region.local = Kosovo
-region.english = Kosovo
-region.tag.bcp47 = XK
 script.name = Latin
 script.tag.bcp47 = Latn
 script.tag.opentype = latn
@@ -35,8 +34,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadržaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -44,11 +43,11 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi takođe
+page = strana
+see = vidi
+also = vidi takođe
 proof = Dokaz
-glossary = Glossary
+glossary = Rečnik
 
 [captions.licr]
 preface = Predgovor
@@ -58,8 +57,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadr\v zaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -67,14 +66,14 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi tako\dj e
+page = strana
+see = vidi
+also = vidi tako\dj e
 proof = Dokaz
-glossary = Glossary
+glossary = Re\v cnik
 
 [date.gregorian]
-date.long = [d].[ ][MMMM] [y]
+date.long = [d]. [MMMM] [y].
 date.short = [d].[M].[yy].
 months.wide.1 = januar
 months.wide.2 = februar
@@ -107,13 +106,13 @@
 days.wide.fri = petak
 days.wide.sat = subota
 days.wide.sun = nedelja
-days.abbreviated.mon = pon.
-days.abbreviated.tue = ut.
-days.abbreviated.wed = sr.
-days.abbreviated.thu = čet.
-days.abbreviated.fri = pet.
-days.abbreviated.sat = sub.
-days.abbreviated.sun = ned.
+days.abbreviated.mon = pon
+days.abbreviated.tue = uto
+days.abbreviated.wed = sre
+days.abbreviated.thu = čet
+days.abbreviated.fri = pet
+days.abbreviated.sat = sub
+days.abbreviated.sun = ned
 days.narrow.mon = p
 days.narrow.tue = u
 days.narrow.wed = s
@@ -123,10 +122,10 @@
 days.narrow.sun = n
 dayPeriods.abbreviated.am = pre podne
 dayPeriods.abbreviated.pm = po podne
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
-dayPeriods.wide.am = pre podne
-dayPeriods.wide.pm = po podne
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
 
 [date.gregorian.licr]
 months.wide.1 = januar
@@ -147,10 +146,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbian
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -160,11 +159,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
+delimiters.quotes = „“’’
 auxiliary = [å q w x y]
 exemplarCharacters = [a b c č ć d {dž} đ e f g h i j k l {lj} m n {nj} o p r s š t u v z ž]
 index = [A B C Č Ć D {DŽ} E F G H I J K L {LJ} M N {NJ} O P Q R S Š T U V W X Y Z Ž]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn

Added: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ijekavsk.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ijekavsk.ini	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ijekavsk.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -0,0 +1,186 @@
+; This file is part of babel. For further details see:
+;   https://www.ctan.org/pkg/babel
+; Data has been collected mainly from the following sources:
+; * babel language styles (license LPPL):
+;   https://www.ctan.org/pkg/babel-contrib
+; * polyglossia language styles (license LPPL)
+;   https://www.ctan.org/pkg/polyglossia
+; * Common Locale Data Repository (license Unicode):
+;   http://cldr.unicode.org/
+;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
+
+[identification]
+charset = utf8
+version = 1.1
+date = 2023-04-31
+name.local = srpski
+name.english = Serbian
+name.babel = serbian-latin-ijekavsk serbian-latn-ijekavsk serbian.ijekav
+name.polyglossia = serbian
+tag.bcp47 = sr-Latn-ijekavsk
+language.tag.bcp47 = sr
+tag.bcp47.likely = sr-Latn-RS-ijekavsk
+tag.opentype = SRB
+script.name = Latin
+script.tag.bcp47 = Latn
+script.tag.opentype = latn
+level = 1
+encodings = T1 OT1 LY1
+derivate = no
+
+[captions]
+preface = Predgovor
+ref = Literatura
+abstract = Sažetak
+bib = Bibliografija
+chapter = Glava
+appendix = Dodatak
+contents = Sadržaj
+listfigure = Spisak slika
+listtable = Spisak tabela
+index = Indeks
+figure = Slika
+table = Tabela
+part = Dio
+encl = Prilozi
+cc = Kopije
+headto = Prima
+page = strana
+see = vidi
+also = vidi takođe
+proof = Dokaz
+glossary = Rječnik
+
+[captions.licr]
+preface = Predgovor
+ref = Literatura
+abstract = Sa\v zetak
+bib = Bibliografija
+chapter = Glava
+appendix = Dodatak
+contents = Sadr\v zaj
+listfigure = Spisak slika
+listtable = Spisak tabela
+index = Indeks
+figure = Slika
+table = Tabela
+part = Dio
+encl = Prilozi
+cc = Kopije
+headto = Prima
+page = strana
+see = vidi
+also = vidi tako\dj e
+proof = Dokaz
+glossary = Rje\v cnik
+
+[date.gregorian]
+date.long = [d]. [MMMM] [y].
+date.short = [d].[M].[yy].
+months.wide.1 = januar
+months.wide.2 = februar
+months.wide.3 = mart
+months.wide.4 = april
+months.wide.5 = maj
+months.wide.6 = jun
+months.wide.7 = jul
+months.wide.8 = avgust
+months.wide.9 = septembar
+months.wide.10 = oktobar
+months.wide.11 = novembar
+months.wide.12 = decembar
+months.narrow.1 = j
+months.narrow.2 = f
+months.narrow.3 = m
+months.narrow.4 = a
+months.narrow.5 = m
+months.narrow.6 = j
+months.narrow.7 = j
+months.narrow.8 = a
+months.narrow.9 = s
+months.narrow.10 = o
+months.narrow.11 = n
+months.narrow.12 = d
+days.wide.mon = ponedeljak
+days.wide.tue = utorak
+days.wide.wed = sreda
+days.wide.thu = četvrtak
+days.wide.fri = petak
+days.wide.sat = subota
+days.wide.sun = nedelja
+days.abbreviated.mon = pon
+days.abbreviated.tue = uto
+days.abbreviated.wed = sre
+days.abbreviated.thu = čet
+days.abbreviated.fri = pet
+days.abbreviated.sat = sub
+days.abbreviated.sun = ned
+days.narrow.mon = p
+days.narrow.tue = u
+days.narrow.wed = s
+days.narrow.thu = č
+days.narrow.fri = p
+days.narrow.sat = s
+days.narrow.sun = n
+dayPeriods.abbreviated.am = prije podne
+dayPeriods.abbreviated.pm = po podne
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
+
+[date.gregorian.licr]
+months.wide.1 = januar
+months.wide.2 = februar
+months.wide.3 = mart
+months.wide.4 = april
+months.wide.5 = maj
+months.wide.6 = jun
+months.wide.7 = jul
+months.wide.8 = avgust
+months.wide.9 = septembar
+months.wide.10 = oktobar
+months.wide.11 = novembar
+months.wide.12 = decembar
+
+[time.gregorian]
+time.medium = [HH]:[mm]:[ss]
+time.short = [HH]:[mm]
+
+[typography]
+frenchspacing = yes
+hyphenrules = serbian
+lefthyphenmin = 2
+righthyphenmin = 2
+hyphenchar = 
+prehyphenchar = 
+posthyphenchar = 
+exhyphenchar = 
+preexhyphenchar = 
+postexhyphenchar = 
+hyphenationmin = 
+
+[characters]
+delimiters.quotes = „“’’
+auxiliary = [å q w x y]
+exemplarCharacters = [a b c č ć d {dž} đ e f g h i j k l {lj} m n {nj} o p r s š t u v z ž]
+index = [A B C Č Ć D {DŽ} E F G H I J K L {LJ} M N {NJ} O P Q R S Š T U V W X Y Z Ž]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+
+[numbers]
+defaultNumberingSystem = latn
+minimumGroupingDigits = 1
+decimal = ,
+exponential = E
+group = .
+infinity = ∞
+list = ;
+minusSign = -
+nan = NaN
+perMille = ‰
+percentSign = %
+plusSign = +
+superscriptingExponent = ×
+
+[counters]


Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn-ijekavsk.ini
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-Latn.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,16 +6,18 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.3
-date = 2021-09-29
+version = 1.4
+date = 2023-04-31
 name.local = srpski
 name.english = Serbian
-name.babel = serbian-latin serbian-latn
+name.babel = serbian-latin serbian-latn serbian
 tag.bcp47 = sr-Latn
 language.tag.bcp47 = sr
+tag.bcp47.likely = sr-Latn-RS
 tag.opentype = SRB
 script.name = Latin
 script.tag.bcp47 = Latn
@@ -32,8 +34,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadržaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -41,11 +43,11 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi takođe
+page = strana
+see = vidi
+also = vidi takođe
 proof = Dokaz
-glossary = Glossary
+glossary = Rečnik
 
 [captions.licr]
 preface = Predgovor
@@ -55,8 +57,8 @@
 chapter = Glava
 appendix = Dodatak
 contents = Sadr\v zaj
-listfigure = Slike
-listtable = Tabele
+listfigure = Spisak slika
+listtable = Spisak tabela
 index = Indeks
 figure = Slika
 table = Tabela
@@ -64,14 +66,14 @@
 encl = Prilozi
 cc = Kopije
 headto = Prima
-page = Strana
-see = Vidi
-also = Vidi tako\dj e
+page = strana
+see = vidi
+also = vidi tako\dj e
 proof = Dokaz
-glossary = Glossary
+glossary = Re\v cnik
 
 [date.gregorian]
-date.long = [d].[ ][MMMM] [y]
+date.long = [d]. [MMMM] [y].
 date.short = [d].[M].[yy].
 months.wide.1 = januar
 months.wide.2 = februar
@@ -120,10 +122,10 @@
 days.narrow.sun = n
 dayPeriods.abbreviated.am = pre podne
 dayPeriods.abbreviated.pm = po podne
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
-dayPeriods.wide.am = pre podne
-dayPeriods.wide.pm = po podne
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
 
 [date.gregorian.licr]
 months.wide.1 = januar
@@ -144,10 +146,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbian
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -157,11 +159,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
+delimiters.quotes = „“’’
 auxiliary = [å q w x y]
 exemplarCharacters = [a b c č ć d {dž} đ e f g h i j k l {lj} m n {nj} o p r s š t u v z ž]
 index = [A B C Č Ć D {DŽ} E F G H I J K L {LJ} M N {NJ} O P Q R S Š T U V W X Y Z Ž]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn

Added: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-ijekavsk.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-ijekavsk.ini	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-ijekavsk.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -0,0 +1,200 @@
+; This file is part of babel. For further details see:
+;   https://www.ctan.org/pkg/babel
+; Data has been collected mainly from the following sources:
+; * babel language styles (license LPPL):
+;   https://www.ctan.org/pkg/babel-contrib
+; * Common Locale Data Repository (license Unicode):
+;   http://cldr.unicode.org/
+;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
+
+[identification]
+charset = utf8
+version = 1.1
+date = 2023-04-31
+name.local = српски
+name.english = Serbian
+name.babel = serbian-ijekavsk serbianc.ijekav
+name.polyglossia = serbian
+tag.bcp47 = sr-ijekavsk
+language.tag.bcp47 = sr
+variant.tag.bcp47 = ijekavsk
+tag.bcp47.likely = sr-Cyrl-RS-ijekavsk
+tag.opentype = SRB
+script.name = Cyrillic
+script.tag.bcp47 = Cyrl
+script.tag.opentype = cyrl
+level = 1
+encodings = T2A
+derivate = no
+
+[captions]
+preface = Предговор
+ref = Литература
+abstract = Сажетак
+bib = Библиографиjа
+chapter = Глава
+appendix = Додатак
+contents = Садржаj
+listfigure = Списак слика
+listtable = Списак табела
+index = Индекс
+figure = Слика
+table = Табела
+part = Дио
+encl = Прилози
+cc = Копиjе
+headto = Прима
+page = страна
+see = види
+also = види такође
+proof = Доказ
+glossary = Рјечник
+
+[captions.licr]
+preface = \CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr
+ref = \CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra
+abstract = \CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk
+bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra
+chapter = \CYRG\cyrl\cyra\cyrv\cyra
+appendix = \CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk
+contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje
+listfigure = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra
+listtable = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra
+index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs
+figure = \CYRS\cyrl\cyri\cyrk\cyra
+table = \CYRT\cyra\cyrb\cyre\cyrl\cyra
+part = \CYRD\cyri\cyro
+encl = \CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri
+cc = \CYRK\cyro\cyrp\cyri\cyrje\cyre
+headto = \CYRP\cyrr\cyri\cyrm\cyra
+page = \cyrs\cyrt\cyrr\cyra\cyrn\cyra
+see = \cyrv\cyri\cyrd\cyri
+also = \cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre
+proof = \CYRD\cyro\cyrk\cyra\cyrz
+glossary = \CYRR\cyrje\cyre\cyrch\cyrn\cyri\cyrk
+
+[date.gregorian]
+date.long = [d].[ ][MMMM] [y].
+date.short = [d].[M].[yy].
+months.wide.1 = јануар
+months.wide.2 = фебруар
+months.wide.3 = март
+months.wide.4 = април
+months.wide.5 = мај
+months.wide.6 = јун
+months.wide.7 = јул
+months.wide.8 = август
+months.wide.9 = септембар
+months.wide.10 = октобар
+months.wide.11 = новембар
+months.wide.12 = децембар
+months.narrow.1 = ј
+months.narrow.2 = ф
+months.narrow.3 = м
+months.narrow.4 = а
+months.narrow.5 = м
+months.narrow.6 = ј
+months.narrow.7 = ј
+months.narrow.8 = а
+months.narrow.9 = с
+months.narrow.10 = о
+months.narrow.11 = н
+months.narrow.12 = д
+days.wide.mon = понедељак
+days.wide.tue = уторак
+days.wide.wed = среда
+days.wide.thu = четвртак
+days.wide.fri = петак
+days.wide.sat = субота
+days.wide.sun = недеља
+days.abbreviated.mon = пон
+days.abbreviated.tue = уто
+days.abbreviated.wed = сре
+days.abbreviated.thu = чет
+days.abbreviated.fri = пет
+days.abbreviated.sat = суб
+days.abbreviated.sun = нед
+days.narrow.mon = п
+days.narrow.tue = у
+days.narrow.wed = с
+days.narrow.thu = ч
+days.narrow.fri = п
+days.narrow.sat = с
+days.narrow.sun = н
+dayPeriods.abbreviated.am = прије подне
+dayPeriods.abbreviated.pm = по подне
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
+
+[date.gregorian.licr]
+months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr
+months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr
+months.wide.3 = \cyrm\cyra\cyrr\cyrt
+months.wide.4 = \cyra\cyrp\cyrr\cyri\cyrl
+months.wide.5 = \cyrm\cyra\cyrje
+months.wide.6 = \cyrje\cyru\cyrn
+months.wide.7 = \cyrje\cyru\cyrl
+months.wide.8 = \cyra\cyrv\cyrg\cyru\cyrs\cyrt
+months.wide.9 = \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyra\cyrr
+months.wide.10 = \cyro\cyrk\cyrt\cyro\cyrb\cyra\cyrr
+months.wide.11 = \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyra\cyrr
+months.wide.12 = \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyra\cyrr
+
+[time.gregorian]
+time.medium = [HH]:[mm]:[ss]
+time.short = [HH]:[mm]
+
+[typography]
+frenchspacing = yes
+hyphenrules = serbianc
+lefthyphenmin = 2
+righthyphenmin = 2
+hyphenchar = 
+prehyphenchar = 
+posthyphenchar = 
+exhyphenchar = 
+preexhyphenchar = 
+postexhyphenchar = 
+hyphenationmin = 
+
+[characters]
+delimiters.quotes = „“’’
+auxiliary = [{а\u0302} {е\u0302} {и\u0302} {о\u0302} {у\u0302}]
+exemplarCharacters = [а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш]
+index = [А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+
+[numbers]
+defaultNumberingSystem = latn
+minimumGroupingDigits = 1
+decimal = ,
+exponential = E
+group = .
+infinity = ∞
+list = ;
+minusSign = -
+nan = NaN
+perMille = ‰
+percentSign = %
+plusSign = +
+superscriptingExponent = ×
+
+[counters]
+lower = а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
+upper = А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш
+
+[transforms.prehyphenation]
+; With implicit remove's, in 1-4 as x.2
+transliteration.gajica.1.0 = { ([ln])j }
+transliteration.gajica.1.1 =   { string = {1|ln|љњ} }
+transliteration.gajica.2.0 = { ([LN])[jJ] }
+transliteration.gajica.2.1 =   { string = {1|LN|ЉЊ} }
+transliteration.gajica.3.0 = { dž }
+transliteration.gajica.3.1 =   { string = џ }
+transliteration.gajica.4.0 = { D[žŽ] }
+transliteration.gajica.4.1 =   { string = Џ }
+transliteration.gajica.5.0 = { ([abvgdđežzijklmnoprstćufhcčšABVGDĐEŽZIJKLMNOPRSTĆUFHCČŠ]) }
+transliteration.gajica.5.1 =   { string = {1|abvgdđežzijklmnoprstćufhcčšABVGDĐEŽZIJKLMNOPRSTĆUFHCČŠ|абвгдђежзијклмнопрстћуфхцчшАБВГДЂЕЖЗИЈКЛМНОПРСТЋУФХЦЧШ} }


Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr-ijekavsk.ini
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr.ini	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/sr/babel-sr.ini	2023-05-11 20:11:39 UTC (rev 67073)
@@ -6,14 +6,15 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With contributions by Uroš Stefanović.
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2022-05-14
+version = 1.6
+date = 2023-04-31
 name.local = српски
 name.english = Serbian
-name.babel = serbian
+name.babel = serbianc serbian
 name.polyglossia = serbian
 tag.bcp47 = sr
 language.tag.bcp47 = sr
@@ -29,14 +30,14 @@
 [captions]
 preface = Предговор
 ref = Литература
-abstract = Абстракт
+abstract = Сажетак
 bib = Библиографиjа
 chapter = Глава
 appendix = Додатак
 contents = Садржаj
-listfigure = Листаслика
-listtable = Листатабела
-index = Индекспоjмова
+listfigure = Списак слика
+listtable = Списак табела
+index = Индекс
 figure = Слика
 table = Табела
 part = Део
@@ -52,23 +53,23 @@
 [captions.licr]
 preface = \CYRP\cyrr\cyre\cyrd\cyrg\cyro\cyrv\cyro\cyrr
 ref = \CYRL\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra
-abstract = \CYRA\cyrb\cyrs\cyrt\cyrr\cyra\cyrk\cyrt
-bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri j\cyra
+abstract = \CYRS\cyra\cyrzh\cyre\cyrt\cyra\cyrk
+bib = \CYRB\cyri\cyrb\cyrl\cyri\cyro\cyrg\cyrr\cyra\cyrf\cyri\cyrje\cyra
 chapter = \CYRG\cyrl\cyra\cyrv\cyra
 appendix = \CYRD\cyro\cyrd\cyra\cyrt\cyra\cyrk
-contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra j
-listfigure = \CYRL\cyri\cyrs\cyrt\cyra\cyrs\cyrl\cyri\cyrk\cyra
-listtable = \CYRL\cyri\cyrs\cyrt\cyra\cyrt\cyra\cyrb\cyre\cyrl\cyra
-index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs\cyrp\cyro j\cyrm\cyro\cyrv\cyra
+contents = \CYRS\cyra\cyrd\cyrr\cyrzh\cyra\cyrje
+listfigure = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrs\cyrl\cyri\cyrk\cyra
+listtable = \CYRS\cyrp\cyri\cyrs\cyra\cyrk\ \cyrt\cyra\cyrb\cyre\cyrl\cyra
+index = \CYRI\cyrn\cyrd\cyre\cyrk\cyrs
 figure = \CYRS\cyrl\cyri\cyrk\cyra
 table = \CYRT\cyra\cyrb\cyre\cyrl\cyra
 part = \CYRD\cyre\cyro
 encl = \CYRP\cyrr\cyri\cyrl\cyro\cyrz\cyri
-cc = \CYRK\cyro\cyrp\cyri j\cyre
+cc = \CYRK\cyro\cyrp\cyri\cyrje\cyre
 headto = \CYRP\cyrr\cyri\cyrm\cyra
 page = \cyrs\cyrt\cyrr\cyra\cyrn\cyra
 see = \cyrv\cyri\cyrd\cyri
-also = \cyrv\cyri\cyrd\cyri\cyrt\cyra\cyrk\cyro\cyrdje\cyre
+also = \cyrv\cyri\cyrd\cyri\ \cyrt\cyra\cyrk\cyro\cyrdje\cyre
 proof = \CYRD\cyro\cyrk\cyra\cyrz
 glossary = \CYRR\cyre\cyrch\cyrn\cyri\cyrk
 
@@ -75,18 +76,18 @@
 [date.gregorian.Genitive]
 date.long = [d].[ ][MMMM] [y].
 date.short = [d].[M].[yy].
-months.wide.1 =    јануара
-months.wide.2 =    фебруара
-months.wide.3 =    марта
-months.wide.4 =    априла
-months.wide.5 =    маја
-months.wide.6 =    јуна
-months.wide.7 =    јула
-months.wide.8 =    августа
-months.wide.9 =    септембра
-months.wide.10 =   октобра
-months.wide.11 =   новембра
-months.wide.12 =   децембра
+months.wide.1 = јануара
+months.wide.2 = фебруара
+months.wide.3 = марта
+months.wide.4 = априла
+months.wide.5 = маја
+months.wide.6 = јуна
+months.wide.7 = јула
+months.wide.8 = августа
+months.wide.9 = септембра
+months.wide.10 = октобра
+months.wide.11 = новембра
+months.wide.12 = децембра
 
 [date.gregorian]
 date.long = [d].[ ][MMMM] [y].
@@ -138,21 +139,21 @@
 days.narrow.sun = н
 dayPeriods.abbreviated.am = пре подне
 dayPeriods.abbreviated.pm = по подне
-dayPeriods.narrow.am = a
-dayPeriods.narrow.pm = p
-dayPeriods.wide.am = пре подне
-dayPeriods.wide.pm = по подне
+dayPeriods.narrow.am = AM
+dayPeriods.narrow.pm = PM
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
 
 [date.gregorian.Genitive.licr]
-months.wide.1 =  \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra
-months.wide.2 =  \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra
-months.wide.3 =  \cyrm\cyra\cyrr\cyrt\cyra
-months.wide.4 =  \cyra\cyrp\cyrr\cyri\cyrl\cyra
-months.wide.5 =  \cyrm\cyra\cyrje\cyra
-months.wide.6 =  \cyrje\cyru\cyrn\cyra
-months.wide.7 =  \cyrje\cyru\cyrl\cyra
-months.wide.8 =  \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra
-months.wide.9 =  \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra
+months.wide.1 = \cyrje\cyra\cyrn\cyru\cyra\cyrr\cyra
+months.wide.2 = \cyrf\cyre\cyrb\cyrr\cyru\cyra\cyrr\cyra
+months.wide.3 = \cyrm\cyra\cyrr\cyrt\cyra
+months.wide.4 = \cyra\cyrp\cyrr\cyri\cyrl\cyra
+months.wide.5 = \cyrm\cyra\cyrje\cyra
+months.wide.6 = \cyrje\cyru\cyrn\cyra
+months.wide.7 = \cyrje\cyru\cyrl\cyra
+months.wide.8 = \cyra\cyrv\cyrg\cyru\cyrs\cyrt\cyra
+months.wide.9 = \cyrs\cyre\cyrp\cyrt\cyre\cyrm\cyrb\cyrr\cyra
 months.wide.10 = \cyro\cyrk\cyrt\cyro\cyrb\cyrr\cyra
 months.wide.11 = \cyrn\cyro\cyrv\cyre\cyrm\cyrb\cyrr\cyra
 months.wide.12 = \cyrd\cyre\cyrc\cyre\cyrm\cyrb\cyrr\cyra
@@ -176,10 +177,10 @@
 time.short = [HH]:[mm]
 
 [typography]
-frenchspacing = no
+frenchspacing = yes
 hyphenrules = serbianc
 lefthyphenmin = 2
-righthyphenmin = 3
+righthyphenmin = 2
 hyphenchar = 
 prehyphenchar = 
 posthyphenchar = 
@@ -189,11 +190,11 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = „“‘‘
-auxiliary = [ё й щ ъ ы ь э ю я]
+delimiters.quotes = „“’’
+auxiliary = [{а\u0302} {е\u0302} {и\u0302} {о\u0302} {у\u0302}]
 exemplarCharacters = [а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш]
 index = [А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш]
-punctuation = [\\- ‐ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
+punctuation = [\\- ‐ ‑ – , ; \\: ! ? . … ‘ ‚ “ „ ( ) \\[ \\] \\{ \\} * #]
 
 [numbers]
 defaultNumberingSystem = latn
@@ -219,7 +220,7 @@
 transliteration.gajica.1.0 = { ([ln])j }
 transliteration.gajica.1.1 =   { string = {1|ln|љњ} }
 transliteration.gajica.2.0 = { ([LN])[jJ] }
-transliteration.gajica.2.1 =   { string = {1|LN|ЉЉ} }
+transliteration.gajica.2.1 =   { string = {1|LN|ЉЊ} }
 transliteration.gajica.3.0 = { dž }
 transliteration.gajica.3.1 =   { string = џ }
 transliteration.gajica.4.0 = { D[žŽ] }

Modified: trunk/Master/texmf-dist/tex/generic/babel/luababel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/luababel.def	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/luababel.def	2023-05-11 20:11:39 UTC (rev 67073)
@@ -1515,7 +1515,7 @@
       \else
         \let\bbl at ams@lap\llap
       \fi
-      \ExplSyntaxOn
+      \ExplSyntaxOn % Required by \bbl at sreplace with \intertext@
       \bbl at sreplace\intertext@{\normalbaselines}%
         {\normalbaselines
          \ifx\bbl at eqnodir\relax\else\bbl at pardir\@ne\bbl at eqnodir\fi}%

Modified: trunk/Master/texmf-dist/tex/generic/babel/nil.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/nil.ldf	2023-05-11 20:10:13 UTC (rev 67072)
+++ trunk/Master/texmf-dist/tex/generic/babel/nil.ldf	2023-05-11 20:11:39 UTC (rev 67073)
@@ -33,7 +33,7 @@
 %% extension |.ins|) which are part of the distribution.
 %%
 
-\ProvidesLanguage{nil}[2023/04/18 3.88 Nil language]
+\ProvidesLanguage{nil}[2023/05/11 v3.89 Nil language]
 \LdfInit{nil}{datenil}
 \ifx\l at nil\@undefined
   \newlanguage\l at nil



More information about the tex-live-commits mailing list.