From db56c4feabb30fa1c384abcac1ee691025ebbb2b Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 27 Sep 2017 23:11:27 +0000 Subject: bidi (26sep17) git-svn-id: svn://tug.org/texlive/trunk@45419 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/xelatex/bidi/biditools.sty | 210 ++++++++++++++++++++++- 1 file changed, 208 insertions(+), 2 deletions(-) (limited to 'Master/texmf-dist/tex/xelatex/bidi/biditools.sty') diff --git a/Master/texmf-dist/tex/xelatex/bidi/biditools.sty b/Master/texmf-dist/tex/xelatex/bidi/biditools.sty index 904ff08180a..04247c28d40 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{48388} +%% \CheckSum{49112} %% \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}[2017/09/19 v1.0 Programming tools for bidi package] +\ProvidesPackage{biditools}[2017/09/26 v1.1 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% @@ -732,6 +732,212 @@ ill-advised in the old versions of bidi package.% Patching '\string\end' failed!\MessageBreak '\string\bidi@AfterEndEnvironment' will not work\@gobble}} +\chardef\bidi@backslash`\\ +\def\bidics#1{\texttt{\char\bidi@backslash#1}} + +\newcount\bidi@tempcountb +\newtoks\bidi@temptoksa +\newtoks\bidi@temptoksb + +\def\bidi@storecatcode#1% + {\escapechar\m@ne + \bidi@csarg\edef{bidi@restorecatcode\string#1}% + {\catcode`\string#1= + \the\catcode\expandafter`\string#1}% + \catcode\expandafter`\string#1=12\relax + \escapechar`\\\relax} +\def\bidi@restorecatcode#1% + {\escapechar\m@ne + \csname bidi@restorecatcode\string#1\endcsname + \escapechar`\\\relax} + +\def\bidi@csname#1{\expandafter\noexpand\csname#1\endcsname} + +\def\bidi@csarg#1#2{\expandafter#1\csname#2\endcsname} + +\def\bidi@pickescape#1{\ifnum`#1=\escapechar\else#1\fi} + +\def\bidi@EqualString#1#2{00\fi\def\bidi@eqs@a{#1}\def\bidi@eqs@b{#2}% + \ifx\bidi@eqs@a\bidi@eqs@b} + +\def\bidi@EqualStringX#1#2{00\fi + \csname if\@bidi@EqualStringX#1&$#2&$\endcsname} +\def\@bidi@EqualStringX#1#2$#3#4${\ifx#1#3% + \ifx#1&true\else\bidi@hop@ES\@bidi@EqualStringX#2$#4$\fi + \else false\fi} +\def\bidi@hop@ES#1\fi#2\fi{\fi\fi#1} + +{\catcode0=12 \catcode255=12 \catcode127=12 +\gdef\bidi@StringBeforeNC#1#2{00\fi + \bidi@CharsBefore#1^^@^^?#2^^ff^^?} +\gdef\bidi@CharsBeforeNC#1#2^^?#3#4^^?{% + \ifcat#1\relax\def\bidi@next{\bidi@CharsBefore#2^^@^^?#3#4^^ff^^?}% + \else\ifcat#3\relax\def\bidi@next{\bidi@CharsBefore#1#2^^@^^?#4^^ff^^?}% + \else\ifnum\lccode`#1<\lccode`#3 + \def\bidi@next{\csname iftrue\endcsname}% + \else\ifnum\lccode`#1>\lccode`#3 + \def\bidi@next{\csname iffalse\endcsname}% + \else\def\bidi@next{\bidi@CharsBefore#2^^?#4^^?}% + \fi \fi \fi \fi + \bidi@next} +\gdef\bidi@StringBefore#1#2{00\fi + \bidi@CharsBefore#1^^@^^?#2^^ff^^?} +\gdef\bidi@CharsBefore#1#2^^?#3#4^^?{% + \ifnum`#1<`#3 + \def\bidi@next{\csname iftrue\endcsname}% + \else\ifnum`#1>`#3 + \def\bidi@next{\csname iffalse\endcsname}% + \else\def\bidi@next{\bidi@CharsBefore#2^^?#4^^?}% + \fi\fi + \bidi@next} +} + +\def\bidi@empty{} +\def\bidi@ifempty#1{00\fi\expandafter\ifx\csname bidi@#1@null\endcsname\bidi@@null} +\def\bidi@ifEmptyX#1{\expandafter\ifx\csname bidi@#1@null\endcsname\bidi@@null} +\def\bidi@IsEmptyList#1{00\fi\def\bidi@cs@a{#1}\ifx\cs@a\bidi@empty} + +\def\bidi@NextChar#1#2#3{00\fi + \let\bidi@nxt@ch#1\def\bidi@nxt@a{#2}\def\bidi@nxt@b{#3}% + \futurelet\bidi@nxt@c\@bidi@ifnxtc} +\def\bidi@ifNextChar#1#2#3{% + \let\bidi@nxt@ch#1\def\bidi@nxt@a{#2}\def\bidi@nxt@b{#3}% + \futurelet\bidi@nxt@c\@bidi@ifnxtc} +\def\@bidi@ifnxtc{\ifx\bidi@nxt@ch\bidi@nxt@c \expandafter\bidi@nxt@a + \else \expandafter\bidi@nxt@b \fi} + +\def\bidi@undefinedcs#1{00\fi\bidi@csarg\ifx{#1}\relax} + +\newcount\bidi@dummies +\def\DefNewDummy#1{ + \if\bidi@undefinedcs{#1}\bidi@csarg\edef{#1}{bidi@dum\the\bidi@dummies} + \advance\bidi@dummies\@ne + \else + \bidi@error{Attempt at second definition of `#1'} + \fi} + +\let\@bidi@fi\fi \let\endbidi@switch\relax \DefNewDummy{bidi@default} +\def\bidi@switch@exit #1 \@bidi@fi #2 \endbidi@switch {\fi #1} +\def\bidi@switch #1#2#3{\bidi@csarg\ifx{#2}\bidi@default\bidi@switch@exit #3 \@bidi@fi + #1{#2}\bidi@switch@exit #3 \@bidi@fi + \bidi@switch {#1} +} +\def\bidi@oswitch #1 in: #2 #3; {\bidi@csarg\ifx{#2}\bidi@default\bidi@switch@exit #3 \@bidi@fi + #1{#2}\bidi@switch@exit #3 \@bidi@fi + \bidi@switch #1 in: +} +\def\bidi@cswitch #1 in: #2 #3; {\bidi@csarg\ifx{#2}\bidi@default\bidi@switch@exit #3 \@bidi@fi + #1#2\bidi@switch@exit #3 \@bidi@fi + \bidi@cswitch #1 in: +} +\def\bidi@bswitch #1 in: #2 #3; {\bidi@csarg\ifx{#2}\bidi@default\bidi@switch@exit #3 \@bidi@fi + #1#2 \bidi@switch@exit #3 \@bidi@fi + \bidi@bswitch #1 in: +} +\def\bidi@mswitch #1 in: #2:#3; {\bidi@csarg\ifx{#2}\bidi@default\bidi@switch@exit #3 \@bidi@fi + #1{#2}\bidi@switch@exit #3 \@bidi@fi + \bidi@mswitch #1 in: +} +\def\bidi@fswitch #1 in: #2:#3; {\bidi@csarg\ifx{#2}\bidi@default\bidi@switch@exit #3 \@bidi@fi + #1#2 \bidi@switch@exit #3 \@bidi@fi + \bidi@fswitch #1 in: +} + + +\def\bidi@w@w#1{\if\bidi@undefinedcs{#1}#1\else \the\csname#1\endcsname\fi} + +\def\@bidi@ww#1{\if\bidi@undefinedcs{#1}#1\else \csname#1\endcsname \fi} + +\newif\ifbidi@in@label +\def\@bidi@w@w#1{\if\bidi@undefinedcs{#1}#1\else + \ifbidi@in@label\noexpand\protect\fi \bidi@csname{#1}\fi} +\newtoks\bidi@are@these@correct +\def\bidi@t@w@w#1{% + \if\bidi@undefinedcs{#1}#1% + \ifdefining\bidi@append@to@list\bidi@are@these@correct{#1 }\fi + \else + \ifin@label\noexpand\protect\fi \bidi@csname{#1}\fi} + +\newtoks\bidi@toks@lista \newtoks\bidi@toks@listb +\long\def\@bidi@append@to@cslist#1#2#3{\begingroup\bidi@toks@lista=#2{#3}% + \global#1=\expandafter\expandafter\expandafter{\expandafter\the\expandafter#1\the\bidi@toks@lista}\endgroup} +\long\def\@bidi@prepend@to@cslist#1#2#3{\begingroup\bidi@toks@lista=#2{#3}% + \global#1=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\bidi@toks@lista\the#1}\endgroup} +\def\@bidi@append@to@list{\bidi@csarg\@bidi@append@to@cslist} +\long\def\bidi@append@to@list#1#2{\@bidi@append@to@list{#1}{}{#2}} +\def\bidi@append@list@to@list#1#2{% + \@bidi@append@to@list{#1}{\expandafter\expandafter\expandafter}{\expandafter\the\csname#2\endcsname}} +\def\bidi@append@cslist@to@cslist#1#2{% + \@bidi@append@to@cslist{#1}\expandafter{\the#2}} +\def\bidi@append@toks@cs@to@list#1#2{\@bidi@append@to@list{#1}\expandafter{\the#2}} + +\let\bidi@willbeunhskip\unhskip + +\def\NewList:#1 {\bidi@csarg\newtoks{#1}\global\csname#1\endcsname{}} +\def\EmptyList:#1 {\global\csname#1\endcsname{}} +\long\def\AppendToList:#1=#2 {\@bidi@append@to@list{#1}{}{#2}} +\def\TheList:#1 {\let\bidi@oldwbuskip\bidi@willbeunhskip \let\bidi@willbeunhskip\@empty + \if\bidi@undefinedcs{#1}\bidi@error{List <#1> undefined} + \else\bidi@csarg\the{#1}\fi + \let\bidi@willbeunhskip\bidi@oldwbuskip} + +\def\bidi@del@tok@from@list#1#2{\begingroup + \long\def\bidi@cs@liste##1#2##2\bidi@tok@SM + {\bidi@toks@lista{##1}\bidi@toks@listb{##2}% + \edef\bidi@cs@listb{\global\bidi@csname{#1}= + {\the\bidi@toks@lista\the\bidi@toks@listb}}% + \bidi@cs@listb}% + \edef\bidi@cs@lista{\noexpand\bidi@cs@liste{}\expandafter\the\csname#1\endcsname\noexpand\bidi@tok@SM}% + \bidi@cs@lista \endgroup} +\def\bidi@in@front@of@list#1{\bidi@csarg{\let\expandafter\bidi@cs@lista}{#1}% + \bidi@in@front@of@cslist\bidi@cs@lista} +\long\def\bidi@in@front@of@cslist#1#2{\begingroup\bidi@toks@lista={#2}% + \global#1=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\bidi@toks@lista \the#1}% + \endgroup} +\long\def\bidi@local@in@front@of@list#1#2{\bidi@toks@lista={#2}% + \csname#1\endcsname\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter + {\expandafter\expandafter\expandafter\the\expandafter\expandafter\expandafter\bidi@toks@lista + \expandafter\the\csname#1\endcsname}% + } +\def\bidi@set@list#1{\bidi@csarg{\let\expandafter\bidi@cs@lista}{#1}% + \bidi@set@cslist\bidi@cs@lista} +\long\def\bidi@set@cslist#1#2{\begingroup\bidi@toks@lista={#2}% + \global#1=\expandafter{\the\bidi@toks@lista}\endgroup} + +%%%%%%%%%%%%%%%% Stack macros +\def\bidi@push@cs@onto@cs#1#2{\@bidi@prepend@to@cslist#1\expandafter{\expandafter\\\expandafter{\the#2}}} +\def\bidi@push@onto#1{\bidi@csarg\bidi@push@onto@cs{#1}} +\def\bidi@push@onto@cs#1#2{\@bidi@prepend@to@cslist#1{}{\\{#2}}} +\def\bidi@local@push@onto#1#2{\let\\=\relax + \bidi@local@in@front@of@list{#1}{\\{#2}}} +\def\bidi@pop@cs@into#1#2{\edef\bidi@cs@e + {\noexpand\@@bidi@popinto\noexpand#1\noexpand#2\the#2\noexpand\@@bidi@pop}\bidi@cs@e} +\def\bidi@pop@into#1#2{\edef\bidi@cs@e + {\noexpand\@@bidi@popinto\bidi@csname{#1}\bidi@csname{#2}\bidi@csarg\the{#2}\noexpand\@@bidi@pop}\bidi@cs@e} +\long\def\@@bidi@popinto#1#2\\#3#4\@@bidi@pop{#1{#3}#2{#4}} +\def\bidi@copy@stacktop#1#2{% + \edef\bidi@cs@e{\noexpand\@bidi@copy@stacktop + {#1}\bidi@csarg\the{#2}\noexpand\@@bidi@pop}% + \bidi@cs@e} +\def\@bidi@copy@stacktop#1\\#2#3\@@bidi@pop{\csname#1\endcsname#2\relax} +\newcount\bidi@stack@length \newtoks\bidi@empty@stack \bidi@empty@stack{\\{}} +\def\bidi@length@of@stack#1{\bidi@csarg\bidi@length@of@csstack{#1}} +\def\bidi@length@of@csstack#1{\def\\##1{\advance\bidi@stack@length\@ne}% + \bidi@stack@length\m@ne \the#1} +\def\bidi@invert@csstack#1{\bidi@length@of@csstack{#1}% + \bidi@tempcountb\z@ \bidi@temptoksa\bidi@empty@stack + \loop\ifnum\bidi@tempcountb<\bidi@stack@length + \bidi@pop@cs@into\bidi@temptoksb#1\advance\bidi@stack@length\m@ne + \bidi@push@cs@onto@cs\bidi@temptoksa\bidi@temptoksb + \repeat% copy b to a + #1\bidi@temptoksa \bidi@temptoksa\bidi@empty@toks} +\def\bidi@x@stack@to@list#1{\bidi@length@of@stack{#1}% + \bidi@tempcountb\z@ \bidi@temptoksa\bidi@empty@toks + \loop\ifnum\bidi@tempcountb<\bidi@stack@length + \bidi@pop@into{bidi@temptoksb}{#1}\advance\bidi@stack@length\m@ne + \bidi@append@list@to@list{bidi@temptoksb}{bidi@temptoksa}\repeat + \csname#1\endcsname\bidi@temptoksa \bidi@temptoksa\bidi@empty@toks} + \def\bidi@looprepeat@csarg#1#2{\expandafter#1\csname#2\endcsname} \def\bidi@looprepeat@csromannumeral#1{\csname #1\romannumeral\bidi@looprepeat@depth\endcsname} -- cgit v1.2.3