%% 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
