%% This file is luabidi.sty %% This is part of the luabidi package %% %% Copyright © 2009 Vafa Khalighi, 2013--2023 Arthur Reutenauer, %% 2019--2023 Jürgen Spitzmüller %% %%%% It may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c %% of this license or (at your option) any later version. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{luabidi}[2023/10/01 v0.6 Bidirectional typesetting in LuaTeX] \RequirePackage{etoolbox} % % Package options % \DeclareOption{arabmaths}{\input{luabidi-arabmaths.def}} \newif\ifluabidi@autofootnoterule \DeclareOption{autofootnoterule}{\luabidi@autofootnoteruletrue} \newif\ifluabidi@textwidthfootnoterule \DeclareOption{textwidthfootnoterule}{\luabidi@textwidthfootnoteruletrue} \ProcessOptions % % General command and switches % \newif\if@RTL \newif\if@RTLmain \def\setRTLmain{\@RTLmaintrue\pagedir TRT\bodydir TRT\pardir TRT\textdir TRT} \def\setRTL{\@RTLtrue\bodydir TRT\pardir TRT\textdir TRT} \let\setRL=\setRTL \def\setLTR{\@RTLfalse\bodydir TLT\pardir TLT\textdir TLT} \let\setLR=\setLTR \let\unsetRTL=\setLTR \let\unsetLTR=\setRTL \def\RTL{\par\@RTLtrue\bodydir TRT\pardir TRT\textdir TRT} \def\endRTL{\par} \def\LTR{\par\@RTLfalse\bodydir TLT\pardir TLT \textdir TLT} \def\endLTR{\par} \def\@ensure@RTL#1{\if@RTL #1\else\RLE{#1}\fi} \def\@ensure@LTR#1{\if@RTL\LRE{#1}\else #1\fi} \def\@ensure@dir#1{\if@RTL\RLE{#1}\else{#1}\fi} \let\@ensure@maindir=\@ensuredir \let\n@xt=\ \DeclareRobustCommand*\LRE{\protect\pLRE} \def\pLRE{\protect\afterassignment\moreLRE \let\n@xt= } \DeclareRobustCommand*\RLE{\protect\pRLE} \def\pRLE{\protect\afterassignment\moreRLE \let\n@xt= } \def\bracetext{\ifcat\n@xt{\else\ifcat\n@xt}\fi \errmessage{Missing left brace has been substituted}\fi \bgroup} \def\moreLRE{\bracetext \leavevmode\@RTLfalse\textdir TLT} \def\moreRLE{\bracetext \leavevmode\@RTLtrue\textdir TRT} \let\LR=\LRE \let\RL=\RLE \def\hboxR#1{\hbox{\RL{#1}}} % % If \pagedir is different from \pardir then \shapemode needs to be 2 for \parshape in lists % \let\luabidi@OL@list\list \patchcmd\list{\parshape}{\luabidi@parshape}{}{} \def\luabidi@parshape#1#2#3{% \parshape #1 #2 #3 % \ifnum\pagedirection=\pardirection\else \shapemode\tw@ \fi} % % making sure \bodydir is the same as \pagedir at \output time % \output\expandafter{\expandafter\bodydir\expandafter\pagedir\the\output} % % The following registers are set to 1 to fix some bugs in the engine. See sections 3.3.3 and 7.5.3 of LuaTeX's manual. % \matheqdirmode=1 \breakafterdirmode=1 % % Footnotes % \input{luabidi-footnotes.def} \ifluabidi@textwidthfootnoterule \textwidthfootnoterule \fi % This needs to be loaded late because of the switch \AtEndPreamble{% \ifluabidi@autofootnoterule \input{luabidi-autofootnoterule.def} \fi } \endinput