From d5bd2061a0757def2c259852e8b45958b1a5183d Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 12 Jul 2008 18:30:08 +0000 Subject: bidi update (11jul08) git-svn-id: svn://tug.org/texlive/trunk@9486 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/xelatex/bidi/README.txt | 14 +- Master/texmf-dist/doc/xelatex/bidi/bidi.pdf | Bin 153780 -> 148638 bytes Master/texmf-dist/source/xelatex/bidi/bidi.dtx | 839 ++++++++++++++----------- Master/texmf-dist/source/xelatex/bidi/bidi.ins | 30 + Master/texmf-dist/tex/xelatex/bidi/bidi.sty | 384 ++++++----- Master/tlpkg/bin/tlpkg-ctan-check | 3 +- Master/tlpkg/bin/tlpkginfo | 2 +- 7 files changed, 764 insertions(+), 508 deletions(-) create mode 100644 Master/texmf-dist/source/xelatex/bidi/bidi.ins (limited to 'Master') diff --git a/Master/texmf-dist/doc/xelatex/bidi/README.txt b/Master/texmf-dist/doc/xelatex/bidi/README.txt index a02c01de222..10be4bc9dfd 100644 --- a/Master/texmf-dist/doc/xelatex/bidi/README.txt +++ b/Master/texmf-dist/doc/xelatex/bidi/README.txt @@ -1,13 +1,15 @@ ------------------------ -THE BIDI PACKAGE v0.2.2 +THE BIDI PACKAGE v0.3 This package provides a convenient interface for typesetting bidirectional texts with XeLaTeX. -NB: To regenerate the pdf documentation from the dtx file you must -use xelatex. The fonts Junicode, Scheherazade and Ezra SIL must also -be installed on your system. +This version adds support for tabular environments and captions +and brings several other improvements and bugfixes. + +The code for alphabetic numerals has been moved to the relevant +"language definition files" of the new polyglossia package. + -------------- François Charette -2007 -%% \section{Implementation} +July 2008 diff --git a/Master/texmf-dist/doc/xelatex/bidi/bidi.pdf b/Master/texmf-dist/doc/xelatex/bidi/bidi.pdf index 3723ddf5965..38634faca84 100644 Binary files a/Master/texmf-dist/doc/xelatex/bidi/bidi.pdf and b/Master/texmf-dist/doc/xelatex/bidi/bidi.pdf differ diff --git a/Master/texmf-dist/source/xelatex/bidi/bidi.dtx b/Master/texmf-dist/source/xelatex/bidi/bidi.dtx index 8d7c3f0ad11..969c256e503 100644 --- a/Master/texmf-dist/source/xelatex/bidi/bidi.dtx +++ b/Master/texmf-dist/source/xelatex/bidi/bidi.dtx @@ -1,36 +1,90 @@ % \iffalse +%<*internal> +\iffalse +% +%<*readme> +------------------------ +THE BIDI PACKAGE v0.3 + +This package provides a convenient interface for typesetting +bidirectional texts with XeLaTeX. + +This version adds support for tabular environments and captions +and brings several other improvements and bugfixes. + +The code for alphabetic numerals has been moved to the relevant +"language definition files" of the new polyglossia package. + +-------------- +François Charette +July 2008 +% +%<*example> +\documentclass{article} +\usepackage[no-math]{fontspec} +\usepackage{bidi} +\newfontfamily\arab[Script=Arabic, Scale=1.5]{Scheherazade} +\begin{document} + +This is some text in English with Arabic insertion (\RL{\arab بعض الكلمات العربية}).\footnote{ 1 2 3} + +\setRL\arab +وهذه فقرةٌ بالعربي مع كلمات انكليزية (\LR{\rmfamily Some English words}).\footnote{ 1 2 3} +\setLR\rmfamily + +Back to left-to-right mode…\footnote{ 1 2 3} + +\begin{table}[h] +\centering +\begin{tabular}{cc} +1 & 2\\ +3 & 4 +\end{tabular} +\caption{This is a caption} +\end{table} + +\begin{equation} +x^2 + y^2 = z^2 +\end{equation} + +\setRL +\begin{table}[h] +\centering +\begin{tabular}{cc} +1 & 2\\ +3 & 4 +\end{tabular} +\caption{This is a caption} +\end{table} + +\begin{equation} +x^2 + y^2 = z^2 +\end{equation} +\end{document} +% +%<*internal> +\fi +% % -%!TEX encoding = UTF-8 Unicode -% -% Copyright (C) 2007 by François Charette -% -% Distributable 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 "maintained" (as per LPPL maintenance status) -% by François Charette. -% -% This work consists of the file bidi.dtx -% and the derived files bidi.sty and bidi.pdf. -% -% -%<*batchfile> +%<*internal> \begingroup +% +%<*batchfile> \input docstrip.tex \keepsilent \preamble ____________________________ + The bidi package - (C) 2007 François Charette + (C) 2007-2008 François Charette License information appended \endpreamble \postamble -Copyright (C) 2007 by François Charette +Copyright (C) 2007-2008 by François Charette Distributable under the LaTeX Project Public License, version 1.3c or higher (your choice). The latest version of @@ -45,16 +99,83 @@ This work consists of the file \jobname.dtx \endpostamble \askforoverwritefalse \generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}} -\generate{\file{\jobname.ins}{\from{\jobname.dtx}{batchfile}}} \nopreamble\nopostamble +% +%\endbatchfile +%<*internal> +\generate{\file{\jobname.ins}{\from{\jobname.dtx}{batchfile}}} +\generate{\file{bidi-example.tex}{\from{\jobname.dtx}{example}}} \generate{\file{README.txt}{\from{\jobname.dtx}{readme}}} -\generate{\file{dtx-style.sty}{\from{\jobname.dtx}{dtx-style}}} \endgroup -% +% % %<*driver> \documentclass[12pt]{ltxdoc} -\usepackage{dtx-style} +\usepackage{fontspec,xltxtra} +\usepackage{bidi} +\usepackage{xspace,fancyvrb,paralist} +\usepackage[xetex]{color} +\definecolor{myblue}{rgb}{0.02,0.04,0.48} +\definecolor{myred}{rgb}{0.65,0.04,0.07} +\definecolor{darkgray}{gray}{0.3} +\definecolor{lightgray}{gray}{0.6} +\definecolor{mygreen}{rgb}{0,.43,0} +\usepackage[dvipdfm, + bookmarks=true, + colorlinks=true, + linkcolor=myblue, + urlcolor=myblue, + citecolor=myblue, + hyperindex=false, + hyperfootnotes=false, + pdftitle={The bidi package}, + pdfauthor={F Charette }, + pdfsubject={An interface for typesetting bidirectional texts with XeLaTeX}, + pdfkeywords={XeTeX, XeLaTeX, Right-to-Left, Bidi, Arabic, Hebrew} + ]{hyperref} +% NB some of this preamble is taken or adapted from fontspec-doc-style.sty +\newcommand*\pkg[1]{\textsf{#1}} +\def\eg{\textit{e.g.,}\xspace} +\def\ie{\textit{i.e.,}\xspace} +\def\ca{\textit{ca.}\@\xspace} +\def\Eg{\textit{E.g.,}\xspace} +\def\Ie{\textit{I.e.,}\xspace} +\def\etc{\@ifnextchar.{\textit{etc}}{\textit{etc.}\@\xspace}} +\def\arabxetex{Arab\XeTeX} + +\newlength{\oldparindent} +\newcommand{\parindentoff}{\setlength{\oldparindent}{\parindent} \setlength{\parindent}{0pt}} +\newcommand{\parindenton}{\setlength{\parindent}{\oldparindent}} + +%% LOGOS, tuned for Palatino (seems also OK with Junicode): +\makeatletter +\TeX@logo@spacing{-0.12em}{-0.12em}% + {0.5ex}{-0.3em}{-0.12em}{-0.1em} +\makeatother +%% fontspec declarations: +\setromanfont[Mapping=tex-text]{Junicode}%{FPL Neu} +\defaultfontfeatures{Scale=MatchLowercase} +\setmonofont{DejaVu Sans Mono}%{Inconsolata}%{Latin Modern Typewriter Proportional}%{Luxi Mono}%{Courier New} +\setsansfont{DejaVu Sans} +\newfontfamily\arabicfont[Script=Arabic,Scale=1.5]{Scheherazade} +\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL} +%\newfontfamily\syriacfont[Script=Syriac]{Estrangelo Talada} +\newfontfamily\damase{MPH 2B Damase} +\linespread{1.05} +\frenchspacing +\renewcommand{\footnoterule}{} +\skip\footins=2\bigskipamount +%% ToC +\def\@dotsep{1000} +\setcounter{tocdepth}{2} +\setlength\columnseprule{0.4pt} +\makeatletter +\renewcommand\tableofcontents{% + \begin{multicols}{2}[\section*{\contentsname}]% + \small + \@starttoc{toc}% + \end{multicols}} +\makeatother \EnableCrossrefs \CodelineIndex \RecordChanges @@ -64,30 +185,16 @@ This work consists of the file \jobname.dtx \end{document} % % -%<*readme> ------------------------- -THE BIDI PACKAGE v0.2.2 - -This package provides a convenient interface for typesetting -bidirectional texts with XeLaTeX. - -NB: To regenerate the pdf documentation from the dtx file you must -use xelatex. The fonts Junicode, Scheherazade and Ezra SIL must also -be installed on your system. --------------- -François Charette -2007 -% -% % \fi -% -% \errorcontextlines=999 -% \makeatletter +% \makeatletter ^^A% To document @-cmds +% \errorcontextlines=999 ^^A% Show up all my mistakes % % \GetFileInfo{\jobname.sty} % % \title{The \pkg{bidi} package} -% \author{François Charette} +% ^^A \author{\textcolor{myblue}{François Charette}\\ +% \author{François Charette\\ +% \footnotesize\texttt{}} % \date{\filedate \qquad \fileversion} % % \maketitle @@ -102,7 +209,7 @@ François Charette % could be useful outside of the \XeTeX\ world.} % ^^A\eTeX-based typesetting engines and the \LaTeX\ format, % Most of its macros are directly copied or adapted from -% the Babel bidirectional module for Hebrew.\footnote{ See +% the Babel bidirectional module for Hebrew (by Boris Lavva).\footnote{ See % ^^A\url{ftp://dante.ctan.org/tex-archive/macros/latex/required/babel/hebrew.dtx} % section 60.4 of the \href{ftp://dante.ctan.org/tex-archive/macros/latex/required/babel/babel.pdf}{Babel user documentation.}} % @@ -119,12 +226,12 @@ François Charette % \setLR % \end{Verbatim} % -% \setRL\setfootnoteLR^^A\fontspec[ExternalLocation]{cmr12} +% \setRL\setfootnoteLR % This is a right-to-left paragraph.\footnote{ % % Note that when processing fonts that are not TFM-based, % \XeTeX, contrary to \TeX, uses (roughly speaking) one box per word, % instead of one per character. The command \cmd\RL\ is thus usually -% superfluous when inserting a single Arabic or Hebrew word.} +% superfluous when inserting a single word.} % \setLR % % @@ -139,17 +246,10 @@ François Charette % (or equivalently \cmd\unsetfootnoteRL). % \unsetfootnoteRL % -% \textbf{Important note:} Currently, \XeTeX's (version 0.996) placement of the -% footnote mark at the beginning of plain footnotes in RL context is incorrect -% (as you can see yourself below).\footnote{ % -% More precisely, this is a bug in \XeTeX's handling of glue in -% right-to-left context.} -% This will likely be fixed in the next version. -% % With the package \pkg{manyfoot}, it is possible to have several layers % of footnotes, each of which can be set in a different direction. % See the documentation to Arab\XeTeX\ for more details. This should also be -% possible with \pkg{bigfoot}, but I have not tested it yet. +% possible with \pkg{bigfoot}. % % Some other \LaTeX\ macros are redefined internally to ensure their correct % behaviour in bidirectional display. Contrary to the Babel approach, we leave @@ -163,55 +263,26 @@ François Charette % Because of the way bidirectionality is implemented in \eTeX, no information on % directionality is included in the dvi (or xdv) output. Consequently, if a color % \cmd\special\ is inserted in the middle of a paragraph, the color change will -% be effected as though the text would run from left to right. For \cmd\textcolor, +% be in effect as though the text would run from left to right. For \cmd\textcolor, % the output will be correct only if the textual argument falls on a single line. % A better approach is to set the color of text by means of \XeTeX's font features, % as in this example: % \begin{Verbatim}[gobble=2] % \newcommand{\textblue}[1]{{\addfontfeature{Color=0000FF}#1}} -% \setRL\fontspec[Script=Arabic]{Scheherazade} +% \setRL +% {\arabicfont % اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود % اسود \textblue{ازرق ازرق ازرق ازرق ازرق ازرق ازرق } اسود اسود % اسود اسود اسود اسود +% } % \end{Verbatim} % \newcommand{\textblue}[1]{{\addfontfeature{Color=0000FF}#1}} -% \setRL\fontspec[Script=Arabic]{Scheherazade} +% \setRL +% {\arabicfont % اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود اسود % \textblue{ازرق ازرق ازرق ازرق ازرق ازرق ازرق} اسود اسود -% اسود اسود اسود اسود\setLR -% -% \section{Alphabetic numerals in Arabic, Hebrew and Syriac} -% -% For convenience the following macros are provided for generating numbers -% in alphanumerical notation in Arabic (in both Eastern and Western styles) -% and Hebrew. The interested reader can find information on these systems -% in the following two Wikipedia articles: -% \url{http://en.wikipedia.org/wiki/Abjad_numerals} and -% \url{http://en.wikipedia.org/wiki/Hebrew_numerals}. -% Note that the Hebrew implementation in \pkg{bidi} is less sophisticated than -% the one in Babel, where various special cases are taken into account. -% -% \subsection{Examples} -% \parindentoff -% The Arabic \textit{abjad} numbers can be generated with the command \cmd\abjad. -% \DescribeMacro{\abjad} -% Example: |\abjad{1863}| yields {\arabicfont\abjad{1863}}. -% -% In the Maghrib the conventions are somewhat different, and the maghribi forms -% of the \textit{abjad} numerals are obtained with the \cmd\abjadmaghribi\ command. -% \DescribeMacro{\abjadmaghribi} -% Example: |\abjadmaghribi{1863}| yields {\arabicfont\abjadmaghribi{1863}}. -% -% Hebrew numerals are generated with the command \cmd\hebrewnumeral. -% \DescribeMacro{\hebrewnumeral} Example: -% |\hebrewnumeral{1863}| yields {\hebrewfont\hebrewnumeral{1863}}. -% -% Experimental support is also provided for Syriac abjad numerals, which can be generated -% with \cmd\abjadsyriac. \DescribeMacro{\abjadsyriac} -% Example: |\abjadsyriac{463}| yields {\syriacfont\abjadsyriac{463}}. -% -% Note that the above macros only outputs the Unicode characters: -% the active font must thus contain the necessary glyphs. +% اسود اسود اسود اسود} +% \setLR % % \section{Scripts written from right-to-left} % @@ -256,7 +327,7 @@ François Charette % must be inserted before each % word. This could be easily automated by means of a TECkit font mapping. % Etruscanists interested in this can contact me directly.} -% \hfill \RL{\damase\addfontfeature{Mapping=etruscan}auleśi meteliś} ^^A𐌀𐌖𐌋𐌄𐌑𐌉 𐌌𐌄𐌕𐌄𐌋𐌉𐌑 ^^A(Aules'i Metelis) +% \hfill \RL{\damase 𐌀𐌖𐌋𐌄𐌑𐌉 𐌌𐌄𐌕𐌄𐌋𐌉𐌑} ^^A\addfontfeature{Mapping=etruscan}auleśi meteliś} % \item N'ko:\footnote{ % % As can be seen in this example, the ICU rendering engine does not yet % support contextual substitutions for N'Ko.} @@ -266,21 +337,28 @@ François Charette % \item Kharosthi: \hfill {\fontspec[Script=Kharosthi]{MPH 2B Damase} 𐨗𐨁𐨙𐨪} ^^A random gibberish % \item Cypriot: \hfill {\fontspec[Script=Cypriot Syllabary]{MPH 2B Damase} 𐠌𐠥𐠯} ^^A random gibberish % \end{compactitem} +% +% \section{Acknowledgements} +% +% Thanks to Boris Lavva (author of \pkg{rlbabel.def}), +% the authors of Farsi\TeX, +% Youssef Jabri [\RL{\arabicfont يوسف جبري}] (author of \pkg{Arabi}), +% and Vafa Khalighi [\RL{\arabicfont وفا خليقي}] (author of \pkg{xepersian}). +% +% \StopEventually{} % -%% \section{Implementation} -%\iffalse +% \section{Implementation} +% \iffalse %<*package> -%\fi +% \fi % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bidi} - [2007/04/30 v0.2.2 Bidirectional typesetting in XeLaTeX] -% this is not used for now: -%\newif\if@rlmain -%\@rlmainfalse -%\DeclareOption{rldocument}{\@rlmaintrue} -%\ExecuteOptions{rldocument} -%\ProcessOptions + [2008/07/07 v0.3 Bidirectional typesetting in XeLaTeX] +\newif\if@rlmain +\@rlmainfalse +\DeclareOption{rldocument}{\@rlmaintrue} +\ProcessOptions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx\TeXXeTstate\undefined\else% \TeXXeTstate=1 @@ -293,11 +371,13 @@ François Charette engine}% \fi \newif\if@rl -%\AtBeginDocument{% Here we set the main document direction -% \if@rl\@rlmaintrue% -% \else\@rlmainfalse% -% \fi% -%} +\AtBeginDocument{% Here we set the main document direction + \if@rlmain\else + \if@rl\@rlmaintrue% + \else\@rlmainfalse% + \fi% + \fi% +} % \end{macrocode} % \subsection{Basic bidi macros} % This defines the macros for RL insertion in LR context and conversely. @@ -319,47 +399,69 @@ François Charette % % For global right-to-left typesetting, the directional primitive must be % included within an \cmd\everypar\ construct. The traditional approach was to -% redefine \cmd\everypar\ as a one-argument macro, but since some packages (such -% as \pkg{ledmac}) also play tricks with \cmd\everypar, this can become -% problematic. Hence we have adopted Youssef Jabri's clever approach in his -% \pkg{Arabi} package. +% redefine \cmd\everypar\ as a one-argument macro, but since some packages such +% as \pkg{ledmac} also play tricks with \cmd\everypar, this can become +% problematic. Hence we have adopted Youssef Jabri's approach in his +% \pkg{Arabi} package (\,\RL{\arabicfont شكراً جزيلاً}). % \begin{macrocode} \def\rl@everypar{\if@rl{\setbox\z@\lastbox\beginR\usebox\z@}\fi} \let\o@everypar=\everypar -% The following, surely, will not play well with all packages, e.g. ledmac +%The following, surely, will not play well with all packages, e.g. ledmac %\def\everypar#1{\o@everypar{\rl@everypar#1}} -% But we now use this instead, taken from Arabicore.sty in the Arabi package. -% Thanks to Youssef Jabri! Shukran jazilan! +% But we now use this instead, taken from Arabicore.sty \newtoks\n@everypar \n@everypar\expandafter{\the\o@everypar} \o@everypar{\rl@everypar\the\n@everypar} \let\everypar=\n@everypar % \end{macrocode} % -% This is not used at the moment: +% This is similar to |\ensuremath| in \LaTeX: % \begin{macrocode} \def\@ensure@RL#1{\if@rl#1\else\RL{#1}\fi} \def\@ensure@LR#1{\if@rl\LR{#1}\else#1\fi} % \end{macrocode} % +% This does the opposite (which is useful for ensuring correct directionality +% in boxes or tabular environments, for instance): +% \begin{macrocode} +\def\@ensure@dir#1{\if@rl\RL{#1}\else{#1}\fi} +\def\@ensure@maindir#1{\if@rlmain\RL{#1}\else{#1}\fi} +% \end{macrocode} +% These are not yet used… +% \begin{macrocode} +\def\@@RL{RL} +\def\@@LR{LR} +\def\save@dir{\if@rl\gdef\saved@@dir{RL}\else\gdef\saved@@dir{LR}\fi} +\def\reset@dir{\ifx\saved@@dir\@@RL\setRL\else\ifx\saved@@dir\@@LR\setLR\else\relax\fi\fi} +% \end{macrocode} +% % \subsection{Logos} % The following redefinitions ensure proper typesetting of the various logos. % \begin{macrocode} %preserve logos \let\@@TeX\TeX -\def\TeX{\LR{\@@TeX}} +\def\TeX{\@ensure@LR{\@@TeX}} \let\@@LaTeX\LaTeX -\def\LaTeX{\LR{\@@LaTeX}} +\def\LaTeX{\@ensure@LR{\@@LaTeX}} \let\@@LaTeXe\LaTeXe -\def\LaTeXe{\LR{\@@LaTeXe}} +\def\LaTeXe{\@ensure@LR{\@@LaTeXe}} \@ifpackageloaded{xltxtra}{ \let\@@XeTeX\XeTeX -\def\XeTeX{\LR{\@@XeTeX}} +\def\XeTeX{\@ensure@LR{\@@XeTeX}} +\let\@@XeLaTeX\XeLaTeX +\def\XeLaTeX{\@ensure@LR{\@@XeLaTeX}} }{} % \end{macrocode} -% \subsection{Redefinition of internal \LaTeX\ macros} +% \subsection{Redefinition of various internal \LaTeX\ macros} +% \subsubsection{\cmd{\text}} +% \cmd{\text} is defined in \pkg{amstext.sty}. +% \begin{macrocode} +\@ifundefined{text}{}{% +\let\t@xt=\text +\def\text#1{\t@xt{\@ensure@dir{#1}}}} +% \end{macrocode} +% \subsubsection{\cmd{\list}} % \begin{macrocode} -%VARIOUS LATEX MACROS \def\list#1#2{% \ifnum \@listdepth >5\relax \@toodeep @@ -386,7 +488,9 @@ François Charette \fi \parshape \@ne \@totalleftmargin \linewidth \ignorespaces} -%% +% \end{macrocode} +% \subsubsection{Dotted line in table of contents} +% \begin{macrocode} \def\@dottedtocline#1#2#3#4#5{% \ifnum #1>\c@tocdepth \else \vskip \z@ \@plus.2\p@ @@ -407,7 +511,9 @@ François Charette \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor \beginL#5\endL}% \par}% \fi} -%% +% \end{macrocode} +% \subsubsection{\cmd{\raggedright} and \cmd{\raggedleft}} +% \begin{macrocode} \def\raggedright{% \let\\\@centercr \leftskip\z@skip\rightskip\@flushglue @@ -418,27 +524,67 @@ François Charette \else\@@raggedleft\fi} \renewcommand\raggedright{\if@rl\@@raggedleft% \else\@@raggedright\fi} +% \end{macrocode} +% \subsubsection{\cmd{\underline}} +% \begin{macrocode} \let\@@@underline=\underline \def\underline#1{\@@@underline{\if@rl\RL{#1}\else #1\fi}} \if@compatibility \let\undertext=\underline \fi % \end{macrocode} +% \subsubsection{\cmd\@outputdblcol} +% \begin{macrocode} +\let\lr@outputdblcol\@outputdblcol +\renewcommand{\@outputdblcol}{% + \if@rlmain% + \rl@outputdblcol% + \else% + \lr@outputdblcol% + \fi% +} +\newcommand{\rl@outputdblcol}{% + \if@firstcolumn + \global \@firstcolumnfalse + \global \setbox\@leftcolumn \box\@outputbox + \else + \global \@firstcolumntrue + \setbox\@outputbox \vbox {\hb@xt@\textwidth {% + \hskip\columnwidth% + \hfil\vrule\@width\columnseprule\hfil + \hb@xt@\columnwidth {% + \box\@leftcolumn \hss}% + \hb@xt@\columnwidth {% + \hskip-\textwidth% + \box\@outputbox \hss}% + \hskip\columnsep% + \hskip\columnwidth}}% + \@combinedblfloats + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi + {\@outputpage + \@startdblcolumn}% + \endgroup + \fi} + % \subsection{Footnotes} % This implements the bidirectionality of plain \LaTeX\ footnotes. % \begin{macrocode} \newif\if@rl@footnote -\if@rl\@rl@footnotetrue\else\@rl@footnotefalse\fi +\if@rlmain\@rl@footnotetrue\else\@rl@footnotefalse\fi \let\@@footnoterule=\footnoterule \def\LRfootnoterule{\@@footnoterule} -%bug?-->this causes new par to be set, hence hack with vskip :-{ +%%bug?-->this causes new par to be set, hence hack with vskip :-{ \def\RLfootnoterule{\vskip -\baselineskip\hb@xt@\hsize{\hss\vbox{\@@footnoterule}}} % \def\setfootnoteRL{\@rl@footnotetrue} \def\unsetfootnoteRL{\@rl@footnotefalse} \def\setfootnoteLR{\unsetfootnoteRL} % -\def\footnoterule{\if@rl@footnote\RLfootnoterule\else\LRfootnoterule\fi} +\def\footnoterule{\if@rlmain\RLfootnoterule\else\LRfootnoterule\fi} % \end{macrocode} % \subsection{Bidi switching commands} % Commands for switching between LR and RL global contexts. @@ -464,7 +610,7 @@ François Charette \@makefntext{% \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% \color@endgroup}}% -%... also in minipages +%%... also in minipages \long\def\@mpfootnotetext#1{% \global\setbox\@mpfootins\vbox{% \if@rl@footnote\@rltrue\else\@rlfalse\fi @@ -480,6 +626,134 @@ François Charette \color@endgroup }} % \end{macrocode} +% \subsection{Captions} +% This redefines the macros responsible for captions in various popular classes +% (article, book, report, scrartcl, scrbook, scrreprt, and memoir). +% \begin{macrocode} +\@ifundefined{KOMAClassName}{% +\@ifclassloaded{memoir}{% +\long\def\@makecaption#1#2{\let\@memtempa\relax + \ifdim\prevdepth>-99\p@ \vskip\abovecaptionskip + \else \def\@memtempa{\vbox to\topskip{}}\fi + \let\@contfnote\footnote \renewcommand{\footnote}[2][]{} + \let\@contfmark\footnotemark \renewcommand{\footnotemark}[1][]{} + \sbox\@tempboxa{\@contnfont #1\@contdelim \@conttfont #2} + \let\footnote\@contfnote + \let\footnotemark\@contfmark + \ifdim\wd\@tempboxa<\linewidth \centering \fi + \if@contcw + \centering + \parbox{\@contcwidth}{% + \ifdim\wd\@tempboxa<\@contcwidth \centering \fi + \fi + \if@conthang + \sbox\@tempboxa{\@contnfont #1\@contdelim} + \@contpre% + \@ensure@dir{\@contcstyle\hangindent=\wd\@tempboxa + \noindent\box\@tempboxa\@memtempa \@conttfont #2}\par + \else + \if@contindent + \@contpre% + \@ensure@dir{\@contnfont #1\@contdelim}\@memtempa + \@ensure@dir{\@contcstyle\hangindent=\@contindw + \hangafter=\@ne\@conttfont #2}\par% <- v1.4 + \else + \@contpre% + \@ensure@dir{\@contnfont #1\@contdelim}\@memtempa + \@ensure@dir{\ifdim\wd\@tempboxa<\linewidth + \@contcshortstyle\else \@contcstyle\fi% <- v1.4 + \@conttfont #2}\par + \fi + \fi + \@contpost + \if@contcw + \par + } % end of the \parbox + \fi + \vskip\belowcaptionskip} +}% else we redefine \@makecaption for the standard classes +{\@ifundefined{@makecaption}{% +%warning ?? +}{\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\@ensure@dir{#1: #2}}% + \ifdim \wd\@tempboxa >\hsize + \@ensure@dir{#1: #2}\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip}% + }% + }% +}% ELSE KOMASCRIPT +{\@ifclassloaded{scrlttr2}{}% do nothing for letter class +{\renewcommand{\@@makecaption}[3]{% + \cap@margin + \ifonelinecaptions + \@tempcnta=\value{mpfootnote}\@tempcntb=\value{footnote}% + \let\scr@tmp@footnotetext=\@footnotetext + \let\@footnotetext=\@gobble + \sbox\@tempboxa{% + {\capfont\strut\ignorespaces + #1{{\caplabelfont#2\captionformat}}% + #3\unskip\strut}% + }% + \let\@footnotetext=\scr@tmp@footnotetext + \let\scr@tmp@footnotetext=\undefined + \setcounter{footnote}{\@tempcntb}% + \setcounter{mpfootnote}{\@tempcnta}% + \else + \sbox\@tempboxa{\hspace*{2\cap@width}}% + \fi + \begingroup% + \setlength{\@tempdima}{\cap@width}% + \ifdim \wd\@tempboxa >\@tempdima + \hb@xt@\hsize{% + \setbox\@tempboxa\vbox{\hsize=\cap@width + \ifdofullc@p + \@ensure@dir{\capfont\@hangfrom{\scr@smashdp{\strut\ignorespaces + #1{{\caplabelfont#2\captionformat}}}}% + {#3\unskip\strut\par}}% + \else% + \ifdim\cap@indent<\z@ + \@ensure@dir{\capfont\strut\ignorespaces + #1{{\caplabelfont #2\captionformat\par}}% + \noindent\hspace*{-\cap@indent}#3\unskip\strut\par}% + \else% + \if@capbreak + \@ensure@dir{\capfont\strut\ignorespaces + #1{{\caplabelfont #2\captionformat\par}}% + \noindent\@hangfrom{\hspace*{\cap@indent}}{#3\par}}% + \else + \@ensure@dir{\capfont\@hangfrom{\scr@smashdp\strut\hspace*{\cap@indent}}% + {\hspace{-\cap@indent}\scr@smashdp{\ignorespaces#1% + {{\caplabelfont#2\captionformat}}}#3\unskip\strut\par}}% + \fi + \fi + \fi + }% + \setlength{\@tempdima}{\ht\@tempboxa}% + \addtolength{\@tempdima}{\dp\@tempboxa}% + \addtolength{\@tempdima}{-\ht\strutbox}% + \ht\@tempboxa\ht\strutbox + \dp\@tempboxa\@tempdima + \strut\cap@left + \box\@tempboxa + \cap@right\strut + }% + \else + \global \@minipagefalse + \sbox\@tempboxa{% + \@ensure@dir{\capfont\scr@smashdp{\strut\ignorespaces + #1{{\caplabelfont#2\captionformat}}}% + #3}% + }% + \hb@xt@\hsize{\strut\cap@left\box\@tempboxa\cap@right\strut}% + \fi + \endgroup} +}}% +% \end{macrocode} % \subsection{\cmd{\textcolor}} % \cmd\textcolor\ needs to be redefined so that the color-switching % commands in the output will affect the correct portion of text also @@ -487,7 +761,7 @@ François Charette % more than one line, which is why we issue a warning. See §~\ref{bidicolor} % above for an alternative approach to colored text using \XeTeX\ font features. % The following code (less the warning) is again taken from \texttt{rlbabel.def}. -% \begin{macrocode} +% \begin{macrocode} \ifx\@textcolor\@undefined\else% \AtBeginDocument{% \def\@textcolor#1#2#3{% @@ -501,169 +775,103 @@ François Charette }% }% \fi -%%% % \end{macrocode} -% \subsection{Alphanumerical numbers} -% The code that follows is a straightforward adaptation of the corresponding -% code in the \pkg{Arabi} package. The code for Hebrew numerals is a simplified version -% of the implementation in Babel. +% \subsection{Tabular environments} +% This is taken almost verbatim from Farsi\TeX, with the addition of a +% patch for the \pkg{array} package (which does not work correctly yet). % \begin{macrocode} -\def\abjad#1{% -\ifnum#1>1999 \PackageWarning{bidi}{Illegal value (#1) for abjad numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for abjad numeral}% - \else - \ifnum#1<10\expandafter\abj@num@i\number#1% - \else - \ifnum#1<100\expandafter\abj@num@ii\number#1% - \else - \ifnum#1<\@m\expandafter\abj@num@iii\number#1% - \else - \ifnum#1<\@M\expandafter\abj@num@iv\number#1%since #1<2000, we must have 1000 - \fi - \fi - \fi - \fi - \fi -\fi -} - -\def\abjadmaghribi#1{% -\ifnum#1>1999 \PackageWarning{bidi}{Illegal value (#1) for abjad numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for abjad numeral}% - \else - \ifnum#1<10\expandafter\abj@num@i\number#1% - \else - \ifnum#1<100\expandafter\abj@maghribi@num@ii\number#1% - \else - \ifnum#1<\@m\expandafter\abj@maghribi@num@iii\number#1% - \else - \ifnum#1<\@M\expandafter\abj@maghribi@num@iv\number#1% - \fi - \fi - \fi - \fi - \fi -\fi -} - -\def\hebrewnumeral#1{% -\ifnum#1>9999 \PackageWarning{bidi}{Illegal value (#1) for Hebrew numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for Hebrew numeral}% - \else - \ifnum#1<10\expandafter\heb@num@i\number#1% - \else - \ifnum#1<100\expandafter\heb@num@ii\number#1% - \else - \ifnum#1<\@m\expandafter\heb@num@iii\number#1% - \else - \ifnum#1<\@M\expandafter\heb@num@iv\number#1% - \fi - \fi - \fi - \fi - \fi -\fi -} - -\def\abjadsyriac#1{% -\ifnum#1>499 \PackageWarning{bidi}{Illegal value (#1) for Syriac abjad numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for Syriac abjad numeral}% - \else - \ifnum#1<10\expandafter\abj@syr@num@i\number#1% - \else - \ifnum#1<100\expandafter\abj@syr@num@ii\number#1% - \else - \expandafter\abj@syr@num@iii\number#1% - \fi - \fi - \fi -\fi +\newif\if@tab@rl +\if@rlmain\@tab@rltrue\else\@tab@rlfalse\fi +\@ifpackageloaded{array}% +{\PackageWarningNoLine{bidi}{% + You are using the package array (or the memoir class). ^^J + Unfortunately right-to-left tabular environments are not ^^J + yet supported with the array package.} +\let\@uthor=\author +\def\author#1{\@uthor{\@ensure@dir{#1}}} +}% +%\def\@array[#1]#2{% +% \@tempdima \ht \strutbox +% \advance \@tempdima by\extrarowheight +% \setbox \@arstrutbox \hbox{\vrule +% \@height \arraystretch \@tempdima +% \@depth \arraystretch \dp \strutbox +% \@width \z@}% +% \begingroup +% \@mkpream{#2}% +% \xdef\@preamble{\noexpand \ialign \@halignto +% \bgroup \@arstrut \@preamble +% \tabskip \z@ \cr}% +% \endgroup +% \@arrayleft +% \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi +% \bgroup +% \let \@sharp ##\let \protect \relax +% \lineskip \z@ +% \baselineskip \z@ +% \if@tab@rl\hbox\bgroup\beginR\vbox\bgroup\fi +% \m@th +% \let\\\@arraycr \let\tabularnewline\\\let\par\@empty +% \@preamble} +%\def\@tabular{% +% \if@rl\global\@tab@rltrue\fi +% \leavevmode +% \hbox \bgroup\if@tab@rl\beginR\fi +% $\col@sep\tabcolsep +% \let\d@llarbegin\begingroup \let\d@llarend\endgroup +% \@tabarray} +%\def\endtabular{\endarray\if@tab@rl\egroup\endR\egroup\fi +%$\if@tab@rl\endR\fi +%\egroup}% +{% ELSE DEFAULT LATEX MACROS +\def\@tabular{% + \if@rl\global\@tab@rltrue\fi + \leavevmode \hbox \bgroup \if@tab@rl\beginR\fi + $\let\@acol\@tabacol + \let\@classz\@tabclassz + \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray} +\def\endtabular{\crcr\egroup\if@tab@rl\egroup\endR\egroup\fi + \egroup $\if@tab@rl\endR\fi \egroup}% +\def\@array[#1]#2{\setbox\@arstrutbox=\hbox{\vrule + height\arraystretch \ht\strutbox + depth\arraystretch \dp\strutbox + width\z@}\@mkpream{#2}\edef\@preamble{% +\halign \noexpand\@halignto +\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip\z@ \cr}% +\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox +\if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi +\bgroup \let\par\relax +\let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@ +\if@tab@rl\hbox\bgroup\beginR\vbox\bgroup\fi +\@preamble} } -% % \end{macrocode} -% \subsubsection{Symbol for zero} -% By default the \textit{abjad} symbol for zero is not defined, -% but if a package writer or user owns or develops a font containing -% appropriate glyphs (e.g. as found in medieval manuscripts), it can be -% easily redefined. +% \subsection{Equation labels in RL documents} +% Adapted from Farsi\TeX. % \begin{macrocode} -\def\abjad@zero{} -\def\hebnum@zero{} -\def\syriac@zero{} +\def\@open@paren{\if@rlmain)\else(\fi} +\def\@close@paren{\if@rlmain(\else)\fi} +\def\tagform@#1{\maketag@@@{\@open@paren\ignorespaces#1\unskip\@@italiccorr\@close@paren}} % \end{macrocode} -% \subsubsection{Definitions of alphanumeric characters} +% \subsection{TODO} +% \subsubsection{Unicode CTRL Chars} % \begin{macrocode} -\def\abj@num@i#1{% - \ifcase#1\or\char"0627 \or\char"0628 \or\char"062C \char"200D\or\char"062F % - \or\char"0647 \or\char"0648 \or\char"0632 \or\char"062D \or\char"0637 \fi - \ifnum#1=\z@\abjad@zero\fi} -\def\abj@num@ii#1{% - \ifcase#1\or\char"064A \or\char"0643 \or\char"0644 \or\char"0645 \or\char"0646 % - \or\char"0633 \or\char"0639 \or\char"0641 \or\char"0635 \fi - \ifnum#1=\z@\fi\abj@num@i} -\def\abj@num@iii#1{% - \ifcase#1\or\char"0642 \or\char"0631 \or\char"0634 \or\char"062A \or\char"062B % - \or\char"062E \or\char"0630 \or\char"0636 \or\char"0638 \fi - \ifnum#1=\z@\fi\abj@num@ii} -\def\abj@num@iv#1{% - \ifcase#1\or\char"063A \fi - \ifnum#1=\z@\fi\abj@num@iii} - -%maghribi س -> ص ص -> ض ش -> س ض -> ظ ظ -> غ غ -> ش -\def\abj@maghribi@num@ii#1{% - \ifcase#1\or\char"064A \or\char"0643 \or\char"0644 \or\char"0645 \or\char"0646 % - \or\char"0635 \or\char"0639 \or\char"0641 \or\char"0636 \fi - \ifnum#1=\z@\abjad@zero\fi\abj@num@i} -\def\abj@maghribi@num@iii#1{% - \ifcase#1\or\char"0642 \or\char"0631 \or\char"0633 \or\char"062A \or\char"062B % - \or\char"062E \or\char"0630 \or\char"0638 \or\char"063A \fi - \ifnum#1=\z@\fi\abj@maghribi@num@ii} -\def\abj@maghribi@num@iv#1{% - \ifcase#1\or\char"0634 \fi - \ifnum#1=\z@\fi\abj@maghribi@num@iii} - -%Hebrew alphabetic numerals (primitive implementation -- the code in Babel is more complex): -\def\heb@num@i#1{% - \ifcase#1\or\char"05D0 \or\char"05D1 \or\char"05D2 \or\char"05D3 \or\char"05D4 % - \or\char"05D5 \or\char"05D6 \or\char"05D7 \or\char"05D8 \fi - \ifnum#1=\z@\hebnum@zero\fi} -\def\heb@num@ii#1{% - \ifcase#1\or\char"05D9 \or\char"05DB \or\char"05DC \or\char"05DE \or\char"05E0 % - \or\char"05E1 \or\char"05E2 \or\char"05E4 \or\char"05E6 \fi - \ifnum#1=\z@\fi\heb@num@i} -\def\heb@num@iii#1{% - \ifcase#1\or\char"05E7 \or\char"05E8 \or\char"05E9 \or\char"05EA \or\char"05DA % - \or\char"05DD \or\char"05DF \or\char"05E3 \or\char"05E5 \fi - \ifnum#1=\z@\fi\heb@num@ii} -\def\heb@num@iv#1{% - \ifcase#1\or\char"05D0\char"05F3 \or\char"05D1\char"05F3 \or\char"05D2\char"05F3 % - \or\char"05D3\char"05F3 \or\char"05D4\char"05F3 \or\char"05D5\char"05F3 % - \or\char"05D6\char"05F3 \or\char"05D7\char"05F3 \or\char"05D8\char"05F3 \fi - \ifnum#1=\z@\fi\heb@num@iii} -%TODO [optionally] -% -insert gereshayim (\char"05F4) before last letter of a sequence of two letters or more -% -insert geresh (\char"05F3) after letter if it is alone - -\def\abj@syr@num@i#1{% - \ifcase#1\or\char"0710 \or\char"0712 \or\char"0713 \or\char"0715 % - \or\char"0717 \or\char"0718 \or\char"0719 \or\char"071A \or\char"071B\fi - \ifnum#1=\z@\syriac@zero\fi} -\def\abj@syr@num@ii#1{% - \ifcase#1\or\char"071D \or\char"071F \or\char"0720 \or\char"0721 \or\char"0722 % - \or\char"0723 \or\char"0725 \or\char"0726 \or\char"0728 \fi - \ifnum#1=\z@\fi\abj@syr@num@i} -\def\abj@syr@num@iii#1{% - \ifcase#1\or\char"0729 \or\char"072A \or\char"072B \or\char"072C \fi - \ifnum#1=\z@\fi\abj@syr@num@ii} +%% Make these Unicode chars active and define them so that they work +%% in conformance to the Unicode bidi algorithm! +%% \catcode"200E=\active +%% \catcode"200F=\active +%% \def‎{\setLR} +%% \def‏{\setRL} +%% 202A -> {\@ensure@LR\bgroup} ? or \LR +%% 202B -> {\@ensure@RL\bgroup} ? or \RL +%% 202C -> {\egroup} ? or \if@rl\@rlfalse\else\@rltrue\fi ? +%% 202D -> {?} %LRO +%% 202E -> {?} %RLO % \end{macrocode} % -%\iffalse +% \iffalse % -%\fi +% \fi % % ^^A\clearpage % ^^A\PrintChanges @@ -673,79 +881,6 @@ François Charette % % \Finale % -%\iffalse -%<*dtx-style> -% \begin{macrocode} -\ProvidesPackage{dtx-style} -\usepackage{fontspec,xltxtra} -\usepackage{bidi} -\usepackage{xspace,fancyvrb,paralist} -\usepackage[xetex]{color} -\definecolor{myblue}{rgb}{0.02,0.04,0.48} -\definecolor{myred}{rgb}{0.65,0.04,0.07} -\definecolor{darkgray}{gray}{0.3} -\definecolor{lightgray}{gray}{0.6} -\definecolor{IslamicGreen}{rgb}{0,.43,0} -\usepackage[dvipdfm, - bookmarks=true, - colorlinks=true, - linkcolor=myblue, - urlcolor=myblue, - citecolor=myblue, - hyperindex=false, - hyperfootnotes=false, - pdftitle={The bidi package}, - pdfauthor={F Charette }, - pdfsubject={An interface for typesetting bidirectional texts with XeLaTeX}, - pdfkeywords={XeTeX, XeLaTeX, Right-to-Left, Bidi, Arabic, Hebrew} - ]{hyperref} -% NB some of this preamble is taken or adapted from fontspec-doc-style.sty -\newcommand*\pkg[1]{\textsf{#1}} -\def\eg{\textit{e.g.,}\xspace} -\def\ie{\textit{i.e.,}\xspace} -\def\ca{\textit{ca.}\@\xspace} -\def\Eg{\textit{E.g.,}\xspace} -\def\Ie{\textit{I.e.,}\xspace} -\def\etc{\@ifnextchar.{\textit{etc}}{\textit{etc.}\@\xspace}} -\def\arabxetex{Arab\XeTeX} - -\newlength{\oldparindent} -\newcommand{\parindentoff}{\setlength{\oldparindent}{\parindent} \setlength{\parindent}{0pt}} -\newcommand{\parindenton}{\setlength{\parindent}{\oldparindent}} - -%% LOGOS, tuned for Palatino (seems also OK with Junicode): -\makeatletter -\TeX@logo@spacing{-0.12em}{-0.12em}% - {0.5ex}{-0.3em}{-0.12em}{-0.1em} -\makeatother -%% fontspec declarations: -\setromanfont[Mapping=tex-text]{Junicode}%{FPL Neu} -\defaultfontfeatures{Scale=MatchLowercase} -\setmonofont{DejaVu Sans Mono}%{Inconsolata}%{Latin Modern Typewriter Proportional}%{Luxi Mono}%{Courier New} -\setsansfont{DejaVu Sans} -\newfontfamily\arabicfont[Script=Arabic,Scale=1.5]{Scheherazade} -\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL} -\newfontfamily\syriacfont[Script=Syriac]{Estrangelo Talada} -\newfontfamily\damase{MPH 2B Damase} -\linespread{1.05} -\frenchspacing -\renewcommand{\footnoterule}{} -\skip\footins=2\bigskipamount -%% ToC -\def\@dotsep{1000} -\setcounter{tocdepth}{2} -\setlength\columnseprule{0.4pt} -\makeatletter -\renewcommand\tableofcontents{% - \begin{multicols}{2}[\section*{\contentsname}]% - \small - \@starttoc{toc}% - \end{multicols}} -\makeatother -% \end{macrocode} -% -%\fi -% % % \typeout{*************************************************************} % \typeout{*} diff --git a/Master/texmf-dist/source/xelatex/bidi/bidi.ins b/Master/texmf-dist/source/xelatex/bidi/bidi.ins new file mode 100644 index 00000000000..3d60a60cbd7 --- /dev/null +++ b/Master/texmf-dist/source/xelatex/bidi/bidi.ins @@ -0,0 +1,30 @@ +\input docstrip.tex +\keepsilent +\preamble + + ____________________________ + + The bidi package + (C) 2007-2008 François Charette + License information appended + +\endpreamble +\postamble + +Copyright (C) 2007-2008 by François Charette + +Distributable 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 "maintained" (as per LPPL maintenance status) +by François Charette. + +This work consists of the file \jobname.dtx + and the derived files \jobname.sty and \jobname.pdf. + +\endpostamble +\askforoverwritefalse +\generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}} +\nopreamble\nopostamble +\endbatchfile diff --git a/Master/texmf-dist/tex/xelatex/bidi/bidi.sty b/Master/texmf-dist/tex/xelatex/bidi/bidi.sty index 7ac709c9eaf..2ffa7b5c828 100644 --- a/Master/texmf-dist/tex/xelatex/bidi/bidi.sty +++ b/Master/texmf-dist/tex/xelatex/bidi/bidi.sty @@ -7,15 +7,18 @@ %% bidi.dtx (with options: `package') %% %% ____________________________ +%% %% The bidi package -%% (C) 2007 François Charette +%% (C) 2007-2008 François Charette %% License information appended %% -%% -%% \section{Implementation} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bidi} - [2007/04/30 v0.2.2 Bidirectional typesetting in XeLaTeX] + [2008/07/07 v0.3 Bidirectional typesetting in XeLaTeX] +\newif\if@rlmain +\@rlmainfalse +\DeclareOption{rldocument}{\@rlmaintrue} +\ProcessOptions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx\TeXXeTstate\undefined\else% \TeXXeTstate=1 @@ -28,6 +31,13 @@ engine}% \fi \newif\if@rl +\AtBeginDocument{% Here we set the main document direction + \if@rlmain\else + \if@rl\@rlmaintrue% + \else\@rlmainfalse% + \fi% + \fi% +} \let\n@xt=\ \def\LR{\protect\pLR}% \def\pLR{\protect\afterassignment\moreLR \let\n@xt= } @@ -46,16 +56,27 @@ \let\everypar=\n@everypar \def\@ensure@RL#1{\if@rl#1\else\RL{#1}\fi} \def\@ensure@LR#1{\if@rl\LR{#1}\else#1\fi} +\def\@ensure@dir#1{\if@rl\RL{#1}\else{#1}\fi} +\def\@ensure@maindir#1{\if@rlmain\RL{#1}\else{#1}\fi} +\def\@@RL{RL} +\def\@@LR{LR} +\def\save@dir{\if@rl\gdef\saved@@dir{RL}\else\gdef\saved@@dir{LR}\fi} +\def\reset@dir{\ifx\saved@@dir\@@RL\setRL\else\ifx\saved@@dir\@@LR\setLR\else\relax\fi\fi} \let\@@TeX\TeX -\def\TeX{\LR{\@@TeX}} +\def\TeX{\@ensure@LR{\@@TeX}} \let\@@LaTeX\LaTeX -\def\LaTeX{\LR{\@@LaTeX}} +\def\LaTeX{\@ensure@LR{\@@LaTeX}} \let\@@LaTeXe\LaTeXe -\def\LaTeXe{\LR{\@@LaTeXe}} +\def\LaTeXe{\@ensure@LR{\@@LaTeXe}} \@ifpackageloaded{xltxtra}{ \let\@@XeTeX\XeTeX -\def\XeTeX{\LR{\@@XeTeX}} +\def\XeTeX{\@ensure@LR{\@@XeTeX}} +\let\@@XeLaTeX\XeLaTeX +\def\XeLaTeX{\@ensure@LR{\@@XeLaTeX}} }{} +\@ifundefined{text}{}{% +\let\t@xt=\text +\def\text#1{\t@xt{\@ensure@dir{#1}}}} \def\list#1#2{% \ifnum \@listdepth >5\relax \@toodeep @@ -82,7 +103,6 @@ \fi \parshape \@ne \@totalleftmargin \linewidth \ignorespaces} -%% \def\@dottedtocline#1#2#3#4#5{% \ifnum #1>\c@tocdepth \else \vskip \z@ \@plus.2\p@ @@ -103,7 +123,6 @@ \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor \beginL#5\endL}% \par}% \fi} -%% \def\raggedright{% \let\\\@centercr \leftskip\z@skip\rightskip\@flushglue @@ -119,15 +138,51 @@ \if@compatibility \let\undertext=\underline \fi +\let\lr@outputdblcol\@outputdblcol +\renewcommand{\@outputdblcol}{% + \if@rlmain% + \rl@outputdblcol% + \else% + \lr@outputdblcol% + \fi% +} +\newcommand{\rl@outputdblcol}{% + \if@firstcolumn + \global \@firstcolumnfalse + \global \setbox\@leftcolumn \box\@outputbox + \else + \global \@firstcolumntrue + \setbox\@outputbox \vbox {\hb@xt@\textwidth {% + \hskip\columnwidth% + \hfil\vrule\@width\columnseprule\hfil + \hb@xt@\columnwidth {% + \box\@leftcolumn \hss}% + \hb@xt@\columnwidth {% + \hskip-\textwidth% + \box\@outputbox \hss}% + \hskip\columnsep% + \hskip\columnwidth}}% + \@combinedblfloats + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi + {\@outputpage + \@startdblcolumn}% + \endgroup + \fi} + \newif\if@rl@footnote -\if@rl\@rl@footnotetrue\else\@rl@footnotefalse\fi +\if@rlmain\@rl@footnotetrue\else\@rl@footnotefalse\fi \let\@@footnoterule=\footnoterule \def\LRfootnoterule{\@@footnoterule} +%%bug?-->this causes new par to be set, hence hack with vskip :-{ \def\RLfootnoterule{\vskip -\baselineskip\hb@xt@\hsize{\hss\vbox{\@@footnoterule}}} \def\setfootnoteRL{\@rl@footnotetrue} \def\unsetfootnoteRL{\@rl@footnotefalse} \def\setfootnoteLR{\unsetfootnoteRL} -\def\footnoterule{\if@rl@footnote\RLfootnoterule\else\LRfootnoterule\fi} +\def\footnoterule{\if@rlmain\RLfootnoterule\else\LRfootnoterule\fi} \def\setRL{\@rltrue\@rl@footnotetrue} \def\unsetRL{\@rlfalse\@rl@footnotefalse} \def\setLR{\unsetRL} @@ -145,6 +200,7 @@ \@makefntext{% \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% \color@endgroup}}% +%%... also in minipages \long\def\@mpfootnotetext#1{% \global\setbox\@mpfootins\vbox{% \if@rl@footnote\@rltrue\else\@rlfalse\fi @@ -159,6 +215,128 @@ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% \color@endgroup }} +\@ifundefined{KOMAClassName}{% +\@ifclassloaded{memoir}{% +\long\def\@makecaption#1#2{\let\@memtempa\relax + \ifdim\prevdepth>-99\p@ \vskip\abovecaptionskip + \else \def\@memtempa{\vbox to\topskip{}}\fi + \let\@contfnote\footnote \renewcommand{\footnote}[2][]{} + \let\@contfmark\footnotemark \renewcommand{\footnotemark}[1][]{} + \sbox\@tempboxa{\@contnfont #1\@contdelim \@conttfont #2} + \let\footnote\@contfnote + \let\footnotemark\@contfmark + \ifdim\wd\@tempboxa<\linewidth \centering \fi + \if@contcw + \centering + \parbox{\@contcwidth}{% + \ifdim\wd\@tempboxa<\@contcwidth \centering \fi + \fi + \if@conthang + \sbox\@tempboxa{\@contnfont #1\@contdelim} + \@contpre% + \@ensure@dir{\@contcstyle\hangindent=\wd\@tempboxa + \noindent\box\@tempboxa\@memtempa \@conttfont #2}\par + \else + \if@contindent + \@contpre% + \@ensure@dir{\@contnfont #1\@contdelim}\@memtempa + \@ensure@dir{\@contcstyle\hangindent=\@contindw + \hangafter=\@ne\@conttfont #2}\par% <- v1.4 + \else + \@contpre% + \@ensure@dir{\@contnfont #1\@contdelim}\@memtempa + \@ensure@dir{\ifdim\wd\@tempboxa<\linewidth + \@contcshortstyle\else \@contcstyle\fi% <- v1.4 + \@conttfont #2}\par + \fi + \fi + \@contpost + \if@contcw + \par + } % end of the \parbox + \fi + \vskip\belowcaptionskip} +}% else we redefine \@makecaption for the standard classes +{\@ifundefined{@makecaption}{% +}{\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\@ensure@dir{#1: #2}}% + \ifdim \wd\@tempboxa >\hsize + \@ensure@dir{#1: #2}\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip}% + }% + }% +}% ELSE KOMASCRIPT +{\@ifclassloaded{scrlttr2}{}% do nothing for letter class +{\renewcommand{\@@makecaption}[3]{% + \cap@margin + \ifonelinecaptions + \@tempcnta=\value{mpfootnote}\@tempcntb=\value{footnote}% + \let\scr@tmp@footnotetext=\@footnotetext + \let\@footnotetext=\@gobble + \sbox\@tempboxa{% + {\capfont\strut\ignorespaces + #1{{\caplabelfont#2\captionformat}}% + #3\unskip\strut}% + }% + \let\@footnotetext=\scr@tmp@footnotetext + \let\scr@tmp@footnotetext=\undefined + \setcounter{footnote}{\@tempcntb}% + \setcounter{mpfootnote}{\@tempcnta}% + \else + \sbox\@tempboxa{\hspace*{2\cap@width}}% + \fi + \begingroup% + \setlength{\@tempdima}{\cap@width}% + \ifdim \wd\@tempboxa >\@tempdima + \hb@xt@\hsize{% + \setbox\@tempboxa\vbox{\hsize=\cap@width + \ifdofullc@p + \@ensure@dir{\capfont\@hangfrom{\scr@smashdp{\strut\ignorespaces + #1{{\caplabelfont#2\captionformat}}}}% + {#3\unskip\strut\par}}% + \else% + \ifdim\cap@indent<\z@ + \@ensure@dir{\capfont\strut\ignorespaces + #1{{\caplabelfont #2\captionformat\par}}% + \noindent\hspace*{-\cap@indent}#3\unskip\strut\par}% + \else% + \if@capbreak + \@ensure@dir{\capfont\strut\ignorespaces + #1{{\caplabelfont #2\captionformat\par}}% + \noindent\@hangfrom{\hspace*{\cap@indent}}{#3\par}}% + \else + \@ensure@dir{\capfont\@hangfrom{\scr@smashdp\strut\hspace*{\cap@indent}}% + {\hspace{-\cap@indent}\scr@smashdp{\ignorespaces#1% + {{\caplabelfont#2\captionformat}}}#3\unskip\strut\par}}% + \fi + \fi + \fi + }% + \setlength{\@tempdima}{\ht\@tempboxa}% + \addtolength{\@tempdima}{\dp\@tempboxa}% + \addtolength{\@tempdima}{-\ht\strutbox}% + \ht\@tempboxa\ht\strutbox + \dp\@tempboxa\@tempdima + \strut\cap@left + \box\@tempboxa + \cap@right\strut +}% + \else + \global \@minipagefalse + \sbox\@tempboxa{% + \@ensure@dir{\capfont\scr@smashdp{\strut\ignorespaces + #1{{\caplabelfont#2\captionformat}}}% + #3}% + }% + \hb@xt@\hsize{\strut\cap@left\box\@tempboxa\cap@right\strut}% + \fi + \endgroup} +}}% \ifx\@textcolor\@undefined\else% \AtBeginDocument{% \def\@textcolor#1#2#3{% @@ -172,144 +350,54 @@ }% }% \fi -%%% -\def\abjad#1{% -\ifnum#1>1999 \PackageWarning{bidi}{Illegal value (#1) for abjad numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for abjad numeral}% - \else - \ifnum#1<10\expandafter\abj@num@i\number#1% - \else - \ifnum#1<100\expandafter\abj@num@ii\number#1% - \else - \ifnum#1<\@m\expandafter\abj@num@iii\number#1% - \else - \ifnum#1<\@M\expandafter\abj@num@iv\number#1%since #1<2000, we must have 1000 - \fi - \fi - \fi - \fi - \fi -\fi -} - -\def\abjadmaghribi#1{% -\ifnum#1>1999 \PackageWarning{bidi}{Illegal value (#1) for abjad numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for abjad numeral}% - \else - \ifnum#1<10\expandafter\abj@num@i\number#1% - \else - \ifnum#1<100\expandafter\abj@maghribi@num@ii\number#1% - \else - \ifnum#1<\@m\expandafter\abj@maghribi@num@iii\number#1% - \else - \ifnum#1<\@M\expandafter\abj@maghribi@num@iv\number#1% - \fi - \fi - \fi - \fi - \fi -\fi -} - -\def\hebrewnumeral#1{% -\ifnum#1>9999 \PackageWarning{bidi}{Illegal value (#1) for Hebrew numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for Hebrew numeral}% - \else - \ifnum#1<10\expandafter\heb@num@i\number#1% - \else - \ifnum#1<100\expandafter\heb@num@ii\number#1% - \else - \ifnum#1<\@m\expandafter\heb@num@iii\number#1% - \else - \ifnum#1<\@M\expandafter\heb@num@iv\number#1% - \fi - \fi - \fi - \fi - \fi -\fi -} - -\def\abjadsyriac#1{% -\ifnum#1>499 \PackageWarning{bidi}{Illegal value (#1) for Syriac abjad numeral} {#1} -\else - \ifnum#1<\z@\space\PackageWarning{bidi}{Illegal value (#1) for Syriac abjad numeral}% - \else - \ifnum#1<10\expandafter\abj@syr@num@i\number#1% - \else - \ifnum#1<100\expandafter\abj@syr@num@ii\number#1% - \else - \expandafter\abj@syr@num@iii\number#1% - \fi - \fi - \fi -\fi +\newif\if@tab@rl +\if@rlmain\@tab@rltrue\else\@tab@rlfalse\fi +\@ifpackageloaded{array}% +{\PackageWarningNoLine{bidi}{% + You are using the package array (or the memoir class). ^^J + Unfortunately right-to-left tabular environments are not ^^J + yet supported with the array package.} +\let\@uthor=\author +\def\author#1{\@uthor{\@ensure@dir{#1}}} +}% +{% ELSE DEFAULT LATEX MACROS +\def\@tabular{% + \if@rl\global\@tab@rltrue\fi + \leavevmode \hbox \bgroup \if@tab@rl\beginR\fi + $\let\@acol\@tabacol + \let\@classz\@tabclassz + \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray} +\def\endtabular{\crcr\egroup\if@tab@rl\egroup\endR\egroup\fi + \egroup $\if@tab@rl\endR\fi \egroup}% +\def\@array[#1]#2{\setbox\@arstrutbox=\hbox{\vrule + height\arraystretch \ht\strutbox + depth\arraystretch \dp\strutbox + width\z@}\@mkpream{#2}\edef\@preamble{% +\halign \noexpand\@halignto +\bgroup \tabskip\z@ \@arstrut \@preamble \tabskip\z@ \cr}% +\let\@startpbox\@@startpbox \let\@endpbox\@@endpbox +\if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi +\bgroup \let\par\relax +\let\@sharp##\let\protect\relax \lineskip\z@\baselineskip\z@ +\if@tab@rl\hbox\bgroup\beginR\vbox\bgroup\fi +\@preamble} } -\def\abjad@zero{} -\def\hebnum@zero{} -\def\syriac@zero{} -\def\abj@num@i#1{% - \ifcase#1\or\char"0627 \or\char"0628 \or\char"062C \char"200D\or\char"062F % - \or\char"0647 \or\char"0648 \or\char"0632 \or\char"062D \or\char"0637 \fi - \ifnum#1=\z@\abjad@zero\fi} -\def\abj@num@ii#1{% - \ifcase#1\or\char"064A \or\char"0643 \or\char"0644 \or\char"0645 \or\char"0646 % - \or\char"0633 \or\char"0639 \or\char"0641 \or\char"0635 \fi - \ifnum#1=\z@\fi\abj@num@i} -\def\abj@num@iii#1{% - \ifcase#1\or\char"0642 \or\char"0631 \or\char"0634 \or\char"062A \or\char"062B % - \or\char"062E \or\char"0630 \or\char"0636 \or\char"0638 \fi - \ifnum#1=\z@\fi\abj@num@ii} -\def\abj@num@iv#1{% - \ifcase#1\or\char"063A \fi - \ifnum#1=\z@\fi\abj@num@iii} - -\def\abj@maghribi@num@ii#1{% - \ifcase#1\or\char"064A \or\char"0643 \or\char"0644 \or\char"0645 \or\char"0646 % - \or\char"0635 \or\char"0639 \or\char"0641 \or\char"0636 \fi - \ifnum#1=\z@\abjad@zero\fi\abj@num@i} -\def\abj@maghribi@num@iii#1{% - \ifcase#1\or\char"0642 \or\char"0631 \or\char"0633 \or\char"062A \or\char"062B % - \or\char"062E \or\char"0630 \or\char"0638 \or\char"063A \fi - \ifnum#1=\z@\fi\abj@maghribi@num@ii} -\def\abj@maghribi@num@iv#1{% - \ifcase#1\or\char"0634 \fi - \ifnum#1=\z@\fi\abj@maghribi@num@iii} - -\def\heb@num@i#1{% - \ifcase#1\or\char"05D0 \or\char"05D1 \or\char"05D2 \or\char"05D3 \or\char"05D4 % - \or\char"05D5 \or\char"05D6 \or\char"05D7 \or\char"05D8 \fi - \ifnum#1=\z@\hebnum@zero\fi} -\def\heb@num@ii#1{% - \ifcase#1\or\char"05D9 \or\char"05DB \or\char"05DC \or\char"05DE \or\char"05E0 % - \or\char"05E1 \or\char"05E2 \or\char"05E4 \or\char"05E6 \fi - \ifnum#1=\z@\fi\heb@num@i} -\def\heb@num@iii#1{% - \ifcase#1\or\char"05E7 \or\char"05E8 \or\char"05E9 \or\char"05EA \or\char"05DA % - \or\char"05DD \or\char"05DF \or\char"05E3 \or\char"05E5 \fi - \ifnum#1=\z@\fi\heb@num@ii} -\def\heb@num@iv#1{% - \ifcase#1\or\char"05D0\char"05F3 \or\char"05D1\char"05F3 \or\char"05D2\char"05F3 % - \or\char"05D3\char"05F3 \or\char"05D4\char"05F3 \or\char"05D5\char"05F3 % - \or\char"05D6\char"05F3 \or\char"05D7\char"05F3 \or\char"05D8\char"05F3 \fi - \ifnum#1=\z@\fi\heb@num@iii} - -\def\abj@syr@num@i#1{% - \ifcase#1\or\char"0710 \or\char"0712 \or\char"0713 \or\char"0715 % - \or\char"0717 \or\char"0718 \or\char"0719 \or\char"071A \or\char"071B\fi - \ifnum#1=\z@\syriac@zero\fi} -\def\abj@syr@num@ii#1{% - \ifcase#1\or\char"071D \or\char"071F \or\char"0720 \or\char"0721 \or\char"0722 % - \or\char"0723 \or\char"0725 \or\char"0726 \or\char"0728 \fi - \ifnum#1=\z@\fi\abj@syr@num@i} -\def\abj@syr@num@iii#1{% - \ifcase#1\or\char"0729 \or\char"072A \or\char"072B \or\char"072C \fi - \ifnum#1=\z@\fi\abj@syr@num@ii} +\def\@open@paren{\if@rlmain)\else(\fi} +\def\@close@paren{\if@rlmain(\else)\fi} +\def\tagform@#1{\maketag@@@{\@open@paren\ignorespaces#1\unskip\@@italiccorr\@close@paren}} +%% Make these Unicode chars active and define them so that they work +%% in conformance to the Unicode bidi algorithm! +%% \catcode"200E=\active +%% \catcode"200F=\active +%% \def‎{\setLR} +%% \def‏{\setRL} +%% 202A -> {\@ensure@LR\bgroup} ? or \LR +%% 202B -> {\@ensure@RL\bgroup} ? or \RL +%% 202C -> {\egroup} ? or \if@rl\@rlfalse\else\@rltrue\fi ? +%% 202D -> {?} %LRO +%% 202E -> {?} %RLO %% -%% Copyright (C) 2007 by François Charette +%% Copyright (C) 2007-2008 by François Charette %% %% Distributable under the LaTeX Project Public License, %% version 1.3c or higher (your choice). The latest version of diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index e3c01a724fe..c1549e777a9 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -34,7 +34,8 @@ my @WorkingTLP = qw( babel babelbib bangtex barcodes bbcard bbold beamer beamer-contrib beamer-tut-pt begriff bera betababel beton bez123 bezos bibhtml bibleref bibtopic bibtopicprefix - bibunits bigfoot binomexp blacklettert1 blindtext blockdraw_mp blowup + bibunits bidi bigfoot binomexp blacklettert1 blindtext + blockdraw_mp blowup boites boldtensors bookest booklet booktabs bophook boxhandler bpchem breakurl bullcntr bussproofs bytefield captcont caption carlisle catechis carolmin-ps diff --git a/Master/tlpkg/bin/tlpkginfo b/Master/tlpkg/bin/tlpkginfo index a66bc52d8fc..214bf0ae424 100755 --- a/Master/tlpkg/bin/tlpkginfo +++ b/Master/tlpkg/bin/tlpkginfo @@ -23,7 +23,7 @@ sub main $latex_tds_dir = "$CTAN/macros/latex/contrib/latex-tds"; # erroneous tds files (warn Robin about them) - $erroneous_tds = "lcyw|xetexfontinfo"; # list format: pkg1|pkg2|etc + $erroneous_tds = "bidi|lcyw|xetexfontinfo"; # list format: pkg1|pkg2|etc if ($ARGV[0] eq "--ctan-dir") { my $output = &find_ctan_dir ($ARGV[1]); -- cgit v1.2.3