texlive[64614] Master/texmf-dist: babel (4oct22)

commits+karl at tug.org commits+karl at tug.org
Tue Oct 4 21:54:54 CEST 2022


Revision: 64614
          http://tug.org/svn/texlive?view=revision&revision=64614
Author:   karl
Date:     2022-10-04 21:54:54 +0200 (Tue, 04 Oct 2022)
Log Message:
-----------
babel (4oct22)

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-transforms.lua
    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/bo/babel-bo.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-tibetan.tex
    trunk/Master/texmf-dist/tex/generic/babel/locale/mr/babel-mr.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-BN.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-SG.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/my/babel-my.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/mzn/babel-mzn.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/ne/babel-ne.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/nl/babel-nl.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/nmg/babel-nmg.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/nn/babel-nn.ini
    trunk/Master/texmf-dist/tex/generic/babel/locale/no/babel-no.ini
    trunk/Master/texmf-dist/tex/generic/babel/luababel.def
    trunk/Master/texmf-dist/tex/generic/babel/nil.ldf
    trunk/Master/texmf-dist/tex/generic/babel/xebabel.def

Modified: trunk/Master/texmf-dist/doc/latex/babel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/babel/README.md	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/doc/latex/babel/README.md	2022-10-04 19:54:54 UTC (rev 64614)
@@ -1,5 +1,7 @@
-## Babel 3.80
+## Babel 3.81
 
+**Development**
+
 This package manages culturally-determined typographical (and other)
 rules, and hyphenation patterns for a wide range of languages. Many
 language styles work with pdflatex, as well as with xelatex and
@@ -8,9 +10,9 @@
 
 The latest stable version is available on <https://ctan.org/pkg/babel>.
 
-Changes in version 3.80 are described in:
+Changes in version 3.81 are described in:
 
-https://latex3.github.io/babel/news/whats-new-in-babel-3.80.html
+https://latex3.github.io/babel/news/whats-new-in-babel-3.81.html
 
 Apart from the manual, you can find information on some aspects of babel at:
 
@@ -46,21 +48,14 @@
 
 ### Summary of latest changes
 ```
-3.80  2022-09-16
-      * Ethiopic calendar.
-      * Hungarian date in the superessive case.
-      * Captions for Hausa by Abubakar Yusuf (@fatherofcamels)
-      * Fixes in dates:
-        - Latin: In `pdftex`, numerals were printed in arabic form.
-        - Thai: Buddhist and Gregorian were reversed.
-        - Persian: The Persian calendar was not loaded.
-      * More updates to the CLDR 41: Galician, Swiss German, Gujarati,
-        Hausa, Hebrew, Hindi, Croatian, Upper Sorbian, Hungarian,
-        Armenian, Interlingua, Indonesian, Igbo, Sichuan Yi, Icelandic,
-        Italian, Japanese, Ngomba, Georgian, Kabyle, Kabuverdianu,
-        Kazakh, Kako, Kalaallisut, Khmer, Kannada, Korean, Konkani,
-        Kashmiri, Colognian, Cornish, Kyrgyz, Lakota, Lao, Northern
-        Luri, Lithuanian, Macedonian, Malayalam, Mongolian.
+3.81  2022-10-04
+      * Tibetan line breaking and justification (lines padded with
+        trailing tshegs).
+      * New option 'letters' for 'onchar'.
+      * Conceal 'fontspec' warnings about unknown languages and
+        scripts with \babelfont.
+      * More updates to the CLDR 41: Burmese, Dutch, Kwasio, Malay,
+        Marathi, Mazanderani, Nepali, Norwegian, Norwegian Nynorsk.
 ```
 
 ### Previous changes

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	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.dtx	2022-10-04 19:54:54 UTC (rev 64614)
@@ -32,7 +32,7 @@
 %
 % \iffalse
 %<*filedriver>
-\ProvidesFile{babel.dtx}[2022/09/17 v3.80 The Babel package]
+\ProvidesFile{babel.dtx}[2022/10/04 v3.81 The Babel package]
 \documentclass{ltxdoc}
 \GetFileInfo{babel.dtx}
 \usepackage{fontspec}
@@ -943,12 +943,10 @@
 The command |\shorthandoff| sets the |\catcode| for each of the
 characters in its argument to other (12); the command |\shorthandon|
 sets the |\catcode| to active (13). Both commands only work on `known'
-shorthand characters.
+shorthand characters, and an error will be raised otherwise. You can
+check if a character is a shorthand with |\ifbabelshorthand| (see
+below).
 
-% TODO - Is the following true ????
-% If a character is not known to be a shorthand character its category
-% code will be left unchanged.
-
 \New{3.9a} However, |\shorthandoff| does not behave as
 you would expect with characters like |~| or |^|, because they
 usually are not ``other''. For them |\shorthandoff*| is provided,
@@ -2311,19 +2309,6 @@
 \end{warning}
 
 \begin{troubleshooting}
-  \trouble{Package fontspec Warning: 'Language 'LANG' not available for
-  font 'FONT' with script 'SCRIPT' 'Default' language used instead'}
-  \textit{Package fontspec Warning: 'Language 'LANG' not available for
-  font 'FONT' with script 'SCRIPT' 'Default' language used instead'}.
-
-  \textbf{This is \textit{not} an error.} This warning is shown by
-  \textsf{fontspec}, not by \babel. It can be irrelevant for English,
-  but not for many other languages, including Urdu and Turkish. This is
-  a useful and harmless warning, and if everything is fine with your
-  document the best thing you can do is just to ignore it altogether.
-\end{troubleshooting}
-
-\begin{troubleshooting}
   \trouble{Package babel Info: The following fonts are not babel
   standard families} \textit{Package babel Info: The following fonts
   are not babel standard families}.
@@ -2623,7 +2608,8 @@
 inconsistent, this makes setting a language up easier in most typical
 cases.
 
-\Describe{onchar=}{\texttt{ids} $\string|$ \texttt{fonts}}
+\Describe{onchar=}{\texttt{ids} $\string|$ \texttt{fonts}
+  $\string|$ \texttt{letters}}
 \New{3.38} This option is much like an ‘event’ called when a character
 belonging to the script of this locale is found (as its name implies,
 it acts on characters, not on spaces). There are currently two
@@ -2634,6 +2620,10 @@
 |mapfont|. Characters can be added or modified with
 |\babelcharproperty|.
 
+\New{3.81} Option |letters| restricts the ‘actions’ to letters, in the
+\TeX{} sense (i.~e., with catcode 11). Digits and punctuation are then
+considered part of current locale (as set by a selector).
+
 \begin{note}
   An alternative approach with \luatex{} and Harfbuzz is the font
   option |RawFeature={multiscript=auto}|. It does not switch the
@@ -2657,7 +2647,8 @@
 See section~\ref{transforms}.
 
 \Describe{justification=}{\texttt{kashida} $\string|$
-\texttt{elongated} $\string|$ \texttt{unhyphenated}}
+\texttt{elongated} $\string|$ \texttt{unhyphenated}
+$\string|$ \texttt{padding}}
 \New{3.59} There are currently three options, mainly for the Arabic
 script. It sets the linebreaking and justification method, which can be
 based on the the \textsc{arabic tatweel} character or in the
@@ -2666,6 +2657,11 @@
 \href{https://latex3.github.io/babel/news/whats-new-in-babel-3.59.html}%
   {\babel\ site}.
 
+\New{3.81} The option |padding| has been devised primarily for Tibetan.
+It’s still somewhat experimental. Again, there is an explanation in the
+\href{https://latex3.github.io/babel/news/whats-new-in-babel-3.81.html}%
+  {\babel\ site}.
+
 \Describe{linebreaking=}{}
 \New{3.59} Just a synonymous for \texttt{justification}.
 
@@ -4107,6 +4103,10 @@
 \babelcharproperty{`)}{linebreak}{cl} % or id, op, cl, ns, ex, in, hy
 \end{verbatim}
 
+Please, refer to the Unicode standard (Annex \#9 and Annex \#14) for
+the meaning of the available codes. For example, |en| is ‘European
+number’ and |id| is ‘ideographic’.
+
 \New{3.39} Another property is |locale|, which adds characters to the
 list used by |onchar| in |\babelprovide|, or, if the last argument is
 empty, removes them. The last argument is the locale name:
@@ -5176,8 +5176,8 @@
 % \section{Tools}
 %
 %    \begin{macrocode}
-%<<version=3.80>>
-%<<date=2022/09/17>>
+%<<version=3.81>>
+%<<date=2022/10/04>>
 %    \end{macrocode}
 %
 % \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -5304,7 +5304,8 @@
 %   To check if a macro is defined, we create a new macro, which does
 %   the same as |\@ifundefined|. However, in an $\epsilon$-tex engine,
 %   it is based on |\ifcsname|, which is more efficient, and does not
-%   waste memory.
+%   waste memory. Defined inside a group, to avoid \cs{ifcsname} being
+%   implicitly set to |\relax| by the |\csname| test.
 %
 %    \begin{macrocode}
 \begingroup
@@ -5314,7 +5315,7 @@
     \else
       \expandafter\@secondoftwo
     \fi}
