summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex/bidi/biditools.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/bidi/biditools.sty')
-rw-r--r--Master/texmf-dist/tex/xelatex/bidi/biditools.sty1163
1 files changed, 1163 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/bidi/biditools.sty b/Master/texmf-dist/tex/xelatex/bidi/biditools.sty
new file mode 100644
index 00000000000..471cbe9e384
--- /dev/null
+++ b/Master/texmf-dist/tex/xelatex/bidi/biditools.sty
@@ -0,0 +1,1163 @@
+%%
+%% This is file `biditools.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% bidi.dtx (with options: `table,biditools.sty')
+%%
+%% __________________________________________________
+%% Copyright (c) 2009--2016 Vafa Khalighi <persian-tex@tug.org>
+%%
+%% It may be distributed and/or modified under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is “author-maintained” (as per LPPL maintenance status)
+%% by Vafa Khalighi.
+%%
+%%
+%% \CheckSum{46416}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{biditools}[2015/11/14 v0.8 Programming tools for bidi package]
+\providecommand{\@bidi@saveprimitive}[2]{\begingroup\escapechar`\\\relax
+ \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}%
+ \ifx\@tempa\@tempb \global\let#2#1%
+ \else
+ \edef\@tempb{\meaning#2}%
+ \ifx\@tempa\@tempb
+ \else
+ \@latex@error{Unable to properly define \string#2; primitive
+ \noexpand#1no longer primitive}\@eha
+ \fi
+ \fi
+ \endgroup}
+\newtoks\@bidi@envbody
+\newtoks\@bidi@emptytoks
+\def\bidi@addto@envbody#1{\global\@bidi@envbody\expandafter{\the\@bidi@envbody#1}}
+\def\bidi@collect@body#1{%
+ \@bidi@envbody{\expandafter#1\expandafter{\the\@bidi@envbody}}%
+ \edef\bidi@process@envbody{\the\@bidi@envbody\noexpand\end{\@currenvir}}%
+ \@bidi@envbody\@bidi@emptytoks \def\begin@bidi@stack{b}%
+ \begingroup
+ \expandafter\let\csname\@currenvir\endcsname\bidi@collect@@body
+ \edef\bidi@process@envbody{\expandafter\noexpand\csname\@currenvir\endcsname}%
+ \bidi@process@envbody
+}
+\def\bidi@push@begins#1\begin#2{%
+ \ifx\end#2\else b\expandafter\bidi@push@begins\fi
+}
+\def\bidi@collect@@body#1\end#2{%
+ \edef\begin@bidi@stack{\bidi@push@begins#1\begin\end \expandafter\@gobble\begin@bidi@stack}%
+ \ifx\@empty\begin@bidi@stack
+ \endgroup
+ \@checkend{#2}%
+ \bidi@addto@envbody{#1}%
+ \else
+ \bidi@addto@envbody{#1\end{#2}}%
+ \fi
+ \bidi@process@envbody % A little tricky! Note the grouping
+}
+\long\def\bidi@addto@long@envbody#1{\global\@bidi@envbody\expandafter{\the\@bidi@envbody#1}}
+\long\def\bidi@collect@long@body#1{%
+ \@bidi@envbody{\expandafter#1\expandafter{\the\@bidi@envbody}}%
+ \edef\bidi@process@envbody{\the\@bidi@envbody\noexpand\end{\@currenvir}}%
+ \@bidi@envbody\@bidi@emptytoks \def\begin@bidi@stack{b}%
+ \begingroup
+ \expandafter\let\csname\@currenvir\endcsname\bidi@collect@long@@body
+ \edef\bidi@process@envbody{\expandafter\noexpand\csname\@currenvir\endcsname}%
+ \bidi@process@envbody
+}
+\long\def\bidi@push@long@begins#1\begin#2{%
+ \ifx\end#2\else b\expandafter\bidi@push@long@begins\fi
+}
+\long\def\bidi@collect@long@@body#1\end#2{%
+ \edef\begin@bidi@stack{\bidi@push@long@begins#1\begin\end \expandafter\@gobble\begin@bidi@stack}%
+ \ifx\@empty\begin@bidi@stack
+ \endgroup
+ \@checkend{#2}%
+ \bidi@addto@long@envbody{#1}%
+ \else
+ \bidi@addto@long@envbody{#1\end{#2}}%
+ \fi
+ \bidi@process@envbody % A little tricky! Note the grouping
+}
+\long\def\bidi@new@ifnextchar#1#2#3{%
+ \let\reserved@d= #1%
+ \def\reserved@a{#2}\def\reserved@b{#3}%
+ \futurelet\@let@token\bidi@new@ifnch
+}
+\def\bidi@new@ifnch{%
+ \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi
+ \reserved@b
+}
+\def\bidi@matrix@check#1{%
+ \expandafter\ifx\csname\@currenvir\endcsname#1%
+ \else\bidi@matrix@error#1%
+ \expandafter\@gobble
+ \fi
+}
+\def\bidi@matrix@error#1{%
+ \PackageError{biditools}{%
+Old form `\string#1' should be \string\begin{\expandafter\@gobble\string#1}%
+ }{%
+`\string#1{...}' is old bidi package syntax whose use is
+ill-advised in the old versions of bidi package.%
+ }%
+}
+\def\@tagsextension{clo}
+\def\@definitionfileextension{def}
+\def\@texfileextension{tex}
+\def\@iftagsloaded{\@ifl@aded\@tagsextension}
+\def\@ifdefinitionfileloaded{\@ifl@aded\@definitionfileextension}
+\def\@iftexfileloaded{\@ifl@aded\@texfileextension}
+\def\eqnewif#1#2{%
+ \count@\escapechar \escapechar\m@ne
+ \let#1\iffalse
+ \let#2\iffalse
+ \eq@if#1#2\iftrue
+ \eq@if#1#2\iffalse
+ \escapechar\count@}
+\def\eq@if#1#2#3{%
+ \expandafter\def\csname\expandafter\@gobbletwo\string#1%
+ \expandafter\@gobbletwo\string#3\endcsname
+ {\let#1#3%
+ \let#2#3}%
+ \expandafter\def\csname\expandafter\@gobbletwo\string#2%
+ \expandafter\@gobbletwo\string#3\endcsname
+ {\let#2#3%
+ \let#1#3}}
+\def\@bidi@removefromreset#1#2{{%
+ \expandafter\let\csname c@#1\endcsname\@bidi@removefromreset
+ \def\@elt##1{%
+ \expandafter\ifx\csname c@##1\endcsname\@bidi@removefromreset
+ \else
+ \noexpand\@elt{##1}%
+ \fi}%
+ \expandafter\xdef\csname cl@#2\endcsname{%
+ \csname cl@#2\endcsname}}}
+\newcommand*{\if@bidi@csdef}[1]{%
+ \ifcsname#1\endcsname
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand*{\if@bidi@csundef}[1]{%
+ \ifcsname#1\endcsname
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\newcommand{\if@bidi@def}[1]{%
+ \ifdefined#1%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand{\if@bidi@undef}[1]{%
+ \ifdefined#1%
+ \ifx#1\relax
+ \expandafter\expandafter
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\expandafter
+ \expandafter\@secondoftwo
+ \fi
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\newcommand{\if@bidi@blank}[1]{% from url.sty
+ \bidi@ifblank@i#1&&\@secondoftwo\@firstoftwo:}
+\long\def\bidi@ifblank@i#1#2&#3#4#5:{#4}
+\newcommand{\bidi@notblank}[1]{%
+ \bidi@ifblank@i#1&&\@firstoftwo\@secondoftwo:}
+\newcommand{\if@bidi@defmacro}{}
+\long\edef\if@bidi@defmacro#1{%
+ \noexpand\expandafter\noexpand\bidi@ifdefmacro
+ \noexpand\meaning#1\detokenize{macro}:&}
+\edef\bidi@ifdefmacro{%
+ \def\noexpand\bidi@ifdefmacro##1\detokenize{macro}:##2&}
+\bidi@ifdefmacro{\bidi@notblank{#2}}
+\newcommand*{\if@bidi@csmacro}[1]{%
+ \if@bidi@csdef{#1}
+ {\expandafter\if@bidi@defmacro\csname#1\endcsname}
+ {\@secondoftwo}}
+\newcommand{\if@bidi@defprimitive}[1]{%
+ \ifprimitive#1%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand{\if@bidi@csprimitive}[1]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup%
+ \expandafter\ifprimitive\csname#1\endcsname%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+\newcommand*{\bidi@csdefcs}[2]{%
+\expandafter\@ifdefinable \csname#1\endcsname{%
+\expandafter\def\csname#1\expandafter\endcsname{\csname#2\endcsname}}}
+\newcommand*{\bidi@csletcs}[2]{%
+\expandafter\@ifdefinable \csname#1\endcsname{%
+\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname}}
+\newcommand*{\bidi@cslet}[2]{%
+\expandafter\@ifdefinable \csname#1\endcsname{%
+\expandafter\let\csname#1\endcsname#2}}
+\newcommand{\bidi@namelongdef}[1]{%
+ \long\expandafter\def\csname #1\endcsname}
+\def\bidi@ensure@newcommand{\@star@or@long\bidi@ensure@new@command}
+\def\bidi@ensure@new@command#1{%
+ \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup
+ \expandafter\if@bidi@csundef\@gtempa
+ {\new@command#1}{\relax%
+ \let\@ifdefinable\@rc@ifdefinable%
+ \new@command#1}}
+\def\bidi@ensure@newlength#1{\if@bidi@undef#1{\newskip#1}{}}
+
+\protected\def\bidi@error{\PackageError{bidi}}
+\protected\def\bidi@warning{\PackageWarning{bidi}}
+\protected\def\bidi@info{\PackageInfo{bidi}}
+
+\newcommand*{\bidi@newrobustcmd}{}
+\protected\def\bidi@newrobustcmd{\@star@or@long\bidi@new@command}
+
+\def\bidi@new@command#1{\@testopt{\bidi@newcommand#1}0}
+
+\def\bidi@newcommand#1[#2]{%
+ \@ifnextchar[%]
+ {\bidi@xargdef#1[#2]}
+ {\ifx\l@ngrel@x\relax
+ \let\l@ngrel@x\protected
+ \else
+ \protected\def\l@ngrel@x{\protected\long}%
+ \fi
+ \@argdef#1[#2]}}
+
+\long\def\bidi@xargdef#1[#2][#3]#4{%
+ \@ifdefinable#1{%
+ \expandafter\protected
+ \expandafter\def
+ \expandafter#1%
+ \expandafter{%
+ \expandafter\@testopt
+ \csname\string#1\endcsname{#3}}%
+ \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}}
+
+\bidi@newrobustcmd*{\bidi@renewrobustcmd}{\@star@or@long\bidi@renew@command}
+
+\def\bidi@renew@command#1{%
+ \if@bidi@undef{#1}
+ {\bidi@error{\string#1 undefined}\@ehc}
+ {}%
+ \let\@ifdefinable\@rc@ifdefinable
+ \bidi@new@command#1}
+
+\bidi@newrobustcmd*{\bidi@providerobustcmd}{\@star@or@long\bidi@provide@command}
+
+\def\bidi@provide@command#1{%
+ \if@bidi@undef{#1}
+ {\def\reserved@a{\bidi@new@command#1}}
+ {\def\reserved@a{\bidi@renew@command\reserved@a}}%
+ \reserved@a}
+
+\newcommand*{\bidi@csuse}[1]{%
+ \ifcsname#1\endcsname
+ \csname#1\expandafter\endcsname
+ \fi}
+
+\newcommand{\bidi@expandonce}[1]{%
+ \unexpanded\expandafter{#1}}
+
+\def\bidi@protected{%
+ \let\@@protect\protect
+ \let\protect\@unexpandable@protect
+ \afterassignment\restore@protect}
+
+\bidi@newrobustcmd{\bidi@appto}[2]{%
+ \if@bidi@undef{#1}
+ {\edef#1{\unexpanded{#2}}}
+ {\edef#1{\bidi@expandonce#1\unexpanded{#2}}}}
+\bidi@newrobustcmd{\bidi@eappto}[2]{%
+ \if@bidi@undef{#1}
+ {\edef#1{#2}}
+ {\edef#1{\bidi@expandonce#1#2}}}
+\bidi@newrobustcmd{\bidi@gappto}[2]{%
+ \if@bidi@undef{#1}
+ {\xdef#1{\unexpanded{#2}}}
+ {\xdef#1{\bidi@expandonce#1\unexpanded{#2}}}}
+\bidi@newrobustcmd{\bidi@xappto}[2]{%
+ \if@bidi@undef{#1}
+ {\xdef#1{#2}}
+ {\xdef#1{\bidi@expandonce#1#2}}}
+
+\bidi@newrobustcmd*{\bidi@protected@eappto}{\bidi@protected\bidi@eappto}
+\bidi@newrobustcmd*{\bidi@protected@xappto}{\bidi@protected\bidi@xappto}
+
+\bidi@newrobustcmd{\bidi@preto}[2]{%
+ \if@bidi@undef{#1}
+ {\edef#1{\unexpanded{#2}}}
+ {\edef#1{\unexpanded{#2}\bidi@expandonce#1}}}
+\bidi@newrobustcmd{\bidi@epreto}[2]{%
+ \if@bidi@undef{#1}
+ {\edef#1{#2}}
+ {\edef#1{#2\bidi@expandonce#1}}}
+\bidi@newrobustcmd{\bidi@gpreto}[2]{%
+ \if@bidi@undef{#1}
+ {\xdef#1{\unexpanded{#2}}}
+ {\xdef#1{\unexpanded{#2}\bidi@expandonce#1}}}
+\bidi@newrobustcmd{\bidi@xpreto}[2]{%
+ \if@bidi@undef{#1}
+ {\xdef#1{#2}}
+ {\xdef#1{#2\bidi@expandonce#1}}}
+
+\bidi@newrobustcmd*{\bidi@protected@epreto}{\bidi@protected\bidi@epreto}
+\bidi@newrobustcmd*{\bidi@protected@xpreto}{\bidi@protected\bidi@xpreto}
+
+\bidi@newrobustcmd*{\bidi@csappto}[1]{\expandafter\bidi@appto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@cseappto}[1]{\expandafter\bidi@eappto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@csgappto}[1]{\expandafter\bidi@gappto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@csxappto}[1]{\expandafter\bidi@xappto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@protected@cseappto}{\bidi@protected\bidi@cseappto}
+\bidi@newrobustcmd*{\bidi@protected@csxappto}{\bidi@protected\bidi@csxappto}
+
+\bidi@newrobustcmd*{\bidi@cspreto}[1]{\expandafter\bidi@preto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@csepreto}[1]{\expandafter\bidi@epreto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@csgpreto}[1]{\expandafter\bidi@gpreto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@csxpreto}[1]{\expandafter\bidi@xpreto\csname#1\endcsname}
+\bidi@newrobustcmd*{\bidi@protected@csepreto}{\bidi@protected\bidi@csepreto}
+\bidi@newrobustcmd*{\bidi@protected@csxpreto}{\bidi@protected\bidi@csxpreto}
+
+\bidi@newrobustcmd{\if@bidi@patchable}{%
+ \bidi@dbg@trce\if@bidi@patchable
+ \begingroup
+ \@makeother\#%
+ \@ifstar\bidi@ifpatchable@i\bidi@ifpatchable}
+
+\long\def\bidi@ifpatchable#1#2{%
+ \endgroup
+ \bidi@dbg@init#1%
+ \if@bidi@undef{#1}
+ {\bidi@dbg@fail{def}\@secondoftwo}
+ {\bidi@dbg@info{def}%
+ \if@bidi@defmacro{#1}
+ {\bidi@dbg@info{mac}%
+ \bidi@ifscanable{#1}
+ {\bidi@ifhashcheck{#2}
+ {\bidi@dbg@info{tok}%
+ \bidi@ifpattern#1{#2}
+ {\bidi@dbg@info{pat}%
+ \bidi@dbg@info{pos}\@firstoftwo}
+ {\bidi@dbg@fail{pat}\@secondoftwo}}
+ {\bidi@dbg@fail{hsh}\@secondoftwo}}
+ {\bidi@dbg@fail{tok}\@secondoftwo}}
+ {\bidi@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\bidi@ifpatchable@i#1{%
+ \endgroup
+ \bidi@dbg@init#1%
+ \if@bidi@undef{#1}
+ {\bidi@dbg@fail{def}\@secondoftwo}
+ {\bidi@dbg@info{def}%
+ \if@bidi@defmacro{#1}
+ {\bidi@dbg@info{mac}%
+ \if@bidi@defparam{#1}
+ {\bidi@dbg@info{prm}%
+ \bidi@ifscanable{#1}
+ {\bidi@dbg@info{tok}%
+ \bidi@dbg@info{pos}\@firstoftwo}
+ {\bidi@dbg@fail{tok}\@secondoftwo}}
+ {\bidi@dbg@info{prl}%
+ \if@bidi@defprotected{#1}
+ {\bidi@dbg@info{pro}}
+ {}%
+ \bidi@dbg@info{pos}\@firstoftwo}}
+ {\bidi@dbg@fail{mac}\@secondoftwo}}}
+
+\bidi@newrobustcmd*{\bidi@patchcmd}{%
+ \bidi@dbg@trce\bidi@patchcmd
+ \begingroup
+ \@makeother\#%
+ \bidi@@patchcmd}
+
+\newcommand{\bidi@@patchcmd}[4][########1]{%
+ \bidi@ifpatchable#2{#3}
+ {\bidi@dbg@succ{ret}%
+ \begingroup
+ \edef\bidi@resrvda{%
+ \def\noexpand\bidi@resrvda####1\detokenize{macro:}####2->####3&{%
+ #1\def\string\bidi@resrvda\space####2{\noexpand\bidi@resrvdb####3&}}%
+ \def\noexpand\bidi@resrvdb####1\detokenize{#3}####2&{%
+ ####1\detokenize{#4}####2}%
+ \edef\noexpand\bidi@resrvda{%
+ \noexpand\bidi@resrvda\meaning#2&}}%
+ \bidi@resrvda
+ \bidi@patchcmd@scantoks\bidi@resrvda
+ \let#2\bidi@resrvda
+ \bidi@undef\bidi@resrvda
+ \@firstoftwo}
+ {\@secondoftwo}}
+
+\def\bidi@patchcmd@scantoks#1{%
+ \edef\bidi@resrvda{\endgroup
+ \unexpanded{\makeatletter\scantokens}{#1}%
+ \catcode\number`\@=\the\catcode`\@\relax}%
+ \bidi@resrvda}
+
+\newcommand\bidi@isloaded[2][]{
+ \expandafter\ifx\csname if@bidi@#2loaded@\endcsname\relax
+ \expandafter\newif\csname if@bidi@#2loaded@\endcsname
+ \fi
+ \@ifpackageloaded{#2}
+ {\csname @bidi@#2loaded@true\endcsname #1}
+ {\csname @bidi@#2loaded@false\endcsname}}
+
+\protected\def\bidi@ifscanable#1{%
+ \begingroup
+ \edef\bidi@resrvda{%
+ \def\noexpand\bidi@resrvda####1\detokenize{macro}:####2->####3&{%
+ ####1\def\string\bidi@resrvda####2{####3}}%
+ \edef\noexpand\bidi@resrvda{\noexpand\bidi@resrvda\meaning#1&}}%
+ \bidi@resrvda
+ \makeatletter
+ \scantokens\expandafter{\bidi@resrvda}%
+ \expandafter\endgroup\ifx#1\bidi@resrvda
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
+\protected\long\def\bidi@ifhashcheck#1{%
+ \begingroup
+ \edef\bidi@resrvda{\detokenize{#1}}%
+ \expandafter\endgroup
+ \expandafter\bidi@ifhashcheck@i\meaning\bidi@resrvda&}
+
+\edef\bidi@ifhashcheck@i#1&{%
+ \noexpand\expandafter
+ \noexpand\bidi@ifhashcheck@ii
+ \noexpand\strip@prefix#1\string#\string#&}
+
+\edef\bidi@ifhashcheck@ii{%
+ \def\noexpand\bidi@ifhashcheck@ii##1\string#\string###2&}
+\bidi@ifhashcheck@ii{\if@bidi@blank{#2}}
+
+\protected\long\def\bidi@ifpattern#1#2{%
+ \begingroup
+ \edef\bidi@resrvda{%
+ \def\noexpand\bidi@resrvda####1\detokenize{#2}####2&{%
+ \endgroup\noexpand\noexpand\noexpand\if@bidi@blank{####2}}%
+ \edef\noexpand\bidi@resrvda{\noexpand\bidi@resrvda
+ \expandafter\strip@prefix\meaning#1\detokenize{#2}&}%
+ \noexpand\bidi@resrvda}
+ \bidi@resrvda\@secondoftwo\@firstoftwo}
+
+\newcommand{\if@bidi@defparam}{}
+\long\edef\if@bidi@defparam#1{%
+ \noexpand\expandafter\noexpand\bidi@ifdefparam
+ \noexpand\meaning#1\detokenize{macro}:->&}
+\edef\bidi@ifdefparam{%
+ \def\noexpand\bidi@ifdefparam##1\detokenize{macro}:##2->##3&}
+\bidi@ifdefparam{\bidi@notblank{#2}}
+
+\newcommand{\if@bidi@defprotected}{}
+\long\edef\if@bidi@defprotected#1{%
+ \noexpand\expandafter\noexpand\bidi@ifdefprotected
+ \noexpand\meaning#1\string\protected&}
+\edef\bidi@ifdefprotected{%
+ \def\noexpand\bidi@ifdefprotected##1\string\protected##2&}
+\bidi@ifdefprotected{\bidi@notblank{#2}}
+
+\bidi@newrobustcmd{\bidi@undef}[1]{\let#1\bidi@undefined}
+
+\let\bidi@dbg@trce\@gobble
+\let\bidi@dbg@init\@gobble
+\let\bidi@dbg@info\@gobble
+\let\bidi@dbg@succ\@gobble
+\let\bidi@dbg@fail\@gobble
+
+\bidi@newrobustcmd*{\bidi@apptocmd}{%
+ \bidi@dbg@trce\bidi@apptocmd
+ \begingroup
+ \@makeother\#%
+ \bidi@hooktocmd\bidi@append}
+
+\bidi@newrobustcmd*{\bidi@pretocmd}{%
+ \bidi@dbg@trce\bidi@pretocmd
+ \begingroup
+ \@makeother\#%
+ \bidi@hooktocmd\bidi@prepend}
+
+\long\def\bidi@hooktocmd#1#2#3{%
+ \endgroup
+ \bidi@dbg@init#2%
+ \if@bidi@undef{#2}
+ {\bidi@dbg@fail{def}\@secondoftwo}
+ {\bidi@dbg@info{def}%
+ \if@bidi@defmacro{#2}
+ {\bidi@dbg@info{mac}%
+ \if@bidi@defparam{#2}
+ {\bidi@dbg@info{prm}%
+ \bidi@ifscanable{#2}
+ {\bidi@ifhashcheck{#3}
+ {\bidi@dbg@info{tok}%
+ \bidi@dbg@succ{ret}%
+ \bidi@hooktocmd@i#1#2{#3}%
+ \@firstoftwo}
+ {\bidi@dbg@fail{hsh}\@secondoftwo}}
+ {\bidi@dbg@fail{tok}\@secondoftwo}}
+ {\bidi@dbg@info{prl}%
+ \if@bidi@defprotected{#2}
+ {\bidi@dbg@info{pro}%
+ \bidi@dbg@succ{red}%
+ \protected}
+ {\bidi@dbg@succ{red}}%
+ \edef#2{#1{\bidi@expandonce#2}{\unexpanded{#3}}}%
+ \@firstoftwo}}
+ {\bidi@dbg@fail{mac}\@secondoftwo}}}
+
+\long\def\bidi@hooktocmd@i#1#2#3{%
+ \begingroup
+ \edef\bidi@resrvda{%
+ \def\noexpand\bidi@resrvda####1\detokenize{macro}:####2->####3&{%
+ ####1\def\string\bidi@resrvda\space####2{#1{####3}{\detokenize{#3}}}}%
+ \edef\noexpand\bidi@resrvda{%
+ \noexpand\bidi@resrvda\meaning#2&}}%
+ \bidi@resrvda
+ \bidi@patchcmd@scantoks\bidi@resrvda
+ \let#2\bidi@resrvda
+ \bidi@undef\bidi@resrvda}
+
+\long\def\bidi@append#1#2{#1#2}
+\long\def\bidi@prepend#1#2{#2#1}
+
+\bidi@newrobustcmd*{\bidi@AtEndPreamble}{\bidi@gappto\bidi@endpreamblehook}
+\newcommand*{\bidi@endpreamblehook}{}
+
+\bidi@preto\document{%
+ \endgroup
+ \let\bidi@AtEndPreamble\@firstofone
+ \bidi@endpreamblehook
+ \protected\def\bidi@AtEndPreamble{\@notprerr\@gobble}%
+ \bidi@undef\bidi@endpreamblehook
+ \begingroup}
+
+\bidi@newrobustcmd*{\bidi@AfterPreamble}{\AtBeginDocument}
+\bidi@AtEndPreamble{\let\bidi@AfterPreamble\@firstofone}
+
+\bidi@newrobustcmd*{\bidi@AfterEndPreamble}{\bidi@gappto\bidi@afterendpreamblehook}
+\newcommand*{\bidi@afterendpreamblehook}{}
+
+\bidi@appto\document{%
+ \let\bidi@AfterEndPreamble\@firstofone
+ \bidi@afterendpreamblehook
+ \protected\def\bidi@AfterEndPreamble{\@notprerr\@gobble}%
+ \bidi@undef\bidi@afterendpreamblehook
+ \ignorespaces}
+
+\AtEndDocument{\let\bidi@AfterEndPreamble\@gobble}
+
+\bidi@newrobustcmd*{\bidi@AfterEndDocument}{\bidi@gappto\bidi@afterenddocumenthook}
+\newcommand*{\bidi@afterenddocumenthook}{}
+
+\bidi@patchcmd\enddocument
+ {\deadcycles}
+ {\let\bidi@AfterEndDocument\@firstofone
+ \bidi@afterenddocumenthook
+ \deadcycles}
+ {}
+ {\let\bidi@@end\@@end
+ \def\@@end{%
+ \let\bidi@AfterEndDocument\@firstofone
+ \bidi@afterenddocumenthook
+ \bidi@@end}}
+
+\bidi@newrobustcmd{\bidi@AtBeginEnvironment}[1]{%
+ \bidi@csgappto{@bidi@begin@#1@hook}}
+
+\bidi@patchcmd\begin
+ {\csname #1\endcsname}
+ {\bidi@csuse{@bidi@begin@#1@hook}%
+ \csname #1\endcsname}
+ {}
+ {\bidi@warning{%
+ Patching '\string\begin' failed!\MessageBreak
+ '\string\bidi@AtBeginEnvironment' will not work\@gobble}}
+
+\bidi@newrobustcmd{\bidi@AtEndEnvironment}[1]{%
+ \bidi@csgappto{@bidi@end@#1@hook}}
+
+\bidi@patchcmd\end
+ {\csname end#1\endcsname}
+ {\bidi@csuse{@bidi@end@#1@hook}%
+ \csname end#1\endcsname}
+ {}
+ {\bidi@warning{%
+ Patching '\string\end' failed!\MessageBreak
+ '\string\bidi@AtEndEnvironment' will not work\@gobble}}
+
+\bidi@newrobustcmd{\bidi@BeforeBeginEnvironment}[1]{%
+ \bidi@csgappto{@bidi@beforebegin@#1@hook}}
+
+\bidi@pretocmd\begin
+ {\bidi@csuse{@bidi@beforebegin@#1@hook}}
+ {}
+ {\bidi@warning{%
+ Patching '\string\begin' failed!\MessageBreak
+ '\string\bidi@BeforeBeginEnvironment' will not work\@gobble}}
+
+\bidi@newrobustcmd{\bidi@AfterEndEnvironment}[1]{%
+ \bidi@csgappto{@bidi@afterend@#1@hook}}
+
+\bidi@patchcmd\end
+ {\if@ignore}
+ {\bidi@csuse{@bidi@afterend@#1@hook}%
+ \if@ignore}
+ {}
+ {\bidi@warning{%
+ Patching '\string\end' failed!\MessageBreak
+ '\string\bidi@AfterEndEnvironment' will not work\@gobble}}
+
+\CheckCommand{\InputIfFileExists}[2]{%
+ \IfFileExists{#1}%
+ {#2\@addtofilelist{#1}\@@input \@filef@und}}
+
+\renewcommand{\InputIfFileExists}[2]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #1-@bidi@alias\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \bidi@replacefile@msg{\csname #1-@bidi@alias\endcsname}{#1}%
+ \expandafter\@firstoftwo
+ \fi
+ {%
+ \expandafter\InputIfFileExists\expandafter{\csname
+ #1-@bidi@alias\endcsname}{#2}%
+ }%
+ {\IfFileExists{#1}{%
+ \bidi@load@hook{before}{#1}%
+ #2\@addtofilelist{#1}%
+ \@@input \@filef@und
+ \bidi@load@hook{after}{#1}%
+ }}%
+}
+
+\newcommand*{\bidi@@loadwithoptions}{}
+\newcommand*{\bidi@loadwithoptions}{}
+\let\bidi@loadwithoptions\@loadwithoptions
+
+\renewcommand*{\@loadwithoptions}[3]{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #3.#1-@bidi@aliasname\endcsname\relax
+ \def\bidi@@loadwithoptions{\bidi@loadwithoptions{#1}{#2}{#3}}%
+ \else
+ \bidi@replacefile@msg{\csname #3.#1-@bidi@aliasname\endcsname.#1}{#3.#1}%
+ \def\bidi@@loadwithoptions{%
+ \@loadwithoptions{#1}{#2}{\csname #3.#1-@bidi@aliasname\endcsname}%
+ }%
+ \fi
+ \bidi@@loadwithoptions
+}
+
+\newcommand*{\bidi@onefilewithoptions}{}
+\let\bidi@onefilewithoptions\@onefilewithoptions
+\def\@onefilewithoptions#1[#2][#3]#4{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname #1.#4-@bidi@aliasname\endcsname\relax
+ \def\bidi@@onefilewithoptions{\bidi@onefilewithoptions{#1}}%
+ \else
+ \bidi@replacefile@msg{\csname #1.#4-@bidi@aliasname\endcsname.#4}{#1.#4}%
+ \edef\bidi@@onefilewithoptions{%
+ \noexpand\@onefilewithoptions{\csname #1.#4-@bidi@aliasname\endcsname}}%
+ \fi
+ \bidi@@onefilewithoptions[{#2}][{#3}]{#4}%
+ \bidi@load@hook{lateafter}{#1.#4}%
+}
+
+\newcommand*{\bidi@ReplaceInput}[2]{%
+ \expandafter\edef\csname #1-@bidi@alias\endcsname{#2}%
+}
+
+\newcommand*{\bidi@UnReplaceInput}[1]{%
+ \ifcsname #1-@bidi@alias\endcsname
+ \expandafter\let\csname #1-@bidi@alias\endcsname\relax
+ \fi
+}
+
+\newcommand*{\@bidi@replacefilewithext}[3]{%
+ \expandafter\edef\csname #1.#3-@bidi@aliasname\endcsname{#2}%
+ }
+\newcommand*{\bidi@ReplacePackage}[2]{%
+ \@bidi@replacefilewithext{#1}{#2}\@pkgextension
+}
+\newcommand*{\bidi@ReplaceClass}[2]{%
+ \@bidi@replacefilewithext{#1}{#2}\@clsextension
+}
+\newcommand*{\@bidi@unreplacefilewithext}[2]{%
+ \ifcsname #1.#2-@bidi@aliasname\endcsname
+ \expandafter\let\csname #1.#2-@bidi@aliasname\endcsname\relax
+ \fi
+}
+\newcommand*{\bidi@UnReplacePackage}[1]{%
+ \@bidi@unreplacefilewithext{#1}\@pkgextension
+}
+\newcommand*{\bidi@UnReplaceClass}[1]{%
+ \@bidi@unreplacefilewithext{#1}\@clsextension
+}
+\newcommand*{\bidi@replacefile@msg}[2]{%
+ \PackageInfo{biditools}{inputing `#1' instead of `#2'}%
+}
+
+\newcommand*{\bidi@load@hook}[2]{%
+ \@ifundefined{#2-@#1}{}{%
+ \@nameuse{#2-@#1}%
+ \expandafter\let\csname #2-@#1\endcsname=\relax}}
+\newcommand*{\bidi@set@load@hook}[2]{%
+ \@ifundefined{#2-@#1}{\@namedef{#2-@#1}{}}{}%
+ \expandafter\g@addto@macro\csname #2-@#1\endcsname}
+\newcommand*{\bidi@BeforeFile}{\bidi@set@load@hook{before}}
+\newcommand*{\bidi@AfterFile}{\bidi@set@load@hook{after}}
+\newcommand*{\bidi@BeforeClass}[1]{%
+ \bidi@set@load@hook{before}{#1.\@clsextension}}
+\newcommand*{\bidi@AfterClass}{%
+ \@ifstar {\@s@bidi@AfterClass}{%
+ \@ifnextchar +\@@bidi@AfterClass{%
+ \@ifnextchar !\@@@bidi@AfterClass\@bidi@AfterClass
+ }%
+ }%
+}
+
+\newcommand*{\@@@bidi@AfterClass}[2]{%
+ \begingroup\ifx\csname #2.\@clsextension-h@@k\endcsname\relax
+ \aftergroup\@s@bidi@AfterClass
+ \else
+ \aftergroup\bidi@AfterAtEndOfClass
+ \fi
+ \endgroup{#2}%
+}
+
+\newcommand*{\bidi@AfterAtEndOfClass}[1]{%
+ \bidi@set@load@hook{lateafter}{#1.\@clsextension}}
+\newcommand*{\@@bidi@AfterClass}[2]{%
+ \begingroup
+ \expandafter\ifx\csname #2.\@clsextension-h@@k\endcsname\relax
+ \aftergroup\@s@bidi@AfterClass
+ \else
+ \aftergroup\@bidi@AfterClass
+ \fi
+ \endgroup{#2}%
+}
+
+\newcommand*{\@bidi@AfterClass}[1]{%
+ \bidi@set@load@hook{after}{#1.\@clsextension}}
+\newcommand*{\@s@bidi@AfterClass}[1]{%
+ \begingroup
+ \@ifclassloaded{#1}{%
+ \aftergroup\@secondoftwo
+ }{%
+ \aftergroup\@bidi@AfterClass
+ }%
+ \endgroup
+ {#1}%
+}
+
+\newcommand*{\bidi@BeforePackage}[1]{%
+ \bidi@set@load@hook{before}{#1.\@pkgextension}}
+\newcommand*{\bidi@AfterPackage}{%
+ \@ifstar {\@s@bidi@AfterPackage}{%
+ \@ifnextchar +\@@bidi@AfterPackage{%
+ \@ifnextchar !\@@@bidi@AfterPackage\@bidi@AfterPackage
+ }%
+ }%
+}
+\newcommand*{\@@@bidi@AfterPackage}[2]{%
+ \begingroup\ifx\csname #2.\@pkgextension-h@@k\endcsname\relax
+ \aftergroup\@s@bidi@AfterPackage
+ \else
+ \aftergroup\bidi@AfterAtEndOfPackage
+ \fi
+ \endgroup{#2}%
+}
+\newcommand*{\bidi@AfterAtEndOfPackage}[1]{%
+ \bidi@set@load@hook{lateafter}{#1.\@pkgextension}}
+\newcommand*{\@@bidi@AfterPackage}[2]{%
+ \begingroup
+ \expandafter\ifx\csname #2.\@pkgextension-h@@k\endcsname\relax
+ \aftergroup\@s@bidi@AfterPackage
+ \else
+ \aftergroup\@bidi@AfterPackage
+ \fi
+ \endgroup{#2}%
+}
+\newcommand*{\@bidi@AfterPackage}[1]{%
+ \bidi@set@load@hook{after}{#1.\@pkgextension}}
+\newcommand*{\@s@bidi@AfterPackage}[1]{%
+ \begingroup
+ \@ifpackageloaded{#1}{%
+ \aftergroup\@secondoftwo
+ }{%
+ \aftergroup\@bidi@AfterPackage
+ }%
+ \endgroup
+ {#1}%
+}
+
+\newcommand*{\bidi@excludedpackages}{}
+\let\bidi@excludedpackages\@empty
+\newcommand*{\bidi@saved@RequirePackage}{}
+\newcommand*{\bidi@PreventPackageFromLoading}{%
+ \@ifstar{\@bidi@PreventPackageFromLoading\PackageInfo}%
+ {\@bidi@PreventPackageFromLoading\PackageWarning}%
+}
+\newcommand*{\@bidi@PreventPackageFromLoading}[1]{%
+ \@ifnextchar [%]
+ {\@@bidi@PreventPackageFromLoading#1}{\@@bidi@PreventPackageFromLoading#1[]}%
+}
+\newcommand*{\@@bidi@PreventPackageFromLoading}{}
+
+\def\@@bidi@PreventPackageFromLoading#1[#2]#3{%
+ \edef\reserved@b{\zap@space#3 \@empty}%
+ \ifx \reserved@b\@empty
+ #1{biditools}{%
+ \string\bidi@PreventPackageFromLoading\space with empty packages\MessageBreak
+ argument ignored%
+ }%
+ \else
+ \ifx\bidi@excludedpackages\@empty
+ \let\bidi@saved@RequirePackage\RequirePackage
+ \let\RequirePackage\bidi@RequirePackage
+ \def\reserved@a##1##{%
+ \@latex@error
+ {\noexpand \usepackage before \string\documentclass}%
+ {\noexpand \usepackage may only appear in the document
+ preamble, i.e.,\MessageBreak
+ between \noexpand\documentclass and
+ \string\begin{document}.}%
+ \@gobble}%
+ \ifx\reserved@a\usepackage\else
+ \ifx\usepackage\bidi@saved@RequirePackage\else
+ \PackageWarning{biditools}{%
+ Maybe serious problem: unexpected definition of\MessageBreak
+ \string\usepackage
+ }%
+ \fi
+ \let\usepackage\RequirePackage
+ \fi
+ \fi
+ \expandafter\@for \expandafter\reserved@a\expandafter:\expandafter=%
+ \reserved@b\do {%
+ \ifx\reserved@a\@empty
+ #1{biditools}{%
+ empty package argument for
+ \string\bidi@PreventPackageFromLoading\MessageBreak
+ ignored%
+ }%
+ \else
+ \expandafter\@ifpackageloaded\expandafter{\reserved@a}{%
+ #1{biditools}{%
+ package `\reserved@a' already loaded.\MessageBreak
+ Cannot prevent it from beeing loaded%
+ }%
+ }{%
+ \edef\bidi@excludedpackages{\bidi@excludedpackages,%
+ \reserved@a}%
+ \if\relax\detokenize{#2}\relax\else
+ \@ifundefined{bidi@exclude@package@\reserved@a @do}{%
+ \@namedef{bidi@exclude@package@\reserved@a @do}{}%
+ }{}%
+ \expandafter\def
+ \csname bidi@exclude@package@\reserved@a
+ @do\expandafter\expandafter\expandafter\endcsname
+ \expandafter\expandafter\expandafter{%
+ \csname bidi@exclude@package@\reserved@a @do\endcsname
+ #2%
+ }%
+ \fi
+ }%
+ \fi
+ }%
+ \ifx\bidi@excludedpackages\@empty
+ \bidi@ResetPreventPackageFromLoading
+ \fi
+ \fi
+}
+
+\@onlypreamble\bidi@PreventPackageFromLoading
+\newcommand*{\bidi@ResetPreventPackageFromLoading}{%
+ \let\bidi@excludedpackages\@empty
+ \ifx\RequirePackage\bidi@RequirePackage
+ \ifx\usepackage\RequirePackage
+ \let\usepackage\bidi@saved@RequirePackage
+ \fi
+ \let\RequirePackage\bidi@saved@RequirePackage
+ \fi
+}
+\@onlypreamble\bidi@ResetPreventPackageFromLoading
+\newcommand*{\bidi@StorePreventPackageFromLoading}[1]{%
+ \let#1\bidi@excludedpackages
+}
+\@onlypreamble\bidi@StorePreventPackageFromLoading
+\newcommand*{\bidi@UnPreventPackageFromLoading}{%
+ \@ifstar {\@tempswatrue\@bidi@UnPreventPackageFromLoading}%
+ {\@tempswafalse\@bidi@UnPreventPackageFromLoading}%
+}
+
+\newcommand*{\@bidi@UnPreventPackageFromLoading}[1]{%
+ \edef\reserved@b{\zap@space#1 \@empty}%
+ \if@tempswa
+ \@for\reserved@a:=\reserved@b\do {%
+ \ifx\reserved@a\@empty \else
+ \ifcsname bidi@exclude@package@\reserved@a @do\endcsname
+ \expandafter\let
+ \csname bidi@exclude@package@\reserved@a @do\endcsname
+ \undefined
+ \fi
+ \fi
+ }%
+ \fi
+ \ifcsname bidi@excludedpackages\endcsname
+ \let\reserved@a\bidi@excludedpackages
+ \let\bidi@excludedpackages\@empty
+ \expandafter\@for\expandafter\reserved@c
+ \expandafter:\expandafter=\reserved@a
+ \do{%
+ \ifx\reserved@c\@empty\else
+ \@expandtwoargs\in@{,\reserved@c,}{,\reserved@b,}%
+ \ifin@
+ \else
+ \edef\bidi@excludedpackages{%
+ \bidi@excludedpackages,\reserved@c
+ }%
+ \fi
+ \fi
+ }%
+ \ifx\bidi@excludedpackages\@empty\bidi@ResetPreventPackageFromLoading\fi
+ \fi
+}
+
+\newcommand*{\bidi@RequirePackage}[2][]{%
+ \let\reserved@c\@empty
+ \let\reserved@d\@empty
+ \edef\reserved@b{\zap@space#2 \@empty}%
+ \expandafter\@for\expandafter\reserved@b\expandafter:\expandafter=\reserved@b
+ \do {%
+ \begingroup
+ \@tempswatrue
+ \@for\reserved@a:=\bidi@excludedpackages\do {%
+ \ifx\reserved@a\reserved@b
+ \@tempswafalse
+ \fi
+ }%
+ \if@tempswa
+ \xdef\reserved@c{\reserved@c,\reserved@b}%
+ \else
+ \ifx\reserved@b\@empty\else
+ \PackageInfo{biditools}{Excluding package `\reserved@b'\MessageBreak
+ from loading}%
+ \@ifundefined{bidi@exclude@package@\reserved@b @do}{%
+ }{%
+ \expandafter\g@addto@macro\expandafter\reserved@d
+ \csname bidi@exclude@package@\reserved@b @do\endcsname
+ }%
+ \fi
+ \fi
+ \endgroup
+ }%
+ \ifx\reserved@c\@empty
+ \let\reserved@a\bidi@gobbleopt
+ \else
+ \edef\reserved@a{\noexpand\bidi@saved@RequirePackage[#1]{%
+ \expandafter\@gobble\reserved@c\@empty}}%
+ \fi
+ \expandafter\reserved@d
+ \reserved@a
+}
+
+\newcommand{\bidi@gobbleopt}[1][]{}
+\AtEndDocument{%
+ \let\bidi@saved@checkend=\@checkend
+ \renewcommand*{\@checkend}[1]{%
+ \def\reserved@a{#1}\def\reserved@b{document}%
+ \bidi@saved@checkend{#1}%
+ \ifx\reserved@a\reserved@b
+ \let\bidi@saved@clearpage=\clearpage
+ \renewcommand*{\clearpage}{\bidi@saved@clearpage
+ \bidi@hook@bcma
+ \bidi@restore@newpage
+ \let\clearpage=\bidi@saved@clearpage}%
+ \fi%
+ \let\bidi@saved@dofilelist\@dofilelist
+ \def\@dofilelist{%
+ \bidi@hook@acma
+ \let\@dofilelist\bidi@saved@dofilelist
+ \bidi@saved@dofilelist
+ }%
+ }%
+}
+
+\newcommand*{\bidi@saved@checkend}{}
+\newcommand*{\bidi@saved@dofilelist}{}
+\newcommand*{\bidi@redefine@newpage}{%
+ \let\bidi@saved@newpage\newpage
+ \def\bidi@restore@newpage{%
+ \renewcommand*{\newpage}{%
+ \PackageWarningNoLine{%
+ biditools%
+ }{%
+ \string\newpage\space at main aux file!\MessageBreak
+ You have output material at the main aux file.\MessageBreak
+ Note, that the \string\bidi@BeforeClosingMainAux\space commands\MessageBreak
+ are processed before the output from aux file%
+ }%
+ \let\newpage\bidi@saved@newpage
+ \newpage
+ }%
+ }%
+ \renewcommand*{\newpage}{%
+ \PackageError{%
+ biditools%
+ }{%
+ \string\newpage\space at \string\bidi@BeforeClosingMainAux
+ }{%
+ You should never use \string\newpage\space or
+ \string\clear(double)page or other output material at the\MessageBreak
+ argument of \string\bidi@BeforeClosingMainAux!\MessageBreak
+ If you'll continue, the \string\newpage\space will be ignored to
+ avoid corruption of\MessageBreak
+ every prior use of \string\bidi@BeforeClosingMainAux.
+ }%
+ }%
+}
+
+\newcommand*{\bidi@restore@newpage}{}
+\newcommand*{\bidi@hook@bcma}{}
+\newcommand*{\bidi@hook@acma}{}
+\newcommand*{\bidi@BeforeClosingMainAux}{%
+ \ifx\bidi@hook@bcma\@empty
+ \gdef\bidi@hook@bcma{%
+ \renewcommand*{\bidi@BeforeClosingMainAux}[1]{####1}%
+ \let\protected@write\bidi@protected@immediate@write
+ \bidi@redefine@newpage
+ }%
+ \fi
+ \g@addto@macro\bidi@hook@bcma%
+}
+
+\newcommand*{\bidi@AfterReadingMainAux}{%
+ \ifx\bidi@hook@acma\@empty
+ \gdef\bidi@hook@acma{%
+ \renewcommand*{\bidi@AfterReadingMainAux}[1]{####1}%
+ \let\protected@write\bidi@protected@immediate@write
+ }%
+ \fi
+ \g@addto@macro\bidi@hook@acma%
+}
+
+\long\def\bidi@protected@immediate@write#1#2#3{%
+ \begingroup
+ #2%
+ \let\protect\@unexpandable@protect
+ \edef\reserved@a{\immediate\write#1{#3}}%
+ \reserved@a
+ \endgroup
+ \if@nobreak\ifvmode\nobreak\fi\fi
+}
+
+\def\bidi@patch@counter{0}%
+\if@bidi@csundef{numexpr}{%
+ \def\bidi@patch@stepcounter{%
+ \begingroup
+ \count@\bidi@patch@counter\relax
+ \advance\count@\@ne\relax
+ \edef\x{\endgroup
+ \noexpand\def\noexpand\bidi@patch@counter{\the\count@}%
+ }%
+ \x
+ }%
+}{%
+ \def\bidi@patch@stepcounter{%
+ \edef\bidi@patch@counter{%
+ \the\numexpr\bidi@patch@counter+\@ne\relax
+ }%
+ }%
+}
+\def\bidi@patch@list{}
+\def\bidi@patch@Add{%
+ \bidi@appto\bidi@patch@list
+}
+\def\bidi@patch@AfterPackage#1{%
+ \@ifpackageloaded{#1}{%
+ \@firstofone
+ }{%
+ \bidi@patch@AfterPackage{#1}%
+ }%
+}
+\def\bidi@patch@AfterPackage#1{%
+ \edef\bidi@patch@temp{#1}%
+ \bidi@patch@stepcounter
+ \expandafter\bidi@patch@@AfterPackage
+ \csname bidi@patch@\bidi@patch@counter\expandafter\endcsname{%
+ \bidi@patch@temp
+ }%
+}
+\def\bidi@patch@@AfterPackage#1#2#3{%
+ \begingroup
+ \toks@{#3}%
+ \xdef\bidi@patch@gtemp{%
+ \noexpand\@ifpackageloaded{#2}{%
+ \noexpand\let\noexpand#1\noexpand\relax
+ \the\toks@
+ }{}%
+ }%
+ \endgroup
+ \let#1\bidi@patch@gtemp
+ \bidi@patch@Add#1%
+ \bidi@patch@try{bidi@AfterPackage}{#2}#1%
+}
+
+\def\bidi@patch@try#1#2#3{%
+ \if@bidi@csundef{#1}{}{%
+ \csname #1\endcsname{#2}{#3}%
+ }%
+}
+
+\AtBeginDocument{\bidi@patch@list}
+
+\bidi@AtEndPreamble{\bidi@patch@list}%
+
+\bidi@AfterEndPreamble{%
+ \let\bidi@patch@OrgIfPackageLoaded\@ifpackageloaded
+ \let\bidi@patch@OrgIfPackageLater\@ifpackagelater
+ \let\bidi@patch@OrgIfClassLoaded\@ifclassloaded
+ \let\bidi@patch@OrgIfClassLater\@ifclasslater
+ \bidi@patch@list
+ \let\@ifpackageloaded\bidi@patch@OrgIfPackageLoaded
+ \let\@ifpackagelater\bidi@patch@OrgIfPackageLater
+ \let\@ifclassloaded\bidi@patch@OrgIfClassLoaded
+ \let\@ifclasslater\bidi@patch@OrgIfClassLater
+}%
+\endinput
+%%
+%% End of file `biditools.sty'.