diff options
author | Karl Berry <karl@freefriends.org> | 2015-02-16 21:41:05 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-02-16 21:41:05 +0000 |
commit | 6b7b72d8eb76ae970a44028cf4b89cb420824061 (patch) | |
tree | 3c9b50cfc3a862032b34e3c24afc7277765830d6 /Master/texmf-dist/tex/xelatex/bidi/biditools.sty | |
parent | 68695b0b7015bb233b4f5697ebdb9def46b9cb4a (diff) |
bidi (16feb15)
git-svn-id: svn://tug.org/texlive/trunk@36297 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/bidi/biditools.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/bidi/biditools.sty | 523 |
1 files changed, 521 insertions, 2 deletions
diff --git a/Master/texmf-dist/tex/xelatex/bidi/biditools.sty b/Master/texmf-dist/tex/xelatex/bidi/biditools.sty index 8f4cebb2627..243d9f99bf9 100644 --- a/Master/texmf-dist/tex/xelatex/bidi/biditools.sty +++ b/Master/texmf-dist/tex/xelatex/bidi/biditools.sty @@ -17,7 +17,7 @@ %% by Vafa Khalighi. %% %% -%% \CheckSum{43266} +%% \CheckSum{44128} %% \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 @@ -35,7 +35,7 @@ %% Right brace \} Tilde \~} %% \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{biditools}[2015/02/01 v0.3 Programming tools for bidi package] +\ProvidesPackage{biditools}[2015/02/16 v0.4 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% @@ -555,6 +555,525 @@ {\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'. |