summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/babel/luababel.def
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-02-13 20:55:01 +0000
committerKarl Berry <karl@freefriends.org>2023-02-13 20:55:01 +0000
commit02faaa93e729ccb5f614869f1c46d15d2b5502d3 (patch)
tree801d4bc4234f7613208048008967c81807dcb2f2 /Master/texmf-dist/tex/generic/babel/luababel.def
parent7cc38d15e4d65fc5198c6c25c70427fc7e175cfd (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.def232
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!