diff options
author | Karl Berry <karl@freefriends.org> | 2024-06-02 20:24:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-06-02 20:24:10 +0000 |
commit | 5634f0473d32ab71b4fbaaf0a6870737c2cc6dcb (patch) | |
tree | 4453c5e38663179032e429935eab72d683b7c95a /Master/texmf-dist/source | |
parent | f570bee4ec02755618ec0dc8f705555f50b0731c (diff) |
babel (2jun24)
git-svn-id: svn://tug.org/texlive/trunk@71407 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r-- | Master/texmf-dist/source/latex/babel/babel.dtx | 118 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/babel/babel.ins | 4 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/babel/bbcompat.dtx | 2 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/babel/locale.zip | bin | 1088254 -> 1088254 bytes |
4 files changed, 95 insertions, 29 deletions
diff --git a/Master/texmf-dist/source/latex/babel/babel.dtx b/Master/texmf-dist/source/latex/babel/babel.dtx index 6a129d2c32b..6b6da6ed7cf 100644 --- a/Master/texmf-dist/source/latex/babel/babel.dtx +++ b/Master/texmf-dist/source/latex/babel/babel.dtx @@ -32,7 +32,7 @@ % % \iffalse %<*filedriver> -\ProvidesFile{babel.dtx}[2024/05/18 v24.5 The Babel package] +\ProvidesFile{babel.dtx}[2024/06/02 v24.6 The Babel package] \documentclass{ltxdoc} \GetFileInfo{babel.dtx} \usepackage{fontspec} @@ -865,7 +865,7 @@ behavior is not desired, you may use the environment \begin{warning} Being similar to |\selectlanguage|, the warning above about the internal |\write| also applies here. The current mode (vertical or - horizonal) is also not changed. + horizontal) is also not changed. \end{warning} \Describe{\begin\menv{otherlanguage*}}% @@ -1600,7 +1600,7 @@ files, with |\babelprovide| (or |provide=|). With these languages, |\babelprovide| with a valueless |import|, which will load the |ini| file with the tag given in parenthesis. -Many locale are quite useable, provided captions and dates are +Many locale are quite usable, provided captions and dates are not required (which is a very frequent case, particularly in ancient languages). So, they are included in the default \babel{} distribution. This can serve to encourage contributions, too. A warning will remember @@ -2731,12 +2731,12 @@ one whose script is Latin. Sets the interword space for the writing system of the language, in em units (so, |0 .1 0| is |0em plus .1em|). Like |\spaceskip|, the em unit applied is that of the current text (more precisely, the previous -glyph). Currently used only in Southeast Asian scrips, like Thai, and +glyph). Currently used only in Southeast Asian scripts, like Thai, and CJK. \Describe{intrapenalty=}{\meta{penalty}} Sets the interword penalty for the writing system of this language. -Currently used only in Southeast Asian scrips, like Thai. Ignored if 0 +Currently used only in Southeast Asian scripts, like Thai. Ignored if 0 (which is the default value). \Describe{transforms=}{\meta{transform-list}} @@ -3148,7 +3148,7 @@ Each language in the \babel{} sense has its own unique numeric identifier, which can be retrieved with |\localeid|. The |\localeid| is not the same as the |\language| identifier, which -refers to a set of hyphenation patters (which, in turn, is just a +refers to a set of hyphenation patterns (which, in turn, is just a component of the line breaking algorithm described in the next section). The data about preloaded patterns are store in an internal macro named |\bbl@languages| (see the code for further details), but @@ -3901,7 +3901,7 @@ will be fine in most cases, but numbers, for example, will be rendered in the wrong order. In \luatex, the preferred method is |basic|, which supports both L and -R text. |basic-r| was a first attempt to create a bidi algorith and +R text. |basic-r| was a first attempt to create a bidi algorithm and provides a simple and fast method for R text in some typical cases. (They are named \texttt{basic} mainly because they only consider the intrinsic direction of scripts and weak directionality.) @@ -4131,7 +4131,7 @@ There are \textit{three} R blocks and \textit{two} L blocks, and the order is \textit{RTL B and still ltr 1 ltr text RTL A}. This is by design to provide the proper behavior in the most usual cases — but if you need to use |\ref| in an L text inside R, the L text must be marked -up explictly; for example: +up explicitly; for example: \begin{verbatim} RTL A \foreignlanguage{english}{ltr text \thechapter{} and still ltr} RTL B \end{verbatim} @@ -5479,8 +5479,8 @@ wouldn’t exist. % \section{Tools} % % \begin{macrocode} -%<<version=24.5>> -%<<date=2024/05/18>> +%<<version=24.6>> +%<<date=2024/06/02>> % \end{macrocode} % % \textbf{Do not use the following macros in \texttt{ldf} files. They @@ -11537,7 +11537,7 @@ wouldn’t exist. \typeout{*******}} % \end{macrocode} % -% \section{Adjusting the Babel bahavior} +% \section{Adjusting the Babel behavior} % % A generic high level interface is provided to adjust some global % and general settings. @@ -11997,7 +11997,7 @@ wouldn’t exist. % documentclasses \cls{report} and \cls{book} define and set the % headings for the page. While doing so they also store a copy of % |\markboth| in |\@mkboth|. Therefore we need to check whether -% |\@mkboth| has already been set. If so we neeed to do that again +% |\@mkboth| has already been set. If so we need to do that again % with the new definition of |\markboth|. (As of Oct 2019, \LaTeX{} % stores the definition in an intermediate macro, so it's not % necessary anymore, but it's preserved for older versions.) @@ -12111,7 +12111,7 @@ wouldn’t exist. % \end{macrocode} % % The package \pkg{varioref} defines |\Ref| to be a robust command -% wich uppercases the first character of the reference text. In +% which uppercases the first character of the reference text. In % order to be able to do that it needs to access the expandable form % of |\ref|. So we employ a little trick here. We redefine the % (internal) command \verb*|\Ref | to call |\org@ref| instead of @@ -12395,16 +12395,16 @@ wouldn’t exist. \fi \fi % TODO? Separate: -\ifnum\bbl@bidimode=\@ne % Any bidi= except default=1 +\ifnum\bbl@bidimode=\@ne % bidi=default \let\bbl@beforeforeign\leavevmode - \ifodd\bbl@engine + \ifodd\bbl@engine % lua \newattribute\bbl@attr@dir \directlua{ Babel.attr_dir = luatexbase.registernumber'bbl@attr@dir' } \bbl@exp{\output{\bodydir\pagedir\the\output}} \fi \AtEndOfPackage{% - \EnableBabelHook{babel-bidi}% - \ifodd\bbl@engine\else + \EnableBabelHook{babel-bidi}% pdf/lua/xe + \ifodd\bbl@engine\else % pdf/xe \bbl@xebidipar \fi} \fi @@ -13995,12 +13995,12 @@ wouldn’t exist. %<*xetex|texxet> \providecommand\bbl@provide@intraspace{} \bbl@trace{Redefinitions for bidi layout} -\def\bbl@sspre@caption{% +\def\bbl@sspre@caption{% TODO: Unused! \bbl@exp{\everyhbox{\\\bbl@textdir\bbl@cs{wdir@\bbl@main@language}}}} \ifx\bbl@opt@layout\@nnil\else % if layout=.. \def\bbl@startskip{\ifcase\bbl@thepardir\leftskip\else\rightskip\fi} \def\bbl@endskip{\ifcase\bbl@thepardir\rightskip\else\leftskip\fi} -\ifx\bbl@beforeforeign\leavevmode % A poor test for bidi= +\ifnum\bbl@bidimode>\z@ % TODO: always? \def\@hangfrom#1{% \setbox\@tempboxa\hbox{{#1}}% \hangindent\ifcase\bbl@thepardir\wd\@tempboxa\else-\wd\@tempboxa\fi @@ -14092,7 +14092,7 @@ wouldn’t exist. % % Which start just above, because some code is shared with \xetex. Now, % 8-bit specific stuff. If just one encoding has been declared, then -% asume no switching is necessary (1). +% assume no switching is necessary (1). % % \begin{macrocode} %<*texxet> @@ -14357,6 +14357,7 @@ wouldn’t exist. \endinput\fi % Here stops reading code for hyphen.cfg % The following is read the 2nd time it's loaded + % First, global declarations for lua \begingroup % TODO - to a lua file \catcode`\%=12 \catcode`\'=12 @@ -14364,6 +14365,10 @@ wouldn’t exist. \catcode`\:=12 \directlua{ Babel = Babel or {} + function Babel.lua_error(e, a) + tex.print([[\noexpand\csname bbl@error\endcsname{]] .. + e .. '}{' .. (a or '') .. '}{}{}') + end function Babel.bytes(line) return line:gsub("(.)", function (chr) return unicode.utf8.char(string.byte(chr)) end) @@ -15323,7 +15328,12 @@ end local rep = [=[##1]=] rep = rep:gsub('^%s*(remove)%s*$', 'remove = true') rep = rep:gsub('^%s*(insert)%s*,', 'insert = true, ') + rep = rep:gsub('^%s*(after)%s*,', 'after = true, ') rep = rep:gsub('(string)%s*=%s*([^%s,]*)', Babel.capture_func) + rep = rep:gsub('node%s*=%s*(%a+)%s*(%a*)', Babel.capture_node) + rep = rep:gsub(&% + '(norule)%s*=%s*([%-%d%.]+)%s+([%-%d%.]+)%s+([%-%d%.]+)', + 'norule = {' .. '%2, %3, %4' .. '}') if #1 == 0 or #1 == 2 then rep = rep:gsub(&% '(space)%s*=%s*([%-%d%.]+)%s+([%-%d%.]+)%s+([%-%d%.]+)', @@ -15342,7 +15352,7 @@ end \bbl@foreach\babeltempb{&% \bbl@forkv{{##1}}{&% \in@{,####1,}{,nil,step,data,remove,insert,string,no,pre,&% - no,post,penalty,kashida,space,spacefactor,}&% + no,post,penalty,kashida,space,spacefactor,kern,node,after,}&% \ifin@\else \bbl@error{bad-transform-option}{####1}{}{}&% \fi}}&% @@ -16358,6 +16368,7 @@ function Babel.hyphenate_replace(head, mode) print('=====') end local new -- used when inserting and removing nodes + local dummy_node -- used by after local matches = { u.match(w, p, last_match) } @@ -16402,7 +16413,8 @@ function Babel.hyphenate_replace(head, mode) -- rc = the replacement table index local rc = 0 - while rc < last-first+1 do -- for each replacement +------- TODO. dummy_node? + while rc < last-first+1 or dummy_node do -- for each replacement if Babel.debug then print('.....', rc + 1) end @@ -16434,11 +16446,31 @@ function Babel.hyphenate_replace(head, mode) end if crep then - step = crep.step or 0 + step = crep.step or step + end + + if crep and crep.after then + crep.insert = true + if dummy_node then + item = dummy_node + else -- TODO. if there is a node after? + d = node.copy(item_base) + head, item = node.insert_after(head, item, d) + dummy_node = item + end + end + + if crep and not crep.after and dummy_node then + node.remove(head, dummy_node) + dummy_node = nil end if (not enabled) or (crep and next(crep) == nil) then -- = {} - last_match = save_last -- Optimization + if step == 0 then + last_match = save_last -- Optimization + else + last_match = utf8.offset(w, sc+step) + end goto next elseif crep == nil or crep.remove then @@ -16448,7 +16480,7 @@ function Babel.hyphenate_replace(head, mode) sc = sc - 1 -- Nothing has been inserted. last_match = utf8.offset(w, sc+1+step) goto next - + elseif crep and crep.kashida then -- Experimental node.set_attribute(item, Babel.attr_kashida, @@ -16526,6 +16558,15 @@ function Babel.hyphenate_replace(head, mode) placeholder = ' ' end head, new = node.insert_before(head, item, d) + + elseif crep and crep.norule then + -- 655360 = 10 pt = 10 * 65536 sp + d = node.new(2, 3) -- (rule, empty) = \no*rule + local quad = font.getfont(item_base.font).size or 655360 + d.width = crep.norule[1] * quad + d.height = crep.norule[2] * quad + d.depth = crep.norule[3] * quad + head, new = node.insert_before(head, item, d) elseif crep and crep.spacefactor then d = node.new(12, 13) -- (glue, spaceskip) @@ -16541,10 +16582,22 @@ function Babel.hyphenate_replace(head, mode) elseif mode == 0 and crep and crep.space then -- ERROR + + elseif crep and crep.kern then + d = node.new(13, 1) -- (kern, user) + local quad = font.getfont(item_base.font).size or 655360 + d.attr = item_base.attr + d.kern = crep.kern * quad + head, new = node.insert_before(head, item, d) + + elseif crep and crep.node then + d = node.new(crep.node[1], crep.node[2]) + d.attr = item_base.attr + head, new = node.insert_before(head, item, d) end -- ie replacement cases - -- Shared by disc, space and penalty. + -- Shared by disc, space(factor), kern, node and penalty. if sc == 1 then word_head = head end @@ -16568,6 +16621,11 @@ function Babel.hyphenate_replace(head, mode) print('.....', '/') Babel.debug_hyph(w, w_nodes, sc, first, last, last_match) end + + if dummy_node then + node.remove(head, dummy_node) + dummy_node = nil + end end -- for match @@ -16649,6 +16707,14 @@ function Babel.capture_kashida(key, wt) return 'kashida = ' .. wt end +function Babel.capture_node(id, subtype) + local sbt = 0 + for k, v in pairs(node.subtypes(id)) do + if v == subtype then sbt = k end + end + return 'node = {' .. node.id(id) .. ', ' .. sbt .. '}' +end + -- Experimental: applies prehyphenation transforms to a string (letters -- and spaces). function Babel.string_prehyphenation(str, locale) diff --git a/Master/texmf-dist/source/latex/babel/babel.ins b/Master/texmf-dist/source/latex/babel/babel.ins index d70ae40c626..70cf2a0be70 100644 --- a/Master/texmf-dist/source/latex/babel/babel.ins +++ b/Master/texmf-dist/source/latex/babel/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{2024/05/18} +\def\filedate{2024/06/02} \def\batchfile{babel.ins} \input docstrip.tex @@ -48,7 +48,7 @@ % Modify docstrip. A pseudo-guard is defined to set variables: % <<name=value>>. These variables are used with <@name@> Two further % pseudo-guards define "block" variables: <<*name>> and <</name>> -% delimite the lines to be retrived with <@name@>. Note the verbatim +% delimite the lines to be retrieved with <@name@>. Note the verbatim % guard is overridden, but it's not used here. This is done in two % passes: 1) with saving true, there is a dummy pass, generating % nothing, but blocks are read and saved; 2) with saving false, blocks diff --git a/Master/texmf-dist/source/latex/babel/bbcompat.dtx b/Master/texmf-dist/source/latex/babel/bbcompat.dtx index 00e5a6b8b57..e4d9db47084 100644 --- a/Master/texmf-dist/source/latex/babel/bbcompat.dtx +++ b/Master/texmf-dist/source/latex/babel/bbcompat.dtx @@ -30,7 +30,7 @@ % % \iffalse %<*dtx> -\ProvidesFile{bbcompat.dtx}[2024/05/18 v24.5] +\ProvidesFile{bbcompat.dtx}[2024/06/02 v24.6] %</dtx> % %% File 'bbcompat.dtx' diff --git a/Master/texmf-dist/source/latex/babel/locale.zip b/Master/texmf-dist/source/latex/babel/locale.zip Binary files differindex 094a3df50be..10907ced5ca 100644 --- a/Master/texmf-dist/source/latex/babel/locale.zip +++ b/Master/texmf-dist/source/latex/babel/locale.zip |