diff options
author | Karl Berry <karl@freefriends.org> | 2023-02-13 20:55:01 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2023-02-13 20:55:01 +0000 |
commit | 02faaa93e729ccb5f614869f1c46d15d2b5502d3 (patch) | |
tree | 801d4bc4234f7613208048008967c81807dcb2f2 /Master/texmf-dist/tex/generic/babel/luababel.def | |
parent | 7cc38d15e4d65fc5198c6c25c70427fc7e175cfd (diff) |
babel (13feb23)
git-svn-id: svn://tug.org/texlive/trunk@65823 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 | 232 |
1 files changed, 128 insertions, 104 deletions
diff --git a/Master/texmf-dist/tex/generic/babel/luababel.def b/Master/texmf-dist/tex/generic/babel/luababel.def index 73804ad768d..d72cd4d08be 100644 --- a/Master/texmf-dist/tex/generic/babel/luababel.def +++ b/Master/texmf-dist/tex/generic/babel/luababel.def @@ -1367,7 +1367,7 @@ end luatexbase.priority_in_callback('hpack_filter', 'luaotfload.node_processor') or nil) }} -\ifnum\bbl@bidimode>100 \ifnum\bbl@bidimode<200 +\ifnum\bbl@bidimode>\@ne % Excludes default=1 \let\bbl@beforeforeign\leavevmode \AtEndOfPackage{\EnableBabelHook{babel-bidi}} \RequirePackage{luatexbase} @@ -1379,13 +1379,10 @@ end \or require('babel-bidi-basic-r.lua') \fi} - % TODO - to locale_props, not as separate attribute \newattribute\bbl@attr@dir \directlua{ Babel.attr_dir = luatexbase.registernumber'bbl@attr@dir' } - % TODO. I don't like it, hackish: \bbl@exp{\output{\bodydir\pagedir\the\output}} - \AtEndOfPackage{\EnableBabelHook{babel-bidi}} -\fi\fi +\fi \chardef\bbl@thetextdir\z@ \chardef\bbl@thepardir\z@ \def\bbl@getluadir#1{% @@ -1409,47 +1406,33 @@ 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{% + \edef\bbl@thedir{\the\numexpr\bbl@thepardir*4+#1}% + \setattribute\bbl@attr@dir{\numexpr\bbl@thepardir*4+#1}} +\def\bbl@pardir#1{% Used twice \bbl@setluadir{par}\pardir{#1}% \chardef\bbl@thepardir#1\relax} -\def\bbl@bodydir{\bbl@setluadir{body}\bodydir} -\def\bbl@pagedir{\bbl@setluadir{page}\pagedir} -\def\bbl@dirparastext{\pardir\the\textdir\relax}% %%%% +\def\bbl@bodydir{\bbl@setluadir{body}\bodydir}% Used once +\def\bbl@pagedir{\bbl@setluadir{page}\pagedir}% Unused +\def\bbl@dirparastext{\pardir\the\textdir\relax}% Used once \ifnum\bbl@bidimode>\z@ \def\bbl@insidemath{0}% - \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}} + \def\bbl@everymath{\def\bbl@insidemath{1}} + \def\bbl@everydisplay{\def\bbl@insidemath{2}} \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 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 + 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 @@ -1460,10 +1443,9 @@ end }}% \fi \bbl@trace{Redefinitions for bidi layout} -\def\BabelNoAMSMath{\let\bbl@noamsmath\relax} \ifnum\bbl@bidimode>\z@ \ifx\matheqdirmode\@undefined\else - \matheqdirmode\@ne + \matheqdirmode\@ne % A luatex primitive \fi \let\bbl@eqnodir\relax \def\bbl@eqdel{()} @@ -1489,6 +1471,7 @@ end \eqno\hbox{#1}% \fi} \AtBeginDocument{% + \ifx\bbl@noamsmath\relax\else \ifx\maketag@@@\@undefined % Normal equation, eqnarray \AddToHook{env/equation/begin}{% \ifnum\bbl@thetextdir>\z@ @@ -1508,7 +1491,6 @@ 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@ @@ -1524,77 +1506,75 @@ end % Hack. YA luatex bug?: \expandafter\bbl@sreplace\csname] \endcsname{$$}{\eqno\kern.001pt$$}% \else % amstex - \ifx\bbl@noamsmath\@undefined - \bbl@exp{% Hack to hide maybe undefined conditionals: - \chardef\bbl@eqnpos=0% - \<iftagsleft@>1\<else>\<if@fleqn>2\<fi>\<fi>\relax}% - \ifnum\bbl@eqnpos=\@ne - \let\bbl@ams@lap\hbox - \else - \let\bbl@ams@lap\llap - \fi - \ExplSyntaxOn - \bbl@sreplace\intertext@{\normalbaselines}% - {\normalbaselines - \ifx\bbl@eqnodir\relax\else\bbl@pardir\@ne\bbl@eqnodir\fi}% - \ExplSyntaxOff - \def\bbl@ams@tagbox#1#2{#1{\bbl@eqnodir#2}}% #1=hbox|@lap|flip - \ifx\bbl@ams@lap\hbox % leqno - \def\bbl@ams@flip#1{% - \hbox to 0.01pt{\hss\hbox to\displaywidth{{#1}\hss}}}% - \else % eqno - \def\bbl@ams@flip#1{% - \hbox to 0.01pt{\hbox to\displaywidth{\hss{#1}}\hss}}% - \fi - \def\bbl@ams@preset#1{% + \bbl@exp{% Hack to hide maybe undefined conditionals: + \chardef\bbl@eqnpos=0% + \<iftagsleft@>1\<else>\<if@fleqn>2\<fi>\<fi>\relax}% + \ifnum\bbl@eqnpos=\@ne + \let\bbl@ams@lap\hbox + \else + \let\bbl@ams@lap\llap + \fi + \ExplSyntaxOn + \bbl@sreplace\intertext@{\normalbaselines}% + {\normalbaselines + \ifx\bbl@eqnodir\relax\else\bbl@pardir\@ne\bbl@eqnodir\fi}% + \ExplSyntaxOff + \def\bbl@ams@tagbox#1#2{#1{\bbl@eqnodir#2}}% #1=hbox|@lap|flip + \ifx\bbl@ams@lap\hbox % leqno + \def\bbl@ams@flip#1{% + \hbox to 0.01pt{\hss\hbox to\displaywidth{{#1}\hss}}}% + \else % eqno + \def\bbl@ams@flip#1{% + \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}% + \bbl@sreplace\maketag@@@{\hbox}{\bbl@ams@tagbox#1}% + \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}}% - \bbl@sreplace\textdef@{\hbox}{\bbl@ams@tagbox\hbox}% - \bbl@sreplace\maketag@@@{\hbox}{\bbl@ams@tagbox#1}% - \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@ - \bbl@add\normalfont{\bbl@eqnodir}% - \ifcase\bbl@eqnpos - \def\veqno##1##2{\bbl@eqno@flip{##1##2}}% - \or - \def\veqno##1##2{\bbl@leqno@flip{##1##2}}% - \fi - \fi}% - \AddToHook{env/equation/begin}{\bbl@ams@equation}% - \AddToHook{env/equation*/begin}{\bbl@ams@equation}% - \fi - \AddToHook{env/cases/begin}{\bbl@ams@preset\bbl@ams@lap}% - \AddToHook{env/multline/begin}{\bbl@ams@preset\hbox}% - \AddToHook{env/gather/begin}{\bbl@ams@preset\bbl@ams@lap}% - \AddToHook{env/gather*/begin}{\bbl@ams@preset\bbl@ams@lap}% - \AddToHook{env/align/begin}{\bbl@ams@preset\bbl@ams@lap}% - \AddToHook{env/align*/begin}{\bbl@ams@preset\bbl@ams@lap}% - \AddToHook{env/eqnalign/begin}{\bbl@ams@preset\hbox}% - % Hackish, for proper alignment. Don’t ask me why it works!: - \bbl@exp{% Avoid a 'visible' conditional - \\\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 - \def\bbl@ams@flip#1{% - \hbox to 0.01pt{\hbox to\displaywidth{{#1}\hss}\hss}}% - \else - \def\bbl@ams@flip#1{% - \hbox to 0.01pt{\hss\hbox to\displaywidth{\hss{#1}}}}% - \fi}% - {}% + \chardef\bbl@thetextdir\z@ + \bbl@add\normalfont{\bbl@eqnodir}% + \ifcase\bbl@eqnpos + \def\veqno##1##2{\bbl@eqno@flip{##1##2}}% + \or + \def\veqno##1##2{\bbl@leqno@flip{##1##2}}% + \fi \fi}% + \AddToHook{env/equation/begin}{\bbl@ams@equation}% + \AddToHook{env/equation*/begin}{\bbl@ams@equation}% \fi - \fi} + \AddToHook{env/cases/begin}{\bbl@ams@preset\bbl@ams@lap}% + \AddToHook{env/multline/begin}{\bbl@ams@preset\hbox}% + \AddToHook{env/gather/begin}{\bbl@ams@preset\bbl@ams@lap}% + \AddToHook{env/gather*/begin}{\bbl@ams@preset\bbl@ams@lap}% + \AddToHook{env/align/begin}{\bbl@ams@preset\bbl@ams@lap}% + \AddToHook{env/align*/begin}{\bbl@ams@preset\bbl@ams@lap}% + \AddToHook{env/eqnalign/begin}{\bbl@ams@preset\hbox}% + % Hackish, for proper alignment. Don’t ask me why it works!: + \bbl@exp{% Avoid a 'visible' conditional + \\\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 + \def\bbl@ams@flip#1{% + \hbox to 0.01pt{\hbox to\displaywidth{{#1}\hss}\hss}}% + \else + \def\bbl@ams@flip#1{% + \hbox to 0.01pt{\hss\hbox to\displaywidth{\hss{#1}}}}% + \fi}% + {}% + \fi}% + \fi\fi} \fi \def\bbl@provide@extra#1{% % == Counters: mapdigits == @@ -1644,6 +1624,50 @@ end \csname bbl@inidata@\languagename\endcsname \bbl@release@transforms\relax % \relax closes the last item. \fi} +\def\localerestoredirs{% + \ifcase\bbl@thetextdir + \ifnum\textdirection=\z@\else\textdir TLT\fi + \else + \ifnum\textdirection=\@ne\else\textdir TRT\fi + \fi + \ifcase\bbl@thepardir + \ifnum\pardirection=\z@\else\pardir TLT\bodydir TLT\fi + \else + \ifnum\pardirection=\@ne\else\pardir TRT\bodydir TRT\fi + \fi} +\IfBabelLayout{tabular}% + {\chardef\bbl@tabular@mode\tw@}% All RTL + {\IfBabelLayout{notabular}% + {\chardef\bbl@tabular@mode\z@}% + {\chardef\bbl@tabular@mode\@ne}}% Mixed, with LTR cols +\ifnum\bbl@bidimode>\@ne + \ifnum\bbl@tabular@mode=\@ne + \let\bbl@parabefore\relax + \AddToHook{para/before}{\bbl@parabefore} + \AtBeginDocument{% + \bbl@replace\@tabular{$}{$% + \def\bbl@insidemath{0}% + \def\bbl@parabefore{\localerestoredirs}}% + \ifnum\bbl@tabular@mode=\@ne + \bbl@ifunset{@tabclassz}{}{% + \bbl@exp{% Hide conditionals + \\\bbl@sreplace\\\@tabclassz + {\<ifcase>\\\@chnum}% + {\\\localerestoredirs\<ifcase>\\\@chnum}}}% + \@ifpackageloaded{colortbl}% + {\bbl@sreplace\@classz + {\hbox\bgroup\bgroup}{\hbox\bgroup\bgroup\localerestoredirs}}% + {\@ifpackageloaded{array}% + {\bbl@exp{% Hide conditionals + \\\bbl@sreplace\\\@classz + {\<ifcase>\\\@chnum}% + {\bgroup\\\localerestoredirs\<ifcase>\\\@chnum}% + \\\bbl@sreplace\\\@classz + {\\\do@row@strut\<fi>}{\\\do@row@strut\<fi>\egroup}}}% + {}}% + \fi} + \fi +\fi \ifx\bbl@opt@layout\@nnil\endinput\fi % if no layout \ifnum\bbl@bidimode>\z@ \def\bbl@nextfake#1{% non-local changes, use always inside a group! |