diff options
author | Norbert Preining <norbert@preining.info> | 2023-11-12 03:02:06 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-11-12 03:02:06 +0000 |
commit | 5ee22d8ea7f225ba59142a53f0387a2bccc22dde (patch) | |
tree | 63ca211ff5ff12c7f756ac8a197726c314eb980b /macros/latex/required/babel | |
parent | e4ccc7921b6518e670428990524161b3ddbfebd2 (diff) |
CTAN sync 202311120302
Diffstat (limited to 'macros/latex/required/babel')
-rw-r--r-- | macros/latex/required/babel/base/README.md | 17 | ||||
-rw-r--r-- | macros/latex/required/babel/base/babel-code.pdf | bin | 635805 -> 641895 bytes | |||
-rw-r--r-- | macros/latex/required/babel/base/babel.dtx | 240 | ||||
-rw-r--r-- | macros/latex/required/babel/base/babel.ins | 2 | ||||
-rw-r--r-- | macros/latex/required/babel/base/babel.pdf | bin | 413338 -> 417319 bytes | |||
-rw-r--r-- | macros/latex/required/babel/base/bbcompat.dtx | 2 |
6 files changed, 232 insertions, 29 deletions
diff --git a/macros/latex/required/babel/base/README.md b/macros/latex/required/babel/base/README.md index 3373157bb6..2957d780bb 100644 --- a/macros/latex/required/babel/base/README.md +++ b/macros/latex/required/babel/base/README.md @@ -1,6 +1,6 @@ -## Babel 3.96 +## Babel 3.97 -2023-10-25 +2023-11-11 This package manages culturally-determined typographical (and other) rules, and hyphenation patterns for a wide range of languages. Many @@ -10,9 +10,9 @@ is a set of ini files for about 275 languages. The latest stable version is available on <https://ctan.org/pkg/babel>. -Changes in version 3.96 are described in: +Changes in version 3.97 are described in: -https://latex3.github.io/babel/news/whats-new-in-babel-3.96.html +https://latex3.github.io/babel/news/whats-new-in-babel-3.97.html Apart from the manual, you can find information on some aspects of babel at: @@ -48,12 +48,9 @@ respective authors. ### Summary of latest changes ``` -3.96 2023-10-25 - * Added LGI to non-ASCII encodings. - * New macro: \asciiencoding. - * Removed OT1 in some ini files. - * Improved support for Odia (thanks to @avisekjena). - * Transform 'hyphen.repeat' in Croatian. +3.97 2023-11-11 + * Support for 'interchar' (xetex). + * New locale for Buriat, thanks to J. Khaganov. ``` ### Previous changes diff --git a/macros/latex/required/babel/base/babel-code.pdf b/macros/latex/required/babel/base/babel-code.pdf Binary files differindex 7d0d603a36..130befcb9e 100644 --- a/macros/latex/required/babel/base/babel-code.pdf +++ b/macros/latex/required/babel/base/babel-code.pdf diff --git a/macros/latex/required/babel/base/babel.dtx b/macros/latex/required/babel/base/babel.dtx index 8346f33f4b..4345b09198 100644 --- a/macros/latex/required/babel/base/babel.dtx +++ b/macros/latex/required/babel/base/babel.dtx @@ -32,7 +32,7 @@ % % \iffalse %<*filedriver> -\ProvidesFile{babel.dtx}[2023/10/25 v3.96 The Babel package] +\ProvidesFile{babel.dtx}[2023/11/11 v3.97 The Babel package] \documentclass{ltxdoc} \GetFileInfo{babel.dtx} \usepackage{fontspec} @@ -271,10 +271,11 @@ are also some notes on its use with e-Plain and pdf-Plain \TeX. \item[\sffamily\color{messages}What if I’m interested only in the latest changes?] Changes and new features with relation to version 3.8 -are highlighted with \New{X.XX}\hspace{-.5em}, and there are some notes -for the latest versions in -\href{https://latex3.github.io/babel/}{the -\babel{} site}. The most recent features can be still unstable. +are highlighted with \New{X.XX}\hspace{-.5em} +(\raisebox{.15ex}{$\oplus$} is a link to the \babel{} site), and there +are some notes for the latest versions in +\href{https://latex3.github.io/babel/}{the \babel{} site}. The most +recent features can be still unstable. \item[\sffamily\color{messages}Can I help?] Sure! If you are interested in the \TeX{} multilingual support, please join the @@ -2852,7 +2853,6 @@ languages. They are (from \textsf{interface3.pdf}): \makebox[\linewidth][c]{*\qquad*\qquad*} \smallskip - A few options (only \luatex) set some properties of the writing system used by the language. These properties are \textit{always} applied to the script, no matter which language is active. Although somewhat @@ -3772,6 +3772,73 @@ This feature is activated with the first |\babelposthyphenation| or \New{3.85} Enables and disables the transform with the given label in the current language. +\subsection{Support for \xetex{} interchar} + +\New{3.97} A few macros are provided to deal with locale dependent +inter-character rules (aka ‘interchar’). + +\Describe{\babelcharclass}{\marg{locale}\marg{name}\marg{char-list}} + +Declares a new character class, which is assigned to the characters in +\marg{char-list}, entered either as characters or in macro form +(eg,~|\}|). If you need to enter them by their numeric value, use the +\TeX{} |^|-notation (eg,~|^^^^1fa0|). Ranges are allowed, with a +hyphen (eg,~|.,;a-zA-Z|). If you need the hyphen to be assigned a +class, write it at the very beginning of the list. + +There are several predefined ‘global’ classes, namely +|default|, |cjkideogram|, |cjkleftpunctuation|, |cjkrightpunctuation|, +|boundary|, and |ignore|, which are described in the \xetex{} manual +(currently CJK classes are ‘empty’, but they will be assigned in a +future release). + +\Describe{\babelinterchar}{\oarg{options}\marg{locale} + \marg{class-first}\marg{class-second}\marg{code}} + +\marg{class-first} and \marg{class-second} can be comma separated lists +of char classes, and all combinations are defined (so that 2 first +classes with 2 second classes, define 4 combinations). In the +\marg{options} field a key named |label| is available, which allows to +enable or to disable the rule with the following two commands. Like +prehyphenation transforms in \luatex{}, interchars are not applied if the +current hyphenation rules are |nohyphenation|. + +\Describe{\enablelocaleinterchar}{\marg{label}} +\DescribeOther{\disablelocaleinterchar}{\marg{label}} + +Enable or disable the interchar rules with the given label for the +current language. + +\begin{example} + Not very useful, but illustrative (taken from the unfortunately + obsolete \textsf{interchar} package, by Zou Ho), to colorize the + letters ‘x’ and ‘y’ (this way to group text is usually not a + good idea, however). +\begin{verbatim} +\usepackage{color} +\babelcharclass{english}{colored}{xy} +\babelinterchar{english}{default, boundary}{colored}{\bgroup\color{red}} +\babelinterchar{english}{colored}{default, boundary}{\egroup} +\end{verbatim} + A more realistic example follows, which inserts a thin space + between a digit and a percent sign. Note the former is entered as a + range, and the latter in command form: +\begin{verbatim} +\babelcharclass{english}{digit}{0-9} +\babelcharclass{english}{percent}{\%} +\babelinterchar[label=percent]{english}{digit}{percent}{\,} +\end{verbatim} +\end{example} + +\begin{warning} + Keep in mind two points: (1) a character can be assigned a single + class; this is a limitation in the interchar mechanims that often + leads to incompatibilities; (2) since the character classes set with + |\babelcharclass| are saved (so that they can be restored), there is a + limit in the number of characters in the \marg{char-list} (which, + however, must be large enough for many uses). +\end{warning} + \subsection{Selection based on BCP 47 tags} \label{bcp47} @@ -4462,7 +4529,7 @@ ibygreek, bgreek, serbianc, frenchle, ethiop} and \textsf{friulan}. (\textsf{portuguese}), \textsf{brazil} (\textsf{brazilian}), \textsf{russianb} (\textsf{russian}), \textsf{usorbian} (\textsf{uppersorbian}), \textsf{vietnam} (\textsf{vietnamese}), - \textsf{northernsami} (\textsf{samin}), \textsf{ukraineb} + \textsf{samin} (\textsf{northernsami}), \textsf{ukraineb} (\textsf{ukrainian}). Deprecated names come in many cases from the times when they had to be shortened to 8 characters. \end{note} @@ -5563,8 +5630,8 @@ wouldn’t exist. % \section{Tools} % % \begin{macrocode} -%<<version=3.96>> -%<<date=2023/10/25>> +%<<version=3.97>> +%<<date=2023/11/11>> % \end{macrocode} % % \textbf{Do not use the following macros in \texttt{ldf} files. They @@ -5757,7 +5824,7 @@ wouldn’t exist. \bbl@trim{\expandafter\bbl@kvcmd\expandafter{\bbl@forkv@a}}{#2}{#4}} % \end{macrocode} % -% A \textit{for} loop. Each item (trimmed), is |#1|. It cannot be +% A \textit{for} loop. Each item (trimmed) is |#1|. It cannot be % nested (it's doable, but we don't need it). % % \begin{macrocode} @@ -13626,9 +13693,9 @@ wouldn’t exist. % % \subsection{XeTeX} % -% Unfortunately, the current encoding cannot be retrieved and -% therefore it is reset always to |utf8|, which seems a sensible -% default. +% Unfortunately, the current encoding cannot be retrieved and +% therefore it is reset always to |utf8|, which seems a sensible +% default. % % \begin{macrocode} %<<*Footnote changes>> @@ -13747,6 +13814,145 @@ wouldn’t exist. \DisableBabelHook{babel-fontspec} <@Font selection@> \def\bbl@provide@extra#1{} +% \end{macrocode} +% +% \section{Support for interchar} +% +% \xetex{} reserves some values for CJK (although they are not set in +% \textsc{xelatex}), so we make sure they are skipped. Define some user +% names for the global classes, too. +% +% \begin{macrocode} +\ifnum\xe@alloc@intercharclass<\thr@@ + \xe@alloc@intercharclass\thr@@ +\fi +\chardef\bbl@xeclass@default@=\z@ +\chardef\bbl@xeclass@cjkideogram@=\@ne +\chardef\bbl@xeclass@cjkleftpunctuation@=\tw@ +\chardef\bbl@xeclass@cjkrightpunctuation@=\thr@@ +\chardef\bbl@xeclass@boundary@=4095 +\chardef\bbl@xeclass@ignore@=4096 +% \end{macrocode} +% +% The machinery is activated with a hook (enabled only if actually +% used). Here |\bbl@tempc| is pre-set with |\bbl@usingxeclass|, defined +% below. The standard mechanism based on |\originalTeX| to save, set +% and restore values is used. |\count@| stores the previous char to be +% set, except at the beginning (0) and after |\bbl@upto|, which is the +% previous char negated, as a flag to mark a range. +% +% \begin{macrocode} +\AddBabelHook{babel-interchar}{beforeextras}{% + \@nameuse{bbl@xechars@\languagename}} +\DisableBabelHook{babel-interchar} +\protected\def\bbl@charclass#1{% + \ifnum\count@<\z@ + \count@-\count@ + \loop + \bbl@exp{% + \\\babel@savevariable{\XeTeXcharclass`\Uchar\count@}}% + \XeTeXcharclass\count@ \bbl@tempc + \ifnum\count@<`#1\relax + \advance\count@\@ne + \repeat + \else + \babel@savevariable{\XeTeXcharclass`#1}% + \XeTeXcharclass`#1 \bbl@tempc + \fi + \count@`#1\relax} +% \end{macrocode} +% +% Now the two user macros. Char classes are declared implicitly, and +% then the macro to be executed at the |babel-interchar| hook is +% created. The list of chars to be handled by the hook defined above +% has internally the form +% |\bbl@usingxeclass\bbl@xeclass@punct@english||\bbl@charclass{.}|% +% |\bbl@charclass{,}| (etc.), where |\bbl@usingxeclass| stores the class to be +% applied to the subsequent characters. The \cs{ifcat} part deals with +% the alternative way to enter characters as macros (eg, |\}|). As a +% special case, hyphens are stored as |\bbl@upto|, to deal with ranges. +% +% \begin{macrocode} +\newcommand\babelcharclass[3]{% + \EnableBabelHook{babel-interchar}% + \bbl@csarg\newXeTeXintercharclass{xeclass@#2@#1}% + \def\bbl@tempb##1{% + \ifx##1\@empty\else + \ifx##1-% + \bbl@upto + \else + \bbl@charclass{% + \ifcat\noexpand##1\relax\bbl@stripslash##1\else\string##1\fi}% + \fi + \expandafter\bbl@tempb + \fi}% + \bbl@ifunset{bbl@xechars@#1}% + {\toks@{% + \babel@savevariable\XeTeXinterchartokenstate + \XeTeXinterchartokenstate\@ne + }}% + {\toks@\expandafter\expandafter\expandafter{% + \csname bbl@xechars@#1\endcsname}}% + \bbl@csarg\edef{xechars@#1}{% + \the\toks@ + \bbl@usingxeclass\csname bbl@xeclass@#2@#1\endcsname + \bbl@tempb#3\@empty}} +\protected\def\bbl@usingxeclass#1{\count@\z@ \let\bbl@tempc#1} +\protected\def\bbl@upto{% + \ifnum\count@>\z@ + \advance\count@\@ne + \count@-\count@ + \else\ifnum\count@=\z@ + \bbl@charclass{-}% + \else + \bbl@error{Double hyphens aren't allowed in \string\babelcharclass\\% + because it's potentially ambiguous}% + {See the manual for further info}% + \fi\fi} +% \end{macrocode} +% +% And finally, the command with the code to be inserted. If the language +% doesn’t define a class, then use the global one, as defined above. +% For the definition there is a intermediate macro, which can be +% ‘disabled’ with |\bbl@ic@<label>@<lang>|. +% +% \begin{macrocode} +\newcommand\babelinterchar[5][]{% + \let\bbl@kv@label\@empty + \bbl@forkv{#1}{\bbl@csarg\edef{kv@##1}{##2}}% + \@namedef{\zap@space bbl@xeinter@\bbl@kv@label @#3@#4@#2 \@empty}% + {\ifnum\language=\l@nohyphenation + \expandafter\@gobble + \else + \expandafter\@firstofone + \fi + {#5}}% + \bbl@csarg\let{ic@\bbl@kv@label @#2}\@firstofone + \bbl@exp{\\\bbl@for\\\bbl@tempa{\zap@space#3 \@empty}}{% + \bbl@exp{\\\bbl@for\\\bbl@tempb{\zap@space#4 \@empty}}{% + \XeTeXinterchartoks + \@nameuse{bbl@xeclass@\bbl@tempa @% + \bbl@ifunset{bbl@xeclass@\bbl@tempa @#2}{}{#2}} + \@nameuse{bbl@xeclass@\bbl@tempb @% + \bbl@ifunset{bbl@xeclass@\bbl@tempb @#2}{}{#2}} + = \expandafter{% + \csname bbl@ic@\bbl@kv@label @#2\expandafter\endcsname + \csname\zap@space bbl@xeinter@\bbl@kv@label + @#3@#4@#2 \@empty\endcsname}}}} +\DeclareRobustCommand\enablelocaleinterchar[1]{% + \bbl@ifunset{bbl@ic@#1@\languagename}% + {\bbl@error + {'#1' for '\languagename' cannot be enabled.\\% + Maybe there is a typo.}% + {See the manual for further details.}}% + {\bbl@csarg\let{ic@#1@\languagename}\@firstofone}} +\DeclareRobustCommand\disablelocaleinterchar[1]{% + \bbl@ifunset{bbl@ic@#1@\languagename}% + {\bbl@error + {'#1' for '\languagename' cannot be disabled.\\% + Maybe there is a typo.}% + {See the manual for further details.}}% + {\bbl@csarg\let{ic@#1@\languagename}\@gobble}} %</xetex> % \end{macrocode} % @@ -14227,7 +14433,7 @@ wouldn’t exist. end } \endgroup -\ifx\newattribute\@undefined\else +\ifx\newattribute\@undefined\else % Test for plain \newattribute\bbl@attr@locale \directlua{ Babel.attr_locale = luatexbase.registernumber'bbl@attr@locale' } \AddBabelHook{luatex}{beforeextras}{% @@ -14779,7 +14985,7 @@ function Babel.arabic.justify_hlist(head, line, gc, size, pack) width = node.dimensions(line.head) % The 'natural' width k_curr = #k_list % Traverse backwards, from the end wt_pos = 1 - + while width < goal do subst_done = true k_item = k_list[k_curr].node @@ -15007,14 +15213,14 @@ end \else \bbl@error{\string\babelcharproperty\space can be used only in\\% vertical mode (preamble or between paragraphs)}% - {See the manual for futher info}% + {See the manual for further info}% \fi} \newcommand\bbl@chprop[3][\the\count@]{% \@tempcnta=#1\relax \bbl@ifunset{bbl@chprop@#2}% {\bbl@error{No property named '#2'. Allowed values are\\% direction (bc), mirror (bmg), and linebreak (lb)}% - {See the manual for futher info}}% + {See the manual for further info}}% {}% \loop \bbl@cs{chprop@#2}{#3}% diff --git a/macros/latex/required/babel/base/babel.ins b/macros/latex/required/babel/base/babel.ins index b08918afa2..b47775f117 100644 --- a/macros/latex/required/babel/base/babel.ins +++ b/macros/latex/required/babel/base/babel.ins @@ -26,7 +26,7 @@ %% and covered by LPPL is defined by the unpacking scripts (with %% extension .ins) which are part of the distribution. %% -\def\filedate{2023/10/25} +\def\filedate{2023/11/11} \def\batchfile{babel.ins} \input docstrip.tex diff --git a/macros/latex/required/babel/base/babel.pdf b/macros/latex/required/babel/base/babel.pdf Binary files differindex 4d1628d7d1..da4b04f928 100644 --- a/macros/latex/required/babel/base/babel.pdf +++ b/macros/latex/required/babel/base/babel.pdf diff --git a/macros/latex/required/babel/base/bbcompat.dtx b/macros/latex/required/babel/base/bbcompat.dtx index e534dab18f..61e273e2f5 100644 --- a/macros/latex/required/babel/base/bbcompat.dtx +++ b/macros/latex/required/babel/base/bbcompat.dtx @@ -30,7 +30,7 @@ % % \iffalse %<*dtx> -\ProvidesFile{bbcompat.dtx}[2023/10/25 v3.96] +\ProvidesFile{bbcompat.dtx}[2023/11/11 v3.97] %</dtx> % %% File 'bbcompat.dtx' |