texlive[69050] Master/texmf-dist: babel (6dec23)

commits+karl at tug.org commits+karl at tug.org
Wed Dec 6 22:14:42 CET 2023


Revision: 69050
          https://tug.org/svn/texlive?view=revision&revision=69050
Author:   karl
Date:     2023-12-06 22:14:42 +0100 (Wed, 06 Dec 2023)
Log Message:
-----------
babel (6dec23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/babel/README.md
    trunk/Master/texmf-dist/doc/latex/babel/babel-code.pdf
    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/bbidxglo.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/fa/babel-fa.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-classicallatin.tex
    trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-classic.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-ecclesia.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-medieval.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la.ini
    trunk/Master/texmf-dist/tex/generic/babel/luababel.def
    trunk/Master/texmf-dist/tex/generic/babel/nil.ldf

Modified: trunk/Master/texmf-dist/doc/latex/babel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/babel/README.md	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/doc/latex/babel/README.md	2023-12-06 21:14:42 UTC (rev 69050)
@@ -1,6 +1,6 @@
-## Babel 3.97
+## Babel 3.98
 
-2023-11-11
+2023-12-06
 
 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.97 are described in:
+Changes in version 3.98 are described in:
 
-https://latex3.github.io/babel/news/whats-new-in-babel-3.97.html
+https://latex3.github.io/babel/news/whats-new-in-babel-3.98.html
 
 Apart from the manual, you can find information on some aspects of babel at:
 
@@ -48,9 +48,14 @@
 
 ### Summary of latest changes
 ```
-3.97 2023-11-11
-     * Support for 'interchar' (xetex).
-     * New locale for Buriat, thanks to J. Khaganov.
+3.98 2023-12-06
+     * Case mappings in ini files, with new casing variants in the
+       Latin locales.
+     * New: \ShowLocaleProperties.
+     * Improved Persian/Farsi, thanks to Farshad Rasuli
+       (@farshadrasuli).
+     * In some languages and xetex, the language name was printed with
+       the first \foreignlanguage.
 ```
 
 ### Previous changes

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

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-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.dtx	2023-12-06 21:14:42 UTC (rev 69050)
@@ -32,7 +32,7 @@
 %
 % \iffalse
 %<*filedriver>
-\ProvidesFile{babel.dtx}[2023/11/11 v3.97 The Babel package]
+\ProvidesFile{babel.dtx}[2023/12/06 v3.98 The Babel package]
 \documentclass{ltxdoc}
 \GetFileInfo{babel.dtx}
 \usepackage{fontspec}
@@ -582,6 +582,16 @@
   BCP47 tag. See section \ref{bcp47} for further details.
 \end{note}
 
+\begin{note}
+  Documents with several input encodings are not frequent, but
+  sometimes are useful. You can set different encodings for different
+  languages as the following example shows:
+\begin{verbatim}
+\addto\extrasfrench{\inputencoding{latin1}}
+\addto\extrasrussian{\inputencoding{koi8-r}}
+\end{verbatim}
+\end{note}
+
 \subsection{Mostly monolingual documents}
 \label{mostlymono}
 
@@ -1438,7 +1448,7 @@
   corresponding behavior is not always implemented. Also, there are
   some limitations in the engines. A few remarks follow (which could no
   longer be valid when you read this manual, if the packages involved
-  han been updated). The Harfbuzz renderer has still some issues, so as
+  have been updated). The Harfbuzz renderer still has some issues, so as
   a rule of thumb prefer the default renderer, and resort to Harfbuzz
   only if the former does not work for you. Fortunately, fonts can be
   loaded twice with different renderers; for example:
@@ -1562,6 +1572,7 @@
 \tag{bs-Cyrl} Bosnian
 \tag{bs-Latn} Bosnian\hascapu\hascapl
 \tag{bs} Bosnian\hascapu\hascapl
+\tag{bua} Buriat\hascapu\hascapl
 \tag{byn} Blin
 \tag{ca} Catalan\hascapu\hascapl
 \tag{cch} Atsam
@@ -1936,6 +1947,7 @@
 british\\
 britishenglish\\
 bulgarian\\
+buriat\\
 burmese\\
 canadian\\
 canadianenglish\\
@@ -2309,7 +2321,7 @@
 not required (which is a very frequent case, particularly in ancient
 languages). So, they will be included in the default \babel{} distribution.
 This can serve to encourage contributions, too. A warning will remember
-they are ‘bare minumum locales’. The locales are currently
+they are ‘bare minimum locales’. The locales are currently
 the following:
 \begin{multicols}{4}
 \small
@@ -2615,7 +2627,7 @@
 first loads |danish.ldf|, and then redefines the captions for
 \texttt{danish} (as provided by the |ini| file) and prevents
 hyphenation. The rest of the language definitions are not touched.
-Without the optional argument it just loads some aditional tools if
+Without the optional argument it just loads some additional tools if
 provided by the |ini| file, like extra counters.
 
 \Describe{\BabelUppercaseMapping}
@@ -2622,16 +2634,18 @@
   {\marg{locale-name}\marg{codepoint}\marg{output}}
 \DescribeOther{\BabelLowercaseMapping}
   {\marg{locale-name}\marg{codepoint}\marg{output}}
+\DescribeOther{\BabelTitlecaseMapping}
+  {\marg{locale-name}\marg{codepoint}\marg{output}}
 
 \New{3.90} These macros are devised as a high level interface for
 declaring case mappings, based on the locale name as declared by or
-with \babel. They are the equivalent of |\DeclareUppercaseMapping| and
-|\DeclareLowercaseMapping| (see \textsf{usrguide.pdf}). The purpose is
-twofold: (1) a user-friendly way to declare them, because
-often BCP 47 tags are not known (and sometimes can be complex);
-(2) if for some reason the tag changes (eg, you decide to tag
-|english| as |en-001| instead of |en-US|), the new mappings will be
-still assigned to that language.
+with \babel. They are the equivalent of |\DeclareUppercaseMapping|,
+|\DeclareLowercaseMapping|, and |\DeclareTitlecaseMapping| (see
+\textsf{usrguide.pdf}). The purpose is twofold: (1) a user-friendly way
+to declare them, because often BCP 47 tags are not known (and sometimes
+can be complex); (2) if for some reason the tag changes (eg, you decide
+to tag |english| as |en-001| instead of |en-US|), the new mappings will
+be still assigned to that language.
 
 \begin{example} For Classical Latin (no need to know the tag is
 \texttt{la-x-classic}):
@@ -2832,14 +2846,19 @@
 \Describe{Alph=}{\meta{counter-name}} Same for |\Alph|.
 
 \Describe{casing}{\meta{rules}} \New{3.90} Selects the casing rules in a few
-languages. They are (from \textsf{interface3.pdf}):
+languages. The first ones are predefined by \LaTeX{} (see
+\textsf{interface3.pdf}), while the following are defined by \babel:
 \begin{description}
-  \item[Armenian] |yiwn|, which maps U+0587 to capital ech and yiwn on
+  \item[Armenian] |yiwn| maps U+0587 to capital ech and yiwn on
     uppercasing.
-  \item[German] |eszett|, which maps the lowercase \textit{Eszett} to a
+  \item[German] |eszett| maps the lowercase \textit{Eszett} to a
   \textit{großes Eszett}.
