%%
%% This is file `cuted-xetex-bidi.def',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% bidi.dtx  (with options: `table,cuted-xetex-bidi.def')
%% 
%%   __________________________________________________
%%   Vafa Khalighi
%% 
%%   Copyright (c) 2007--2025  Vafa Khalighi
%%   Copyright (c) 2018--2020 bidi-tex GitHub Organization
%% 
%%   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{54313}
%% \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         \~}
%%
\ProvidesFile{cuted-xetex-bidi.def}[2022/02/18 v0.7 bidi adaptations for cuted package for XeTeX engine]

\def\RTL@outputdblcol{%
  \if@firstcolumn
    \global\@firstcolumnfalse
    \global\setbox\@leftcolumn\copy\@outputbox
    \splitmaxdepth\maxdimen
    \vbadness\maxdimen
     \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
     \setbox\@outputbox\vsplit\@outputbox to\maxdimen
    \toks@\expandafter{\topmark}%
    \xdef\@firstcoltopmark{\the\toks@}%
    \toks@\expandafter{\splitfirstmark}%
    \xdef\@firstcolfirstmark{\the\toks@}%
    \ifx\@firstcolfirstmark\@empty
      \global\let\@setmarks\relax
    \else
      \gdef\@setmarks{%
        \let\firstmark\@firstcolfirstmark
        \let\topmark\@firstcoltopmark}%
    \fi
  \else
    \global\@firstcolumntrue
    \setbox\@outputbox\vbox{%
     \hb@xt@\textwidth{%
       \hskip \columnwidth
       \hfil
       {\normalcolor\vrule \@width\columnseprule}%
       \hfil
        \hb@xt@\columnwidth{%
        \bidi@firstcolumn@status@write%
        \box\@leftcolumn \hss}%
        \hskip -\textwidth
       \hb@xt@\columnwidth{%
       \bidi@lastcolumn@status@write%
       \box\@outputbox \hss}%
       \hskip \columnsep
      \hskip \columnwidth }}%
    \ifvoid\hold@viper
    \else
      \setbox\@outputbox \vbox to\textheight{%
                             \box\hold@viper
                             \box\@outputbox
                             \vss
                             }%
    \fi
  \@combinedblfloats
    \@setmarks
    \@outputpage
    \begingroup
      \@dblfloatplacement
      \@startdblcolumn
      \@whilesw\if@fcolmade \fi{\@outputpage
     \@startdblcolumn}%
      \ifvoid\@viper
      \else
        \global\setbox\@viper\vbox{%
                   \vskip-\stripsep
                   \unvbox\@viper
                   }%
        \@viperoutput
      \fi
    \endgroup
  \fi}%

\def\LTR@outputdblcol{%
  \if@firstcolumn
    \global\@firstcolumnfalse
    \global\setbox\@leftcolumn\copy\@outputbox
    \splitmaxdepth\maxdimen
    \vbadness\maxdimen
     \setbox\@outputbox\vbox{\unvbox\@outputbox\unskip}%
     \setbox\@outputbox\vsplit\@outputbox to\maxdimen
    \toks@\expandafter{\topmark}%
    \xdef\@firstcoltopmark{\the\toks@}%
    \toks@\expandafter{\splitfirstmark}%
    \xdef\@firstcolfirstmark{\the\toks@}%
    \ifx\@firstcolfirstmark\@empty
      \global\let\@setmarks\relax
    \else
      \gdef\@setmarks{%
        \let\firstmark\@firstcolfirstmark
        \let\topmark\@firstcoltopmark}%
    \fi
  \else
    \global\@firstcolumntrue
    \setbox\@outputbox\vbox{%
     \hb@xt@\textwidth{%
        \hb@xt@\columnwidth{%
        \bidi@firstcolumn@status@write%
        \box\@leftcolumn \hss}%
        \hfil
        {\normalcolor\vrule \@width\columnseprule}%
        \hfil
       \hb@xt@\columnwidth{%
       \bidi@lastcolumn@status@write%
       \box\@outputbox \hss}}}%
    \ifvoid\hold@viper
    \else
      \setbox\@outputbox \vbox to\textheight{%
                             \box\hold@viper
                             \box\@outputbox
                             \vss
                             }%
    \fi
  \@combinedblfloats
    \@setmarks
    \@outputpage
    \begingroup
      \@dblfloatplacement
      \@startdblcolumn
      \@whilesw\if@fcolmade \fi{\@outputpage
     \@startdblcolumn}%
      \ifvoid\@viper
      \else
        \global\setbox\@viper\vbox{%
                   \vskip-\stripsep
                   \unvbox\@viper
                   }%
        \@viperoutput
      \fi
    \endgroup
  \fi}%