-  \bbl at ifunset{ifcsname}% TODO. A better test?
+  \bbl at ifunset{ifcsname}%
     {}%
     {\gdef\bbl at ifunset#1{%
        \ifcsname#1\endcsname
@@ -6135,7 +6136,6 @@
                request the languages explicitly}%
               {See the manual for further details.}%
   \fi
-% TODO. Option to search if loaded, with \LocaleForEach
   \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}}}% 
@@ -6427,19 +6427,8 @@
   % TODO. name at map must be here?
   \bbl at provide@locale
   \bbl at iflanguage\languagename{%
-     \expandafter\ifx\csname date\languagename\endcsname\relax
-      \bbl at error
-        {Unknown language '\languagename'. Either you have\\%
-         misspelled its name, it has not been installed,\\%
-         or you requested it in a previous run. Fix its name,\\%
-         install it or just rerun the file, respectively. In\\%
-         some cases, you may need to remove the aux file}%
-        {You may proceed, but expect wrong results}%
-    \else
-      % set type
-      \let\bbl at select@type\z@
-      \expandafter\bbl at switch\expandafter{\languagename}%
-    \fi}}
+    \let\bbl at select@type\z@
+    \expandafter\bbl at switch\expandafter{\languagename}}}
 \def\babel at aux#1#2{%
   \select at language{#1}%
   \bbl at foreach\BabelContentsFiles{% \relax -> don't assume vertical mode
@@ -6493,7 +6482,7 @@
   \bbl at id@assign
   % switch captions, date
   % No text is supposed to be added here, so we remove any
-  % spurious spaces.  
+  % spurious spaces.
   \bbl at bsphack
     \ifcase\bbl at select@type
       \csname captions#1\endcsname\relax
@@ -6540,9 +6529,10 @@
   \bbl at xin@{/u}{/\bbl at tempa}%
   \ifin@\else\bbl at xin@{/e}{/\bbl at tempa}\fi % elongated forms 
   \ifin@\else\bbl at xin@{/k}{/\bbl at tempa}\fi % only kashida
+  \ifin@\else\bbl at xin@{/p}{/\bbl at tempa}\fi % padding (eg, Tibetan)
   \ifin@\else\bbl at xin@{/v}{/\bbl at tempa}\fi % variable font
   \ifin@
-    % unhyphenated/kashida/elongated = allow stretching
+    % unhyphenated/kashida/elongated/padding = allow stretching
     \language\l at unhyphenated
     \babel at savevariable\emergencystretch
     \emergencystretch\maxdimen
@@ -6709,17 +6699,6 @@
   % TODO. name at map here?
   \bbl at provide@locale
   \bbl at iflanguage\languagename{%
-    \expandafter\ifx\csname date\languagename\endcsname\relax
-      \bbl at warning   % TODO - why a warning, not an error?
-        {Unknown language '#1'. Either you have\\%
-         misspelled its name, it has not been installed,\\%
-         or you requested it in a previous run. Fix its name,\\%
-         install it or just rerun the file, respectively. In\\%
-         some cases, you may need to remove the aux file.\\%
-         I'll proceed, but expect wrong results.\\%
-         Reported}%
-    \fi
-    % set type
     \let\bbl at select@type\@ne
     \expandafter\bbl at switch\expandafter{\languagename}}}
 %    \end{macrocode}
@@ -6944,7 +6923,7 @@
   \@nameuse{#2}%
   \edef\bbl at tempa{#1}%
   \bbl at sreplace\bbl at tempa{name}{}%
-  \bbl at warning{% TODO.
+  \bbl at warning{%
     \@backslashchar#1 not set for '\languagename'. Please,\\%
     define it after the language has been loaded\\%
     (typically in the preamble) with:\\% 
@@ -7039,8 +7018,7 @@
 % The macro |\initiate at active@char| below takes all the necessary
 % actions to make its argument a shorthand character. The real work
 % is performed once for each character. But first we define a little
-% tool. TODO. Always used with additional expansions. Move them here?
-% Move the macro to basic?
+% tool.
 %
 %    \begin{macrocode}
 \def\bbl at withactive#1#2{%
@@ -7175,7 +7153,7 @@
 %
 %    \begin{macrocode}
 \bbl at trace{Defining babelensure}
-\newcommand\babelensure[2][]{%  TODO - revise test files
+\newcommand\babelensure[2][]{%
   \AddBabelHook{babel-ensure}{afterextras}{%
     \ifcase\bbl at select@type
       \bbl at cl{e}%
@@ -8695,21 +8673,12 @@
 %
 %  \paragraph{Tools}
 %
-% But first, a couple of tools. The first one makes global a local
-% variable. This is not the best solution, but it works.
+% But first, a tool. It makes global a local variable. This is not the
+% best solution, but it works.
 %
 %    \begin{macrocode}
 \bbl at trace{Multiencoding strings}
 \def\bbl at toglobal#1{\global\let#1#1}
-\def\bbl at recatcode#1{% TODO. Used only once?
-  \@tempcnta="7F
-  \def\bbl at tempa{%
-    \ifnum\@tempcnta>"FF\else
-      \catcode\@tempcnta=#1\relax
-      \advance\@tempcnta\@ne
-      \expandafter\bbl at tempa
-    \fi}%
-  \bbl at tempa}
 %    \end{macrocode}
 %
 % The second one. We need to patch |\@uclclist|, but it is done once
@@ -8789,7 +8758,14 @@
 \@onlypreamble\StartBabelCommands
 \def\StartBabelCommands{%
   \begingroup
-  \bbl at recatcode{11}%
+  \@tempcnta="7F
+  \def\bbl at tempa{%
+    \ifnum\@tempcnta>"FF\else
+      \catcode\@tempcnta=11
+      \advance\@tempcnta\@ne
+      \expandafter\bbl at tempa
+    \fi}%
+  \bbl at tempa
   <@Macros local to BabelCommands@>
   \def\bbl at provstring##1##2{%
     \providecommand##1{##2}%
@@ -9119,7 +9095,7 @@
 % separates these two steps.
 %
 %    \begin{macrocode}
-\newcommand\setlocalecaption{%  TODO. Catch typos. What about ensure?
+\newcommand\setlocalecaption{%  TODO. Catch typos.
   \@ifstar\bbl at setcaption@s\bbl at setcaption@x}
 \def\bbl at setcaption@x#1#2#3{%  language caption-name string
   \bbl at trim@def\bbl at tempa{#2}%
@@ -9855,7 +9831,15 @@
         Babel.linebreaking.add_before(Babel.locale_map)
         Babel.loc_to_scr = {}
         Babel.chr_to_loc = Babel.chr_to_loc or {}
-      end}%
+      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
@@ -9958,7 +9942,8 @@
      \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,unhyphenated,}%
+    \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}%
@@ -9967,6 +9952,8 @@
   \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{\bbl at tibetanjust}\fi
   % == Line breaking: hyphenate.other.(locale|script) ==
   \ifx\bbl at lbkflag\@empty
     \bbl at ifunset{bbl at hyotl@\languagename}{}%
@@ -12058,9 +12045,7 @@
     \ifx\RTLfootnotetext\@undefined
       \AtEndOfPackage{%
         \EnableBabelHook{babel-bidi}%
-        \ifx\fontspec\@undefined
-          \bbl at loadfontspec % bidi needs fontspec
-        \fi
+        \bbl at loadfontspec % bidi needs fontspec
         \usepackage#1{bidi}}%
     \fi}
   \ifnum\bbl at bidimode>200
@@ -12940,24 +12925,17 @@
 %<<*Font selection>>
 \bbl at trace{Font handling with fontspec}
 \ifx\ExplSyntaxOn\@undefined\else
-  \ExplSyntaxOn
-  \catcode`\ =10
+  \def\bbl at fs@warn at nx#1#2{% \bbl at tempfs is the original macro
+    \in@{,#1,}{,no-script,language-not-exist,}%
+    \ifin@\else\bbl at tempfs@nx{#1}{#2}\fi}
+  \def\bbl at fs@warn at nxx#1#2#3{%
+    \in@{,#1,}{,no-script,language-not-exist,}%
+    \ifin@\else\bbl at tempfs@nxx{#1}{#2}{#3}\fi}
   \def\bbl at loadfontspec{%
-    \usepackage{fontspec}%  TODO. Apply patch always
-    \expandafter
-    \def\csname msg~text~>~fontspec/language-not-exist\endcsname##1##2##3##4{%
-      Font '\l_fontspec_fontname_tl' is using the\\%
-      default features for language '##1'.\\%
-      That's usually fine, because many languages\\%
-      require no specific features, but if the output is\\%
-      not as expected, consider selecting another font.}
-    \expandafter
-    \def\csname msg~text~>~fontspec/no-script\endcsname##1##2##3##4{%
-      Font '\l_fontspec_fontname_tl' is using the\\%
-      default features for script '##2'.\\%
-      That's not always wrong, but if the output is\\%
-      not as expected, consider selecting another font.}}
-  \ExplSyntaxOff
+    \let\bbl at loadfontspec\relax 
+    \ifx\fontspec\@undefined
+      \usepackage{fontspec}%
+    \fi}%
 \fi
 \@onlypreamble\babelfont
 \newcommand\babelfont[2][]{%  1=langs/scripts 2=fam
@@ -12969,9 +12947,7 @@
     \fi}%
   \edef\bbl at tempa{#1}%
   \def\bbl at tempb{#2}%  Used by \bbl at bblfont
-  \ifx\fontspec\@undefined
-    \bbl at loadfontspec
-  \fi
+  \bbl at loadfontspec
   \EnableBabelHook{babel-fontspec}% Just calls \bbl at switchfont
   \bbl at bblfont}
 \newcommand\bbl at bblfont[2][]{% 1=features 2=fontname, @font=rm|sf|tt
@@ -13126,8 +13102,15 @@
       {\\\newfontscript{\bbl at cl{sname}}{\bbl at cl{sotf}}}%
     \<keys_if_exist:nnF>{fontspec-opentype}{Language/\bbl at cl{lname}}%
       {\\\newfontlanguage{\bbl at cl{lname}}{\bbl at cl{lotf}}}%
+    \let\\\bbl at tempfs@nx\<__fontspec_warning:nx>%
+    \let\<__fontspec_warning:nx>\\\bbl at fs@warn at nx
+    \let\\\bbl at tempfs@nxx\<__fontspec_warning:nxx>%
+    \let\<__fontspec_warning:nxx>\\\bbl at fs@warn at nxx
     \\\renewfontfamily\\#4%
       [\bbl at cl{lsys},#2]}{#3}% ie \bbl at exp{..}{#3}
+  \bbl at exp{%
+    \let\<__fontspec_warning:nx>\\\bbl at tempfs@nx
+    \let\<__fontspec_warning:nxx>\\\bbl at tempfs@nxx}%
   \begingroup
      #4%
      \xdef#1{\f at family}%     eg, \bbl at rmdflt@lang{FreeSerif(0)}
@@ -14378,6 +14361,11 @@
           (item.char >= 0x1DC0 and item.char <= 0x1DFF) then
         toloc = toloc_save
       end
+      if toloc and Babel.locale_props[toloc] and
+          Babel.locale_props[toloc].letters and
+          tex.getcatcode(item.char) \string~= 11 then
+        toloc = nil
+      end
       if toloc and toloc > -1 then
         if Babel.locale_props[toloc].lg then
           item.lang = Babel.locale_props[toloc].lg
@@ -14388,7 +14376,7 @@
         end
         toloc_save = toloc
       end
-    elseif not inmath and item.id == 7 then
+    elseif not inmath and item.id == 7 then % Apply recursively
       item.replace = item.replace and Babel.locale_map(item.replace)
       item.pre     = item.pre and Babel.locale_map(item.pre)
       item.post    = item.post and Babel.locale_map(item.post)  
@@ -14486,10 +14474,11 @@
   \@ifnextchar[{\bbl at settransform{0}}{\bbl at settransform{0}[]}}
 \gdef\babelposthyphenation{&%
   \@ifnextchar[{\bbl at settransform{1}}{\bbl at settransform{1}[]}}
+\gdef\bbl at postlinebreak{\bbl at settransform{2}[]} &% WIP
 \gdef\bbl at settransform#1[#2]#3#4#5{&%
   \ifcase#1
     \bbl at activateprehyphen
-  \else
+  \or
     \bbl at activateposthyphen
   \fi
   \begingroup
@@ -14505,7 +14494,7 @@
            rep = rep:gsub('^%s*(remove)%s*$', 'remove = true')
            rep = rep:gsub('^%s*(insert)%s*,', 'insert = true, ')
            rep = rep:gsub('(string)%s*=%s*([^%s,]*)', Babel.capture_func)
-           if #1 == 0 then
+           if #1 == 0 or #1 == 2 then
              rep = rep:gsub('(space)%s*=%s*([%d%.]+)%s+([%d%.]+)%s+([%d%.]+)',
                'space = {' .. '%2, %3, %4' .. '}')
              rep = rep:gsub('(spacefactor)%s*=%s*([%d%.]+)%s+([%d%.]+)%s+([%d%.]+)',
@@ -14518,6 +14507,16 @@
            end
            tex.print([[\string\babeltempa{{]] .. rep .. [[}}]])
          }}}&%
+    \bbl at foreach\babeltempb{&%
+      \bbl at forkv{{##1}}{&%
+        \in@{,####1,}{,nil,step,data,remove,insert,string,no,pre,&%
+            no,post,penalty,kashida,space,spacefactor,}&%
+        \ifin@\else
+          \bbl at error
+           {Bad option '####1' in a transform.\\&%
+            I’ll ignore it but expect more errors}&%
+           {See the manual for further info.}&%
+        \fi}}&% 
     \let\bbl at kv@attribute\relax
     \let\bbl at kv@label\relax
     \bbl at forkv{#2}{\bbl at csarg\edef{kv@##1}{##2}}&%
@@ -14528,7 +14527,7 @@
       local lbkr = Babel.linebreaking.replacements[#1]
       local u = unicode.utf8
       local id, attr, label
-      if #1 == 0 then
+      if #1 == 0 or #1 == 2 then
         id = \the\csname bbl at id@@#3\endcsname\space
       else
         id = \the\csname l@#3\endcsname\space
@@ -14543,7 +14542,7 @@
       \fi
       &% Convert pattern:
       local patt = string.gsub([==[#4]==], '%s', '')
-      if #1 == 0 then
+      if #1 == 0 or #1 == 2 then
         patt = string.gsub(patt, '|', ' ')
       end
       if not u.find(patt, '()', nil, true) then
@@ -15078,8 +15077,9 @@
 %    \begin{macrocode}
 %<*transforms>
 Babel.linebreaking.replacements = {}
-Babel.linebreaking.replacements[0] = {}  -- pre
+Babel.linebreaking.replacements[0] = {}  -- pre 
 Babel.linebreaking.replacements[1] = {}  -- post
+Babel.linebreaking.replacements[2] = {}  -- post-line WIP
 
 -- Discretionaries contain strings as nodes
 function Babel.str_to_nodes(fn, matches, base)
@@ -15231,6 +15231,7 @@
 function Babel.hyphenate_replace(head, mode)
   local u = unicode.utf8
   local lbkr = Babel.linebreaking.replacements[mode]
+  if mode == 2 then mode = 0 end -- WIP
 
   local word_head = head
 

Modified: trunk/Master/texmf-dist/source/latex/babel/babel.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/babel.ins	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.ins	2022-10-04 19:54:54 UTC (rev 64614)
@@ -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{2022/09/17}
+\def\filedate{2022/10/04}
 \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	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx	2022-10-04 19:54:54 UTC (rev 64614)
@@ -30,7 +30,7 @@
 %
 % \iffalse
 %<*dtx>
-\ProvidesFile{bbcompat.dtx}[2022/09/17 v3.80]
+\ProvidesFile{bbcompat.dtx}[2022/10/04 v3.81]
 %</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-transforms.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel-transforms.lua	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel-transforms.lua	2022-10-04 19:54:54 UTC (rev 64614)
@@ -36,6 +36,7 @@
 Babel.linebreaking.replacements = {}
 Babel.linebreaking.replacements[0] = {}  -- pre
 Babel.linebreaking.replacements[1] = {}  -- post
+Babel.linebreaking.replacements[2] = {}  -- post-line WIP
 
 -- Discretionaries contain strings as nodes
 function Babel.str_to_nodes(fn, matches, base)
@@ -187,6 +188,7 @@
 function Babel.hyphenate_replace(head, mode)
   local u = unicode.utf8
   local lbkr = Babel.linebreaking.replacements[mode]
+  if mode == 2 then mode = 0 end -- WIP
 
   local word_head = head
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.def	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.def	2022-10-04 19:54:54 UTC (rev 64614)
@@ -40,7 +40,7 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{babel.def}[2022/09/17 3.80 Babel common definitions]
+\ProvidesFile{babel.def}[2022/10/04 3.81 Babel common definitions]
 \ifx\AtBeginDocument\@undefined  % TODO. change test.
   \def\@empty{}
 \def\loadlocalcfg#1{%
@@ -406,8 +406,8 @@
 \expandafter\newif\csname ifbbl at single\endcsname
 \chardef\bbl at bidimode\z@
 \fi
-\def\bbl at version{3.80}
-\def\bbl at date{2022/09/17}
+\def\bbl at version{3.81}
+\def\bbl at date{2022/10/04}
 \ifx\language\@undefined
   \csname newcount\endcsname\language
 \fi
@@ -631,19 +631,8 @@
   % TODO. name at map must be here?
   \bbl at provide@locale
   \bbl at iflanguage\languagename{%
-     \expandafter\ifx\csname date\languagename\endcsname\relax
-      \bbl at error
-        {Unknown language '\languagename'. Either you have\\%
-         misspelled its name, it has not been installed,\\%
-         or you requested it in a previous run. Fix its name,\\%
-         install it or just rerun the file, respectively. In\\%
-         some cases, you may need to remove the aux file}%
-        {You may proceed, but expect wrong results}%
-    \else
-      % set type
-      \let\bbl at select@type\z@
-      \expandafter\bbl at switch\expandafter{\languagename}%
-    \fi}}
+    \let\bbl at select@type\z@
+    \expandafter\bbl at switch\expandafter{\languagename}}}
 \def\babel at aux#1#2{%
   \select at language{#1}%
   \bbl at foreach\BabelContentsFiles{% \relax -> don't assume vertical mode
@@ -713,9 +702,10 @@
   \bbl at xin@{/u}{/\bbl at tempa}%
   \ifin@\else\bbl at xin@{/e}{/\bbl at tempa}\fi % elongated forms
   \ifin@\else\bbl at xin@{/k}{/\bbl at tempa}\fi % only kashida
+  \ifin@\else\bbl at xin@{/p}{/\bbl at tempa}\fi % padding (eg, Tibetan)
   \ifin@\else\bbl at xin@{/v}{/\bbl at tempa}\fi % variable font
   \ifin@
-    % unhyphenated/kashida/elongated = allow stretching
+    % unhyphenated/kashida/elongated/padding = allow stretching
     \language\l at unhyphenated
     \babel at savevariable\emergencystretch
     \emergencystretch\maxdimen
@@ -789,17 +779,6 @@
   % TODO. name at map here?
   \bbl at provide@locale
   \bbl at iflanguage\languagename{%
-    \expandafter\ifx\csname date\languagename\endcsname\relax
-      \bbl at warning   % TODO - why a warning, not an error?
-        {Unknown language '#1'. Either you have\\%
-         misspelled its name, it has not been installed,\\%
-         or you requested it in a previous run. Fix its name,\\%
-         install it or just rerun the file, respectively. In\\%
-         some cases, you may need to remove the aux file.\\%
-         I'll proceed, but expect wrong results.\\%
-         Reported}%
-    \fi
-    % set type
     \let\bbl at select@type\@ne
     \expandafter\bbl at switch\expandafter{\languagename}}}
 \def\IfBabelSelectorTF#1{%
@@ -894,7 +873,7 @@
   \@nameuse{#2}%
   \edef\bbl at tempa{#1}%
   \bbl at sreplace\bbl at tempa{name}{}%
-  \bbl at warning{% TODO.
+  \bbl at warning{%
     \@backslashchar#1 not set for '\languagename'. Please,\\%
     define it after the language has been loaded\\%
     (typically in the preamble) with:\\%
@@ -984,7 +963,7 @@
     \else
       \expandafter\@secondoftwo
     \fi}
-  \bbl at ifunset{ifcsname}% TODO. A better test?
+  \bbl at ifunset{ifcsname}%
     {}%
     {\gdef\bbl at ifunset#1{%
        \ifcsname#1\endcsname
@@ -1205,7 +1184,7 @@
   \bbl at foreach\bbl at evargs{\bbl at tempa#1\@@}
 \fi
 \bbl at trace{Defining babelensure}
-\newcommand\babelensure[2][]{%  TODO - revise test files
+\newcommand\babelensure[2][]{%
   \AddBabelHook{babel-ensure}{afterextras}{%
     \ifcase\bbl at select@type
       \bbl at cl{e}%
@@ -1901,15 +1880,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}
-\def\bbl at recatcode#1{% TODO. Used only once?
-  \@tempcnta="7F
-  \def\bbl at tempa{%
-    \ifnum\@tempcnta>"FF\else
-      \catcode\@tempcnta=#1\relax
-      \advance\@tempcnta\@ne
-      \expandafter\bbl at tempa
-    \fi}%
-  \bbl at tempa}
 \@ifpackagewith{babel}{nocase}%
   {\let\bbl at patchuclc\relax}%
   {\def\bbl at patchuclc{%
@@ -1945,7 +1915,14 @@
 \@onlypreamble\StartBabelCommands
 \def\StartBabelCommands{%
   \begingroup
-  \bbl at recatcode{11}%
+  \@tempcnta="7F
+  \def\bbl at tempa{%
+    \ifnum\@tempcnta>"FF\else
+      \catcode\@tempcnta=11
+      \advance\@tempcnta\@ne
+      \expandafter\bbl at tempa
+    \fi}%
+  \bbl at tempa
   \def\SetStringLoop##1##2{%
     \def\bbl at templ####1{\expandafter\noexpand\csname##1\endcsname}%
     \count@\z@
@@ -2143,7 +2120,7 @@
     \bbl at xin@{,}{\bbl at language@opts}%
     \chardef\bbl at opt@hyphenmap\ifin at 4\else\@ne\fi
   \fi}
-\newcommand\setlocalecaption{%  TODO. Catch typos. What about ensure?
+\newcommand\setlocalecaption{%  TODO. Catch typos.
   \@ifstar\bbl at setcaption@s\bbl at setcaption@x}
 \def\bbl at setcaption@x#1#2#3{%  language caption-name string
   \bbl at trim@def\bbl at tempa{#2}%
@@ -2564,7 +2541,15 @@
         Babel.linebreaking.add_before(Babel.locale_map)
         Babel.loc_to_scr = {}
         Babel.chr_to_loc = Babel.chr_to_loc or {}
-      end}%
+      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
@@ -2667,7 +2652,8 @@
      \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,unhyphenated,}%
+    \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}%
@@ -2676,6 +2662,8 @@
   \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{\bbl at tibetanjust}\fi
   % == Line breaking: hyphenate.other.(locale|script) ==
   \ifx\bbl at lbkflag\@empty
     \bbl at ifunset{bbl at hyotl@\languagename}{}%

Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.sty	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.sty	2022-10-04 19:54:54 UTC (rev 64614)
@@ -34,7 +34,7 @@
 %%
 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
-\ProvidesPackage{babel}[2022/09/17 3.80 The Babel package]
+\ProvidesPackage{babel}[2022/10/04 3.81 The Babel package]
 \@ifpackagewith{babel}{debug}
   {\providecommand\bbl at trace[1]{\message{^^J[ #1 ]}}%
    \let\bbl at debug\@firstofone
@@ -124,7 +124,7 @@
     \else
       \expandafter\@secondoftwo
     \fi}
-  \bbl at ifunset{ifcsname}% TODO. A better test?
+  \bbl at ifunset{ifcsname}%
     {}%
     {\gdef\bbl at ifunset#1{%
        \ifcsname#1\endcsname
@@ -458,8 +458,8 @@
       \expandafter\@secondoftwo
     \fi}
 \fi
-\def\bbl at version{3.80}
-\def\bbl at date{2022/09/17}
+\def\bbl at version{3.81}
+\def\bbl at date{2022/10/04}
 \ifx\language\@undefined
   \csname newcount\endcsname\language
 \fi
@@ -683,19 +683,8 @@
   % TODO. name at map must be here?
   \bbl at provide@locale
   \bbl at iflanguage\languagename{%
-     \expandafter\ifx\csname date\languagename\endcsname\relax
-      \bbl at error
-        {Unknown language '\languagename'. Either you have\\%
-         misspelled its name, it has not been installed,\\%
-         or you requested it in a previous run. Fix its name,\\%
-         install it or just rerun the file, respectively. In\\%
-         some cases, you may need to remove the aux file}%
-        {You may proceed, but expect wrong results}%
-    \else
-      % set type
-      \let\bbl at select@type\z@
-      \expandafter\bbl at switch\expandafter{\languagename}%
-    \fi}}
+    \let\bbl at select@type\z@
+    \expandafter\bbl at switch\expandafter{\languagename}}}
 \def\babel at aux#1#2{%
   \select at language{#1}%
   \bbl at foreach\BabelContentsFiles{% \relax -> don't assume vertical mode
@@ -765,9 +754,10 @@
   \bbl at xin@{/u}{/\bbl at tempa}%
   \ifin@\else\bbl at xin@{/e}{/\bbl at tempa}\fi % elongated forms
   \ifin@\else\bbl at xin@{/k}{/\bbl at tempa}\fi % only kashida
+  \ifin@\else\bbl at xin@{/p}{/\bbl at tempa}\fi % padding (eg, Tibetan)
   \ifin@\else\bbl at xin@{/v}{/\bbl at tempa}\fi % variable font
   \ifin@
-    % unhyphenated/kashida/elongated = allow stretching
+    % unhyphenated/kashida/elongated/padding = allow stretching
     \language\l at unhyphenated
     \babel at savevariable\emergencystretch
     \emergencystretch\maxdimen
@@ -841,17 +831,6 @@
   % TODO. name at map here?
   \bbl at provide@locale
   \bbl at iflanguage\languagename{%
-    \expandafter\ifx\csname date\languagename\endcsname\relax
-      \bbl at warning   % TODO - why a warning, not an error?
-        {Unknown language '#1'. Either you have\\%
-         misspelled its name, it has not been installed,\\%
-         or you requested it in a previous run. Fix its name,\\%
-         install it or just rerun the file, respectively. In\\%
-         some cases, you may need to remove the aux file.\\%
-         I'll proceed, but expect wrong results.\\%
-         Reported}%
-    \fi
-    % set type
     \let\bbl at select@type\@ne
     \expandafter\bbl at switch\expandafter{\languagename}}}
 \def\IfBabelSelectorTF#1{%
@@ -946,7 +925,7 @@
   \@nameuse{#2}%
   \edef\bbl at tempa{#1}%
   \bbl at sreplace\bbl at tempa{name}{}%
-  \bbl at warning{% TODO.
+  \bbl at warning{%
     \@backslashchar#1 not set for '\languagename'. Please,\\%
     define it after the language has been loaded\\%
     (typically in the preamble) with:\\%
@@ -1036,7 +1015,7 @@
     \else
       \expandafter\@secondoftwo
     \fi}
-  \bbl at ifunset{ifcsname}% TODO. A better test?
+  \bbl at ifunset{ifcsname}%
     {}%
     {\gdef\bbl at ifunset#1{%
        \ifcsname#1\endcsname
@@ -1257,7 +1236,7 @@
   \bbl at foreach\bbl at evargs{\bbl at tempa#1\@@}
 \fi
 \bbl at trace{Defining babelensure}
-\newcommand\babelensure[2][]{%  TODO - revise test files
+\newcommand\babelensure[2][]{%
   \AddBabelHook{babel-ensure}{afterextras}{%
     \ifcase\bbl at select@type
       \bbl at cl{e}%
@@ -1953,15 +1932,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}
-\def\bbl at recatcode#1{% TODO. Used only once?
-  \@tempcnta="7F
-  \def\bbl at tempa{%
-    \ifnum\@tempcnta>"FF\else
-      \catcode\@tempcnta=#1\relax
-      \advance\@tempcnta\@ne
-      \expandafter\bbl at tempa
-    \fi}%
-  \bbl at tempa}
 \@ifpackagewith{babel}{nocase}%
   {\let\bbl at patchuclc\relax}%
   {\def\bbl at patchuclc{%
@@ -1997,7 +1967,14 @@
 \@onlypreamble\StartBabelCommands
 \def\StartBabelCommands{%
   \begingroup
-  \bbl at recatcode{11}%
+  \@tempcnta="7F
+  \def\bbl at tempa{%
+    \ifnum\@tempcnta>"FF\else
+      \catcode\@tempcnta=11
+      \advance\@tempcnta\@ne
+      \expandafter\bbl at tempa
+    \fi}%
+  \bbl at tempa
   \def\SetStringLoop##1##2{%
     \def\bbl at templ####1{\expandafter\noexpand\csname##1\endcsname}%
     \count@\z@
@@ -2195,7 +2172,7 @@
     \bbl at xin@{,}{\bbl at language@opts}%
     \chardef\bbl at opt@hyphenmap\ifin at 4\else\@ne\fi
   \fi}
-\newcommand\setlocalecaption{%  TODO. Catch typos. What about ensure?
+\newcommand\setlocalecaption{%  TODO. Catch typos.
   \@ifstar\bbl at setcaption@s\bbl at setcaption@x}
 \def\bbl at setcaption@x#1#2#3{%  language caption-name string
   \bbl at trim@def\bbl at tempa{#2}%
@@ -2616,7 +2593,15 @@
         Babel.linebreaking.add_before(Babel.locale_map)
         Babel.loc_to_scr = {}
         Babel.chr_to_loc = Babel.chr_to_loc or {}
-      end}%
+      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
@@ -2719,7 +2704,8 @@
      \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,unhyphenated,}%
+    \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}%
@@ -2728,6 +2714,8 @@
   \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{\bbl at tibetanjust}\fi
   % == Line breaking: hyphenate.other.(locale|script) ==
   \ifx\bbl at lbkflag\@empty
     \bbl at ifunset{bbl at hyotl@\languagename}{}%
@@ -4132,9 +4120,7 @@
     \ifx\RTLfootnotetext\@undefined
       \AtEndOfPackage{%
         \EnableBabelHook{babel-bidi}%
-        \ifx\fontspec\@undefined
-          \bbl at loadfontspec % bidi needs fontspec
-        \fi
+        \bbl at loadfontspec % bidi needs fontspec
         \usepackage#1{bidi}}%
     \fi}
   \ifnum\bbl at bidimode>200

Modified: trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg	2022-10-04 19:54:54 UTC (rev 64614)
@@ -38,10 +38,10 @@
     \wlog{File: #1 #4 #3 <#2>}%
     \let\ProvidesFile\@undefined}
 \fi
-\ProvidesFile{hyphen.cfg}[2022/09/17 3.80 Babel hyphens]
+\ProvidesFile{hyphen.cfg}[2022/10/04 3.81 Babel hyphens]
 \xdef\bbl at format{\jobname}
-\def\bbl at version{3.80}
-\def\bbl at date{2022/09/17}
+\def\bbl at version{3.81}
+\def\bbl at date{2022/10/04}
 \ifx\AtBeginDocument\@undefined
   \def\@empty{}
 \fi

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-bo.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-bo.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-bo.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -11,8 +11,8 @@
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2022-06-14
+version = 1.6
+date = 2022-09-30
 name.local = བོད་སྐད་
 name.english = Tibetan
 name.babel = tibetan
@@ -27,6 +27,7 @@
 level = 1
 encodings = 
 derivate = no
+require.babel = tibetan
 
 [captions]
 preface = དཔེ་དེབ་ཀྱི་གླེང་བརྗོད།
@@ -136,10 +137,10 @@
 [typography]
 frenchspacing = yes
 hyphenrules = 
-lefthyphenmin = 
-righthyphenmin = 
+lefthyphenmin = 1
+righthyphenmin = 1
 hyphenchar = 
-prehyphenchar = 
+prehyphenchar = 0
 posthyphenchar = 
 exhyphenchar = 
 preexhyphenchar = 

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-tibetan.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-tibetan.tex	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/bo/babel-tibetan.tex	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,4 +9,133 @@
 \fi
 \BabelBeforeIni{bo}{%
 }
+
+\ifcase\bbl at engine\or
+
+\bbl at warning{%
+  Tibetan line breaking and justification are tentative.\\%
+  They might not work as expected and their behavior\\%
+  could change in the future. Feel free to contribute.\\%
+  Reported}%
+
+\directlua{
+  Babel.tibetan = Babel.tibetan or {}
+  Babel.tibetan.shad = {.5, 0, 0, false}
+  Babel.tibetan.tsheg = {0, .0001, 0, false}
+  Babel.tibetan.intraspace = {0, 0, 0} % TODO
+}
+
+\AtBeginDocument{%
+  % (1) Spacing
+  \edef\bbl at tempe{\directlua{
+    tex.print(table.concat(Babel.tibetan.shad, ' ', 1, 3))
+  }}%
+  \babelprehyphenation{tibetan}{[{a}{p}]|}%
+    { {}, {space=\bbl at tempe, data=1 } }%
+  % (2) Line breaking
+  \babelprehyphenation{tibetan}{[^^^^0f0d^^^^0f0e]|[^^^^0f0d^^^^0f0e]}%
+    { {}, {insert, penalty=10000}, {}, {} }%
+  \babelprehyphenation{tibetan}{[^^^^0f0d^^^^0f0e][^^^^0f40-^^^^0f6a]}%
+    { {}, {insert, space=0 0 0}, {} }%
+  \edef\bbl at tempe{\directlua{
+    tex.print(table.concat(Babel.tibetan.tsheg, ' ', 1, 3))
+  }}%
+  \babelprehyphenation{tibetan}{^^^^0f0b()([^ ^^^^0f0d^^^^0f0e])()}%
+    { {insert, space=\bbl at tempe, data=1}, {string = {1}} }}
+
+\def\bbl at tibetanjust{%
+  % (3) Justification
+  \directlua{
+    Babel.tibetan = Babel.tibetan or {}
+    %
+    Babel.tibetan.justify_enabled = true
+    Babel.tibetan.justify_factor = 1
+    %
+    function Babel.tibetan.justify(head)
+      if not Babel.tibetan.justify_enabled then return head end
+      for line in node.traverse_id(node.id'hlist', head) do
+        Babel.tibetan.justify_hlist(head, line)
+      end
+      return head
+    end
+    %
+    function Babel.tibetan.justify_hbox(head, gc, size, pack)
+      local has_infte = false
+      if Babel.tibetan.justify_enabled and pack == 'exactly' then
+        for n in node.traverse_id(12, head) do
+          if n.stretch_order > 0 then has_infte = true end
+        end
+        if not has_infte then
+          Babel.tibetan.justify_hlist(head, nil, gc, size, pack)
+        end
+      end
+      return head
+    end
+    %
+    function Babel.tibetan.justify_hlist(head, line, gc, size, pack)
+      local d, new
+      local last_t
+      local width, width_new, full, goal, shift
+      local subst_done = false
+      local GLYPH = node.id'glyph'
+      local LOCALE = Babel.attr_locale
+      %
+      if line == nil then
+        line = {}
+        line.glue_sign = 1
+        line.glue_order = 0
+        line.head = head
+        line.shift = 0
+        line.width = size
+      end
+      %
+      if (line.glue_sign == 1 and line.glue_order == 0) then
+        last_t = nil
+        for n in node.traverse_id(GLYPH, line.head) do
+          if n.char == 0x0f0b then % TSHEG
+            last_t = n
+          else
+            last_t = nil
+          end
+        end
+        %
+        if not last_t then goto next_line end
+        %
+        full  = line.width
+        shift = line.shift
+        goal  = full * Babel.tibetan.justify_factor % A bit crude
+        width = node.dimensions(line.head)    % The 'natural' width
+        %
+        while width < goal do
+          subst_done = true
+          d = node.copy(last_t)
+          line.head, new = node.insert_after(line.head, last_t, d)
+          width_new = node.dimensions(line.head)
+          if width_new > goal or width == width_new then
+            node.remove(line.head, new) % Better compute before
+            break
+          end
+          width = width_new
+        end
+        % Must take into account marks and ins, see luatex manual.
+        % Have to be executed only if there are changes. Investigate
+        % what's going on exactly.     
+        if subst_done and not gc then
+          d = node.hpack(line.head, full, 'exactly')
+          d.shift = shift
+          node.insert_before(head, line, d)
+          node.remove(head, line)
+        end
+        ::next_line::
+      end % if process line
+    end
+    %
+    luatexbase.add_to_callback('post_linebreak_filter',
+      Babel.tibetan.justify, 'Babel.tibetan.justify')
+    luatexbase.add_to_callback('hpack_filter',
+      Babel.tibetan.justify_hbox, 'Babel.tibetan.justify_hbox')
+  }}
+  
+\fi
+
 \endinput
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/mr/babel-mr.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/mr/babel-mr.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/mr/babel-mr.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -13,8 +13,8 @@
 
 [identification]
 charset = utf8
-version = 1.12
-date = 2022-04-07
+version = 1.13
+date = 2022-09-24
 name.local = मराठी
 name.english = Marathi
 name.babel = marathi
@@ -68,18 +68,18 @@
 months.wide.10 = ऑक्टोबर
 months.wide.11 = नोव्हेंबर
 months.wide.12 = डिसेंबर
-months.narrow.1 = जाने.
-months.narrow.2 = फेब्रु.
-months.narrow.3 = मार्च
-months.narrow.4 = एप्रि.
+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 = डिसें.
+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 = बुधवार
@@ -103,10 +103,10 @@
 days.narrow.sun = र
 dayPeriods.abbreviated.am = म.पू.
 dayPeriods.abbreviated.pm = म.उ.
-dayPeriods.narrow.am = स
-dayPeriods.narrow.pm = सं
-dayPeriods.wide.am = म.पू.
-dayPeriods.wide.pm = म.उ.
+dayPeriods.narrow.am = a
+dayPeriods.narrow.pm = p
+dayPeriods.wide.am = AM
+dayPeriods.wide.pm = PM
 
 [time.gregorian]
 time.medium = [h]:[mm]:[ss] [a]
@@ -118,7 +118,7 @@
 lefthyphenmin = 2
 righthyphenmin = 2
 hyphenchar = 
-prehyphenchar =
+prehyphenchar = 
 posthyphenchar = 
 exhyphenchar = 
 preexhyphenchar = 
@@ -129,10 +129,10 @@
 
 [characters]
 delimiters.quotes = “”‘’
-auxiliary = [\u200C\u200D]
-exemplarCharacters = [\u093C ॐ \u0902 \u0901 ः अ आ इ ई उ ऊ ऋ ऌ ॲ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह ळ ऽ ा ि ी \u0941 \u0942 \u0943 \u0944 \u0945 \u0947 \u0948 ॉ ो ौ \u094D]
+auxiliary = [\u200C\u200D \u0944]
+exemplarCharacters = [\u093C ॐ \u0902 \u0901 ः अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ऱ ल व श ष स ह ळ ऽ ा ि ी \u0941 \u0942 \u0943 \u0945 \u0947 \u0948 ॉ ो ौ \u094D]
 index = [\u200D ॐ \u0902 ः अ आ इ ई उ ऊ ऋ ऌ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल व श ष स ह ळ ऽ \u0945 \u094D]
-punctuation = [\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] @ * / \\& # ′ ″]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] @ * / \\& # ′ ″]
 
 [numbers]
 defaultNumberingSystem = deva

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-BN.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-BN.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-BN.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.2
-date = 2020-06-30
+version = 1.3
+date = 2022-09-24
 name.local = Bahasa Melayu
 name.english = Malay
 name.babel = malay-brunei malay-bn
@@ -135,9 +135,9 @@
 [characters]
 delimiters.quotes = “”‘’
 auxiliary = []
-exemplarCharacters = [a {ai} {au} b c d {dz} e f g h i j k {kh} l m n {ng} {ngg} {ny} o p q r s {sy} t {ts} u {ua} v w x y z]
+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 = [\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-SG.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-SG.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms-SG.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.2
-date = 2020-06-30
+version = 1.3
+date = 2022-09-24
 name.local = Bahasa Melayu
 name.english = Malay
 name.babel = malay-singapore malay-sg
@@ -135,9 +135,9 @@
 [characters]
 delimiters.quotes = “”‘’
 auxiliary = []
-exemplarCharacters = [a {ai} {au} b c d {dz} e f g h i j k {kh} l m n {ng} {ngg} {ny} o p q r s {sy} t {ts} u {ua} v w x y z]
+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 = [\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/ms/babel-ms.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,9 +9,9 @@
 
 [identification]
 charset = utf8
-version = 1.2
-date = 2020-06-30
-name.local = Bahasa Melayu
+version = 1.3
+date = 2022-09-24
+name.local = Melayu
 name.english = Malay
 name.babel = malay
 tag.bcp47 = ms
@@ -160,9 +160,9 @@
 [characters]
 delimiters.quotes = “”‘’
 auxiliary = []
-exemplarCharacters = [a {ai} {au} b c d {dz} e f g h i j k {kh} l m n {ng} {ngg} {ny} o p q r s {sy} t {ts} u {ua} v w x y z]
+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 = [\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/my/babel-my.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/my/babel-my.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/my/babel-my.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.4
-date = 2020-10-11
+version = 1.5
+date = 2022-09-24
 name.local = မြန်မာ
 name.english = Burmese
 name.babel = burmese
@@ -72,7 +72,7 @@
 glossary = 
 
 [date.gregorian]
-date.long = [d] [MMMM] [y]
+date.long = [y]- [MMMM] [d]
 date.short = [dd]-[MM]-[yy]
 months.wide.1 = ဇန်နဝါရီ
 months.wide.2 = ဖေဖော်ဝါရီ
@@ -127,8 +127,8 @@
 dayPeriods.wide.pm = ညနေ
 
 [time.gregorian]
-time.medium = [HH]:[mm]:[ss]
-time.short = [HH]:[mm]
+time.medium = [H]:[mm]:[ss]
+time.short = [H]:[mm]
 
 [typography]
 frenchspacing = yes
@@ -145,8 +145,8 @@
 
 [characters]
 delimiters.quotes = “”‘’
-auxiliary = [ၐ ၑ ဨ ဢ ၒ ၓ ၔ ၕ ၖ ၗ \u1058 \u1059]
-exemplarCharacters = [က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ ဣ ဤ ဥ ဦ ဧ ဩ ဪ ာ ါ \u102D \u102E \u102F \u1030 ေ \u1032 \u1036 ဿ ျ ြ \u103D \u103E \u1039 \u103A \u1037 း]
+auxiliary = [၀႐ ၁႑ ၂႒ ၃႓ ၄႔ ၅႕ ၆႖ ၇႗ ၈႘ ၉႙ ၵ ၚ ၽ ၾ ၐ ၑ ၥ ဨ ဢ ၒ ၓ ၔ ၕ \u1033 ၖ ၗ \u1058 \u1059 \u1086 \u1034 ၢ ၤ ႈ ႊ ႏ]
+exemplarCharacters = [က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ ဣ ၏ ဤ ဥ ဦ ဧ ဩ ဪ ာ ါ \u102D \u102E \u102F \u1030 ေ \u1032 \u1036 ဿ ျ ြ \u103D \u103E \u1039 \u103A \u1037 း]
 index = [က ခ ဂ ဃ င စ ဆ ဇ ဈ ဉ ည ဋ ဌ ဍ ဎ ဏ တ ထ ဒ ဓ န ပ ဖ ဗ ဘ မ ယ ရ လ ဝ သ ဟ ဠ အ]
 punctuation = [၊ ။ ‘ ’ “ ”]
 

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/mzn/babel-mzn.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/mzn/babel-mzn.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/mzn/babel-mzn.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.5
-date = 2022-06-11
+version = 1.6
+date = 2022-09-24
 name.local = مازرونی
 name.english = Mazanderani
 name.babel = mazanderani
@@ -151,7 +151,7 @@
 auxiliary = [\u200C\u200D\u200E\u200F \u064E \u064F \u0650 \u0652 \u0656 \u0670 إ ك ى ي]
 exemplarCharacters = [\u064B \u064C \u064D \u0651 \u0654 ء آ أ ؤ ئ ا ب پ ة ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ه و ی]
 index = [آ ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ه و ی]
-punctuation = [\\- ‐ ، ٫ ٬ ؛ \\: ! ؟ . … ‹ › « » ( ) \\[ \\] * / \\\\]
+punctuation = [\\- ‐ ‑ ، ٫ ٬ ؛ \\: ! ؟ . … ‹ › « » ( ) \\[ \\] * / \\\\]
 
 [numbers]
 defaultNumberingSystem = arabext

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/ne/babel-ne.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/ne/babel-ne.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/ne/babel-ne.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.4
-date = 2020-10-11
+version = 1.5
+date = 2022-09-24
 name.local = नेपाली
 name.english = Nepali
 name.babel = nepali
@@ -73,12 +73,12 @@
 
 [date.gregorian]
 date.long = [y] [MMMM] [d]
-date.short = [y]-[MM]-[dd]
+date.short = [yy]/[M]/[d]
 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.8 = अगस्ट
@@ -86,18 +86,18 @@
 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 = १२
+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 = बुधबार
@@ -145,9 +145,9 @@
 
 [characters]
 delimiters.quotes = “”‘’
-auxiliary = [\u200C\u200D]
-exemplarCharacters = [\u093C \u0901 \u0902 ः ॐ अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल ळ व श ष स ह ऽ ा ि ी \u0941 \u0942 \u0943 \u0944 \u0945 \u0947 \u0948 ॉ ो ौ \u094D]
-punctuation = [\\- , ; \\: ! ? . ( ) \\[ \\] \\{ \\}]
+auxiliary = [\u200C\u200D \u0944]
+exemplarCharacters = [\u093C \u0901 \u0902 ः ॐ अ आ इ ई उ ऊ ऋ ऌ ऍ ए ऐ ऑ ओ औ क ख ग घ ङ च छ ज झ ञ ट ठ ड ढ ण त थ द ध न प फ ब भ म य र ल ळ व श ष स ह ऽ ा ि ी \u0941 \u0942 \u0943 \u0945 \u0947 \u0948 ॉ ो ौ \u094D]
+punctuation = [\\- ‑ — , ; ! ? । ' ‘ ’ \" “ ” ( ) \\[ \\] \\{ \\}]
 
 [numbers]
 defaultNumberingSystem = deva

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/nl/babel-nl.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/nl/babel-nl.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/nl/babel-nl.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,8 +9,8 @@
 
 [identification]
 charset = utf8
-version = 1.3
-date = 2020-10-13
+version = 1.4
+date = 2022-09-24
 name.local = Nederlands
 name.english = Dutch
 name.babel = dutch
@@ -74,7 +74,7 @@
 
 [date.gregorian]
 date.long = [d][ ][MMMM] [y]
-date.short = [dd]-[MM]-[yy]
+date.short = [dd]-[MM]-[y]
 months.wide.1 = januari
 months.wide.2 = februari
 months.wide.3 = maart
@@ -163,7 +163,7 @@
 auxiliary = [à â å ã æ ç è ê î ñ ô ø œ ù û ÿ]
 exemplarCharacters = [a á ä b c d e é ë f g h i í ï {ij} {íj\u0301} 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 = [\\- ‐ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/nmg/babel-nmg.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/nmg/babel-nmg.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/nmg/babel-nmg.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,9 +9,9 @@
 
 [identification]
 charset = utf8
-version = 1.3
-date = 2020-10-11
-name.local = nmg
+version = 1.4
+date = 2022-09-24
+name.local = Kwasio
 name.english = Kwasio
 name.babel = kwasio
 tag.bcp47 = nmg

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/nn/babel-nn.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/nn/babel-nn.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/nn/babel-nn.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -9,9 +9,9 @@
 
 [identification]
 charset = utf8
-version = 1.2
-date = 2020-06-30
-name.local = nynorsk
+version = 1.3
+date = 2022-09-24
+name.local = norsk nynorsk
 name.english = Norwegian Nynorsk
 name.babel = nynorsk norwegiannynorsk
 name.polyglossia = norwegian
@@ -164,7 +164,7 @@
 auxiliary = [á ǎ č ç đ è ê ń ñ ŋ š ŧ ü ž ä ö]
 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 = [\\- , ; \\: ! ? . ( ) \\[ \\] \\{ \\}]
+punctuation = [\\- ‐ ‑ – — , ; \\: ! ? . … ' ‘ ’ \" “ ” ( ) \\[ \\] § @ * / \\& # † ‡ ′ ″]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/no/babel-no.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/no/babel-no.ini	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/no/babel-no.ini	2022-10-04 19:54:54 UTC (rev 64614)
@@ -7,8 +7,8 @@
 
 [identification]
 charset = utf8
-version = 1.0
-date = 2021-08-29
+version = 1.1
+date = 2022-09-24
 name.local = norsk
 name.english = Norwegian
 name.babel = norsk norwegian
@@ -162,7 +162,7 @@
 auxiliary = [á ǎ ã č ç đ è ê í ń ñ ŋ š ŧ ú ü ž ä ö]
 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 = [\\- – , ; \\: ! ? . ' \" « » ( ) \\[ \\] \\{ \\} § @ * / \\\\]
+punctuation = [\\- ‑ – , ; \\: ! ? . ' \" « » ( ) \\[ \\] \\{ \\} § @ * / \\\\]
 
 [numbers]
 defaultNumberingSystem = latn

Modified: trunk/Master/texmf-dist/tex/generic/babel/luababel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/luababel.def	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/luababel.def	2022-10-04 19:54:54 UTC (rev 64614)
@@ -808,24 +808,17 @@
 \DisableBabelHook{babel-fontspec}
 \bbl at trace{Font handling with fontspec}
 \ifx\ExplSyntaxOn\@undefined\else
-  \ExplSyntaxOn
-  \catcode`\ =10
+  \def\bbl at fs@warn at nx#1#2{% \bbl at tempfs is the original macro
+    \in@{,#1,}{,no-script,language-not-exist,}%
+    \ifin@\else\bbl at tempfs@nx{#1}{#2}\fi}
+  \def\bbl at fs@warn at nxx#1#2#3{%
+    \in@{,#1,}{,no-script,language-not-exist,}%
+    \ifin@\else\bbl at tempfs@nxx{#1}{#2}{#3}\fi}
   \def\bbl at loadfontspec{%
-    \usepackage{fontspec}%  TODO. Apply patch always
-    \expandafter
-    \def\csname msg~text~>~fontspec/language-not-exist\endcsname##1##2##3##4{%
-      Font '\l_fontspec_fontname_tl' is using the\\%
-      default features for language '##1'.\\%
-      That's usually fine, because many languages\\%
-      require no specific features, but if the output is\\%
-      not as expected, consider selecting another font.}
-    \expandafter
-    \def\csname msg~text~>~fontspec/no-script\endcsname##1##2##3##4{%
-      Font '\l_fontspec_fontname_tl' is using the\\%
-      default features for script '##2'.\\%
-      That's not always wrong, but if the output is\\%
-      not as expected, consider selecting another font.}}
-  \ExplSyntaxOff
+    \let\bbl at loadfontspec\relax
+    \ifx\fontspec\@undefined
+      \usepackage{fontspec}%
+    \fi}%
 \fi
 \@onlypreamble\babelfont
 \newcommand\babelfont[2][]{%  1=langs/scripts 2=fam
@@ -837,9 +830,7 @@
     \fi}%
   \edef\bbl at tempa{#1}%
   \def\bbl at tempb{#2}%  Used by \bbl at bblfont
-  \ifx\fontspec\@undefined
-    \bbl at loadfontspec
-  \fi
+  \bbl at loadfontspec
   \EnableBabelHook{babel-fontspec}% Just calls \bbl at switchfont
   \bbl at bblfont}
 \newcommand\bbl at bblfont[2][]{% 1=features 2=fontname, @font=rm|sf|tt
@@ -962,8 +953,15 @@
       {\\\newfontscript{\bbl at cl{sname}}{\bbl at cl{sotf}}}%
     \<keys_if_exist:nnF>{fontspec-opentype}{Language/\bbl at cl{lname}}%
       {\\\newfontlanguage{\bbl at cl{lname}}{\bbl at cl{lotf}}}%
+    \let\\\bbl at tempfs@nx\<__fontspec_warning:nx>%
+    \let\<__fontspec_warning:nx>\\\bbl at fs@warn at nx
+    \let\\\bbl at tempfs@nxx\<__fontspec_warning:nxx>%
+    \let\<__fontspec_warning:nxx>\\\bbl at fs@warn at nxx
     \\\renewfontfamily\\#4%
       [\bbl at cl{lsys},#2]}{#3}% ie \bbl at exp{..}{#3}
+  \bbl at exp{%
+    \let\<__fontspec_warning:nx>\\\bbl at tempfs@nx
+    \let\<__fontspec_warning:nxx>\\\bbl at tempfs@nxx}%
   \begingroup
      #4%
      \xdef#1{\f at family}%     eg, \bbl at rmdflt@lang{FreeSerif(0)}
@@ -1062,6 +1060,11 @@
           (item.char >= 0x1DC0 and item.char <= 0x1DFF) then
         toloc = toloc_save
       end
+      if toloc and Babel.locale_props[toloc] and
+          Babel.locale_props[toloc].letters and
+          tex.getcatcode(item.char) \string~= 11 then
+        toloc = nil
+      end
       if toloc and toloc > -1 then
         if Babel.locale_props[toloc].lg then
           item.lang = Babel.locale_props[toloc].lg
@@ -1072,7 +1075,7 @@
         end
         toloc_save = toloc
       end
-    elseif not inmath and item.id == 7 then
+    elseif not inmath and item.id == 7 then % Apply recursively
       item.replace = item.replace and Babel.locale_map(item.replace)
       item.pre     = item.pre and Babel.locale_map(item.pre)
       item.post    = item.post and Babel.locale_map(item.post)
@@ -1140,10 +1143,11 @@
   \@ifnextchar[{\bbl at settransform{0}}{\bbl at settransform{0}[]}}
 \gdef\babelposthyphenation{&%
   \@ifnextchar[{\bbl at settransform{1}}{\bbl at settransform{1}[]}}
+\gdef\bbl at postlinebreak{\bbl at settransform{2}[]} &% WIP
 \gdef\bbl at settransform#1[#2]#3#4#5{&%
   \ifcase#1
     \bbl at activateprehyphen
-  \else
+  \or
     \bbl at activateposthyphen
   \fi
   \begingroup
@@ -1159,7 +1163,7 @@
            rep = rep:gsub('^%s*(remove)%s*$', 'remove = true')
            rep = rep:gsub('^%s*(insert)%s*,', 'insert = true, ')
            rep = rep:gsub('(string)%s*=%s*([^%s,]*)', Babel.capture_func)
-           if #1 == 0 then
+           if #1 == 0 or #1 == 2 then
              rep = rep:gsub('(space)%s*=%s*([%d%.]+)%s+([%d%.]+)%s+([%d%.]+)',
                'space = {' .. '%2, %3, %4' .. '}')
              rep = rep:gsub('(spacefactor)%s*=%s*([%d%.]+)%s+([%d%.]+)%s+([%d%.]+)',
@@ -1172,6 +1176,16 @@
            end
            tex.print([[\string\babeltempa{{]] .. rep .. [[}}]])
          }}}&%
+    \bbl at foreach\babeltempb{&%
+      \bbl at forkv{{##1}}{&%
+        \in@{,####1,}{,nil,step,data,remove,insert,string,no,pre,&%
+            no,post,penalty,kashida,space,spacefactor,}&%
+        \ifin@\else
+          \bbl at error
+           {Bad option '####1' in a transform.\\&%
+            I’ll ignore it but expect more errors}&%
+           {See the manual for further info.}&%
+        \fi}}&%
     \let\bbl at kv@attribute\relax
     \let\bbl at kv@label\relax
     \bbl at forkv{#2}{\bbl at csarg\edef{kv@##1}{##2}}&%
@@ -1182,7 +1196,7 @@
       local lbkr = Babel.linebreaking.replacements[#1]
       local u = unicode.utf8
       local id, attr, label
-      if #1 == 0 then
+      if #1 == 0 or #1 == 2 then
         id = \the\csname bbl at id@@#3\endcsname\space
       else
         id = \the\csname l@#3\endcsname\space
@@ -1197,7 +1211,7 @@
       \fi
       &% Convert pattern:
       local patt = string.gsub([==[#4]==], '%s', '')
-      if #1 == 0 then
+      if #1 == 0 or #1 == 2 then
         patt = string.gsub(patt, '|', ' ')
       end
       if not u.find(patt, '()', nil, true) then

Modified: trunk/Master/texmf-dist/tex/generic/babel/nil.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/nil.ldf	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/nil.ldf	2022-10-04 19:54:54 UTC (rev 64614)
@@ -33,7 +33,7 @@
 %% extension |.ins|) which are part of the distribution.
 %%
 
-\ProvidesLanguage{nil}[2022/09/17 3.80 Nil language]
+\ProvidesLanguage{nil}[2022/10/04 3.81 Nil language]
 \LdfInit{nil}{datenil}
 \ifx\l at nil\@undefined
   \newlanguage\l at nil

Modified: trunk/Master/texmf-dist/tex/generic/babel/xebabel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/xebabel.def	2022-10-04 19:53:34 UTC (rev 64613)
+++ trunk/Master/texmf-dist/tex/generic/babel/xebabel.def	2022-10-04 19:54:54 UTC (rev 64614)
@@ -96,24 +96,17 @@
 \DisableBabelHook{babel-fontspec}
 \bbl at trace{Font handling with fontspec}
 \ifx\ExplSyntaxOn\@undefined\else
-  \ExplSyntaxOn
-  \catcode`\ =10
+  \def\bbl at fs@warn at nx#1#2{% \bbl at tempfs is the original macro
+    \in@{,#1,}{,no-script,language-not-exist,}%
+    \ifin@\else\bbl at tempfs@nx{#1}{#2}\fi}
+  \def\bbl at fs@warn at nxx#1#2#3{%
+    \in@{,#1,}{,no-script,language-not-exist,}%
+    \ifin@\else\bbl at tempfs@nxx{#1}{#2}{#3}\fi}
   \def\bbl at loadfontspec{%
-    \usepackage{fontspec}%  TODO. Apply patch always
-    \expandafter
-    \def\csname msg~text~>~fontspec/language-not-exist\endcsname##1##2##3##4{%
-      Font '\l_fontspec_fontname_tl' is using the\\%
-      default features for language '##1'.\\%
-      That's usually fine, because many languages\\%
-      require no specific features, but if the output is\\%
-      not as expected, consider selecting another font.}
-    \expandafter
-    \def\csname msg~text~>~fontspec/no-script\endcsname##1##2##3##4{%
-      Font '\l_fontspec_fontname_tl' is using the\\%
-      default features for script '##2'.\\%
-      That's not always wrong, but if the output is\\%
-      not as expected, consider selecting another font.}}
-  \ExplSyntaxOff
+    \let\bbl at loadfontspec\relax
+    \ifx\fontspec\@undefined
+      \usepackage{fontspec}%
+    \fi}%
 \fi
 \@onlypreamble\babelfont
 \newcommand\babelfont[2][]{%  1=langs/scripts 2=fam
@@ -125,9 +118,7 @@
     \fi}%
   \edef\bbl at tempa{#1}%
   \def\bbl at tempb{#2}%  Used by \bbl at bblfont
-  \ifx\fontspec\@undefined
-    \bbl at loadfontspec
-  \fi
+  \bbl at loadfontspec
   \EnableBabelHook{babel-fontspec}% Just calls \bbl at switchfont
   \bbl at bblfont}
 \newcommand\bbl at bblfont[2][]{% 1=features 2=fontname, @font=rm|sf|tt
@@ -250,8 +241,15 @@
       {\\\newfontscript{\bbl at cl{sname}}{\bbl at cl{sotf}}}%
     \<keys_if_exist:nnF>{fontspec-opentype}{Language/\bbl at cl{lname}}%
       {\\\newfontlanguage{\bbl at cl{lname}}{\bbl at cl{lotf}}}%
+    \let\\\bbl at tempfs@nx\<__fontspec_warning:nx>%
+    \let\<__fontspec_warning:nx>\\\bbl at fs@warn at nx
+    \let\\\bbl at tempfs@nxx\<__fontspec_warning:nxx>%
+    \let\<__fontspec_warning:nxx>\\\bbl at fs@warn at nxx
     \\\renewfontfamily\\#4%
       [\bbl at cl{lsys},#2]}{#3}% ie \bbl at exp{..}{#3}
+  \bbl at exp{%
+    \let\<__fontspec_warning:nx>\\\bbl at tempfs@nx
+    \let\<__fontspec_warning:nxx>\\\bbl at tempfs@nxx}%
   \begingroup
      #4%
      \xdef#1{\f at family}%     eg, \bbl at rmdflt@lang{FreeSerif(0)}



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