diff options
author | Karl Berry <karl@freefriends.org> | 2023-01-23 20:51:12 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-01-23 20:51:12 +0000 |
commit | aa7c8bc1bbf21c5187a60ab38e2b96a12fac21a8 (patch) | |
tree | 8cfb544fa92af28b0ee61d6324963e1c779ba416 /Master/texmf-dist/tex/generic/babel/luababel.def | |
parent | 9dbf0a9ef83c156ec53ed1ce64cf67a1c3ba3efe (diff) |
babel (23jan23)
git-svn-id: svn://tug.org/texlive/trunk@65611 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/babel/luababel.def')
-rw-r--r-- | Master/texmf-dist/tex/generic/babel/luababel.def | 125 |
1 files changed, 110 insertions, 15 deletions
diff --git a/Master/texmf-dist/tex/generic/babel/luababel.def b/Master/texmf-dist/tex/generic/babel/luababel.def index 30f8c2000db..73804ad768d 100644 --- a/Master/texmf-dist/tex/generic/babel/luababel.def +++ b/Master/texmf-dist/tex/generic/babel/luababel.def @@ -7,7 +7,7 @@ %% babel.dtx (with options: `luatex') %% %% -%% Copyright (C) 2012-2022 Javier Bezos and Johannes L. Braams. +%% Copyright (C) 2012-2023 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. @@ -379,9 +379,13 @@ end Babel.linebreaking.before = {} Babel.linebreaking.after = {} Babel.locale = {} % Free to use, indexed by \localeid - function Babel.linebreaking.add_before(func) + function Babel.linebreaking.add_before(func, pos) tex.print([[\noexpand\csname bbl@luahyphenate\endcsname]]) - table.insert(Babel.linebreaking.before, func) + if pos == nil then + table.insert(Babel.linebreaking.before, func) + else + table.insert(Babel.linebreaking.before, pos, func) + end end function Babel.linebreaking.add_after(func) tex.print([[\noexpand\csname bbl@luahyphenate\endcsname]]) @@ -896,7 +900,7 @@ end \global\let\<bbl@##1dflt@\languagename>% \<bbl@##1dflt@*\bbl@tempa>}}}% {}}% 1=T - language, already defined - \def\bbl@tempa{\bbl@nostdfont{}}% + \def\bbl@tempa{\bbl@nostdfont{}}% TODO. Don't use \bbl@tempa \bbl@foreach\bbl@font@fams{% don't gather with prev for \bbl@ifunset{bbl@##1dflt@\languagename}% {\bbl@cs{famrst@##1}% @@ -1196,8 +1200,36 @@ end \fi}}&% \let\bbl@kv@attribute\relax \let\bbl@kv@label\relax + \let\bbl@kv@fonts\@empty \bbl@forkv{#2}{\bbl@csarg\edef{kv@##1}{##2}}&% - \ifx\bbl@kv@attribute\relax\else + \ifx\bbl@kv@fonts\@empty\else\bbl@settransfont\fi + \ifx\bbl@kv@attribute\relax + \ifx\bbl@kv@label\relax\else + \bbl@exp{\\\bbl@trim@def\\\bbl@kv@fonts{\bbl@kv@fonts}}&% + \bbl@replace\bbl@kv@fonts{ }{,}&% + \edef\bbl@kv@attribute{bbl@ATR@\bbl@kv@label @#3@\bbl@kv@fonts}&% + \count@\z@ + \def\bbl@elt##1##2##3{&% + \bbl@ifsamestring{#3,\bbl@kv@label}{##1,##2}&% + {\bbl@ifsamestring{\bbl@kv@fonts}{##3}&% + {\count@\@ne}&% + {\bbl@error + {Transforms cannot be re-assigned to different\\&% + fonts. The conflict is in '\bbl@kv@label'.\\&% + Apply the same fonts or use a different label}&% + {See the manual for further details.}}}&% + {}}&% + \bbl@transfont@list + \ifnum\count@=\z@ + \bbl@exp{\global\\\bbl@add\\\bbl@transfont@list + {\\\bbl@elt{#3}{\bbl@kv@label}{\bbl@kv@fonts}}}&% + \fi + \bbl@ifunset{\bbl@kv@attribute}&% + {\global\bbl@carg\newattribute{\bbl@kv@attribute}}&% + {}&% + \global\bbl@carg\setattribute{\bbl@kv@attribute}\@ne + \fi + \else \edef\bbl@kv@attribute{\expandafter\bbl@stripslash\bbl@kv@attribute}&% \fi \directlua{ @@ -1243,6 +1275,49 @@ end }&% \endgroup} \endgroup +\let\bbl@transfont@list\@empty +\def\bbl@settransfont{% + \global\let\bbl@settransfont\relax % Execute only once + \gdef\bbl@transfont{% + \def\bbl@elt####1####2####3{% + \bbl@ifblank{####3}% + {\count@\tw@}% Do nothing if no fonts + {\count@\z@ + \bbl@vforeach{####3}{% + \def\bbl@tempd{########1}% + \edef\bbl@tempe{\bbl@transfam/\f@series/\f@shape}% + \ifx\bbl@tempd\bbl@tempe + \count@\@ne + \else\ifx\bbl@tempd\bbl@transfam + \count@\@ne + \fi\fi}% + \ifcase\count@ + \bbl@csarg\unsetattribute{ATR@####2@####1@####3}% + \or + \bbl@csarg\setattribute{ATR@####2@####1@####3}\@ne + \fi}}% + \bbl@transfont@list}% + \AddToHook{selectfont}{\bbl@transfont}% Hooks are global. + \gdef\bbl@transfam{-unknown-}% + \bbl@foreach\bbl@font@fams{% + \AddToHook{##1family}{\def\bbl@transfam{##1}}% + \bbl@ifsamestring{\@nameuse{##1default}}\familydefault + {\xdef\bbl@transfam{##1}}% + {}}} +\DeclareRobustCommand\enablelocaletransform[1]{% + \bbl@ifunset{bbl@ATR@#1@\languagename @}% + {\bbl@error + {'#1' for '\languagename' cannot be enabled.\\% + Maybe there is a typo or it’s a font-dependent transform}% + {See the manual for further details.}}% + {\bbl@csarg\setattribute{ATR@#1@\languagename @}\@ne}} +\DeclareRobustCommand\disablelocaletransform[1]{% + \bbl@ifunset{bbl@ATR@#1@\languagename @}% + {\bbl@error + {'#1' for '\languagename' cannot be disabled.\\% + Maybe there is a typo or it’s a font-dependent transform}% + {See the manual for further details.}}% + {\bbl@csarg\unsetattribute{ATR@#1@\languagename @}}} \def\bbl@activateposthyphen{% \let\bbl@activateposthyphen\relax \directlua{ @@ -1334,6 +1409,7 @@ end \def\bbl@textdir#1{% \bbl@setluadir{text}\textdir{#1}% \chardef\bbl@thetextdir#1\relax + % par/text 0..8 = l/l l/r l/al r/l r/r r/al al/l al/r al/al \edef\bbl@thedir{\the\numexpr\bbl@thepardir*3+#1}% \setattribute\bbl@attr@dir{\numexpr\bbl@thepardir*3+#1}} \def\bbl@pardir#1{% @@ -1344,23 +1420,36 @@ end \def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%% \ifnum\bbl@bidimode>\z@ \def\bbl@insidemath{0}% - \def\bbl@everymath{\def\bbl@insidemath{1}} - \def\bbl@everydisplay{\def\bbl@insidemath{2}} + \def\bbl@mathboxdir{% + \ifcase\bbl@thetextdir\relax + \everyhbox{\bbl@mathboxdir@aux L}% + \else + \everyhbox{\bbl@mathboxdir@aux R}% + \fi} + \def\bbl@mathboxdir@aux#1{% + \@ifnextchar\egroup{}{\textdir T#1T\relax}} + \def\bbl@everymath{\bbl@mathboxdir} + \def\bbl@everydisplay{% + \bbl@mathboxdir + \def\bbl@everymath{\bbl@mathboxdir}} \frozen@everymath\expandafter{% \expandafter\bbl@everymath\the\frozen@everymath} \frozen@everydisplay\expandafter{% \expandafter\bbl@everydisplay\the\frozen@everydisplay} \AtBeginDocument{ \directlua{ + Babel.use_math_box_dir = true function Babel.math_box_dir(head) - if not (token.get_macro('bbl@insidemath') == '0') then - if Babel.hlist_has_bidi(head) then - local d = node.new(node.id'dir') - d.dir = '+TRT' - node.insert_before(head, node.has_glyph(head), d) - for item in node.traverse(head) do - node.set_attribute(item, - Babel.attr_dir, token.get_macro('bbl@thedir')) + if Babel.use_math_box_dir then + if not (token.get_macro('bbl@insidemath') == '0') then + if Babel.hlist_has_bidi(head) then + local d = node.new(node.id'dir') + d.dir = '+TRT' + node.insert_before(head, node.has_glyph(head), d) + for item in node.traverse(head) do + node.set_attribute(item, + Babel.attr_dir, token.get_macro('bbl@thedir')) + end end end end @@ -1403,6 +1492,7 @@ end \ifx\maketag@@@\@undefined % Normal equation, eqnarray \AddToHook{env/equation/begin}{% \ifnum\bbl@thetextdir>\z@ + \def\bbl@mathboxdir{\def\bbl@insidemath{1}}% \let\@eqnnum\bbl@eqnum \edef\bbl@eqnodir{\noexpand\bbl@textdir{\the\bbl@thetextdir}}% \chardef\bbl@thetextdir\z@ @@ -1418,6 +1508,8 @@ end \fi \AddToHook{env/eqnarray/begin}{% \ifnum\bbl@thetextdir>\z@ + \def\bbl@mathboxdir{\def\bbl@insidemath{1}} + \def\bbl@mathboxdir{\def\bbl@insidemath{1}}% \edef\bbl@eqnodir{\noexpand\bbl@textdir{\the\bbl@thetextdir}}% \chardef\bbl@thetextdir\z@ \bbl@add\normalfont{\bbl@eqnodir}% @@ -1455,6 +1547,7 @@ end \hbox to 0.01pt{\hbox to\displaywidth{\hss{#1}}\hss}}% \fi \def\bbl@ams@preset#1{% + \def\bbl@mathboxdir{\def\bbl@insidemath{1}}% \ifnum\bbl@thetextdir>\z@ \edef\bbl@eqnodir{\noexpand\bbl@textdir{\the\bbl@thetextdir}}% \bbl@sreplace\textdef@{\hbox}{\bbl@ams@tagbox\hbox}% @@ -1462,6 +1555,7 @@ end \fi}% \ifnum\bbl@eqnpos=\tw@\else \def\bbl@ams@equation{% + \def\bbl@mathboxdir{\def\bbl@insidemath{1}}% \ifnum\bbl@thetextdir>\z@ \edef\bbl@eqnodir{\noexpand\bbl@textdir{\the\bbl@thetextdir}}% \chardef\bbl@thetextdir\z@ @@ -1487,6 +1581,7 @@ end \\\AddToHook{env/align*/end}{\<iftag@>\<else>\\\tag*{}\<fi>}}% \AddToHook{env/flalign/begin}{\bbl@ams@preset\hbox}% \AddToHook{env/split/before}{% + \def\bbl@mathboxdir{\def\bbl@insidemath{1}}% \ifnum\bbl@thetextdir>\z@ \bbl@ifsamestring\@currenvir{equation}% {\ifx\bbl@ams@lap\hbox % leqno |