-  \item[Greek] |iota|, which converts the \textit{ypogegrammeni} (subscript muted
+  \item[Greek] |iota| converts the \textit{ypogegrammeni} (subscript muted
     iota) to capital iota when uppercasing.
+  \item[Latin] |nouv| in |classicallatin| and |medievallatin| reverts
+    the default rules, which maps u ↔ V; |uv| in |ecclesianticallatin|
+    and the basic |latin| locale applies the map u ↔ V (by default it’s
+    u ↔ U and v ↔ V).
 \end{description}
 
 \begin{example} For the latter:
@@ -3048,7 +3067,7 @@
 expandable (even inside an unprotected |\edef|). Currently, they are
 limited to numbers below 10000.
 
-There are several ways to use them (for the availabe styles in each
+There are several ways to use them (for the available styles in each
 language, see the list below):
 
 \begin{itemize}
@@ -3327,6 +3346,10 @@
 separated concepts. In \luatex, the |\localeid| is saved in each node
 (when it makes sense) as an attribute, too.
 
+\Describe{\ShowLocaleProporties}{\marg{language}}
+\New{3.98} Prints to the |log| file all the key/value pairs declared in
+the |ini| locale file for \meta{language}.
+
 \Describe{\LocaleForEach}{\marg{code}}
 \Babel{} remembers which |ini| files have been loaded. There is a loop
 named |\LocaleForEach| to traverse the list, where |#1| is the name of
@@ -3498,6 +3521,22 @@
 of the previous char in \luatex, and the font size set by the last
 |\selectfont| in \xetex).
 
+\begin{note}
+  With Unicode engines, a line break can happen just before an explicit
+  combining char (eg, \textit{\~{g}}, used in Guarani and Filipino, is
+  not included as a combined char and it’s represented in Unicode as
+  |U+0067|~|U+0303|. This issue is not directly related to \babel, but
+  to the hyphenation patterns and/or the font renderer. However, at
+  least with \luatex{} there is a workaround (change the language name
+  to what you are using):
+\begin{verbatim}
+\babelposthyphenation{guarani}{ | [{0300}-{036F}] }{ remove, {} }
+\end{verbatim}
+The Lua pattern means ‘a discretionary followed by a character in the
+range |U+0300|--|U+0367| (which contains combining chars)’. An
+alternative to a transform is |\babelpatterns|.
+\end{note}
+
 \subsection{Transforms}
 \label{transforms}
 
@@ -3514,7 +3553,7 @@
 \New{3.57} Several \textsf{ini} files predefine some transforms. They
 are activated with the key |transforms| in |\babelprovide|, either if
 the locale is being defined with this macro or the languages has been
-previouly loaded as a class or package option, as the following example
+previously loaded as a class or package option, as the following example
 illustrates:
 \begin{verbatim}
   \usepackage[hungarian]{babel}
@@ -3798,7 +3837,7 @@
 \marg{class-first} and \marg{class-second} can be comma separated lists
 of char classes, and all combinations are defined (so that 2 first
 classes with 2 second classes, define 4 combinations). In the
-\marg{options} field a key named |label| is available, which allows to
+\meta{options} field a key named |label| is available, which allows to
 enable or to disable the rule with the following two commands. Like
 prehyphenation transforms in \luatex{}, interchars are not applied if the
 current hyphenation rules are |nohyphenation|.
@@ -3832,7 +3871,7 @@
 
 \begin{warning}
   Keep in mind two points: (1) a character can be assigned a single
-  class; this is a limitation in the interchar mechanims that often
+  class; this is a limitation in the interchar mechanisms that often
   leads to incompatibilities; (2) since the character classes set with
   |\babelcharclass| are saved (so that they can be restored), there is a
   limit in the number of characters in the \marg{char-list} (which,
@@ -4610,7 +4649,7 @@
 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,
+|linebreak.cjk| 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.
 
@@ -4657,18 +4696,11 @@
 \end{verbatim}
   \textit{before} loading babel. This way, when the document begins
   the sequence is (1) make \verb/|/ active (\textsf{ltxdoc}); (2) make
-  it unactive (your settings); (3) make babel shorthands active
+  it inactive (your settings); (3) make babel shorthands active
   (\textsf{babel)}; (4) reload \textsf{hhline} (\textsf{babel}, now
   with the correct catcodes for \verb/|/ and
   \verb|:|).\catcode`\|=\active
 
-\item Documents with several input encodings are not frequent, but
-  sometimes are useful. You can set different encodings for different
-  languages as the following example shows:
-\begin{verbatim}
-\addto\extrasfrench{\inputencoding{latin1}}
-\addto\extrasrussian{\inputencoding{koi8-r}}
-\end{verbatim}
  \item For the hyphenation to work correctly, lccodes cannot change,
    because \TeX{} only takes into account the values when the
    paragraph is hyphenated, i.e., when it has been
@@ -4934,8 +4966,8 @@
 \label{contribute}
 
 Currently, the easiest way to contribute a new language is by taking
-one the the 500 or so |ini| templates available on GitHub as a basis.
-Just make a pull request o dowonload it and then, after filling the
+one of the 500 or so |ini| templates available on GitHub as a basis.
+Just make a pull request or download it and then, after filling the
 fields, sent it to me. Fell free to ask for help or to make feature
 requests.
 
@@ -5180,7 +5212,7 @@
 all characters that have a special category code.'' \cite[p.~380]{DEK}
 It is used to set text `verbatim'.  To make this work if more
 characters get a special category code, you have to add this character
-to the macro |\dospecial|.  \LaTeX\ adds another macro called
+to the macro |\dospecials|.  \LaTeX\ adds another macro called
 |\@sanitize| representing the same character set, but without the
 curly braces.  The macros |\bbl at add@special|\meta{char} and
 |\bbl at remove@special|\meta{char} add and remove the character
@@ -5440,13 +5472,6 @@
 \end{verbatim}
 |#1| is replaced by the roman numeral.
 
-\Describe\SetCase{\oarg{map-list}\marg{toupper-code}\marg{tolower-code}\qquad\textit{Deprecated}}
-
-\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}
-
 \Describe{\SetHyphenMap}{\marg{to-lower-macros}}
 \New{3.9g} Case mapping for hyphenation is handled with |\SetHyphenMap|
 and controlled with the package option |hyphenmap|.
@@ -5600,7 +5625,7 @@
 %
 % 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
+% They are used with |<||@name@>| at the appropriate places in the
 % source code and defined with either
 % $\langle\langle$\textit{name}=\textit{value}$\rangle\rangle$, or with
 % a series of lines between
@@ -5630,8 +5655,8 @@
 % \section{Tools}
 %
 %    \begin{macrocode}
-%<<version=3.97>>
-%<<date=2023/11/11>>
+%<<version=3.98>>
+%<<date=2023/12/06>>
 %    \end{macrocode}
 %
 % \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -5858,7 +5883,7 @@
   \edef#1{\the\toks@}}
 %    \end{macrocode}
 %
-% An extensison to the previous macro. It takes into account the
+% An extension to the previous macro. It takes into account the
 % parameters, and it is string based (ie, if you replace |elax| by
 % |ho|, then |\relax| becomes |\rho|). No checking is done at all,
 % because it is not a general purpose macro, and it is used by \babel{}
@@ -5865,7 +5890,7 @@
 % only when it works (an example where it does \textit{not} work is in
 % |\bbl at TG@@date|, and also fails if there are macros with spaces,
 % because they are retokenized). It may change! (or even merged with
-% |\bbl at replace|; I'm not sure ckecking the replacement is really
+% |\bbl at replace|; I'm not sure checking the replacement is really
 % necessary or just paranoia).
 % 
 %    \begin{macrocode}
@@ -6100,7 +6125,7 @@
 %    \end{macrocode}
 %
 % This file also takes care of a number of compatibility issues with
-% other packages an defines a few aditional package options. Apart from
+% other packages an defines a few additional package options. Apart from
 % all the language options below we also have a few options that
 % influence the behavior of language definition files.
 %
@@ -6124,7 +6149,7 @@
 %
 % If the format created a list of loaded languages (in
 % |\bbl at languages|), get the name of the 0-th to show the actual
-% language used. Also avaliable with |base|, because it just shows
+% language used. Also available with |base|, because it just shows
 % info.
 %
 %    \begin{macrocode}
@@ -6156,7 +6181,7 @@
 % it exits.
 %
 % Now the \texttt{base} option. With it we can define (and load, with
-% \luatex) hyphenation patterns, even if we are not interesed in the
+% \luatex) hyphenation patterns, even if we are not interested in the
 % rest of babel.
 %
 %    \begin{macrocode}
@@ -6376,7 +6401,7 @@
 %    \end{macrocode}
 %
 % The following is ignored with |shorthands=off|, since it is
-% intended to take some aditional actions for certain chars.
+% intended to take some additional actions for certain chars.
 %
 %    \begin{macrocode}
   \bbl at ifshorthand{'}%
@@ -6815,7 +6840,7 @@
 %
 % The macro |\bbl at set@language| takes care of switching the language
 % environment \emph{and} of writing entries on the auxiliary files.
-% For historial reasons, language names can be either |language| of
+% For historical reasons, language names can be either |language| of
 % |\language|. To catch either form a trick is used, but
 % unfortunately as a side effect the catcodes of letters in
 % |\languagename| are messed up. This is a bug, but preserved for
@@ -8011,7 +8036,7 @@
 %
 %   The very first thing to do is saving the original catcode and the
 %   original definition, even if not active, which is possible
-%   (undefined characters require a special treatement to avoid
+%   (undefined characters require a special treatment to avoid
 %   making them |\relax| and preserving some degree of protection).
 %
 %    \begin{macrocode}
@@ -8450,14 +8475,14 @@
 %
 %  \begin{macro}{\defineshorthand}
 %
-%    Currently we only support two groups of user level shorthands,
-%    named internally |user| and |user@<lang>| (language-dependent
-%    user shorthands). By default, only the first one is taken into
-%    account, but if the former is also used (in the optional argument
-%    of |\defineshorthand|) a new level is inserted for it
-%    (|user at generic|, done by |\bbl at set@user at generic|); we make also
-%    sure |{}| and |\protect| are taken into account in this new top
-%    level.
+% Currently we only support two groups of user level shorthands,
+% named internally |user| and |user@<lang>| (language-dependent
+% user shorthands). By default, only the first one is taken into
+% account, but if the former is also used (in the optional argument
+% of |\defineshorthand|) a new level is inserted for it
+% (|user at generic|, done by |\bbl at set@user at generic|); we make also
+% sure |{}| and |\protect| are taken into account in this new top
+% level.
 %
 %    \begin{macrocode}
 \def\user at language@group{user@\language at group}
@@ -8485,12 +8510,12 @@
 %
 %  \begin{macro}{\languageshorthands}
 %
-%    A user level command to change the language from which shorthands
-%    are used. Unfortunately, \babel{} currently does not keep track
-%    of defined groups, and therefore there is no way to catch a
-%    possible change in casing to fix it in the same way languages names
-%    are fixed. [TODO].
-%
+%  A user level command to change the language from which shorthands
+%  are used. Unfortunately, \babel{} currently does not keep track
+%  of defined groups, and therefore there is no way to catch a
+%  possible change in casing to fix it in the same way languages names
+%  are fixed. [TODO].
+% %
 %    \begin{macrocode}
 \def\languageshorthands#1{\def\language at group{#1}}
 %    \end{macrocode}
@@ -8498,11 +8523,12 @@
 %  \end{macro}
 %
 %  \begin{macro}{\aliasshorthand}
-%    \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"|.
+%
+% \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
+% latter to |\active at char"|.
 %    
 %    \begin{macrocode}
 \def\aliasshorthand#1#2{%
@@ -8541,10 +8567,11 @@
 %
 %  \begin{macro}{\shorthandon}
 %  \begin{macro}{\shorthandoff}
-%    The first level definition of these macros just passes the
-%    argument on to |\bbl at switch@sh|, adding |\@nil| at the end to
-%    denote the end of the list of characters.
 %
+% The first level definition of these macros just passes the
+% argument on to |\bbl at switch@sh|, adding |\@nil| at the end to
+% denote the end of the list of characters.
+%
 %    \begin{macrocode}
 \newcommand*\shorthandon[1]{\bbl at switch@sh\@ne#1\@nnil}
 \DeclareRobustCommand*\shorthandoff{%
@@ -8554,19 +8581,19 @@
 %
 %  \begin{macro}{\bbl at switch@sh}
 %
-%    The macro |\bbl at switch@sh| takes the list of characters apart one
-%    by one and subsequently switches the category code of the
-%    shorthand character according to the first argument of
-%    |\bbl at switch@sh|.
+% The macro |\bbl at switch@sh| takes the list of characters apart one
+% by one and subsequently switches the category code of the
+% shorthand character according to the first argument of
+% |\bbl at switch@sh|.
 %
-%    But before any of this switching takes place we make sure that the
-%    character we are dealing with is known as a shorthand character.
-%    If it is, a macro such as |\active at char"| should exist.
+% But before any of this switching takes place we make sure that the
+% character we are dealing with is known as a shorthand character.
+% If it is, a macro such as |\active at char"| should exist.
 %
-%    Switching off and on is easy -- we just set the category code to
-%    `other' (12) and |\active|. With the starred version, the original
-%    catcode and the original definition, saved in
-%    |@initiate at active@char|, are restored.
+% Switching off and on is easy -- we just set the category code to
+% `other' (12) and |\active|. With the starred version, the original
+% catcode and the original definition, saved in
+% |@initiate at active@char|, are restored.
 %
 %    \begin{macrocode}
 \def\bbl at switch@sh#1#2{%
@@ -8605,8 +8632,8 @@
 %  \end{macro}
 %  \end{macro}
 %
-% Note the value is that at the expansion time; eg, in the preample
-% shorhands are usually deactivated.
+% Note the value is that at the expansion time; eg, in the preamble
+% shorthands are usually deactivated.
 %
 %    \begin{macrocode}
 \def\babelshorthand{\active at prefix\babelshorthand\bbl at putsh}
@@ -8678,15 +8705,15 @@
 %  \end{macro}
 %  \end{macro}
 %
-%    Usually the |~| is active and expands to \verb*=\penalty\@M\ =.
-%    When it is written to the \file{.aux} file it is written
-%    expanded. To prevent that and to be able to use the character |~|
-%    as a start character for a shorthand, it is redefined here as a
-%    one character shorthand on system level. The system declaration
-%    is in most cases redundant (when |~| is still a non-break space),
-%    and in some cases is inconvenient (if |~| has been redefined);
-%    however, for backward compatibility it is maintained (some
-%    existing documents may rely on the \babel{} value).
+% Usually the |~| is active and expands to \verb*=\penalty\@M\ =.
+% When it is written to the \file{.aux} file it is written
+% expanded. To prevent that and to be able to use the character |~|
+% as a start character for a shorthand, it is redefined here as a
+% one character shorthand on system level. The system declaration
+% is in most cases redundant (when |~| is still a non-break space),
+% and in some cases is inconvenient (if |~| has been redefined);
+% however, for backward compatibility it is maintained (some
+% existing documents may rely on the \babel{} value).
 %
 %    \begin{macrocode}
 \initiate at active@char{~}
@@ -8723,6 +8750,7 @@
 %    Language attributes provide a means to give the user control over
 %    which features of the language definition files he wants to
 %    enable.
+%
 %  \begin{macro}{\languageattribute}
 %
 %    The macro |\languageattribute| checks whether its arguments are
@@ -8739,10 +8767,10 @@
     \bbl at vforeach{#2}{%
 %    \end{macrocode}
 %
-%    We want to make sure that each attribute is selected only once;
-%    therefore we store the already selected attributes in
-%    |\bbl at known@attribs|. When that control sequence is not yet
-%    defined this attribute is certainly not selected before.
+% To make sure each attribute is selected only once, we store the
+% already selected attributes in |\bbl at known@attribs|. When that
+% control sequence is not yet defined this attribute is certainly
+% not selected before.
 %
 %    \begin{macrocode}
       \ifx\bbl at known@attribs\@undefined
@@ -8757,9 +8785,9 @@
       \else
 %    \end{macrocode}
 %
-%    When we end up here the attribute is not selected before. So, we
-%    add it to the list of selected attributes and execute the
-%    associated \TeX-code.
+% When we end up here the attribute is not selected before. So, we
+% add it to the list of selected attributes and execute the
+% associated \TeX-code.
 %
 %    \begin{macrocode}
         \bbl at exp{%
@@ -9166,7 +9194,7 @@
 %
 % \subsection{Multiencoding strings}
 %
-% The aim following commands is to provide a commom interface for
+% The aim following commands is to provide a common interface for
 % strings in several encodings. They also contains several hooks which
 % can be used by \luatex{} and \xetex. The code is organized here with
 % pseudo-guards, so we start with the basic commands.
@@ -9181,39 +9209,10 @@
 \def\bbl at toglobal#1{\global\let#1#1}
 %    \end{macrocode}
 %
-% The second one. We need to patch |\@uclclist|, but it is done once
-% and only if |\SetCase| is used or if strings are encoded.  The code
-% is far from satisfactory for several reasons, including the fact
-% |\@uclclist| is not a list any more. Therefore a package option is
-% added to ignore it. Instead of gobbling the macro
-% getting the next two elements (usually |\reserved at a|), we pass it as
-% argument to |\bbl at uclc|. The parser is restarted inside
-% |\|\m{lang}|@bbl at uclc| because we do not know how many expansions
-% are necessary (depends on whether strings are encoded). The last
-% part is tricky -- when uppercasing, we have:
-%\begin{verbatim}
-% \let\bbl at tolower\@empty\bbl at toupper\@empty
-%\end{verbatim}
-% and starts over (and similarly when lowercasing).
+% The following option is currently no-op. It was meant for the
+% deprecated |\SetCase|.
 %
 %    \begin{macrocode}
-\@ifpackagewith{babel}{nocase}%
-  {\let\bbl at patchuclc\relax}%
-  {\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{%
-      \let\bbl at encoded\bbl at encoded@uclc
-      \bbl at ifunset{\languagename @bbl at uclc}% and resumes it
-        {##1}%
-        {\let\bbl at tempa##1\relax % Used by LANG at bbl@uclc
-         \csname\languagename @bbl at uclc\endcsname}%
-      {\bbl at tolower\@empty}{\bbl at toupper\@empty}}%
-    \gdef\bbl at tolower{\csname\languagename @bbl at lc\endcsname}%
-    \gdef\bbl at toupper{\csname\languagename @bbl at uc\endcsname}}}
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 %<<*More package options>>
 \DeclareOption{nocase}{}
 %<</More package options>>
@@ -9280,7 +9279,7 @@
 %
 % Parse the encoding info to get the label, input, and font parts.
 %
-% Select the behavior of |\SetString|. Thre are two main cases,
+% Select the behavior of |\SetString|. There are two main cases,
 % depending of if there is an optional argument: without it and
 % |strings=encoded|, strings are defined
 % always; otherwise, they are set only if they are still undefined
@@ -9426,31 +9425,12 @@
       \csname\bbl at LC\expandafter\endcsname\expandafter{\BabelString}}}
 %    \end{macrocode}
 %
-%     Now, some addtional stuff to be used when encoded strings are
-%     used. Captions then include |\bbl at encoded| for string to be
-%     expanded in case transformations. It is |\relax| by default, but
-%     in |\MakeUppercase| and |\MakeLowercase| its value is a modified
-%     expandable |\@changed at cmd|.
+% A little auxiliary command sets the string. TODO: Formerly used with
+% casing. Very likely no longer necessary, although it’s used in
+% |\setlocalecaption|.
 %
 %    \begin{macrocode}
-\ifx\bbl at opt@strings\relax
-  \def\bbl at scset#1#2{\def#1{\bbl at encoded#2}}
-  \bbl at patchuclc
-  \let\bbl at encoded\relax
-  \def\bbl at encoded@uclc#1{%
-    \@inmathwarn#1%
-    \expandafter\ifx\csname\cf at encoding\string#1\endcsname\relax
-      \expandafter\ifx\csname ?\string#1\endcsname\relax
-        \TextSymbolUnavailable#1%
-      \else
-        \csname ?\string#1\endcsname
-      \fi
-    \else
-      \csname\cf at encoding\string#1\endcsname
-    \fi}
-\else
-  \def\bbl at scset#1#2{\def#1{#2}}
-\fi
+\def\bbl at scset#1#2{\def#1{#2}}
 %    \end{macrocode}
 %
 % Define |\SetStringLoop|, which is actually set inside
@@ -9484,18 +9464,24 @@
 %
 % \paragraph{Case mapping}
 %
-% 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. \textit{Deprecated.}
+% The command |\SetCase| is deprecated. Currently it consists in a
+% definition with a hack just for backward compatibility in the macro
+% mapping.
 %
 %    \begin{macrocode}
 %<<*Macros local to BabelCommands>>
   \newcommand\SetCase[3][]{%
-    \bbl at patchuclc
-    \bbl at forlang\bbl at tempa{%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at uclc}{\bbl at tempa##1}%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at uc}{##2}%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at lc}{##3}}}%
+    \def\bbl at tempa####1####2{%
+      \ifx####1\@empty\else
+        \bbl at carg\bbl at add{extras\CurrentOption}{%
+          \bbl at carg\babel at save{c__text_uppercase_\string####1_tl}%
+          \bbl at carg\def{c__text_uppercase_\string####1_tl}{####2}%
+          \bbl at carg\babel at save{c__text_lowercase_\string####2_tl}%
+          \bbl at carg\def{c__text_lowercase_\string####2_tl}{####1}}%
+        \expandafter\bbl at tempa
+      \fi}%
+    \bbl at tempa##1\@empty\@empty
+    \bbl at carg\bbl at toglobal{extras\CurrentOption}}
 %<</Macros local to BabelCommands>>
 %    \end{macrocode}
 %
@@ -10175,7 +10161,7 @@
 %
 % |\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
+% requested, an |ini| file. It may be used in conjunction to previously
 % loaded |ldf| files.
 %
 %    \begin{macrocode}
@@ -10196,6 +10182,7 @@
       Alph,labels,labels*,calendar,date,casing}%
     {\bbl at csarg\let{KVP@##1}\@nnil}%
   \global\let\bbl at release@transforms\@empty
+  \global\let\bbl at release@casing\@empty
   \let\bbl at calendars\@empty
   \global\let\bbl at inidata\@empty
   \global\let\bbl at extend@ini\@gobble
@@ -10508,9 +10495,10 @@
         \let\\\@Alph\<bbl at cntr@\bbl at KVP@Alph @\languagename>}}%
   \fi
   % == Casing ==
+  \bbl at release@casing
   \ifx\bbl at KVP@casing\@nnil\else
     \bbl at csarg\xdef{casing@\languagename}%
-      {\@nameuse{bbl at casing@\languagename}-x-\bbl at KVP@casing}%
+      {\@nameuse{bbl at casing@\languagename}\bbl at maybextx\bbl at KVP@casing}%
   \fi
   % == Calendars ==
   \ifx\bbl at KVP@calendar\@nnil
@@ -10958,6 +10946,7 @@
        Reported }}}
 %
 \let\bbl at release@transforms\@empty
+\let\bbl at release@casing\@empty
 \def\bbl at ini@exports#1{%
   % Identification always exported
   \bbl at iniwarning{}%
@@ -10973,7 +10962,7 @@
   \bbl at exp{\\\bbl at exportkey{lname}{identification.name.opentype}%
     {\csname bbl at elname@\languagename\endcsname}}%
   \bbl at exportkey{tbcp}{identification.tag.bcp47}{}%
-  % Somewhat hackish. TODO
+  % Somewhat hackish. TODO:
   \bbl at exportkey{casing}{identification.tag.bcp47}{}%
   \bbl at exportkey{lbcp}{identification.language.tag.bcp47}{}%
   \bbl at exportkey{lotf}{identification.tag.opentype}{dflt}%
@@ -11036,10 +11025,33 @@
 \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
 %    \end{macrocode}
 %
+% The |characters| section also stores the values, but |casing| is
+% treated in a different fashion. Much like transforms, a set of
+% commands calling the parser are stored in |\bbl at release@casing|,
+% which is executed in |\babelprovide|.
+%
+%    \begin{macrocode}
+\def\bbl at maybextx{-\bbl at csarg\ifx{extx@\languagename}\@empty x-\fi}
+\def\bbl at inikv@characters#1#2{%
+  \bbl at ifsamestring{#1}{casing}%  eg, casing = uV
+    {\bbl at exp{%
+       \\\g at addto@macro\\\bbl at release@casing{%
+         \\\bbl at casemapping{}{\languagename}{\unexpanded{#2}}}}}%
+    {\in@{$casing.}{$#1}%  eg, casing.Uv = uV 
+     \ifin@
+       \lowercase{\def\bbl at tempb{#1}}%
+       \bbl at replace\bbl at tempb{casing.}{}%
+       \bbl at exp{\\\g at addto@macro\\\bbl at release@casing{%
+         \\\bbl at casemapping
+           {\\\bbl at maybextx\bbl at tempb}{\languagename}{\unexpanded{#2}}}}%
+     \else
+       \bbl at inikv{#1}{#2}%
+     \fi}}
+%    \end{macrocode}
+%
 % Additive numerals require an additional definition. When |.1| is
 % found, two macros are defined -- the basic one, without |.1| called
 % by |\localenumeral|, and another one preserving the trailing |.1| for
@@ -11374,7 +11386,6 @@
 % \textbf{Transforms.}
 %
 %    \begin{macrocode}
-\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{%
@@ -11456,7 +11467,7 @@
            \fi
            \AtBeginDocument{%
              \bbl at patchfont{\bbl at xenohyph}%
-             \expandafter\select at language\expandafter{\languagename}}%
+             {\expandafter\select at language\expandafter{\languagename}}}%
         \fi}}%
   \fi
   \bbl at csarg\bbl at toglobal{lsys@#1}}
@@ -11571,7 +11582,7 @@
 \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
+  \ifcase\@car#8\@nil\or   % Currently <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
@@ -11637,6 +11648,13 @@
 % singletons may change.
 %
 %    \begin{macrocode}
+\ifcase\bbl at engine % Converts utf8 to its code (expandable)
+  \def\bbl at utftocode#1{\the\numexpr\decode at UTFviii#1\relax}
+\else
+  \def\bbl at utftocode#1{\expandafter`\string#1}
+\fi
+% Still somewhat hackish. WIP. Note |\str_if_eq:nnTF| is fully
+% expandable (|\bbl at ifsamestring| isn’t).
 \providecommand\BCPdata{}
 \ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
   \renewcommand\BCPdata[1]{\bbl at bcpdata@i#1\@empty}
@@ -11652,19 +11670,53 @@
       {\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. WIP.
 \@namedef{bbl at info@casing.tag.bcp47}{casing}
 \newcommand\BabelUppercaseMapping[3]{%
-  \let\bbl at tempx\languagename
-  \edef\languagename{#1}%
-  \DeclareUppercaseMapping[\BCPdata{casing}]{#2}{#3}%
-  \let\languagename\bbl at tempx}
+  \DeclareUppercaseMapping[\@nameuse{bbl at casing@#1}]{#2}{#3}}
+\newcommand\BabelTitlecaseMapping[3]{%
+  \DeclareTitlecaseMapping[\@nameuse{bbl at casing@#1}]{#2}{#3}}
 \newcommand\BabelLowercaseMapping[3]{%
-  \let\bbl at tempx\languagename
-  \edef\languagename{#1}%
-  \DeclareLowercaseMapping[\BCPdata{casing}]{#2}{#3}%
-  \let\languagename\bbl at tempx}
+  \DeclareLowercaseMapping[\@nameuse{bbl at casing@#1}]{#2}{#3}}
 %    \end{macrocode}
+% 
+% The parser for |casing| and |casing.|\meta{variant}. 
+% 
+%    \begin{macrocode}
+\def\bbl at casemapping#1#2#3{% 1:variant
+  \def\bbl at tempa##1 ##2{% Loop
+    \bbl at casemapping@i{##1}%
+    \ifx\@empty##2\else\bbl at afterfi\bbl at tempa##2\fi}%
+  \edef\bbl at templ{\@nameuse{bbl at casing@#2}#1}%  Language code
+  \def\bbl at tempe{0}%   Mode (upper/lower...)
+  \def\bbl at tempc{#3 }% Casing list
+  \expandafter\bbl at tempa\bbl at tempc\@empty}
+\def\bbl at casemapping@i#1{%
+  \def\bbl at tempb{#1}%
+  \ifcase\bbl at engine % Handle utf8 in pdftex, by surrounding chars with {}
+    \@nameuse{regex_replace_all:nnN}%
+      {[\x{c0}-\x{ff}][\x{80}-\x{bf}]*}{{\0}}\bbl at tempb
+  \else
+    \@nameuse{regex_replace_all:nnN}{.}{{\0}}\bbl at tempb % TODO. needed?
+  \fi
+  \expandafter\bbl at casemapping@ii\bbl at tempb\@@}
+\def\bbl at casemapping@ii#1#2#3\@@{%
+  \in@{#1#3}{<>}% ie, if <u>, <l>, <t>
+  \ifin@
+    \edef\bbl at tempe{%
+      \if#2u1 \else\if#2l2 \else\if#2t3 \fi\fi\fi}%
+  \else
+    \ifcase\bbl at tempe\relax
+      \DeclareUppercaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+      \DeclareLowercaseMapping[\bbl at templ]{\bbl at utftocode{#2}}{#1}%
+    \or
+      \DeclareUppercaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+    \or
+      \DeclareLowercaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+    \or
+      \DeclareTitlecaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+    \fi
+  \fi}
+%    \end{macrocode}
 %
 % With version 3.75 |\BabelEnsureInfo| is executed always, but there is
 % an option to disable it.
@@ -11715,11 +11767,17 @@
   \fi}
 \let\bbl at ini@loaded\@empty
 \newcommand\LocaleForEach{\bbl at foreach\bbl at ini@loaded}
+\def\ShowLocaleProperties#1{%
+  \typeout{}%
+  \typeout{*** Properties for language '#1' ***}
+  \def\bbl at elt##1##2##3{\typeout{##1/##2 = ##3}}%
+  \@nameuse{bbl at inidata@#1}%
+  \typeout{*******}}
 %    \end{macrocode}
 %
 % \section{Adjusting the Babel bahavior}
 %
-% A generic high level inteface is provided to adjust some global
+% A generic high level interface is provided to adjust some global
 % and general settings.
 %
 %    \begin{macrocode}
@@ -12774,7 +12832,7 @@
 % \textit{except} if a |main| language has been set. In such a
 % case, it is not loaded until all options has been processed.
 % The following macro inputs the ldf file and does some additional
-% checks (|\input| works, too, but possible errors are not catched).
+% checks (|\input| works, too, but possible errors are not caught).
 %
 %    \begin{macrocode}
 \bbl at trace{Language options}
@@ -12899,7 +12957,7 @@
 %
 % Now define the corresponding loaders. With package options, assume
 % the language exists. With class options, check if the option is a
-% language by checking if the correspondin file exists.
+% language by checking if the corresponding file exists.
 % 
 %    \begin{macrocode}
 \bbl at foreach\bbl at language@opts{%
@@ -13608,10 +13666,10 @@
 % For historical reasons, \LaTeX{} can select two different series
 % (|bx| and |b|), for what is conceptually a single one. This can
 % lead to problems when a single family requires several fonts,
-% depending on the language, mainly because ‘subtitutions’ with some
+% depending on the language, mainly because ‘substitutions’ with some
 % combinations are not done consistently -- sometimes |bx/sc| is the
 % correct font, but sometimes points to |b/n|, even if |b/sc| exists.
-% So, some subtitutions are redefined (in a somewhat hackish way, by
+% So, some substitutions are redefined (in a somewhat hackish way, by
 % inspecting if the variant declaration contains |>ssub*|).
 %
 %    \begin{macrocode}
@@ -14630,7 +14688,7 @@
 % \subsection{CJK line breaking}
 %
 % Minimal line breaking for CJK scripts, mainly intended for simple
-% documents and short texts as a secundary language. Only line
+% documents and short texts as a secondary language. Only line
 % breaking, with a little stretching for justification, without any
 % attempt to adjust the spacing. It is based on (but does not strictly
 % follow) the Unicode algorithm.
@@ -14789,7 +14847,7 @@
   \catcode`_=11 \catcode`:=11
   \gdef\bblar at nofswarn{\gdef\msg_warning:nnx##1##2##3{}}
 \endgroup
-\gdef\bbl at arabicjust{% TODO. Allow for serveral locales.
+\gdef\bbl at arabicjust{% TODO. Allow for several locales.
   \let\bbl at arabicjust\relax
   \newattribute\bblar at kashida
   \directlua{ Babel.attr_kashida = luatexbase.registernumber'bblar at kashida' }%
@@ -24652,7 +24710,7 @@
 \@onlypreamble\@onlypreamble
 %    \end{macrocode}
 %
-%    Mimick \LaTeX's |\AtBeginDocument|; for this to work the user
+%    Mimic \LaTeX's |\AtBeginDocument|; for this to work the user
 %    needs to add |\begindocument| to his file.
 %
 %    \begin{macrocode}
@@ -24672,7 +24730,7 @@
 \def\AtBeginDocument{\g at addto@macro\@begindocumenthook}
 %    \end{macrocode}
 %
-%    We also have to mimick \LaTeX's |\AtEndOfPackage|. Our
+%    We also have to mimic \LaTeX's |\AtEndOfPackage|. Our
 %    replacement macro is much simpler; it stores its argument in
 %    |\@endofldf|.
 %
@@ -24699,7 +24757,7 @@
 \catcode`\&=4
 %    \end{macrocode}
 %
-%    Mimick \LaTeX's commands to define control sequences.
+%    Mimic \LaTeX's commands to define control sequences.
 %
 %    \begin{macrocode}
 \def\newcommand{\@star at or@long\new at command}
@@ -25016,7 +25074,7 @@
 %
 % For a couple of languages we need the \LaTeX-control sequence
 % |\scriptsize| to be available. Because plain \TeX\ doesn't have such
-% a sofisticated font mechanism as \LaTeX\ has, we just |\let| it to
+% a sophisticated font mechanism as \LaTeX\ has, we just |\let| it to
 % |\sevenrm|.
 %
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/babel/babel.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/babel.ins	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.ins	2023-12-06 21:14:42 UTC (rev 69050)
@@ -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/11/11}
+\def\filedate{2023/12/06}
 \def\batchfile{babel.ins}
 \input docstrip.tex
 

Modified: trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2023-12-06 21:14:42 UTC (rev 69050)
@@ -30,7 +30,7 @@
 %
 % \iffalse
 %<*dtx>
-\ProvidesFile{bbcompat.dtx}[2023/11/11 v3.97]
+\ProvidesFile{bbcompat.dtx}[2023/12/06 v3.98]
 %</dtx>
 %
 %% File 'bbcompat.dtx'

Modified: trunk/Master/texmf-dist/source/latex/babel/bbidxglo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/bbidxglo.dtx	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/source/latex/babel/bbidxglo.dtx	2023-12-06 21:14:42 UTC (rev 69050)
@@ -46,7 +46,7 @@
 %    \end{macrocode}
 %
 % \fi
-% \title{Generating the index and chage log for the Babel system}
+% \title{Generating the index and change log for the Babel system}
 % \author{Johannes Braams}
 % \date{\filedate}
 % \maketitle
@@ -73,7 +73,7 @@
 %
 %    Because the \babel\ system consists of so many files the default
 %    codeline numbering scheme of the \Lopt{doc} package has been
-%    adapted. The line numbers consist of two parts seperated with a
+%    adapted. The line numbers consist of two parts separated with a
 %    dot. This has to made known to the \mkidx\ program when it
 %    produces the index.
 %

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-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.def	2023-12-06 21:14:42 UTC (rev 69050)
@@ -40,7 +40,7 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{babel.def}[2023/11/11 v3.97 Babel common definitions]
+\ProvidesFile{babel.def}[2023/12/06 v3.98 Babel common definitions]
 \ifx\AtBeginDocument\@undefined  % TODO. change test.
   \def\@empty{}
 \def\loadlocalcfg#1{%
@@ -595,8 +595,8 @@
     \toks@\expandafter{\bbl at tempc#3}%
     \expandafter\edef\csname extras\languagename\endcsname{\the\toks@}%
   \fi}
-\def\bbl at version{3.97}
-\def\bbl at date{2023/11/11}
+\def\bbl at version{3.98}
+\def\bbl at date{2023/12/06}
 \ifx\language\@undefined
   \csname newcount\endcsname\language
 \fi
@@ -1858,20 +1858,6 @@
 \def\bbl at disc#1#2{\nobreak\discretionary{#2-}{}{#1}\bbl at allowhyphens}
 \bbl at trace{Multiencoding strings}
 \def\bbl at toglobal#1{\global\let#1#1}
-\@ifpackagewith{babel}{nocase}%
-  {\let\bbl at patchuclc\relax}%
-  {\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{%
-      \let\bbl at encoded\bbl at encoded@uclc
-      \bbl at ifunset{\languagename @bbl at uclc}% and resumes it
-        {##1}%
-        {\let\bbl at tempa##1\relax % Used by LANG at bbl@uclc
-         \csname\languagename @bbl at uclc\endcsname}%
-      {\bbl at tolower\@empty}{\bbl at toupper\@empty}}%
-    \gdef\bbl at tolower{\csname\languagename @bbl at lc\endcsname}%
-    \gdef\bbl at toupper{\csname\languagename @bbl at uc\endcsname}}}
 \@onlypreamble\StartBabelCommands
 \def\StartBabelCommands{%
   \begingroup
@@ -1893,11 +1879,17 @@
         \\\SetString\bbl at templ{\romannumeral\count@}{\the\toks@}%
         \count@=\the\count@\relax}}}%
   \newcommand\SetCase[3][]{%
-    \bbl at patchuclc
-    \bbl at forlang\bbl at tempa{%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at uclc}{\bbl at tempa##1}%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at uc}{##2}%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at lc}{##3}}}%
+    \def\bbl at tempa####1####2{%
+      \ifx####1\@empty\else
+        \bbl at carg\bbl at add{extras\CurrentOption}{%
+          \bbl at carg\babel at save{c__text_uppercase_\string####1_tl}%
+          \bbl at carg\def{c__text_uppercase_\string####1_tl}{####2}%
+          \bbl at carg\babel at save{c__text_lowercase_\string####2_tl}%
+          \bbl at carg\def{c__text_lowercase_\string####2_tl}{####1}}%
+        \expandafter\bbl at tempa
+      \fi}%
+    \bbl at tempa##1\@empty\@empty
+    \bbl at carg\bbl at toglobal{extras\CurrentOption}}
   \newcommand\SetHyphenMap[1]{%
     \bbl at forlang\bbl at tempa{%
       \expandafter\bbl at stringdef
@@ -2026,24 +2018,7 @@
     \bbl at usehooks{stringprocess}{}%
     \expandafter\bbl at stringdef
       \csname\bbl at LC\expandafter\endcsname\expandafter{\BabelString}}}
-\ifx\bbl at opt@strings\relax
-  \def\bbl at scset#1#2{\def#1{\bbl at encoded#2}}
-  \bbl at patchuclc
-  \let\bbl at encoded\relax
-  \def\bbl at encoded@uclc#1{%
-    \@inmathwarn#1%
-    \expandafter\ifx\csname\cf at encoding\string#1\endcsname\relax
-      \expandafter\ifx\csname ?\string#1\endcsname\relax
-        \TextSymbolUnavailable#1%
-      \else
-        \csname ?\string#1\endcsname
-      \fi
-    \else
-      \csname\cf at encoding\string#1\endcsname
-    \fi}
-\else
-  \def\bbl at scset#1#2{\def#1{#2}}
-\fi
+\def\bbl at scset#1#2{\def#1{#2}}
 \def\bbl at aftercmds#1{%
   \toks@\expandafter{\bbl at scafter#1}%
   \xdef\bbl at scafter{\the\toks@}}

Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.sty	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.sty	2023-12-06 21:14:42 UTC (rev 69050)
@@ -34,7 +34,7 @@
 %%
 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{babel}[2023/11/11 v3.97 The Babel package]
+\ProvidesPackage{babel}[2023/12/06 v3.98 The Babel package]
 \@ifpackagewith{babel}{debug}
   {\providecommand\bbl at trace[1]{\message{^^J[ #1 ]}}%
    \let\bbl at debug\@firstofone
@@ -470,8 +470,8 @@
       \expandafter\@secondoftwo
     \fi}
 \fi
-\def\bbl at version{3.97}
-\def\bbl at date{2023/11/11}
+\def\bbl at version{3.98}
+\def\bbl at date{2023/12/06}
 \ifx\language\@undefined
   \csname newcount\endcsname\language
 \fi
@@ -1777,20 +1777,6 @@
 \def\bbl at disc#1#2{\nobreak\discretionary{#2-}{}{#1}\bbl at allowhyphens}
 \bbl at trace{Multiencoding strings}
 \def\bbl at toglobal#1{\global\let#1#1}
-\@ifpackagewith{babel}{nocase}%
-  {\let\bbl at patchuclc\relax}%
-  {\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{%
-      \let\bbl at encoded\bbl at encoded@uclc
-      \bbl at ifunset{\languagename @bbl at uclc}% and resumes it
-        {##1}%
-        {\let\bbl at tempa##1\relax % Used by LANG at bbl@uclc
-         \csname\languagename @bbl at uclc\endcsname}%
-      {\bbl at tolower\@empty}{\bbl at toupper\@empty}}%
-    \gdef\bbl at tolower{\csname\languagename @bbl at lc\endcsname}%
-    \gdef\bbl at toupper{\csname\languagename @bbl at uc\endcsname}}}
 \@onlypreamble\StartBabelCommands
 \def\StartBabelCommands{%
   \begingroup
@@ -1812,11 +1798,17 @@
         \\\SetString\bbl at templ{\romannumeral\count@}{\the\toks@}%
         \count@=\the\count@\relax}}}%
   \newcommand\SetCase[3][]{%
-    \bbl at patchuclc
-    \bbl at forlang\bbl at tempa{%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at uclc}{\bbl at tempa##1}%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at uc}{##2}%
-      \bbl at carg\bbl at encstring{\bbl at tempa @bbl at lc}{##3}}}%
+    \def\bbl at tempa####1####2{%
+      \ifx####1\@empty\else
+        \bbl at carg\bbl at add{extras\CurrentOption}{%
+          \bbl at carg\babel at save{c__text_uppercase_\string####1_tl}%
+          \bbl at carg\def{c__text_uppercase_\string####1_tl}{####2}%
+          \bbl at carg\babel at save{c__text_lowercase_\string####2_tl}%
+          \bbl at carg\def{c__text_lowercase_\string####2_tl}{####1}}%
+        \expandafter\bbl at tempa
+      \fi}%
+    \bbl at tempa##1\@empty\@empty
+    \bbl at carg\bbl at toglobal{extras\CurrentOption}}
   \newcommand\SetHyphenMap[1]{%
     \bbl at forlang\bbl at tempa{%
       \expandafter\bbl at stringdef
@@ -1945,24 +1937,7 @@
     \bbl at usehooks{stringprocess}{}%
     \expandafter\bbl at stringdef
       \csname\bbl at LC\expandafter\endcsname\expandafter{\BabelString}}}
-\ifx\bbl at opt@strings\relax
-  \def\bbl at scset#1#2{\def#1{\bbl at encoded#2}}
-  \bbl at patchuclc
-  \let\bbl at encoded\relax
-  \def\bbl at encoded@uclc#1{%
-    \@inmathwarn#1%
-    \expandafter\ifx\csname\cf at encoding\string#1\endcsname\relax
-      \expandafter\ifx\csname ?\string#1\endcsname\relax
-        \TextSymbolUnavailable#1%
-      \else
-        \csname ?\string#1\endcsname
-      \fi
-    \else
-      \csname\cf at encoding\string#1\endcsname
-    \fi}
-\else
-  \def\bbl at scset#1#2{\def#1{#2}}
-\fi
+\def\bbl at scset#1#2{\def#1{#2}}
 \def\bbl at aftercmds#1{%
   \toks@\expandafter{\bbl at scafter#1}%
   \xdef\bbl at scafter{\the\toks@}}
@@ -2298,6 +2273,7 @@
       Alph,labels,labels*,calendar,date,casing}%
     {\bbl at csarg\let{KVP@##1}\@nnil}%
   \global\let\bbl at release@transforms\@empty
+  \global\let\bbl at release@casing\@empty
   \let\bbl at calendars\@empty
   \global\let\bbl at inidata\@empty
   \global\let\bbl at extend@ini\@gobble
@@ -2602,9 +2578,10 @@
         \let\\\@Alph\<bbl at cntr@\bbl at KVP@Alph @\languagename>}}%
   \fi
   % == Casing ==
+  \bbl at release@casing
   \ifx\bbl at KVP@casing\@nnil\else
     \bbl at csarg\xdef{casing@\languagename}%
-      {\@nameuse{bbl at casing@\languagename}-x-\bbl at KVP@casing}%
+      {\@nameuse{bbl at casing@\languagename}\bbl at maybextx\bbl at KVP@casing}%
   \fi
   % == Calendars ==
   \ifx\bbl at KVP@calendar\@nnil
@@ -2959,6 +2936,7 @@
        \bbl at cs{@kv at identification.warning#1}\\%
        Reported }}}
 \let\bbl at release@transforms\@empty
+\let\bbl at release@casing\@empty
 \def\bbl at ini@exports#1{%
   % Identification always exported
   \bbl at iniwarning{}%
@@ -2974,7 +2952,7 @@
   \bbl at exp{\\\bbl at exportkey{lname}{identification.name.opentype}%
     {\csname bbl at elname@\languagename\endcsname}}%
   \bbl at exportkey{tbcp}{identification.tag.bcp47}{}%
-  % Somewhat hackish. TODO
+  % Somewhat hackish. TODO:
   \bbl at exportkey{casing}{identification.tag.bcp47}{}%
   \bbl at exportkey{lbcp}{identification.language.tag.bcp47}{}%
   \bbl at exportkey{lotf}{identification.tag.opentype}{dflt}%
@@ -3025,8 +3003,23 @@
 \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 maybextx{-\bbl at csarg\ifx{extx@\languagename}\@empty x-\fi}
+\def\bbl at inikv@characters#1#2{%
+  \bbl at ifsamestring{#1}{casing}%  eg, casing = uV
+    {\bbl at exp{%
+       \\\g at addto@macro\\\bbl at release@casing{%
+         \\\bbl at casemapping{}{\languagename}{\unexpanded{#2}}}}}%
+    {\in@{$casing.}{$#1}%  eg, casing.Uv = uV
+     \ifin@
+       \lowercase{\def\bbl at tempb{#1}}%
+       \bbl at replace\bbl at tempb{casing.}{}%
+       \bbl at exp{\\\g at addto@macro\\\bbl at release@casing{%
+         \\\bbl at casemapping
+           {\\\bbl at maybextx\bbl at tempb}{\languagename}{\unexpanded{#2}}}}%
+     \else
+       \bbl at inikv{#1}{#2}%
+     \fi}}
 \def\bbl at inikv@counters#1#2{%
   \bbl at ifsamestring{#1}{digits}%
     {\bbl at error{The counter name 'digits' is reserved for mapping\\%
@@ -3303,7 +3296,6 @@
   \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{%
@@ -3379,7 +3371,7 @@
            \fi
            \AtBeginDocument{%
              \bbl at patchfont{\bbl at xenohyph}%
-             \expandafter\select at language\expandafter{\languagename}}%
+             {\expandafter\select at language\expandafter{\languagename}}}%
         \fi}}%
   \fi
   \bbl at csarg\bbl at toglobal{lsys@#1}}
@@ -3458,7 +3450,7 @@
 \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
+  \ifcase\@car#8\@nil\or   % Currently <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
@@ -3509,6 +3501,11 @@
 \@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}
+\ifcase\bbl at engine % Converts utf8 to its code (expandable)
+  \def\bbl at utftocode#1{\the\numexpr\decode at UTFviii#1\relax}
+\else
+  \def\bbl at utftocode#1{\expandafter`\string#1}
+\fi
 \providecommand\BCPdata{}
 \ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
   \renewcommand\BCPdata[1]{\bbl at bcpdata@i#1\@empty}
@@ -3526,15 +3523,45 @@
 \fi
 \@namedef{bbl at info@casing.tag.bcp47}{casing}
 \newcommand\BabelUppercaseMapping[3]{%
-  \let\bbl at tempx\languagename
-  \edef\languagename{#1}%
-  \DeclareUppercaseMapping[\BCPdata{casing}]{#2}{#3}%
-  \let\languagename\bbl at tempx}
+  \DeclareUppercaseMapping[\@nameuse{bbl at casing@#1}]{#2}{#3}}
+\newcommand\BabelTitlecaseMapping[3]{%
+  \DeclareTitlecaseMapping[\@nameuse{bbl at casing@#1}]{#2}{#3}}
 \newcommand\BabelLowercaseMapping[3]{%
-  \let\bbl at tempx\languagename
-  \edef\languagename{#1}%
-  \DeclareLowercaseMapping[\BCPdata{casing}]{#2}{#3}%
-  \let\languagename\bbl at tempx}
+  \DeclareLowercaseMapping[\@nameuse{bbl at casing@#1}]{#2}{#3}}
+\def\bbl at casemapping#1#2#3{% 1:variant
+  \def\bbl at tempa##1 ##2{% Loop
+    \bbl at casemapping@i{##1}%
+    \ifx\@empty##2\else\bbl at afterfi\bbl at tempa##2\fi}%
+  \edef\bbl at templ{\@nameuse{bbl at casing@#2}#1}%  Language code
+  \def\bbl at tempe{0}%   Mode (upper/lower...)
+  \def\bbl at tempc{#3 }% Casing list
+  \expandafter\bbl at tempa\bbl at tempc\@empty}
+\def\bbl at casemapping@i#1{%
+  \def\bbl at tempb{#1}%
+  \ifcase\bbl at engine % Handle utf8 in pdftex, by surrounding chars with {}
+    \@nameuse{regex_replace_all:nnN}%
+      {[\x{c0}-\x{ff}][\x{80}-\x{bf}]*}{{\0}}\bbl at tempb
+  \else
+    \@nameuse{regex_replace_all:nnN}{.}{{\0}}\bbl at tempb % TODO. needed?
+  \fi
+  \expandafter\bbl at casemapping@ii\bbl at tempb\@@}
+\def\bbl at casemapping@ii#1#2#3\@@{%
+  \in@{#1#3}{<>}% ie, if <u>, <l>, <t>
+  \ifin@
+    \edef\bbl at tempe{%
+      \if#2u1 \else\if#2l2 \else\if#2t3 \fi\fi\fi}%
+  \else
+    \ifcase\bbl at tempe\relax
+      \DeclareUppercaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+      \DeclareLowercaseMapping[\bbl at templ]{\bbl at utftocode{#2}}{#1}%
+    \or
+      \DeclareUppercaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+    \or
+      \DeclareLowercaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+    \or
+      \DeclareTitlecaseMapping[\bbl at templ]{\bbl at utftocode{#1}}{#2}%
+    \fi
+  \fi}
 \let\bbl at ensureinfo\@gobble
 \newcommand\BabelEnsureInfo{%
   \ifx\InputIfFileExists\@undefined\else
@@ -3569,6 +3596,12 @@
   \fi}
 \let\bbl at ini@loaded\@empty
 \newcommand\LocaleForEach{\bbl at foreach\bbl at ini@loaded}
+\def\ShowLocaleProperties#1{%
+  \typeout{}%
+  \typeout{*** Properties for language '#1' ***}
+  \def\bbl at elt##1##2##3{\typeout{##1/##2 = ##3}}%
+  \@nameuse{bbl at inidata@#1}%
+  \typeout{*******}}
 \newcommand\babeladjust[1]{%  TODO. Error handling.
   \bbl at forkv{#1}{%
     \bbl at ifunset{bbl at ADJ@##1@##2}%

Modified: trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2023-12-06 21:14:42 UTC (rev 69050)
@@ -38,10 +38,10 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{hyphen.cfg}[2023/11/11 v3.97 Babel hyphens]
+\ProvidesFile{hyphen.cfg}[2023/12/06 v3.98 Babel hyphens]
 \xdef\bbl at format{\jobname}
-\def\bbl at version{3.97}
-\def\bbl at date{2023/11/11}
+\def\bbl at version{3.98}
+\def\bbl at date{2023/12/06}
 \ifx\AtBeginDocument\@undefined
   \def\@empty{}
 \fi

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/fa/babel-fa.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/fa/babel-fa.ini	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/fa/babel-fa.ini	2023-12-06 21:14:42 UTC (rev 69050)
@@ -6,11 +6,12 @@
 ; * Common Locale Data Repository (license Unicode):
 ;   http://cldr.unicode.org/
 ;   http://unicode.org/copyright.html
+; * With improvements by Farshad Rasuli (@farshadrasuli).
 
 [identification]
 charset = utf8
-version = 1.12
-date = 2023-01-27
+version = 1.13
+date = 2023-11-25
 name.local = فارسی
 name.english = Persian
 name.babel = persian
@@ -27,15 +28,15 @@
 derivate = no
 
 [captions]
-preface = پیشگفتار
-ref = مراجع
+preface = پیش‌گفتار
+ref = مرجع‌ها
 abstract = چکیده
 bib = کتاب‌نامه
 chapter = فصل
 appendix = پیوست
-contents = فهرست مطالب
-listfigure = لیست تصاویر
-listtable = لیست جداول
+contents = فهرست
+listfigure = فهرست شکل‌ها
+listtable = فهرست جدول‌ها
 index = نمایه
 figure = شكل
 table = جدول
@@ -43,11 +44,11 @@
 encl = پیوست
 cc = رونوشت
 headto = به
-page = صفحة
+page = صفحه
 see = ببینید
 also = نیز ببینید
-proof = برهان
-glossary = دانش‌نامه
+proof = اثبات
+glossary = فرهنگ‌نامه
 
 [date]
 calendar.preferred = persian gregorian islamic islamic-civil islamic-tbla
@@ -55,13 +56,13 @@
 [date.gregorian]
 date.long = [d] [MMMM] [y]
 date.short = [y]/[M]/[d]
-months.wide.1 = ژانویهٔ
-months.wide.2 = فوریهٔ
+months.wide.1 = ژانویه
+months.wide.2 = فوریه
 months.wide.3 = مارس
 months.wide.4 = آوریل
-months.wide.5 = مهٔ
+months.wide.5 = مه
 months.wide.6 = ژوئن
-months.wide.7 = ژوئیهٔ
+months.wide.7 = ژوئیه
 months.wide.8 = اوت
 months.wide.9 = سپتامبر
 months.wide.10 = اکتبر
@@ -86,13 +87,13 @@
 days.wide.fri = جمعه
 days.wide.sat = شنبه
 days.wide.sun = یکشنبه
-days.abbreviated.mon = دوشنبه
-days.abbreviated.tue = سه‌شنبه
-days.abbreviated.wed = چهارشنبه
-days.abbreviated.thu = پنجشنبه
+days.abbreviated.mon = دو
+days.abbreviated.tue = سه
+days.abbreviated.wed = چهار
+days.abbreviated.thu = پنج
 days.abbreviated.fri = جمعه
 days.abbreviated.sat = شنبه
-days.abbreviated.sun = یکشنبه
+days.abbreviated.sun = یک
 days.narrow.mon = د
 days.narrow.tue = س
 days.narrow.wed = چ
@@ -146,8 +147,8 @@
 months.wide.8     = شعبان
 months.wide.9     = رمضان
 months.wide.10    = شوال
-months.wide.11    = ذیقعدهٔ
-months.wide.12    = ذیحجهٔ
+months.wide.11    = دیقعده
+months.wide.12    = دیحجه
 
 [time.gregorian]
 time.medium = [H]:[mm]:[ss]
@@ -167,7 +168,7 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = «»‹›
+delimiters.quotes = «» “” ‘’
 auxiliary = [ـ\u200C\u200D\u200E\u200F \u064E \u0650 \u064F \u0652 \u0656 \u0670 إ ك ى ي]
 exemplarCharacters = [\u064B \u064D \u064C \u0651 \u0654 آ ا ء أ ؤ ئ ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ة ی]
 index = [آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی]
@@ -177,11 +178,11 @@
 defaultNumberingSystem = arabext
 digits.native = ۰۱۲۳۴۵۶۷۸۹
 minimumGroupingDigits = 1
-decimal = .
+decimal = ٫
 exponential = E
-group = ,
+group = ٬
 infinity = ∞
-list = ;
+list = ؛
 minusSign = ‎−
 nan = ناعدد
 perMille = ‰
@@ -190,7 +191,7 @@
 superscriptingExponent = ×
 
 [counters]
-abjad = ا ب ج د ه‍ و ز ح ط ی ک ل م ن س ع ف ص ق ر ش ت ث خ ذ ض ظ غ
+abjad = ا ب ج د ه‍ و ز ح ط ی ک ل م ن س ع ف ص ق ر ش ت ث خ ذ ض ظ غ گ چ پ ژ
 alphabetic = ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ه‍ ی
 
 [transforms.prehyphenation]
@@ -198,5 +199,16 @@
 kashida.plain.1.1 =   { kashida = 500 }
 kashida.plain.2.0 = { ()ل()[ًٍَُِّ]*[اأإآ] }
 kashida.plain.2.1 =   { kashida = 0 }
+; Contributed by Christian Lück (@lueck) for Arabic
+kashida.base.1.0 = { ()[يئهشسقفغعضصنمكلظطخحجثتب]()[يئهشسقفغعضصنمكلظطخحجثتباأإآوؤذدزرة] }
+kashida.base.1.1 =   { kashida = 500 }
+; one diacritic mark: insert kashida behind it
+kashida.base.2.0 = { [يئهشسقفغعضصنمكلظطخحجثتب]()[ًٍَُِّ]()[يئهشسقفغعضصنمكلظطخحجثتباأإآوؤذدزرة] }
+kashida.base.2.1 =   { kashida = 500 }
+; two diacritic marks: insert kashida behind them
+kashida.base.3.0 = { [يئهشسقفغعضصنمكلظطخحجثتب][ًٍَُِّ]()[ًٍَُِّ]()[يئهشسقفغعضصنمكلظطخحجثتباأإآوؤذدزرة] }
+kashida.base.3.1 =   { kashida = 500 }
+kashida.base.4.0 = { ()ل()[ًٍَُِّ]*[اأإآ] }
+kashida.base.4.1 =   { kashida = 0 }
 
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-classicallatin.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-classicallatin.tex	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-classicallatin.tex	2023-12-06 21:14:42 UTC (rev 69050)
@@ -18,8 +18,4 @@
   \SetHyphenMap{\BabelLower{`V}{`u}}
 \EndBabelCommands
 
-% TODO. Must be defined somehow in the ini file:
-\BabelUppercaseMapping{\languagename}{`u}{V}
-\BabelLowercaseMapping{\languagename}{`v}{U}
-
 \endinput
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-classic.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-classic.ini	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-classic.ini	2023-12-06 21:14:42 UTC (rev 69050)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.6
-date = 2023-06-25
+version = 1.7
+date = 2023-12-03
 name.english = Classical Latin
 name.babel = classicallatin
 tag.bcp47 = la-x-classic
@@ -148,6 +148,8 @@
 
 [characters]
 delimiters.quotes = 
+casing = uV
+casing.Nouv = uU vV
 
 [counters]
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-ecclesia.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-ecclesia.ini	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-ecclesia.ini	2023-12-06 21:14:42 UTC (rev 69050)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.6
-date = 2023-06-25
+version = 1.7
+date = 2023-12-03
 name.english = Ecclesiastical Latin
 name.babel = ecclesiasticallatin
 tag.bcp47 = la-x-ecclesia
@@ -148,6 +148,7 @@
 
 [characters]
 delimiters.quotes = 
+casing.Uv = uV
 
 [counters]
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-medieval.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-medieval.ini	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la-x-medieval.ini	2023-12-06 21:14:42 UTC (rev 69050)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2022-07-28
+version = 1.6
+date = 2023-12-03
 name.english = Medieval Latin
 name.babel = medievallatin
 tag.bcp47 = la-x-medieval
@@ -147,6 +147,8 @@
 
 [characters]
 delimiters.quotes = 
+casing = uV
+casing.Nouv = uU vV
 
 [counters]
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la.ini	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/la/babel-la.ini	2023-12-06 21:14:42 UTC (rev 69050)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.4
-date = 2021-11-15
+version = 1.5
+date = 2023-12-03
 name.english = Latin
 name.babel = latin
 name.polyglossia = latin
@@ -145,7 +145,8 @@
 hyphenationmin = 
 
 [characters]
-delimiters.quotes = 
+delimiters.quotes =
+casing.Uv = uV
 
 [counters]
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/luababel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/luababel.def	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/luababel.def	2023-12-06 21:14:42 UTC (rev 69050)
@@ -601,7 +601,7 @@
   \catcode`_=11 \catcode`:=11
   \gdef\bblar at nofswarn{\gdef\msg_warning:nnx##1##2##3{}}
 \endgroup
-\gdef\bbl at arabicjust{% TODO. Allow for serveral locales.
+\gdef\bbl at arabicjust{% TODO. Allow for several locales.
   \let\bbl at arabicjust\relax
   \newattribute\bblar at kashida
   \directlua{ Babel.attr_kashida = luatexbase.registernumber'bblar at kashida' }%

Modified: trunk/Master/texmf-dist/tex/generic/babel/nil.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/nil.ldf	2023-12-06 21:14:04 UTC (rev 69049)
+++ trunk/Master/texmf-dist/tex/generic/babel/nil.ldf	2023-12-06 21:14:42 UTC (rev 69050)
@@ -33,7 +33,7 @@
 %% extension |.ins|) which are part of the distribution.
 %%
 
-\ProvidesLanguage{nil}[2023/11/11 v3.97 Nil language]
+\ProvidesLanguage{nil}[2023/12/06 v3.98 Nil language]
 \LdfInit{nil}{datenil}
 \ifx\l at nil\@undefined
   \newlanguage\l at nil



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