texlive[74953] Master/texmf-dist: babel (15apr25)
commits+karl at tug.org
commits+karl at tug.org
Tue Apr 15 21:57:55 CEST 2025
Revision: 74953
https://tug.org/svn/texlive?view=revision&revision=74953
Author: karl
Date: 2025-04-15 21:57:54 +0200 (Tue, 15 Apr 2025)
Log Message:
-----------
babel (15apr25)
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/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/cy/babel-cy.ini
trunk/Master/texmf-dist/tex/generic/babel/locale/he/babel-he.ini
trunk/Master/texmf-dist/tex/generic/babel/locale/lad/babel-lad.ini
trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Arab.ini
trunk/Master/texmf-dist/tex/generic/babel/locale/yi/babel-yi.ini
trunk/Master/texmf-dist/tex/generic/babel/luababel.def
trunk/Master/texmf-dist/tex/generic/babel/nil.ldf
Added Paths:
-----------
trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/
trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-ancienthebrew.tex
trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-hbo.ini
trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Hebr.ini
Removed Paths:
-------------
trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-0.lua
trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-1.lua
Modified: trunk/Master/texmf-dist/doc/latex/babel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/babel/README.md 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/doc/latex/babel/README.md 2025-04-15 19:57:54 UTC (rev 74953)
@@ -1,6 +1,6 @@
-## Babel 25.6
+## Babel 25.7
-2025-03-27
+2025-04-14
`Babel` is the multilingual framework to localize documents. It fully
supports pdfLaTeX and the Unicode engines LuaLaTeX and XeLaTeX. A few
@@ -21,9 +21,9 @@
The latest stable version is available on <https://ctan.org/pkg/babel>.
-Changes in version 25.6 are described in:
+Changes in version 25.7 are described in:
-https://latex3.github.io/babel/news/whats-new-in-babel-25.6.html
+https://latex3.github.io/babel/news/whats-new-in-babel-25.7.html
Apart from the manual, you can find information and examples in:
@@ -59,12 +59,13 @@
### Summary of latest changes
```
-25.6 2025-03-27
- * Transforms for Chinese and Japanese:
- - Improved 'spacing.basic'.
- - New: 'input.nospaces.
- * @include directive in ini files.
- * Fix error with CJK in lists (tex.sx 739783).
+25.7 2025-04-14
+ * New macro: \ShowBabelTransforms.
+ * Fixes:
+ - Incorrect kashida placement (#336).
+ - Ancient Hebrew vowel characters not recognised as Hebrew text (#337).
+ - babel-cy.ini captions and captions.licr inconsistent (#338).
+ * New locale: ancienthebrew.
```
### 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 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.dtx 2025-04-15 19:57:54 UTC (rev 74953)
@@ -37,7 +37,7 @@
lang = en-001,
}
\ProvidesFile{babel.dtx}%
- [2025/03/27 v25.6
+ [2025/04/14 v25.7
The multilingual framework for pdfLaTeX, LuaLaTeX and XeLaTeX]
\documentclass{ltxdoc}
\GetFileInfo{babel.dtx}
@@ -484,7 +484,7 @@
\end{example}
\begin{note}
- Because of the way \babel{} has evolved, ``language'' can refer to
+ Because of the way \babel{} has evolved, “language” can refer to
(1) a set of hyphenation patterns as preloaded into the format, (2) a
package option, (3) an |ldf| file, and (4) a name used in the
document to select a language. Please, read the documentation for
@@ -1108,6 +1108,7 @@
\tagmin{ancientegyptian}{}{egy}
\tag{ancientgreek}{\hascapu\hascapl}{grc}\note{It’s a different
language from \texttt{greek}.}
+\tagmin{ancienthebrew}{}{hbo}
\tag{arabic}{\hascapu}{ar}
\subtag{arabic-algeria}{\hascapu}{ar-DZ}
\subtag{arabic-dz}{\hascapu}{ar-DZ}
@@ -2232,7 +2233,7 @@
\Describe{\iflanguage}{\marg{language}\marg{true}\marg{false}}
-Here ``language'' is used in the \TeX{} sense, as a set of hyphenation
+Here “language” is used in the \TeX{} sense, as a set of hyphenation
patterns, and \textit{not} as its \textsf{babel} name. The first
argument is the name of a language.
@@ -2584,12 +2585,6 @@
redefined easily.
\end{note}
-% \begin{example}
-% Let's assume you need only the basic features of `spanish`, so that
-% the |ini| file is enough, and also a variant with your own
-% hyphenation with
-% \end{example}
-
\subsection{Selection based on BCP 47 tags}
\label{bcp47}
@@ -2790,7 +2785,7 @@
the language name, and are prefixed with a dot (only when the language
is set as package option -- neither global options nor the |main| key
accepts them). An example is (spaces are not significant and they can
-be added or removed):\footnote{No predefined ``axis'' for modifiers
+be added or removed):\footnote{No predefined “axis” for modifiers
is provided because languages and their scripts have quite different
needs.}
\begin{verbatim}
@@ -3048,7 +3043,7 @@
\subsection{Manage auxiliary files}
\Describe{\BabelContentsFiles}{}
-\New{3.9a} This macro contains a list of ``toc'' types requiring a
+\New{3.9a} This macro contains a list of “toc” types requiring a
command to switch the language. Its default value is |toc,lof,lot|, but
you may redefine it with |\renewcommand| to add further types in case
you need or there is a package enabling additional files, e.g., for
@@ -3329,7 +3324,7 @@
\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).
@@ -3386,7 +3381,7 @@
\begin{note}
(1) If you need shorthands, you can define them with |\useshorthands|
and |\defineshorthand| as described above. (2) Captions and |\today|
- are ``ensured'' with |\babelensure| (this is the default in
+ are “ensured” with |\babelensure| (this is the default in
|ini|-based languages).
\end{note}
@@ -3472,9 +3467,9 @@
It can be used only in the preamble, and patterns are added when the
language is first selected, thus taking into account changes of
-|\lccodes|'s done in |\extras<language>| as well as the language-specific
+|\lccodes|’s done in |\extras<language>| as well as the language-specific
encoding (not set in the preamble by default). Multiple
-|\babelpatterns|'s are allowed.
+|\babelpatterns|’s are allowed.
Listed patterns are saved expanded and therefore it relies on the
LICR\@. Of course, it also works without the LICR if the input and the
@@ -3490,7 +3485,7 @@
\New{3.27} Interword spacing for Thai, Lao and Khmer is activated
automatically if a language with one of those scripts is loaded with
|\babelprovide|. See the sample on the \babel{} repository. With both
-Unicode engines, spacing is based on the ``current'' em unit (the size
+Unicode engines, spacing is based on the “current” em unit (the size
of the previous char in \luatex, and the font size set by the last
|\selectfont| in \xetex).
@@ -3542,7 +3537,7 @@
entered as \verb|-|, and (2) \textit{optional} or \textit{soft
hyphens}, which are entered as \verb|\-|. Strictly, a \textit{soft
hyphen} is not a hyphen, but just a breaking opportunity or, in
-\TeX\ terms, a ``discretionary''; a \textit{hard hyphen} is a hyphen
+\TeX\ terms, a “discretionary”; a \textit{hard hyphen} is a hyphen
with a breaking opportunity after it. A further type is a
\textit{non-breaking hyphen}, a hyphen without a breaking
opportunity.
@@ -3557,7 +3552,7 @@
cannot insert a soft hyphen without breaking opportunities in the rest
of the word.
-Therefore, some macros are provided with a set of basic ``hyphens''
+Therefore, some macros are provided with a set of basic “hyphens”
which can be used by themselves, to define a user shorthand, or even
in language files.
\begin{itemize}
@@ -3570,7 +3565,7 @@
after it (even if a space follows).
\item |\babelhyphen{empty}| inserts a break opportunity without
a hyphen at all.
-\item |\babelhyphen|\marg{text} is a hard ``hyphen'' using \m{text}
+\item |\babelhyphen|\marg{text} is a hard “hyphen” using \m{text}
instead. A typical case is |\babelhyphen{/}|.
\end{itemize}
With all of them, hyphenation in the rest of the word is enabled. If
@@ -3734,7 +3729,7 @@
\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,
+usually are not “other”. For them |\shorthandoff*| is provided,
so that with
\begin{verbatim}
\shorthandoff*{~^}
@@ -3783,7 +3778,7 @@
User shorthands override language ones, which in turn override system
shorthands. Language-dependent user shorthands take precedence over
-``normal'' user shorthands.
+“normal” user shorthands.
\begin{example}
Let's assume you want a unified set of shorthands for discretionaries
@@ -4369,7 +4364,6 @@
\trans{Latin}{letters.uv}{Replaces \textit{v}, \textit{U} with
\textit{u}, \textit{V}.}
-
\trans{Serbian}{transliteration.gajica}{(Note |serbian| with |ini|
files refers to the Cyrillic script, which is here the target.) The
standard system devised by Ljudevit Gaj.}
@@ -4530,6 +4524,17 @@
the current language. Font dependent transforms are always enabled and
cannot be disabled.
+\Describe{\ShowBabelTransforms}{\marg{string}}
+
+\New{25.7} Applies the current transforms to the string and shows in
+the |log| the transformations performed. Don’t rely on the current
+format, because it may change. In the process, penalties,
+discretionaries, etc., can be inserted, which are currently printed as
+a boxed ‘?’, as a boxed ‘US’ (because it’s the ‘unit separator’) or in
+another way. With this macros you can better understand what’s going
+on, so that you can debug the transforms. Use it only in the document
+body.
+
\subsection{Support for \xetex{} interchar}
\label{interchar}
@@ -4726,10 +4731,10 @@
loaded. For example, if you load |LY1,LGR|, then it is set to |LY1|,
but if you load |LY1,T2A| it is set to |T2A|. The symbol encodings
|TS1|, |T3|, and |TS3| are not taken into account, since they are not
-used for ``ordinary'' text (they are stored in |\BabelNonText|, used
+used for “ordinary” text (they are stored in |\BabelNonText|, used
in some special cases when no Latin encoding is explicitly set).
-The foregoing rules (which are applied ``at begin document'') cover
+The foregoing rules (which are applied “at begin document”) cover
most of the cases. No assumption is made on characters above
127, which may not follow the LICR conventions -- the goal is just
to ensure most of the ASCII letters and symbols are the right ones.
@@ -4934,7 +4939,7 @@
it can depend on the counter format.
With |counters|, |\arabic| is not only considered L text always (with
- |\babelsublr|, see below), but also an ``isolated'' block which does
+ |\babelsublr|, see below), but also an “isolated” block which does
not interact with the surrounding chars. So, while |1.2| in R text is
rendered in that order with |bidi=basic| (as a decimal number), in
|\arabic{c1}.\arabic{c2}| the visual order is \textit{c2.c1}. Of
@@ -5279,13 +5284,13 @@
the main exception being \luatex) require hyphenation patterns to be
preloaded when a format is created (e.g., \LaTeX, Xe\LaTeX, pdf\LaTeX).
\babel{} provides a tool which has become standard in many
-distributions and based on a ``configuration file'' named
+distributions and based on a “configuration file” named
\file{language.dat}. The exact way this file is used depends on the
distribution, so please, read the documentation for the latter (note
also some distributions generate the file with some tool).
\New{3.9q} With \luatex, however, patterns are loaded on the fly when
-requested by the language (except the ``0th'' language, typically
+requested by the language (except the “0th” language, typically
\textsf{english}, which is preloaded always). You may want to have a
local |language.dat| for a particular project (for example, a book on
Chemistry). The loader for lua(e)tex is slightly different as it's not
@@ -5397,13 +5402,13 @@
(high-level, which in turn may switch the font encoding). Usage of things
like |\latintext| is deprecated (but not removed, for backward
compatibility).
-\item Please, for ``private'' internal macros do not use the |\bbl@|
+\item Please, for “private” internal macros do not use the |\bbl@|
prefix. It is used by \babel{} and it can lead to incompatibilities.
\end{itemize}
There are no special requirements for documenting your language files.
Just provide a standalone document suited to your needs, as well as
-other files you think can be useful. A PDF and a ``readme'' are
+other files you think can be useful. A PDF and a “readme” are
strongly recommended.
\subsection{Guidelines for contributed languages}
@@ -5459,7 +5464,7 @@
\DescribeMacro{\addlanguage}
The macro |\addlanguage| is a non-outer version of the macro
|\newlanguage|, defined in \file{plain.tex} version~3.x. Here
-``language'' is used in the \TeX{} sense of set of hyphenation
+“language” is used in the \TeX{} sense of set of hyphenation
patterns.
\DescribeMacro{\adddialect}
@@ -5468,7 +5473,7 @@
languages for which no patterns are preloaded in the format. In such
cases the default behavior of the \babel{} system is to define this
language as a ‘dialect’ of the language for which the patterns were
-loaded as |\language0|. Here ``language'' is used in the \TeX{} sense
+loaded as |\language0|. Here “language” is used in the \TeX{} sense
of set of hyphenation patterns, while “dialect”, which is misnomer,
refers just to a language with the same hyphenation patterns as another
(there is no relation with its linguistic meaning).
@@ -5650,12 +5655,12 @@
shorthands this definition belongs to; the character (sequence) that
makes up the shorthand, i.e., |~| or |"a|; and the code to be executed
when the shorthand is encountered. (It does \textit{not} raise an
-error if the shorthand character has not been ``initiated''.)
+error if the shorthand character has not been “initiated”.)
-\DescribeMacro{\bbl at add@special} The \TeX book states: ``Plain \TeX\
+\DescribeMacro{\bbl at add@special} The \TeX book states: “Plain \TeX\
includes a macro called |\dospecials| that is essentially a set macro,
representing the set of all characters that have a special category
-code.'' \cite[p.~380]{DEK} It is used to set text `verbatim'. To make
+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 |\dospecials|. \LaTeX\ adds another
macro called |\@sanitize| representing the same character set, but
@@ -5781,7 +5786,7 @@
but this is discouraged -- an explicit name (or names) is much better
and clearer.
-A ``selector'' selects a group of definition that are to be used, optionally
+A “selector” selects a group of definition that are to be used, optionally
followed by extra info about the encodings to be used. The name
|unicode| must be used for \luatex{} and \xetex{}. Without a selector,
the LICR representation (i.e., with macros like |\~{n}| instead of |ñ|)
@@ -5906,7 +5911,7 @@
transformation corresponding to the current charset or defined with
the hook |stringprocess|).
-Use this command to define strings, without including any ``logic'' if
+Use this command to define strings, without including any “logic” if
possible, which should be a separate macro. See the example above for
the date.
@@ -6045,7 +6050,7 @@
% There some additional |tex|, |def| and |lua| files.
%
% The \babel{} installer extends \textsf{docstrip} with a few
-% ``pseudo-guards'' to set ``variables'' used at installation time.
+% “pseudo-guards” to set “variables” used at installation time.
% They are used with \texttt{<@name@>} at the appropriate places in the
% source code and defined with either
% $\langle\langle$\textit{name}=\textit{value}$\rangle\rangle$, or with
@@ -6076,8 +6081,8 @@
% \section{Tools}
%
% \begin{macrocode}
-%<<version=25.6>>
-%<<date=2025/03/27>>
+%<<version=25.7>>
+%<<date=2025/04/14>>
% \end{macrocode}
%
% \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -6137,8 +6142,8 @@
% Because the code that is used in the handling of active characters
% may need to look ahead, we take extra care to `throw' it over the
% |\else| and |\fi| parts of an |\if|-statement\footnote{This code is
-% based on code presented in TUGboat vol. 12, no2, June 1991 in ``An
-% expansion Power Lemma'' by Sonja Maus.}. These macros will break if
+% based on code presented in TUGboat vol. 12, no2, June 1991 in “An
+% expansion Power Lemma” by Sonja Maus.}. These macros will break if
% another |\if...\fi| statement appears in one of the arguments and it
% is not enclosed in braces.
%
@@ -6699,7 +6704,7 @@
% which has been declared above or follow the syntax |<key>=<value>|,
% the second one loads the requested languages, except the main one if
% set with the key |main|, and the third one loads the latter. First,
-% we ``flag'' valid keys with a nil value.
+% we “flag” valid keys with a nil value.
%
% \begin{macrocode}
\let\bbl at opt@shorthands\@nnil
@@ -6930,7 +6935,7 @@
% Otherwise raises an error.
%
% The argument of |\bbl at fixname| has to be a macro name, as it may get
-% ``fixed'' if casing (lc/uc) is wrong. It's an attempt to fix a
+% “fixed” if casing (lc/uc) is wrong. It's an attempt to fix a
% long-standing bug when |\foreignlanguage| and the like appear in a
% |\MakeXXXcase|. However, a lowercase form is not imposed to improve
% backward compatibility (perhaps you defined a language named
@@ -7427,7 +7432,7 @@
%
% At the end of the environment we need to switch off the extra
% definitions. The grouping mechanism of the environment will take
-% care of resetting the correct hyphenation rules and ``extras''.
+% care of resetting the correct hyphenation rules and “extras”.
%
% \begin{macrocode}
\expandafter\let\csname endotherlanguage*\endcsname\relax
@@ -7772,7 +7777,7 @@
% The user command just parses the optional argument and creates a
% new macro named |\bbl at e@<language>|. We register a hook at the
% |afterextras| event which just executes this macro in a
-% ``complete'' selection (which, if undefined, is |\relax| and does
+% “complete” selection (which, if undefined, is |\relax| and does
% nothing). This part is somewhat involved because we have to make
% sure things are expanded the correct number of times.
%
@@ -8235,8 +8240,8 @@
% created, and |\active at char"| is a single token). In protected
% contexts, it expands to |\protect "| or |\noexpand "| (i.e., with the
% original |"|); otherwise |\active at char"| is executed. This macro in
-% turn expands to |\normal at char"| in ``safe'' contexts (e.g., |\label|),
-% but |\user at active"| in normal ``unsafe'' ones. The latter search a
+% turn expands to |\normal at char"| in “safe” contexts (e.g., |\label|),
+% but |\user at active"| in normal “unsafe” ones. The latter search a
% definition in the user, language and system levels, in this order,
% but if none is found, |\normal at char"| is used. However, a deactivated
% shorthand (with |\bbl at deactivate| is defined as
@@ -8545,9 +8550,9 @@
%
% \macro{\bbl at restore@actives}
% When the output routine kicks in while the active characters were
-% made ``safe'' this must be undone in the headers to prevent
+% made “safe” this must be undone in the headers to prevent
% unexpected typeset results. For this situation we define a command to
-% make them ``unsafe'' again.
+% make them “unsafe” again.
%
% \begin{macrocode}
\def\bbl at restore@actives{\if at safe@actives\@safe at activesfalse\fi}
@@ -9337,7 +9342,7 @@
{\lowercase{\csname bbl at hy@#1#2\@empty\endcsname}}}
% \end{macrocode}
%
-% The following two commands are used to wrap the ``hyphen'' and
+% The following two commands are used to wrap the “hyphen” and
% set the behavior of the rest of the word -- the version with a
% single |@| is used when further hyphenation is allowed, while
% that with |@@| if no more hyphens are allowed. In both cases, if
@@ -9346,7 +9351,7 @@
%
% There should not be a discretionary after a hyphen at the
% beginning of a word, so it is prevented if preceded by a
-% skip. Unfortunately, this does handle cases like ``(-suffix)''.
+% skip. Unfortunately, this does handle cases like “(-suffix)”.
% |\nobreak| is always preceded by |\leavevmode|, in case the
% shorthand starts a paragraph.
%
@@ -9370,7 +9375,7 @@
\fi}
% \end{macrocode}
%
-% Finally, we define the hyphen ``types''. Their names will not change,
+% Finally, we define the hyphen “types”. Their names will not change,
% so you may use them in |ldf|'s. After a space, the |\mbox| in
% |\bbl at hy@nobreak| is redundant.
%
@@ -9608,9 +9613,9 @@
% Now we define commands to be used inside |\StartBabelCommands|.
%
% \paragraph{Strings} The following macro is the actual definition
-% of |\SetString| when it is ``active''
+% of |\SetString| when it is “active”
%
-% First save the ``switcher''. Create it if undefined. Strings are
+% First save the “switcher”. Create it if undefined. Strings are
% defined only if undefined (i.e., like |\providescommmand|). With
% the event |stringprocess| you can preprocess the string by
% manipulating the value of |\BabelString|. If there are several
@@ -9643,7 +9648,7 @@
% |\StartBabelCommands|. The current definition is somewhat complicated
% because we need a count, but |\count@| is not under our control
% (remember |\SetString| may call hooks). Instead of defining a
-% dedicated count, we just ``pre-expand'' its value.
+% dedicated count, we just “pre-expand” its value.
%
% \begin{macrocode}
%<<*Macros local to BabelCommands>>
@@ -11373,7 +11378,7 @@
% \end{macrocode}
%
% \textbf{Dates} will require some macros for the basic formatting.
-% They may be redefined by language, so ``semi-public'' names (camel
+% They may be redefined by language, so “semi-public” names (camel
% case) are used. Oddly enough, the CLDR places particles like “de”
% inconsistently in either in the date or in the month name. Note after
% |\bbl at replace| |\toks@| contains the resulting string, which is used
@@ -12540,7 +12545,7 @@
% encodings are currently stored in |\@fontenc at load@list|. If a
% non-ASCII has been loaded, we define versions of |\TeX| and |\LaTeX|
% for them using |\ensureascii|. The default ASCII encoding is set,
-% too (in reverse order): the ``main'' encoding (when the document
+% too (in reverse order): the “main” encoding (when the document
% begins), the last loaded, or |OT1|.
%
% \macro{\ensureascii}
@@ -14488,7 +14493,7 @@
% The default setup preloads the first language into the format. This
% is intended mainly for `english', so that it's available without
% further intervention from the user. To avoid duplicating it, the
-% following rule applies: if the ``0th'' language and the first
+% following rule applies: if the “0th” language and the first
% language in |language.dat| have the same name then just ignore the
% latter. If there are new synonymous, the are added, but note if the
% language patterns have not been preloaded they won't at run time.
@@ -14496,7 +14501,7 @@
% Other preloaded languages could be read twice, if they have been
% preloaded into the format. This is not optimal, but it shouldn't
% happen very often -- with \luatex{} patterns are best loaded when
-% the document is typeset, and the ``0th'' language is preloaded just
+% the document is typeset, and the “0th” language is preloaded just
% for backwards compatibility.
%
% As of 1.1b, lua(e)tex is taken into account. Formerly, loading of
@@ -15498,7 +15503,8 @@
{0x20000, 0x2A6DF}, {0x2A700, 0x2B73F},
{0x2B740, 0x2B81F}, {0x2B820, 0x2CEAF},
{0x2CEB0, 0x2EBEF}, {0x2F800, 0x2FA1F}},
- ['Hebr'] = {{0x0590, 0x05FF}},
+ ['Hebr'] = {{0x0590, 0x05FF},
+ {0xFB1F, 0xFB4E}}, % <- Includes some <reserved>
['Jpan'] = {{0x3000, 0x303F}, {0x3040, 0x309F}, {0x30A0, 0x30FF},
{0x4E00, 0x9FAF}, {0xFF00, 0xFFEF}},
['Khmr'] = {{0x1780, 0x17FF}, {0x19E0, 0x19FF}},
@@ -15851,6 +15857,12 @@
\bbl at ifunset{bbl at ATR@#1@\languagename @}%
{\bbl at error{transform-not-available-b}{#1}{}{}}%
{\bbl at csarg\unsetattribute{ATR@#1@\languagename @}}}
+% \end{macrocode}
+%
+% The following two macros load the Lua code for transforms, but only
+% once. The only difference is in |add_after| and |add_before|.
+%
+% \begin{macrocode}
\def\bbl at activateposthyphen{%
\let\bbl at activateposthyphen\relax
\ifx\bbl at attr@hboxed\@undefined
@@ -15875,6 +15887,22 @@
}}
% \end{macrocode}
%
+% The code in |babel-transforms.lua| prints at some points the current
+% string being transformed. This macro first make sure this file is
+% loaded. Then, activates temporarily this feature and typeset inside a
+% box the text in the argument.
+%
+% \begin{macrocode}
+\newcommand\ShowBabelTransforms[1]{%
+ \bbl at activateprehyphen
+ \bbl at activateposthyphen
+ \begingroup
+ \directlua{ Babel.show_transforms = true }%
+ \setbox\z@\vbox{#1}%
+ \directlua{ Babel.show_transforms = false }%
+ \endgroup}
+% \end{macrocode}
+%
% The following experimental (and unfinished) macro applies the
% prehyphenation transforms for the current locale to a string
% (characters and spaces) and processes it in a fully expandable way
@@ -16736,6 +16764,8 @@
return (node.lang == Babel.nohyphenation)
end
+Babel.show_transforms = false
+
-- Merging both functions doesn't seen feasible, because there are too
-- many differences.
Babel.fetch_subtext[0] = function(head)
@@ -16795,6 +16825,7 @@
if word_string:sub(-1) == ' ' then
word_string = word_string:sub(1,-2)
end
+ if Babel.show_transforms then texio.write_nl(word_string) end
word_string = unicode.utf8.gsub(word_string, Babel.us_char .. '+$', '')
return word_string, word_nodes, item, lang
end
@@ -16817,15 +16848,15 @@
elseif item.id == 29 then
if item.lang == lang or lang == nil then
- if (item.char ~= 124) and (item.char ~= 61) then -- not =, not |
- lang = lang or item.lang
- if node.has_attribute(item, Babel.attr_hboxed) then
- word_string = word_string .. Babel.us_char
- else
- word_string = word_string .. unicode.utf8.char(item.char)
- end
- word_nodes[#word_nodes+1] = item
+ lang = lang or item.lang
+ if node.has_attribute(item, Babel.attr_hboxed) then
+ word_string = word_string .. Babel.us_char
+ elseif (item.char == 124) or (item.char == 61) then -- not =, not |
+ word_string = word_string .. Babel.us_char
+ else
+ word_string = word_string .. unicode.utf8.char(item.char)
end
+ word_nodes[#word_nodes+1] = item
else
break
end
@@ -16862,7 +16893,7 @@
item = item.next
end
-
+ if Babel.show_transforms then texio.write_nl(word_string) end
word_string = unicode.utf8.gsub(word_string, Babel.us_char .. '+$', '')
return word_string, word_nodes, item, lang
end
@@ -16884,6 +16915,10 @@
local word_head = head
+ if Babel.show_transforms then
+ texio.write_nl('\n==== Showing ' .. (mode == 0 and 'pre' or 'post') .. 'hyphenation ====')
+ end
+
while true do -- for each subtext block
local w, w_nodes, nw, lang = Babel.fetch_subtext[mode](word_head)
@@ -17021,7 +17056,7 @@
if not enabled then
last_match = save_last
goto next
-
+
elseif crep and next(crep) == nil then -- = {}
if step == 0 then
last_match = save_last -- Optimization
@@ -17174,6 +17209,7 @@
end -- for each replacement
+ if Babel.show_transforms then texio.write_nl('> ' .. w) end
if Babel.debug then
print('.....', '/')
Babel.debug_hyph(w, w_nodes, sc, first, last, last_match)
@@ -17191,6 +17227,8 @@
::next::
word_head = nw
end -- for substring
+
+ if Babel.show_transforms then texio.write_nl(string.rep('-', 32) .. '\n') end
return head
end
@@ -23397,7 +23435,7 @@
% \end{macrocode}
%
% \textbf{Mirroring.} Each chunk of text in a certain language is
-% considered a ``closed'' sequence. If <r on r> and <l on l>, it's
+% considered a “closed” sequence. If <r on r> and <l on l>, it's
% clearly <r> and <l>, resptly, but with other combinations depends on
% outer. From all these, we select only those resolving <on> $\to$
% <r>. At the beginning (when |last_lr| is nil) of an R text, they are
@@ -23582,11 +23620,11 @@
local fontmap = Babel.fontmap
for item in node.traverse(head) do
-
+
-- Mask: DxxxPPTT (Done, Pardir [0-2], Textdir [0-2])
locale_d = node.get_attribute(item, ATDIR)
node.set_attribute(item, ATDIR, 0x80)
-
+
-- In what follows, #node is the last (previous) node, because the
-- current one is not added until we start processing the neutrals.
-- three cases: glyph, dir, otherwise
@@ -24936,7 +24974,7 @@
% in a plain-based \TeX-format.
% When asked he responded:
% \begin{quote}
-% That file name is ``sacred'', and if anybody changes it they will
+% That file name is “sacred”, and if anybody changes it they will
% cause severe upward/downward compatibility headaches.
%
% People can have a file localhyphen.tex or whatever they like,
Modified: trunk/Master/texmf-dist/source/latex/babel/babel.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/babel/babel.ins 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/source/latex/babel/babel.ins 2025-04-15 19:57:54 UTC (rev 74953)
@@ -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{2025/03/27}
+\def\filedate{2025/04/14}
\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 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/source/latex/babel/bbcompat.dtx 2025-04-15 19:57:54 UTC (rev 74953)
@@ -30,7 +30,7 @@
%
% \iffalse
%<*dtx>
-\ProvidesFile{bbcompat.dtx}[2025/03/27 v25.6]
+\ProvidesFile{bbcompat.dtx}[2025/04/14 v25.7]
%</dtx>
%
%% File 'bbcompat.dtx'
Modified: trunk/Master/texmf-dist/source/latex/babel/locale.zip
===================================================================
(Binary files differ)
Deleted: trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-0.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-0.lua 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-0.lua 2025-04-15 19:57:54 UTC (rev 74953)
@@ -1,504 +0,0 @@
---
--- This is file `babel-bidi-basic.lua',
--- generated with the docstrip utility.
---
--- The original source files were:
---
--- babel.dtx (with options: `basic')
---
---
--- Copyright (C) 2012-2025 Javier Bezos and Johannes L. Braams.
--- Copyright (C) 1989-2012 Johannes L. Braams and
--- any individual authors listed elsewhere in this file.
--- All rights reserved.
---
---
--- This file is part of the Babel system.
--- --------------------------------------
---
--- It may be distributed and/or modified under the
--- conditions of the LaTeX Project Public License, either version 1.3
--- of this license or (at your option) any later version.
--- The latest version of this license is in
--- http://www.latex-project.org/lppl.txt
--- and version 1.3 or later is part of all distributions of LaTeX
--- version 2003/12/01 or later.
---
--- This work has the LPPL maintenance status "maintained".
---
--- The Current Maintainer of this work is Javier Bezos.
---
--- The list of derived (unpacked) files belonging to the distribution
--- and covered by LPPL is defined by the unpacking scripts (with
--- extension |.ins|) which are part of the distribution.
---
--- e.g., Babel.fontmap[1][<prefontid>]=<dirfontid>
-
-Babel.fontmap = Babel.fontmap or {}
-Babel.fontmap[0] = {} -- l
-Babel.fontmap[1] = {} -- r
-Babel.fontmap[2] = {} -- al/an
-
--- To cancel mirroring. Also OML, OMS, U?
-Babel.symbol_fonts = Babel.symbol_fonts or {}
-Babel.symbol_fonts[font.id('tenln')] = true
-Babel.symbol_fonts[font.id('tenlnw')] = true
-Babel.symbol_fonts[font.id('tencirc')] = true
-Babel.symbol_fonts[font.id('tencircw')] = true
-
-Babel.bidi_enabled = true
-Babel.mirroring_enabled = true
-
-require('babel-data-bidi.lua')
-
-local characters = Babel.characters
-local ranges = Babel.ranges
-
-local DIR = node.id('dir')
-local GLYPH = node.id('glyph')
-
-local function insert_implicit(head, state, outer)
- local new_state = state
- if state.sim and state.eim and state.sim ~= state.eim then
- dir = ((outer == 'r') and 'TLT' or 'TRT') -- i.e., reverse
- local d = node.new(DIR)
- d.dir = '+' .. dir
- node.insert_before(head, state.sim, d)
- local d = node.new(DIR)
- d.dir = '-' .. dir
- node.insert_after(head, state.eim, d)
- end
- new_state.sim, new_state.eim = nil, nil
- return head, new_state
-end
-
-local function insert_numeric(head, state)
- local new
- local new_state = state
- if state.san and state.ean and state.san ~= state.ean then
- local d = node.new(DIR)
- d.dir = '+TLT'
- _, new = node.insert_before(head, state.san, d)
- if state.san == state.sim then state.sim = new end
- local d = node.new(DIR)
- d.dir = '-TLT'
- _, new = node.insert_after(head, state.ean, d)
- if state.ean == state.eim then state.eim = new end
- end
- new_state.san, new_state.ean = nil, nil
- return head, new_state
-end
-
-local function glyph_not_symbol_font(node)
- if node.id == GLYPH then
- return not Babel.symbol_fonts[node.font]
- else
- return false
- end
-end
-
--- TODO - \hbox with an explicit dir can lead to wrong results
--- <R \hbox dir TLT{<R>}> and <L \hbox dir TRT{<L>}>. A small attempt
--- was made to improve the situation, but the problem is the 3-dir
--- model in babel/Unicode and the 2-dir model in LuaTeX don't fit
--- well.
-
-function Babel.bidi(head, ispar, hdir)
- local d -- d is used mainly for computations in a loop
- local prev_d = ''
- local new_d = false
-
- local nodes = {}
- local outer_first = nil
- local inmath = false
-
- local glue_d = nil
- local glue_i = nil
-
- local has_en = false
- local first_et = nil
-
- local has_hyperlink = false
-
- local ATDIR = Babel.attr_dir
- local attr_d, temp
- local locale_d
-
- local save_outer
- local locale_d = node.get_attribute(head, ATDIR)
- if locale_d then
- locale_d = locale_d & 0x3
- save_outer = (locale_d == 0 and 'l') or
- (locale_d == 1 and 'r') or
- (locale_d == 2 and 'al')
- elseif ispar then -- Or error? Shouldn't happen
- save_outer = ('TRT' == tex.pardir) and 'r' or 'l'
- else -- Or error? Shouldn't happen
- save_outer = ('TRT' == hdir) and 'r' or 'l'
- end
- -- when the callback is called, we are just _after_ the box,
- -- and the textdir is that of the surrounding text
- -- if not ispar and hdir ~= tex.textdir then
- -- save_outer = ('TRT' == hdir) and 'r' or 'l'
- -- end
- local outer = save_outer
- local last = outer
- -- 'al' is only taken into account in the first, current loop
- if save_outer == 'al' then save_outer = 'r' end
-
- local fontmap = Babel.fontmap
-
- for item in node.traverse(head) do
-
- -- Mask: DxxxPPTT (Done, Pardir, Textdir)
- locale_d = node.get_attribute(item, ATDIR)
- texio.write_nl(locale_d or '???')
- node.set_attribute(item, ATDIR, 0x80)
-
- -- In what follows, #node is the last (previous) node, because the
- -- current one is not added until we start processing the neutrals.
- -- three cases: glyph, dir, otherwise
- if glyph_not_symbol_font(item)
- or (item.id == 7 and item.subtype == 2) then
-
- if locale_d == 0x80 then goto nextnode end
-
- local d_font = nil
- local item_r
- if item.id == 7 and item.subtype == 2 then
- item_r = item.replace -- automatic discs have just 1 glyph
- else
- item_r = item
- end
-
- local chardata = characters[item_r.char]
- d = chardata and chardata.d or nil
- if not d or d == 'nsm' then
- for nn, et in ipairs(ranges) do
- if item_r.char < et[1] then
- break
- elseif item_r.char <= et[2] then
- if not d then d = et[3]
- elseif d == 'nsm' then d_font = et[3]
- end
- break
- end
- end
- end
- d = d or 'l'
-
- -- A short 'pause' in bidi for mapfont
- -- %%%% TODO. move if fontmap here
- d_font = d_font or d
- d_font = (d_font == 'l' and 0) or
- (d_font == 'nsm' and 0) or
- (d_font == 'r' and 1) or
- (d_font == 'al' and 2) or
- (d_font == 'an' and 2) or nil
- if d_font and fontmap and fontmap[d_font][item_r.font] then
- item_r.font = fontmap[d_font][item_r.font]
- end
-
- if new_d then
- table.insert(
- nodes, {nil, (outer == 'l') and 'l' or 'r', nil, locale_d})
- if inmath then
- attr_d = 0
- else
- attr_d = locale_d & 0x3
- end
- if attr_d == 1 then
- outer_first = 'r'
- last = 'r'
- elseif attr_d == 2 then
- outer_first = 'r'
- last = 'al'
- else
- outer_first = 'l'
- last = 'l'
- end
- outer = last
- has_en = false
- first_et = nil
- new_d = false
- end
-
- if glue_d then
- if (d == 'l' and 'l' or 'r') ~= glue_d then
- table.insert(nodes, {glue_i, 'on', nil, locale_d})
- end
- glue_d = nil
- glue_i = nil
- end
-
- elseif item.id == DIR then
- d = nil
-
- if head ~= item then new_d = true end
-
- elseif item.id == node.id'glue' and item.subtype == 13 then
- glue_d = d
- glue_i = item
- d = nil
-
- elseif item.id == node.id'math' then
- inmath = (item.subtype == 0)
-
- elseif item.id == 8 and item.subtype == 19 then
- has_hyperlink = true
-
- else
- d = nil
- end
-
- -- AL <= EN/ET/ES -- W2 + W3 + W6
- if last == 'al' and d == 'en' then
- d = 'an' -- W3
- elseif last == 'al' and (d == 'et' or d == 'es') then
- d = 'on' -- W6
- end
-
- -- EN + CS/ES + EN -- W4
- if d == 'en' and #nodes >= 2 then
- if (nodes[#nodes][2] == 'es' or nodes[#nodes][2] == 'cs')
- and nodes[#nodes-1][2] == 'en' then
- nodes[#nodes][2] = 'en'
- end
- end
-
- -- AN + CS + AN -- W4 too, because uax9 mixes both cases
- if d == 'an' and #nodes >= 2 then
- if (nodes[#nodes][2] == 'cs')
- and nodes[#nodes-1][2] == 'an' then
- nodes[#nodes][2] = 'an'
- end
- end
-
- -- ET/EN -- W5 + W7->l / W6->on
- if d == 'et' then
- first_et = first_et or (#nodes + 1)
- elseif d == 'en' then
- has_en = true
- first_et = first_et or (#nodes + 1)
- elseif first_et then -- d may be nil here !
- if has_en then
- if last == 'l' then
- temp = 'l' -- W7
- else
- temp = 'en' -- W5
- end
- else
- temp = 'on' -- W6
- end
- for e = first_et, #nodes do
- if glyph_not_symbol_font(nodes[e][1]) then nodes[e][2] = temp end
- end
- first_et = nil
- has_en = false
- end
-
- -- Force mathdir in math if ON (currently works as expected only
- -- with 'l')
-
- if inmath and d == 'on' then
- d = ('TRT' == tex.mathdir) and 'r' or 'l'
- end
-
- if d then
- if d == 'al' then
- d = 'r'
- last = 'al'
- elseif d == 'l' or d == 'r' then
- last = d
- end
- prev_d = d
- table.insert(nodes, {item, d, outer_first, locale_d})
- end
-
- outer_first = nil
-
- ::nextnode::
-
- end -- for each node
-
- -- TODO -- repeated here in case EN/ET is the last node. Find a
- -- better way of doing things:
- if first_et then -- dir may be nil here !
- if has_en then
- if last == 'l' then
- temp = 'l' -- W7
- else
- temp = 'en' -- W5
- end
- else
- temp = 'on' -- W6
- end
- for e = first_et, #nodes do
- if glyph_not_symbol_font(nodes[e][1]) then nodes[e][2] = temp end
- end
- end
-
- -- dummy node, to close things
- table.insert(
- nodes, {nil, (outer == 'l') and 'l' or 'r', nil, locale_d})
-
- --------------- NEUTRAL -----------------
-
- outer = save_outer
- last = outer
-
- local first_on = nil
-
- for q = 1, #nodes do
- local item
-
- local outer_first = nodes[q][3]
- outer = outer_first or outer
- last = outer_first or last
-
- local d = nodes[q][2]
- if d == 'an' or d == 'en' then d = 'r' end
- if d == 'cs' or d == 'et' or d == 'es' then d = 'on' end --- W6
-
- if d == 'on' then
- first_on = first_on or q
- elseif first_on then
- if last == d then
- temp = d
- else
- temp = outer
- end
- for r = first_on, q - 1 do
- nodes[r][2] = temp
- item = nodes[r][1] -- MIRRORING
- if Babel.mirroring_enabled and glyph_not_symbol_font(item)
- and temp == 'r' and characters[item.char] then
- local font_mode = ''
- if item.font > 0 and font.fonts[item.font].properties then
- font_mode = font.fonts[item.font].properties.mode
- end
- if font_mode ~= 'harf' and font_mode ~= 'plug' and
- (nodes[r][4] or 0) & 0x3 > 0 then
- item.char = characters[item.char].m or item.char
- end
- end
- end
- first_on = nil
- end
-
- if d == 'r' or d == 'l' then last = d end
- end
-
- -------------- IMPLICIT, REORDER ----------------
-
- outer = save_outer
- last = outer
-
- local state = {}
- state.has_r = false
-
- for q = 1, #nodes do
-
- local item = nodes[q][1]
-
- outer = nodes[q][3] or outer
-
- local d = nodes[q][2]
-
- if d == 'nsm' then d = last end -- W1
- if d == 'en' then d = 'an' end
- local isdir = (d == 'r' or d == 'l')
-
- if outer == 'l' and d == 'an' then
- state.san = state.san or item
- state.ean = item
- elseif state.san then
- head, state = insert_numeric(head, state)
- end
-
- if outer == 'l' then
- if d == 'an' or d == 'r' then -- im -> implicit
- if d == 'r' then state.has_r = true end
- state.sim = state.sim or item
- state.eim = item
- elseif d == 'l' and state.sim and state.has_r then
- head, state = insert_implicit(head, state, outer)
- elseif d == 'l' then
- state.sim, state.eim, state.has_r = nil, nil, false
- end
- else
- if d == 'an' or d == 'l' then
- if nodes[q][3] then -- nil except after an explicit dir
- state.sim = item -- so we move sim 'inside' the group
- else
- state.sim = state.sim or item
- end
- state.eim = item
- elseif d == 'r' and state.sim then
- head, state = insert_implicit(head, state, outer)
- elseif d == 'r' then
- state.sim, state.eim = nil, nil
- end
- end
-
- if isdir then
- last = d -- Don't search back - best save now
- elseif d == 'on' and state.san then
- state.san = state.san or item
- state.ean = item
- end
-
- end
-
- head = node.prev(head) or head
- --- FIXES ---
- if has_hyperlink then
- local flag, linking = 0, 0
- for item in node.traverse(head) do
- if item.id == DIR then
- if item.dir == '+TRT' or item.dir == '+TLT' then
- flag = flag + 1
- elseif item.dir == '-TRT' or item.dir == '-TLT' then
- flag = flag - 1
- end
- elseif item.id == 8 and item.subtype == 19 then
- linking = flag
- elseif item.id == 8 and item.subtype == 20 then
- if linking > 0 then
- if item.prev.id == DIR and
- (item.prev.dir == '-TRT' or item.prev.dir == '-TLT') then
- d = node.new(DIR)
- d.dir = item.prev.dir
- node.remove(head, item.prev)
- node.insert_after(head, item, d)
- end
- end
- linking = 0
- end
- end
- end
-
- for item in node.traverse_id(10, head) do
- local p = item
- local flag = false
- while p.prev and p.prev.id == 14 do
- flag = true
- p = p.prev
- end
- if flag then
- node.insert_before(head, p, node.copy(item))
- node.remove(head,item)
- end
- end
-
- return head
-end
--- Make sure anything is marked as 'bidi done' (including nodes inserted
--- after the babel algorithm). 128 = 1000 0000.
-function Babel.unset_atdir(head)
- local ATDIR = Babel.attr_dir
- for item in node.traverse(head) do
- node.set_attribute(item, ATDIR, 128)
- end
- return head
-end
Deleted: trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-1.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-1.lua 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel-bidi-basic-1.lua 2025-04-15 19:57:54 UTC (rev 74953)
@@ -1,522 +0,0 @@
---
--- This is file `babel-bidi-basic.lua',
--- generated with the docstrip utility.
---
--- The original source files were:
---
--- babel.dtx (with options: `basic')
---
---
--- Copyright (C) 2012-2025 Javier Bezos and Johannes L. Braams.
--- Copyright (C) 1989-2012 Johannes L. Braams and
--- any individual authors listed elsewhere in this file.
--- All rights reserved.
---
---
--- This file is part of the Babel system.
--- --------------------------------------
---
--- It may be distributed and/or modified under the
--- conditions of the LaTeX Project Public License, either version 1.3
--- of this license or (at your option) any later version.
--- The latest version of this license is in
--- http://www.latex-project.org/lppl.txt
--- and version 1.3 or later is part of all distributions of LaTeX
--- version 2003/12/01 or later.
---
--- This work has the LPPL maintenance status "maintained".
---
--- The Current Maintainer of this work is Javier Bezos.
---
--- The list of derived (unpacked) files belonging to the distribution
--- and covered by LPPL is defined by the unpacking scripts (with
--- extension |.ins|) which are part of the distribution.
---
--- e.g., Babel.fontmap[1][<prefontid>]=<dirfontid>
-
-Babel.fontmap = Babel.fontmap or {}
-Babel.fontmap[0] = {} -- l
-Babel.fontmap[1] = {} -- r
-Babel.fontmap[2] = {} -- al/an
-
--- To cancel mirroring. Also OML, OMS, U?
-Babel.symbol_fonts = Babel.symbol_fonts or {}
-Babel.symbol_fonts[font.id('tenln')] = true
-Babel.symbol_fonts[font.id('tenlnw')] = true
-Babel.symbol_fonts[font.id('tencirc')] = true
-Babel.symbol_fonts[font.id('tencircw')] = true
-
-Babel.bidi_enabled = true
-Babel.mirroring_enabled = true
-
-require('babel-data-bidi.lua')
-
-local characters = Babel.characters
-local ranges = Babel.ranges
-
-local DIR = node.id('dir')
-local GLYPH = node.id('glyph')
-
-local function insert_implicit(head, state, outer)
- local new_state = state
- if state.sim and state.eim and state.sim ~= state.eim then
- dir = ((outer == 'r') and 'TLT' or 'TRT') -- i.e., reverse
- local d = node.new(DIR)
- d.dir = '+' .. dir
- node.insert_before(head, state.sim, d)
- local d = node.new(DIR)
- d.dir = '-' .. dir
- node.insert_after(head, state.eim, d)
- end
- new_state.sim, new_state.eim = nil, nil
- return head, new_state
-end
-
-local function insert_numeric(head, state)
- local new
- local new_state = state
- if state.san and state.ean and state.san ~= state.ean then
- local d = node.new(DIR)
- d.dir = '+TLT'
- _, new = node.insert_before(head, state.san, d)
- if state.san == state.sim then state.sim = new end
- local d = node.new(DIR)
- d.dir = '-TLT'
- _, new = node.insert_after(head, state.ean, d)
- if state.ean == state.eim then state.eim = new end
- end
- new_state.san, new_state.ean = nil, nil
- return head, new_state
-end
-
-local function glyph_not_symbol_font(node)
- if node.id == GLYPH then
- return not Babel.symbol_fonts[node.font]
- else
- return false
- end
-end
-
--- TODO - \hbox with an explicit dir can lead to wrong results
--- <R \hbox dir TLT{<R>}> and <L \hbox dir TRT{<L>}>. A small attempt
--- was made to improve the situation, but the problem is the 3-dir
--- model in babel/Unicode and the 2-dir model in LuaTeX don't fit
--- well.
-
-function Babel.bidi(head, ispar, hdir)
- local d -- d is used mainly for computations in a loop
- local prev_d = ''
- local new_d = false
-
- local nodes = {}
- local outer_first = nil
- local inmath = false
-
- local glue_d = nil
- local glue_i = nil
-
- local has_en = false
- local first_et = nil
-
- local has_hyperlink = false
-
- local ATDIR = Babel.attr_dir
- local attr_d, temp
- local locale_d
-
- local save_outer
- local locale_d = node.get_attribute(head, ATDIR)
- if locale_d then
- locale_d = locale_d & 0x3
- save_outer = (locale_d == 0 and 'l') or
- (locale_d == 1 and 'r') or
- (locale_d == 2 and 'al')
- texio.write_nl('++ ' .. save_outer)
- elseif ispar then -- Or error? Shouldn't happen
- texio.write_nl('++ P')
- save_outer = ('TRT' == tex.pardir) and 'r' or 'l'
- else
- texio.write_nl('++ H') -- Or error? Shouldn't happen
- save_outer = ('TRT' == hdir) and 'r' or 'l'
- end
- -- texio.write('hdir=' .. tex.pardir)
- texio.write(save_outer)
- -- when the callback is called, we are just _after_ the box,
- -- and the textdir is that of the surrounding text
- -- if not ispar and hdir ~= tex.textdir then
- -- save_outer = ('TRT' == hdir) and 'r' or 'l'
- -- end
- local outer = save_outer
- local last = outer
- if head.id == DIR then
- outer = 'l'
- end
- -- 'al' is only taken into account in the first, current loop
- if save_outer == 'al' then save_outer = 'r' end
-
- local fontmap = Babel.fontmap
-
- for item in node.traverse(head) do
-
- -- Mask: DxxxPPTT (Done, Pardir [0-2], Textdir [0-2])
- locale_d = node.get_attribute(item, ATDIR)
- --texio.write_nl('ld=' .. (locale_d or '?'))
- node.set_attribute(item, ATDIR, 0x80)
-
- -- In what follows, #node is the last (previous) node, because the
- -- current one is not added until we start processing the neutrals.
- -- three cases: glyph, dir, otherwise
- if glyph_not_symbol_font(item)
- or (item.id == 7 and item.subtype == 2) then
-
- if locale_d == 0x80 then goto nextnode end
-
- local d_font = nil
- local item_r
- if item.id == 7 and item.subtype == 2 then
- item_r = item.replace -- automatic discs have just 1 glyph
- else
- item_r = item
- end
-
- local chardata = characters[item_r.char]
- d = chardata and chardata.d or nil
- if not d or d == 'nsm' then
- for nn, et in ipairs(ranges) do
- if item_r.char < et[1] then
- break
- elseif item_r.char <= et[2] then
- if not d then d = et[3]
- elseif d == 'nsm' then d_font = et[3]
- end
- break
- end
- end
- end
- d = d or 'l'
-
- -- A short 'pause' in bidi for mapfont
- -- %%%% TODO. move if fontmap here
- d_font = d_font or d
- d_font = (d_font == 'l' and 0) or
- (d_font == 'nsm' and 0) or
- (d_font == 'r' and 1) or
- (d_font == 'al' and 2) or
- (d_font == 'an' and 2) or nil
- if d_font and fontmap and fontmap[d_font][item_r.font] then
- item_r.font = fontmap[d_font][item_r.font]
- end
-
- if new_d then
- table.insert(
- nodes, {nil, (outer == 'l') and 'l' or 'r', nil, locale_d})
- if inmath then
- attr_d = 0
- else
- attr_d = locale_d & 0x3
- end
- if attr_d == 1 then
- outer_first = 'r'
- last = 'r'
- elseif attr_d == 2 then
- outer_first = 'r'
- last = 'al'
- else
- outer_first = 'l'
- last = 'l'
- end
- outer = last
- has_en = false
- first_et = nil
- new_d = false
- end
-
- if glue_d then
- if (d == 'l' and 'l' or 'r') ~= glue_d then
- table.insert(nodes, {glue_i, 'on', nil, locale_d})
- end
- glue_d = nil
- glue_i = nil
- end
-
- elseif item.id == DIR then
- d = nil
-
- if head ~= item then new_d = true end
- -- new_d = true
-
- elseif item.id == node.id'glue' and item.subtype == 13 then
- glue_d = d
- glue_i = item
- d = nil
-
- elseif item.id == node.id'math' then
- inmath = (item.subtype == 0)
-
- elseif item.id == 8 and item.subtype == 19 then
- has_hyperlink = true
-
- else
- d = nil
- end
-
- -- AL <= EN/ET/ES -- W2 + W3 + W6
- if last == 'al' and d == 'en' then
- d = 'an' -- W3
- elseif last == 'al' and (d == 'et' or d == 'es') then
- d = 'on' -- W6
- end
-
- -- EN + CS/ES + EN -- W4
- if d == 'en' and #nodes >= 2 then
- if (nodes[#nodes][2] == 'es' or nodes[#nodes][2] == 'cs')
- and nodes[#nodes-1][2] == 'en' then
- nodes[#nodes][2] = 'en'
- end
- end
-
- -- AN + CS + AN -- W4 too, because uax9 mixes both cases
- if d == 'an' and #nodes >= 2 then
- if (nodes[#nodes][2] == 'cs')
- and nodes[#nodes-1][2] == 'an' then
- nodes[#nodes][2] = 'an'
- end
- end
-
- -- ET/EN -- W5 + W7->l / W6->on
- if d == 'et' then
- first_et = first_et or (#nodes + 1)
- elseif d == 'en' then
- has_en = true
- first_et = first_et or (#nodes + 1)
- elseif first_et then -- d may be nil here !
- if has_en then
- if last == 'l' then
- temp = 'l' -- W7
- else
- temp = 'en' -- W5
- end
- else
- temp = 'on' -- W6
- end
- for e = first_et, #nodes do
- if glyph_not_symbol_font(nodes[e][1]) then nodes[e][2] = temp end
- end
- first_et = nil
- has_en = false
- end
-
- -- Force mathdir in math if ON (currently works as expected only
- -- with 'l')
-
- if inmath and d == 'on' then
- d = ('TRT' == tex.mathdir) and 'r' or 'l'
- end
-
- if d then
- if d == 'al' then
- d = 'r'
- last = 'al'
- elseif d == 'l' or d == 'r' then
- last = d
- end
- prev_d = d
- table.insert(nodes, {item, d, outer_first, locale_d})
- end
-
- outer_first = nil
-
- ::nextnode::
-
- end -- for each node
-
- -- TODO -- repeated here in case EN/ET is the last node. Find a
- -- better way of doing things:
- if first_et then -- dir may be nil here !
- if has_en then
- if last == 'l' then
- temp = 'l' -- W7
- else
- temp = 'en' -- W5
- end
- else
- temp = 'on' -- W6
- end
- for e = first_et, #nodes do
- if glyph_not_symbol_font(nodes[e][1]) then nodes[e][2] = temp end
- end
- end
-
- -- dummy node, to close things
- table.insert(
- nodes, {nil, (outer == 'l') and 'l' or 'r', nil, locale_d})
-
- --------------- NEUTRAL -----------------
-
- outer = save_outer
- last = outer
-
- local first_on = nil
-
- for q = 1, #nodes do
- local item
-
- local outer_first = nodes[q][3]
- outer = outer_first or outer
- last = outer_first or last
-
- local d = nodes[q][2]
- if d == 'an' or d == 'en' then d = 'r' end
- if d == 'cs' or d == 'et' or d == 'es' then d = 'on' end --- W6
-
- if d == 'on' then
- first_on = first_on or q
- elseif first_on then
- if last == d then
- temp = d
- else
- temp = outer
- end
- for r = first_on, q - 1 do
- nodes[r][2] = temp
- item = nodes[r][1] -- MIRRORING
- if Babel.mirroring_enabled and glyph_not_symbol_font(item)
- and temp == 'r' and characters[item.char] then
- local font_mode = ''
- if item.font > 0 and font.fonts[item.font].properties then
- font_mode = font.fonts[item.font].properties.mode
- end
- texio.write_nl('id=' .. node.get_attribute(
- item, Babel.attr_locale) or '?')
- texio.write(' from= ' .. item.char or '?')
- texio.write(' dir=' .. ((nodes[r][4] or 3)))
- texio.write(' nodedir=' .. (nodes[r][2]))
- if font_mode ~= 'harf' and font_mode ~= 'plug' then
- -- if Babel.locale_props[tonumber(node.get_attribute(
- -- item, Babel.attr_locale))].textdir ~= 'x' then
- -- item.char = characters[item.char].m or item.char
- -- end
- -- if (nodes[r][4] or 0) & 0x3 > 0 then
- item.char = characters[item.char].m or item.char
- texio.write(' to= ' .. item.char or '?')
- -- end
- end
- end
- end
- first_on = nil
- end
-
- if d == 'r' or d == 'l' then last = d end
- end
-
- -------------- IMPLICIT, REORDER ----------------
-
- outer = save_outer
- last = outer
-
- local state = {}
- state.has_r = false
-
- for q = 1, #nodes do
-
- local item = nodes[q][1]
-
- outer = nodes[q][3] or outer
-
- local d = nodes[q][2]
-
- if d == 'nsm' then d = last end -- W1
- if d == 'en' then d = 'an' end
- local isdir = (d == 'r' or d == 'l')
-
- if outer == 'l' and d == 'an' then
- state.san = state.san or item
- state.ean = item
- elseif state.san then
- head, state = insert_numeric(head, state)
- end
-
- if outer == 'l' then
- if d == 'an' or d == 'r' then -- im -> implicit
- if d == 'r' then state.has_r = true end
- state.sim = state.sim or item
- state.eim = item
- elseif d == 'l' and state.sim and state.has_r then
- head, state = insert_implicit(head, state, outer)
- elseif d == 'l' then
- state.sim, state.eim, state.has_r = nil, nil, false
- end
- else
- if d == 'an' or d == 'l' then
- if nodes[q][3] then -- nil except after an explicit dir
- state.sim = item -- so we move sim 'inside' the group
- else
- state.sim = state.sim or item
- end
- state.eim = item
- elseif d == 'r' and state.sim then
- head, state = insert_implicit(head, state, outer)
- elseif d == 'r' then
- state.sim, state.eim = nil, nil
- end
- end
-
- if isdir then
- last = d -- Don't search back - best save now
- elseif d == 'on' and state.san then
- state.san = state.san or item
- state.ean = item
- end
-
- end
-
- head = node.prev(head) or head
- --- FIXES ---
- if has_hyperlink then
- local flag, linking = 0, 0
- for item in node.traverse(head) do
- if item.id == DIR then
- if item.dir == '+TRT' or item.dir == '+TLT' then
- flag = flag + 1
- elseif item.dir == '-TRT' or item.dir == '-TLT' then
- flag = flag - 1
- end
- elseif item.id == 8 and item.subtype == 19 then
- linking = flag
- elseif item.id == 8 and item.subtype == 20 then
- if linking > 0 then
- if item.prev.id == DIR and
- (item.prev.dir == '-TRT' or item.prev.dir == '-TLT') then
- d = node.new(DIR)
- d.dir = item.prev.dir
- node.remove(head, item.prev)
- node.insert_after(head, item, d)
- end
- end
- linking = 0
- end
- end
- end
-
- for item in node.traverse_id(10, head) do
- local p = item
- local flag = false
- while p.prev and p.prev.id == 14 do
- flag = true
- p = p.prev
- end
- if flag then
- node.insert_before(head, p, node.copy(item))
- node.remove(head,item)
- end
- end
-
- return head
-end
-function Babel.unset_atdir(head)
- local ATDIR = Babel.attr_dir
- for item in node.traverse(head) do
- node.set_attribute(item, ATDIR, 0x80)
- end
- return head
-end
Modified: trunk/Master/texmf-dist/tex/generic/babel/babel-transforms.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel-transforms.lua 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel-transforms.lua 2025-04-15 19:57:54 UTC (rev 74953)
@@ -59,6 +59,8 @@
return (node.lang == Babel.nohyphenation)
end
+Babel.show_transforms = false
+
-- Merging both functions doesn't seen feasible, because there are too
-- many differences.
Babel.fetch_subtext[0] = function(head)
@@ -118,6 +120,7 @@
if word_string:sub(-1) == ' ' then
word_string = word_string:sub(1,-2)
end
+ if Babel.show_transforms then texio.write_nl(word_string) end
word_string = unicode.utf8.gsub(word_string, Babel.us_char .. '+$', '')
return word_string, word_nodes, item, lang
end
@@ -140,15 +143,15 @@
elseif item.id == 29 then
if item.lang == lang or lang == nil then
- if (item.char ~= 124) and (item.char ~= 61) then -- not =, not |
- lang = lang or item.lang
- if node.has_attribute(item, Babel.attr_hboxed) then
- word_string = word_string .. Babel.us_char
- else
- word_string = word_string .. unicode.utf8.char(item.char)
- end
- word_nodes[#word_nodes+1] = item
+ lang = lang or item.lang
+ if node.has_attribute(item, Babel.attr_hboxed) then
+ word_string = word_string .. Babel.us_char
+ elseif (item.char == 124) or (item.char == 61) then -- not =, not |
+ word_string = word_string .. Babel.us_char
+ else
+ word_string = word_string .. unicode.utf8.char(item.char)
end
+ word_nodes[#word_nodes+1] = item
else
break
end
@@ -185,7 +188,7 @@
item = item.next
end
-
+ if Babel.show_transforms then texio.write_nl(word_string) end
word_string = unicode.utf8.gsub(word_string, Babel.us_char .. '+$', '')
return word_string, word_nodes, item, lang
end
@@ -207,6 +210,10 @@
local word_head = head
+ if Babel.show_transforms then
+ texio.write_nl('\n==== Showing ' .. (mode == 0 and 'pre' or 'post') .. 'hyphenation ====')
+ end
+
while true do -- for each subtext block
local w, w_nodes, nw, lang = Babel.fetch_subtext[mode](word_head)
@@ -497,6 +504,7 @@
end -- for each replacement
+ if Babel.show_transforms then texio.write_nl('> ' .. w) end
if Babel.debug then
print('.....', '/')
Babel.debug_hyph(w, w_nodes, sc, first, last, last_match)
@@ -514,6 +522,8 @@
::next::
word_head = nw
end -- for substring
+
+ if Babel.show_transforms then texio.write_nl(string.rep('-', 32) .. '\n') end
return head
end
Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.def 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.def 2025-04-15 19:57:54 UTC (rev 74953)
@@ -39,7 +39,7 @@
\wlog{File: #1 #4 #3 <#2>}%
\let\ProvidesFile\@undefined}
\fi
-\ProvidesFile{babel.def}[2025/03/27 v25.6 Babel common definitions]
+\ProvidesFile{babel.def}[2025/04/14 v25.7 Babel common definitions]
\ifx\AtBeginDocument\@undefined
\def\@empty{}
\def\loadlocalcfg#1{%
@@ -603,8 +603,8 @@
\toks@\expandafter{\bbl at tempc#3}%
\expandafter\edef\csname extras\languagename\endcsname{\the\toks@}%
\fi}
-\def\bbl at version{25.6}
-\def\bbl at date{2025/03/27}
+\def\bbl at version{25.7}
+\def\bbl at date{2025/04/14}
\ifx\language\@undefined
\csname newcount\endcsname\language
\fi
Modified: trunk/Master/texmf-dist/tex/generic/babel/babel.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/babel.sty 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/babel.sty 2025-04-15 19:57:54 UTC (rev 74953)
@@ -34,7 +34,7 @@
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{babel}%
- [2025/03/27 v25.6
+ [2025/04/14 v25.7
The multilingual framework for pdfLaTeX, LuaLaTeX and XeLaTeX]
\@ifpackagewith{babel}{debug}
{\providecommand\bbl at trace[1]{\message{^^J[ #1 ]}}%
@@ -474,8 +474,8 @@
\expandafter\@secondoftwo
\fi}
\fi
-\def\bbl at version{25.6}
-\def\bbl at date{2025/03/27}
+\def\bbl at version{25.7}
+\def\bbl at date{2025/04/14}
\ifx\language\@undefined
\csname newcount\endcsname\language
\fi
Modified: trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/hyphen.cfg 2025-04-15 19:57:54 UTC (rev 74953)
@@ -37,10 +37,10 @@
\wlog{File: #1 #4 #3 <#2>}%
\let\ProvidesFile\@undefined}
\fi
-\ProvidesFile{hyphen.cfg}[2025/03/27 v25.6 Babel hyphens]
+\ProvidesFile{hyphen.cfg}[2025/04/14 v25.7 Babel hyphens]
\xdef\bbl at format{\jobname}
-\def\bbl at version{25.6}
-\def\bbl at date{2025/03/27}
+\def\bbl at version{25.7}
+\def\bbl at date{2025/04/14}
\ifx\AtBeginDocument\@undefined
\def\@empty{}
\fi
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/cy/babel-cy.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/cy/babel-cy.ini 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/cy/babel-cy.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -9,8 +9,8 @@
[identification]
charset = utf8
-version = 1.4
-date = 2025-01-25
+version = 1.5
+date = 2025-04-07
name.local = Cymraeg
name.english = Welsh
name.babel = welsh
@@ -38,7 +38,7 @@
listtable = Rhestr Dablau
index = Mynegai
figure = Darlun
-table = Taflen
+table = Tabl
part = Rhan
encl = amgaeëdig
cc = copïau
Added: trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-ancienthebrew.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-ancienthebrew.tex (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-ancienthebrew.tex 2025-04-15 19:57:54 UTC (rev 74953)
@@ -0,0 +1,13 @@
+% This file is part of babel. For further details see:
+% https://www.ctan.org/pkg/babel
+\ifx\BabelBeforeIni\undefined
+ \PackageError{babel}%
+ {This file is a component of babel and cannot\MessageBreak
+ be loaded directly. I'll stop immediately}%
+ {Just use babel as documented.}%
+ \stop
+\fi
+\BabelBeforeIni{hbo}{%
+}
+
+\endinput
\ No newline at end of file
Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-ancienthebrew.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-hbo.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-hbo.ini (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-hbo.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -0,0 +1,127 @@
+; This file is part of babel. For further details see:
+; https://www.ctan.org/pkg/babel
+; Data has been collected mainly from the following sources:
+; * babel language styles (license LPPL):
+; https://www.ctan.org/pkg/babel-contrib
+; * Common Locale Data Repository (license Unicode):
+; http://cldr.unicode.org/
+; http://unicode.org/copyright.html
+
+[identification]
+charset = utf8
+version = 0.1
+date = 2025-04-07
+name.local = לְשׁוֹן הַמִּקְרָא
+name.english = Ancient Hebrew
+name.babel = ancienthebrew
+tag.bcp47 = hbo
+language.tag.bcp47 = hbo
+tag.bcp47.likely = hbo-Hebr-IL
+tag.opentype = IWR
+script.name = Hebrew
+script.tag.bcp47 = Hebr
+script.tag.opentype = hebr
+level = 1
+encodings =
+derivate = no
+warning = This is a bare minimum locale for 'ancienthebrew'.
+require.babel = hebrew
+
+[captions]
+; xetex, luatex
+preface =
+ref =
+abstract =
+bib =
+chapter =
+appendix =
+contents =
+listfigure =
+listtable =
+index =
+figure =
+table =
+part =
+encl =
+cc =
+headto =
+page =
+see =
+also =
+proof =
+glossary =
+
+[captions.licr]
+; pdftex
+preface =
+ref =
+abstract =
+bib =
+chapter =
+appendix =
+contents =
+listfigure =
+listtable =
+index =
+figure =
+table =
+part =
+encl =
+cc =
+headto =
+page =
+see =
+also =
+proof =
+glossary =
+
+[date.gregorian]
+date.long = [d][ ][MMMM] [y]
+date.short = [y]-[MM]-[dd]
+months.wide.1 =
+months.wide.2 =
+months.wide.3 =
+months.wide.4 =
+months.wide.5 =
+months.wide.6 =
+months.wide.7 =
+months.wide.8 =
+months.wide.9 =
+months.wide.10 =
+months.wide.11 =
+months.wide.12 =
+
+[date.gregorian.licr]
+months.wide.1 =
+months.wide.2 =
+months.wide.3 =
+months.wide.4 =
+months.wide.5 =
+months.wide.6 =
+months.wide.7 =
+months.wide.8 =
+months.wide.9 =
+months.wide.10 =
+months.wide.11 =
+months.wide.12 =
+
+[time.gregorian]
+time.medium = [HH]:[mm]:[ss]
+time.short = [HH]:[mm]
+
+[typography]
+frenchspacing = yes
+hyphenrules =
+lefthyphenmin =
+righthyphenmin =
+hyphenchar =
+prehyphenchar =
+posthyphenchar =
+exhyphenchar =
+preexhyphenchar =
+postexhyphenchar =
+hyphenationmin =
+
+;
+ at include = Hebr
+;
Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/hbo/babel-hbo.ini
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/he/babel-he.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/he/babel-he.ini 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/he/babel-he.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -10,8 +10,8 @@
[identification]
charset = utf8
-version = 1.11
-date = 2024-08-11
+version = 1.12
+date = 2025-04-12
name.local = עברית
name.english = Hebrew
name.babel = hebrew
@@ -211,37 +211,6 @@
plusSign = +
superscriptingExponent = ×
-[counters]
-letters.1 = א ב ג ד ה ו ז ח ט
-letters.2 = י כ ל מ נ ס ע פ צ
-letters.F.15 = טו
-letters.F.16 = טז
-letters.F.17 = יז
-letters.F.18 = יח
-letters.F.19 = יט
-letters.3 = ק ר ש ת תק תר תש תת תתק
-letters.4 = א׳ ב׳ ג׳ ד׳ ה׳ ו׳ ז׳ ח׳ ט׳
-
-[transforms.prehyphenation]
-transliteration.cj.1.0 = { ([aAE]): }
-transliteration.cj.1.1 = { string = {1|aAE|ֱֲֳ} }
-transliteration.cj.1.2 = { remove }
-transliteration.cj.2.0 = { ([/{+}])s }
-transliteration.cj.2.1 = { string = {1|/{002C}+|ששׂשׁ} }
-transliteration.cj.2.2 = { remove }
-transliteration.cj.3.0 = { {-}{-} }
-transliteration.cj.3.1 = { string = ־ }
-transliteration.cj.3.2 = { remove }
-transliteration.cj.4.0 = { {.}([htsS]) }
-transliteration.cj.4.1 = { remove }
-transliteration.cj.4.2 = { string = {1|htsS|חטצץ} }
-transliteration.cj.5.0 = { /a({a}) }
-transliteration.cj.5.1 = { remove }
-transliteration.cj.5.2 = { string = {1} }
-transliteration.cj.5.3 = { string = ַ}
-transliteration.cj.6.0 = { w([o{*}]) }
-transliteration.cj.6.1 = { string = {1|o*|וֹוּ} }
-transliteration.cj.7.0 = { ([aAbdeEghikKlmMnNoOpPqrstuUwyz{*}:'’`‘;]) }
-transliteration.cj.7.1 = { string = {1|aAbdeEghikKlmMnNoOpPqrstuUwyz*:'’`‘;|ַָבדֵֶגהִכךלמםנןֹוֹפףקרסתֻוּויזְּאאעע׃} }
-
-
+;
+ at include = Hebr
+;
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/lad/babel-lad.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/lad/babel-lad.ini 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/lad/babel-lad.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -7,8 +7,8 @@
[identification]
charset = utf8
-version = 0.3
-date = 2023-10-06
+version = 0.4
+date = 2025-04-12
name.local = Ladino
name.english = Ladino
name.babel = ladino
@@ -120,35 +120,6 @@
postexhyphenchar =
hyphenationmin =
-[counters]
-letters.1 = א ב ג ד ה ו ז ח ט
-letters.2 = י כ ל מ נ ס ע פ צ
-letters.F.15 = טו
-letters.F.16 = טז
-letters.F.17 = יז
-letters.F.18 = יח
-letters.F.19 = יט
-letters.3 = ק ר ש ת תק תר תש תת תתק
-letters.4 = א׳ ב׳ ג׳ ד׳ ה׳ ו׳ ז׳ ח׳ ט׳
-
-[transforms.prehyphenation]
-transliteration.cj.1.0 = { ([aAE]): }
-transliteration.cj.1.1 = { string = {1|aAE|ֱֲֳ} }
-transliteration.cj.1.2 = { remove }
-transliteration.cj.2.0 = { ([/{+}])s }
-transliteration.cj.2.1 = { string = {1|/{002C}+|ששׂשׁ} }
-transliteration.cj.2.2 = { remove }
-transliteration.cj.3.0 = { {-}{-} }
-transliteration.cj.3.1 = { string = ־ }
-transliteration.cj.3.2 = { remove }
-transliteration.cj.4.0 = { {.}([htsS]) }
-transliteration.cj.4.1 = { remove }
-transliteration.cj.4.2 = { string = {1|htsS|חטצץ} }
-transliteration.cj.5.0 = { /a({a}) }
-transliteration.cj.5.1 = { remove }
-transliteration.cj.5.2 = { string = {1} }
-transliteration.cj.5.3 = { string = ַ}
-transliteration.cj.6.0 = { w([o{*}]) }
-transliteration.cj.6.1 = { string = {1|o*|וֹוּ} }
-transliteration.cj.7.0 = { ([aAbdeEghikKlmMnNoOpPqrstuUwyz{*}:'’`‘;]) }
-transliteration.cj.7.1 = { string = {1|aAbdeEghikKlmMnNoOpPqrstuUwyz*:'’`‘;|ַָבדֵֶגהִכךלמםנןֹוֹפףקרסתֻוּויזְּאאעע׃} }
+;
+ at include = Hebr
+;
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Arab.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Arab.ini 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Arab.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -46,4 +46,6 @@
kashida.base.3.0 = { [يئهشسقفغعضصنمكلظطخحجثتب][ًٍَُِّ]()[ًٍَُِّ]()[يئهشسقفغعضصنمكلظطخحجثتباأإآوؤذدزرة] }
kashida.base.3.1 = { kashida = 500 }
kashida.base.4.0 = { ()ل()[ًٍَُِّ]*[اأإآ] }
-kashida.base.4.1 = { kashida = 0 }
\ No newline at end of file
+kashida.base.4.1 = { kashida = 0 }
+kashida.base.5.0 = { ل()[ًٍَُِّ]()[اأإآ] }
+kashida.base.5.1 = { kashida = 0 }
\ No newline at end of file
Added: trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Hebr.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Hebr.ini (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Hebr.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -0,0 +1,36 @@
+; This file is part of babel. For further details see:
+; https://www.ctan.org/pkg/babel
+
+[counters]
+letters.1 = א ב ג ד ה ו ז ח ט
+letters.2 = י כ ל מ נ ס ע פ צ
+letters.F.15 = טו
+letters.F.16 = טז
+letters.F.17 = יז
+letters.F.18 = יח
+letters.F.19 = יט
+letters.3 = ק ר ש ת תק תר תש תת תתק
+letters.4 = א׳ ב׳ ג׳ ד׳ ה׳ ו׳ ז׳ ח׳ ט׳
+
+[transforms.prehyphenation]
+transliteration.cj.1.0 = { ([aAE]): }
+transliteration.cj.1.1 = { string = {1|aAE|ֱֲֳ} }
+transliteration.cj.1.2 = { remove }
+transliteration.cj.2.0 = { ([/{+}])s }
+transliteration.cj.2.1 = { string = {1|/{002C}+|ששׂשׁ} }
+transliteration.cj.2.2 = { remove }
+transliteration.cj.3.0 = { {-}{-} }
+transliteration.cj.3.1 = { string = ־ }
+transliteration.cj.3.2 = { remove }
+transliteration.cj.4.0 = { {.}([htsS]) }
+transliteration.cj.4.1 = { remove }
+transliteration.cj.4.2 = { string = {1|htsS|חטצץ} }
+transliteration.cj.5.0 = { /a({a}) }
+transliteration.cj.5.1 = { remove }
+transliteration.cj.5.2 = { string = {1} }
+transliteration.cj.5.3 = { string = ַ}
+transliteration.cj.6.0 = { w([o{*}]) }
+transliteration.cj.6.1 = { string = {1|o*|וֹוּ} }
+transliteration.cj.7.0 = { ([aAbdeEghikKlmMnNoOpPqrstuUwyz{*}:'’`‘;]) }
+transliteration.cj.7.1 = { string = {1|aAbdeEghikKlmMnNoOpPqrstuUwyz*:'’`‘;|ַָבדֵֶגהִכךלמםנןֹוֹפףקרסתֻוּויזְּאאעע׃} }
+
Property changes on: trunk/Master/texmf-dist/tex/generic/babel/locale/shared/babel-Hebr.ini
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/babel/locale/yi/babel-yi.ini
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/locale/yi/babel-yi.ini 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/locale/yi/babel-yi.ini 2025-04-15 19:57:54 UTC (rev 74953)
@@ -9,8 +9,8 @@
[identification]
charset = utf8
-version = 1.9
-date = 2023-10-06
+version = 1.10
+date = 2025-04-12
name.local = ייִדיש
name.english = Yiddish
name.babel = yiddish
@@ -176,35 +176,6 @@
plusSign = +
superscriptingExponent = ×
-[counters]
-letters.1 = א ב ג ד ה ו ז ח ט
-letters.2 = י כ ל מ נ ס ע פ צ
-letters.F.15 = טו
-letters.F.16 = טז
-letters.F.17 = יז
-letters.F.18 = יח
-letters.F.19 = יט
-letters.3 = ק ר ש ת תק תר תש תת תתק
-letters.4 = א׳ ב׳ ג׳ ד׳ ה׳ ו׳ ז׳ ח׳ ט׳
-
-[transforms.prehyphenation]
-transliteration.cj.1.0 = { ([aAE]): }
-transliteration.cj.1.1 = { string = {1|aAE|ֱֲֳ} }
-transliteration.cj.1.2 = { remove }
-transliteration.cj.2.0 = { ([/{+}])s }
-transliteration.cj.2.1 = { string = {1|/{002C}+|ששׂשׁ} }
-transliteration.cj.2.2 = { remove }
-transliteration.cj.3.0 = { {-}{-} }
-transliteration.cj.3.1 = { string = ־ }
-transliteration.cj.3.2 = { remove }
-transliteration.cj.4.0 = { {.}([htsS]) }
-transliteration.cj.4.1 = { remove }
-transliteration.cj.4.2 = { string = {1|htsS|חטצץ} }
-transliteration.cj.5.0 = { /a({a}) }
-transliteration.cj.5.1 = { remove }
-transliteration.cj.5.2 = { string = {1} }
-transliteration.cj.5.3 = { string = ַ}
-transliteration.cj.6.0 = { w([o{*}]) }
-transliteration.cj.6.1 = { string = {1|o*|וֹוּ} }
-transliteration.cj.7.0 = { ([aAbdeEghikKlmMnNoOpPqrstuUwyz{*}:'’`‘;]) }
-transliteration.cj.7.1 = { string = {1|aAbdeEghikKlmMnNoOpPqrstuUwyz*:'’`‘;|ַָבדֵֶגהִכךלמםנןֹוֹפףקרסתֻוּויזְּאאעע׃} }
+;
+ at include = Hebr
+;
\ No newline at end of file
Modified: trunk/Master/texmf-dist/tex/generic/babel/luababel.def
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/luababel.def 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/luababel.def 2025-04-15 19:57:54 UTC (rev 74953)
@@ -1054,7 +1054,8 @@
{0x20000, 0x2A6DF}, {0x2A700, 0x2B73F},
{0x2B740, 0x2B81F}, {0x2B820, 0x2CEAF},
{0x2CEB0, 0x2EBEF}, {0x2F800, 0x2FA1F}},
- ['Hebr'] = {{0x0590, 0x05FF}},
+ ['Hebr'] = {{0x0590, 0x05FF},
+ {0xFB1F, 0xFB4E}}, % <- Includes some <reserved>
['Jpan'] = {{0x3000, 0x303F}, {0x3040, 0x309F}, {0x30A0, 0x30FF},
{0x4E00, 0x9FAF}, {0xFF00, 0xFFEF}},
['Khmr'] = {{0x1780, 0x17FF}, {0x19E0, 0x19FF}},
@@ -1399,6 +1400,14 @@
\directlua{
Babel.locale_props[\the\csname bbl at id@@#1\endcsname].vars["#2"] = #3
}}
+\newcommand\ShowBabelTransforms[1]{%
+ \bbl at activateprehyphen
+ \bbl at activateposthyphen
+ \begingroup
+ \directlua{ Babel.show_transforms = true }%
+ \setbox\z@\vbox{#1}%
+ \directlua{ Babel.show_transforms = false }%
+ \endgroup}
\newcommand\localeprehyphenation[1]{%
\directlua{ Babel.string_prehyphenation([==[#1]==], \the\localeid) }}
\def\bbl at activate@preotf{%
Modified: trunk/Master/texmf-dist/tex/generic/babel/nil.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel/nil.ldf 2025-04-15 17:54:06 UTC (rev 74952)
+++ trunk/Master/texmf-dist/tex/generic/babel/nil.ldf 2025-04-15 19:57:54 UTC (rev 74953)
@@ -32,7 +32,7 @@
%% and covered by LPPL is defined by the unpacking scripts (with
%% extension |.ins|) which are part of the distribution.
%%
-\ProvidesLanguage{nil}[2025/03/27 v25.6 Nil language]
+\ProvidesLanguage{nil}[2025/04/14 v25.7 Nil language]
\LdfInit{nil}{datenil}
\ifx\l at nil\@undefined
\newlanguage\l at nil
More information about the tex-live-commits
mailing list.