diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/babel/luababel.def')
-rw-r--r-- | Master/texmf-dist/tex/generic/babel/luababel.def | 77 |
1 files changed, 71 insertions, 6 deletions
diff --git a/Master/texmf-dist/tex/generic/babel/luababel.def b/Master/texmf-dist/tex/generic/babel/luababel.def index 5f489e8062d..fb2459868e8 100644 --- a/Master/texmf-dist/tex/generic/babel/luababel.def +++ b/Master/texmf-dist/tex/generic/babel/luababel.def @@ -417,7 +417,7 @@ \let\bbl@cjkintraspace\relax \directlua{ Babel = Babel or {} - require'babel-data-cjk.lua' + require('babel-data-cjk.lua') Babel.cjk_enabled = true function Babel.cjk_linebreak(head) local GLYPH = node.id'glyph' @@ -1413,21 +1413,86 @@ end \ifcase\bbl@thetextdir \let\bbl@pictresetdir\relax \else - \bodydir TLT + \ifcase#1\bodydir TLT % Remember this sets the inner boxes + \or\textdir TLT + \else\bodydir TLT \textdir TLT + \fi % \(text|par)dir required in pgf: \def\bbl@pictresetdir{\bodydir TRT\pardir TRT\textdir TRT\relax}% \fi}% \ifx\AddToHook\@undefined\else - \AddToHook{env/picture/begin}{\bbl@pictsetdir\z@}% + \AddToHook{env/picture/begin}{\bbl@pictsetdir\tw@}% + \directlua{ + Babel.get_picture_dir = true + Babel.picture_has_bidi = 0 + function Babel.picture_dir (head) + if not Babel.get_picture_dir then return head end + for item in node.traverse(head) do + if item.id == node.id'glyph' then + local itemchar = item.char + % TODO. Copypaste pattern from Babel.bidi (-r) + local chardata = Babel.characters[itemchar] + local dir = chardata and chardata.d or nil + if not dir then + for nn, et in ipairs(Babel.ranges) do + if itemchar < et[1] then + break + elseif itemchar <= et[2] then + dir = et[3] + break + end + end + end + if dir and (dir == 'al' or dir == 'r') then + Babel.picture_has_bidi = 1 + end + end + end + return head + end + luatexbase.add_to_callback("hpack_filter", Babel.picture_dir, + "Babel.picture_dir") + }% + \AtBeginDocument{% + \long\def\put(#1,#2)#3{% + \@killglue + % Try: + \ifx\bbl@pictresetdir\relax + \def\bbl@tempc{0}% + \else + \directlua{ + Babel.get_picture_dir = true + Babel.picture_has_bidi = 0 + }% + \setbox\z@\hb@xt@\z@{% + \@defaultunitsset\@tempdimc{#1}\unitlength + \kern\@tempdimc + #3\hss}% + \edef\bbl@tempc{\directlua{tex.print(Babel.picture_has_bidi)}}% + \fi + % Do: + \@defaultunitsset\@tempdimc{#2}\unitlength + \raise\@tempdimc\hb@xt@\z@{% + \@defaultunitsset\@tempdimc{#1}\unitlength + \kern\@tempdimc + {\ifnum\bbl@tempc>\z@\bbl@pictresetdir\fi#3}\hss}% + \ignorespaces}% + \MakeRobust\put}% \fi \AtBeginDocument {\ifx\tikz@atbegin@node\@undefined\else \let\bbl@OL@pgfpicture\pgfpicture \bbl@sreplace\pgfpicture{\pgfpicturetrue}% - {\bbl@pictsetdir\@ne\pgfpicturetrue}% - \bbl@add\pgfsys@beginpicture{\bbl@pictsetdir\@ne}% + {\bbl@pictsetdir\z@\pgfpicturetrue}% + \bbl@add\pgfsys@beginpicture{\bbl@pictsetdir\z@}% \bbl@add\tikz@atbegin@node{\bbl@pictresetdir}% - \fi}} + \bbl@sreplace\tikz{\begingroup}% + {\begingroup\bbl@pictsetdir\tw@}% + \fi + \ifx\AddToHook\@undefined\else + \AddToHook{env/tcolorbox/begin}{\bbl@pictsetdir\@ne}% + \fi + }} {} \IfBabelLayout{counters}% {\let\bbl@OL@@textsuperscript\@textsuperscript |