\def\@addviper{%
    \@insertfalse
    \def\var@@thecol@num{2}%
    \if@firstcolumn
        \def\var@@thecol@num{1}%
        \@reqcolroom=.5\@pageht
        \ht@viper=\@reqcolroom
        \advance\@reqcolroom by\ht\@viper
        \advance\@reqcolroom by\stripsep
    \else
        \@reqcolroom=\@colht
        \advance\@reqcolroom by\@pageht
        \ht@viper.5\@reqcolroom
        \@reqcolroom=\ht@viper
        \advance\@reqcolroom by\ht\@viper
        \advance\@reqcolroom by\stripsep
        \global\setbox\@holdpg\vbox{%
            \setbox\cuted@@tempbox@a\vbox{%
                \aftergroup\unvbox
                \unvcopy\@leftcolumn
                \unskip\unkern\unpenalty
                \setbox\@tempboxa\lastbox
                \ifdim\dimexpr\ht\@tempboxa+\wd\@tempboxa+\dp\@tempboxa>\z@
                    %% keeps lastbox
                    \aftergroup\@leftcolumn
                \else
                    %% removes lastbox
                    \aftergroup\cuted@@tempbox@a
                \fi
                }%
            \unskip\unkern\unpenalty
            \on@stripcols@break
            \the\At@ViperColsBreak
            \unvbox\@holdpg
            }%
        \global\At@ViperColsBreak{}%
        \ht@viper=.5\ht\@holdpg
        \ifdim\ht@viper>\@colht
            \ht@viper=\@colht
        \fi
    \fi
    %%
    %% calculations for breaking
    %%
    \ifvoid\hold@viper
        \ht@hold@viper=\z@
    \else
        \ht@hold@viper=\ht\hold@viper
    \fi
    \cuted@@tempdim@b\ht@viper
    \set@split@topskip@to\topskip
    \loop
        \xdef\saved@tempdimb{\the\cuted@@tempdim@b}%
        \setbox\cuted@@varbox@a\copy\@holdpg
        \setbox\cuted@@tempbox@a\vsplit\cuted@@varbox@a to\cuted@@tempdim@b
        %% set leftcolumn boxes
        \setbox\cuted@@tempbox@c\vbox{\unvbox\cuted@@tempbox@a}%
        \setbox\cuted@@tempbox@a\vbox to\cuted@@tempdim@b{\unvcopy\cuted@@tempbox@c}%
        \xdef\var@@leftcolumn@badness{\the\badness}%
        %% set rightcolumn boxes
        \setbox\cuted@@varbox@c\vbox{\unvbox\cuted@@varbox@a}%
        \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@b{\unvcopy\cuted@@varbox@c}%
        \xdef\var@@rightcolumn@badness{\the\badness}%
        %% analyzing split goodness
        \cuted@@tempdim@spread=\ht\cuted@@tempbox@c
        \advance\cuted@@tempdim@spread by\dp\cuted@@tempbox@c
        \advance\cuted@@tempdim@spread by-\ht\cuted@@varbox@c
        \advance\cuted@@tempdim@spread by-\dp\cuted@@varbox@c
        \cuted@@wlog@debug{CUTED [-----]%
              ^^JLeft: \the\ht\cuted@@tempbox@c
              +\the\dp\cuted@@tempbox@c\space/\var@@leftcolumn@badness
              ^^JRight: \the\ht\cuted@@varbox@c
              +\the\dp\cuted@@varbox@c\space/\var@@rightcolumn@badness
              ^^JSplit: \the\cuted@@tempdim@b
              ^^JExtra height: \the\cuted@@tempdim@spread
             }%
        \ifnum\var@@leftcolumn@badness<\cuted@@column@badness
            \ifnum\var@@rightcolumn@badness<\cuted@@column@badness
                \cuted@@tempdim@spread=\z@
            \fi
        \fi
        \ifdim\cuted@@tempdim@spread<\z@
            \if@left@column@spread
                \if@right@column@shrink
                    \ifdim\dimexpr\cuted@@tempdim@spread+\pageshrink>\z@
                        \cuted@@tempdim@a=\dimexpr\ht\cuted@@tempbox@c-0.5\cuted@@tempdim@spread\relax
                    \else
                        \cuted@@tempdim@a=-\dimexpr\cuted@@tempdim@spread+.5\pageshrink\relax
                    \fi
                    \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@a{\unvcopy\cuted@@tempbox@c}%
                    \ifnum\badness<\cuted@@column@badness
                        \cuted@@tempdim@b=\cuted@@tempdim@a
                        \cuted@@tempdim@spread=\z@
                    \fi
                    \cuted@@wlog@debug{CUTED [leftcolumn badness]: \number\badness\space on \the\cuted@@tempdim@a}%
                    \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@a{\unvcopy\cuted@@varbox@c}%
                    \cuted@@wlog@debug{CUTED [rightcolumn badness]: \number\badness\space on \the\cuted@@tempdim@a}%
                \else
                    \setbox\cuted@@varbox@a\vbox to\ht\cuted@@varbox@c{%
                        \unvcopy\cuted@@tempbox@c
                        }%
                    \ifnum\badness<\cuted@@column@badness
                        \@tempdimb=\ht\cuted@@varbox@c
                        \cuted@@tempdim@spread=\z@
                    \fi
                    \cuted@@wlog@debug{CUTED [leftcolumn badness]: \number\badness on \the\ht\cuted@@varbox@c}%
                    \setbox\cuted@@varbox@a\vbox to\ht\cuted@@varbox@c{%
                        \unvcopy\cuted@@varbox@c
                        }%
                    \cuted@@wlog@debug{CUTED [rightcolumn badness]: \number\badness on \the\ht\cuted@@varbox@c}%
                \fi
            \else
                \if@right@column@shrink
                    \ifdim\dimexpr\cuted@@tempdim@spread+\pageshrink<\z@
                    \else
                        \cuted@@tempdim@b=\ht\cuted@@tempbox@c
                        \cuted@@tempdim@spread=\z@
                    \fi
                \fi
            \fi
        \else
            \ifdim\cuted@@tempdim@spread>\z@
                \ifdim\dimexpr\@tempdimb+\p@\relax>\@colht
                    \cuted@@tempdim@b=\@colht
                    \cuted@@tempdim@spread=\z@
                \fi
            \fi
        \fi
    \ifdim\cuted@@tempdim@spread<\z@
        \advance\cuted@@tempdim@b 1\p@
    \repeat
    \wlog{CUTED [- LAST -]%
          ^^JExtra skip:\the\cuted@@tempdim@spread
          ^^JLeft:\the\ht\cuted@@tempbox@c/\the\dp\cuted@@tempbox@c
          ^^JRight:\the\ht\cuted@@varbox@c/\the\dp\cuted@@varbox@c
          ^^JSplit: \saved@tempdimb
          ^^JOutput:\the\cuted@@tempdim@b
          ^^JPageshrink: \the\pageshrink
          ^^JPagestretch: \the\pagestretch
          ^^J@colht:\the\@colht
          }%
    %%
    %% final construction of the cuted page above strip
    %%
    \setbox\cuted@@tempbox@c\vsplit\@holdpg to\saved@tempdimb
    \setbox\cuted@@tempbox@a\vbox to\cuted@@tempdim@b{%
        \cuted@@tempdim@a=\dimexpr
            \cuted@@tempdim@b-\ht\cuted@@tempbox@c
            \relax
        \cuted@@tempdim@spread=\dp\cuted@@tempbox@c
        \unvbox\cuted@@tempbox@c
        \ifdim\cuted@@tempdim@spread>\dp\strutbox
        \else
            \vskip-\cuted@@tempdim@spread
        \fi
        \prevdepth\z@
        \hrule\@height\cuted@@page@rule width\textwidth
        \vskip-\cuted@@page@rule
        \ifdim\cuted@@tempdim@a>\z@
            \if@left@column@spread
            \else
                \vss
            \fi
        \else
            \ifdim\cuted@@tempdim@a<\z@
                \if@left@column@shrink
                \else
                    \vss
                \fi
            \fi
        \fi
        }%
    \wlog{CUTED [output]: \the\cuted@@tempdim@b
          ^^JCUTED [leftcolumn badness]: \number\badness
         }%
    \setbox\cuted@@varbox@a\vbox to\cuted@@tempdim@b{%
        \cuted@@tempdim@a=\dimexpr
            \cuted@@tempdim@b-\ht\@holdpg
            \relax
        \unvbox\@holdpg
        \ifdim\cuted@@tempdim@a>\z@
            \if@right@column@spread
            \else
                \vss
            \fi
        \else
            \ifdim\cuted@@tempdim@a<\z@
                \if@right@column@shrink
                \else
                    \vss
                \fi
            \fi
        \fi
        }%
    \wlog{CUTED [rightcolumn badness]: \number\badness}%
    \setbox\cuted@@tempbox@var\vbox{%
        \hb@xt@\textwidth{%
           \if@RTLmain
              \hskip \columnwidth
              \hfil
              {\normalcolor\vrule \@width\columnseprule}%
              \hfil
              \hb@xt@\columnwidth{%
                 \vbox to\ht@viper{\box\cuted@@tempbox@a\vss}%
                 \hss
              }%
              \hskip -\textwidth
              \hb@xt@\columnwidth{%
                 \vbox to\ht@viper{\box\cuted@@varbox@a\vss}%
                 \hss
              }%
              \hskip \columnsep
              \hskip \columnwidth
           \else
              \hb@xt@\columnwidth{%
                 \vbox to\ht@viper{\box\cuted@@tempbox@a\vss}%
                 \hss
              }%
              \hfil
              {\normalcolor\vrule \@width\columnseprule}%
              \hfil
              \hb@xt@\columnwidth{%
                 \vbox to\ht@viper{\box\cuted@@varbox@a\vss}%
                 \hss
              }%
           \fi
            }%
        }%
    %%
    %% finalize cuted page
    %%
    \ifvoid\hold@viper
        \global\setbox\hold@viper\vbox{%
            \unvbox\cuted@@tempbox@var
            \penalty\interlinepenalty
            \vskip\stripsep
            \the\preCutedStrip
            \ifnum\outputpenalty<-\@Mii
                \vskip -\parskip
            \fi
            \outputpenalty\z@
            }%
    \else
        \global\setbox\hold@viper\vbox{%
             \unvbox\hold@viper
             \cuted@@tempbox@var
             \penalty\interlinepenalty
             \vskip\stripsep
             \the\preCutedStrip
             \ifnum\outputpenalty<-\@Mii
                 \vskip -\parskip
             \fi
             \outputpenalty\z@
             }%
    \fi
    \ifdim\@colht>\@reqcolroom
        \global\setbox\hold@viper\vbox{%
             \unvbox\hold@viper
             \box\@viper
             \penalty\interlinepenalty
             \the\postCutedStrip
             \vskip\stripsep
             \ifnum\outputpenalty<-\@Mii
                 \vskip -\parskip
             \fi
             \outputpenalty\z@
             }%
        \@inserttrue
        \global\@firstcolumntrue
        \advance\ht@hold@viper by-\ht\hold@viper
        \global\advance\@colht by\ht@hold@viper
        \ifdim\@colht<2.5\baselineskip
            \@latex@warning@no@line {Optional argument of \noexpand\twocolumn
                                     too tall on page \thepage (\var@@thecol@num column)}%
            \@emptycol
            \if@firstcolumn
            \else
                \@emptycol
            \fi
            \global\@lastvipertrue
        \else
            \global\vsize\@colht
            \global\@colroom\@colht
            \check@floats\cuted@@tempdim@a
            \ifdim\cuted@@tempdim@a>\z@
                \global\advance\@colroom by-\cuted@@tempdim@a
            \fi
            \ifdim\@colroom<\z@
                \global\@colroom1\p@
                \ifdim\cuted@@tempdim@a>\@colht
                    \@latex@warning@no@line{TOP and/or BOT FLOAT's
                        to large on \thepage (\var@@thecol@num column)}%
                \fi
                \@emptycol
                \if@firstcolumn
                \else
                    \@emptycol
                \fi
                \global\@lastvipertrue
            \fi
        \fi
    \fi
    \if@insert
    \else
        \advance\ht@hold@viper by-\ht\hold@viper
        \global\advance\@colht by\ht@hold@viper
        \global\setbox\hold@viper\vbox{%
            \unvbox\hold@viper
            \set@split@topskip@to{\z@ plus2\p@}%
            \vsplit\@viper to\@colht
            \vss
            }%
        \vbox{}%
        \global\@firstcolumnfalse
        \newpage
    \fi
    }
\endinput
%%
%% End of file `cuted-xetex-bidi.def'.
