summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/bidi/bidipoem.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/bidi/bidipoem.sty')
-rw-r--r--Master/texmf-dist/tex/latex/bidi/bidipoem.sty368
1 files changed, 368 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/bidi/bidipoem.sty b/Master/texmf-dist/tex/latex/bidi/bidipoem.sty
new file mode 100644
index 00000000000..670cca3d077
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bidi/bidipoem.sty
@@ -0,0 +1,368 @@
+%%
+%% This is file `bidipoem.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% bidi.dtx (with options: `table,bidipoem.sty')
+%%
+%% __________________________________________________
+%% Copyright (c) 2009--2016 Vafa Khalighi <persian-tex@tug.org>
+%%
+%% It may be distributed and/or modified under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is “author-maintained” (as per LPPL maintenance status)
+%% by Vafa Khalighi.
+%%
+%%
+%% \CheckSum{46409}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bidipoem}%
+[2014/04/27 v0.9 Environments for typesetting Persian traditional and modern poems]
+
+
+\newcommand*{\bidipoem@spreadbox}[2]{\hbox to #1{#2}}
+
+
+\newdimen \bidipoem@hvlen \newdimen \bidipoem@hvsep
+\newdimen \bidipoem@hvind \newdimen \bidipoem@@hvlen
+
+\newcommand*{\Setversedim}[2]{% set lengths of half-verse, [separation]
+\bidipoem@hvind \textwidth
+\bidipoem@hvlen #1\relax \advance \bidipoem@hvind -\bidipoem@hvlen
+\ifx [#2\def \bidipoem@next {\bidipoem@set@verseI [}\else
+\bidipoem@@hvlen \bidipoem@hvlen \def \bidipoem@next {\bidipoem@set@@verse {#2}}\fi \bidipoem@next }
+
+\def \bidipoem@set@verseI [#1]{% optional parameter
+\bidipoem@@hvlen #1\relax \bidipoem@set@@verse }
+
+\newcommand*{\bidipoem@set@@verse}[1]{% separation
+\advance \bidipoem@hvind -\bidipoem@@hvlen \bidipoem@hvsep #1\relax
+\advance \bidipoem@hvind -\bidipoem@hvsep \divide \bidipoem@hvind 2 }
+
+\newcommand*{\traditionalconnverses}[3]{% first half-verse, connection, second half-verse
+\ifdim 0pt > \bidipoem@hvind %
+\bidipoem@spreadbox \bidipoem@hvlen {#1}\\ \hfill % first block
+\else
+\noindent \hskip \bidipoem@hvind \relax \bidipoem@spreadbox \bidipoem@hvlen {#1}\fi
+\bidipoem@spreadbox \bidipoem@hvsep {#2}% separator
+\bidipoem@spreadbox \bidipoem@@hvlen {#3}% second block
+\par }
+
+\newcommand*{\traditionalhalfverses}[2]{% optional parameter?
+\ifx [#2\def\bidipoem@half@verses@next{\bidipoem@half@verses {#1}[}%
+\else\def\bidipoem@half@verses@next{\bidipoem@half@verses {#1}[\hfill]{#2}}\fi%
+\bidipoem@half@verses@next}
+
+\def \bidipoem@half@verses #1[#2]#3{% first[mid]second
+\traditionalconnverses {#1}{#2}{#3}}
+
+{\catcode`\^^M=\active % these lines must end with %
+ \gdef\traditionalpoem@obeylines{\catcode`\^^M\active \let^^M\traditionalpoem@par}%
+ \global\let^^M\traditionalpoem@par} % this is in case ^^M appears in a \write
+{\catcode`\^^M=\active % these lines must end with %
+ \gdef\modernpoem@obeylines{\catcode`\^^M\active \let^^M\modernpoem@par}%
+ \global\let^^M\modernpoem@par} % this is in case ^^M appears in a \write
+\def\poemcolsepskip{.1\versewidth plus .1\versewidth minus .05\versewidth}
+\def\poemmarginskip{1em plus 1fil minus 1em}
+\def\poemextrabaselineskip{0\baselineskip}
+\def\poemskip{\medskip}
+\newcommand{\bidipoem@openbox}{\leavevmode
+ \hbox to.77778em{%
+ \hfil\vrule
+ \vbox to.675em{\hrule width.6em\vfil\hrule}%
+ \vrule\hfil}}
+\def\poemblocksep{\quad\hbox{\bidipoem@openbox}}
+\newdimen\versewidth
+\newtoks\bidipoem@p@ftn
+\def\poem@verse#1{%
+\ifdim\wd#1>\new@poem@width
+\xdef\new@poem@width{\the\wd#1}%
+\ifdim\new@poem@width>\poem@width
+\xdef\poem@width{\new@poem@width}%
+\global\let\poem@needrun\relax
+\fi
+\fi
+\hbox to\poem@width{\unhbox#1}%
+\global\bidipoem@p@ftn\expandafter{\expandafter}\the\bidipoem@p@ftn%
+}
+\def\poem@linebegin{\vadjust{}\hskip\@flushglue\hskip\poemmarginskip\relax}
+\def\poem@lineend{\nobreak\hskip\poemmarginskip\hskip\@flushglue\vadjust{}}
+\def\poem@lineversesep{%
+\nobreak
+\hskip\z@ plus 1filll%
+\penalty600%
+\hskip\poemcolsepskip
+\hskip\z@ plus -2filll%
+\vadjust{}%
+\nobreak
+\hskip\z@ plus 1filll%
+}
+\def\poem@lineparsebegin{%
+\halign\bgroup
+\global\setbox\verse@i=\hbox{%
+\let\@footnotetext\bidipoem@p@ftntext%
+\let\@LTRfootnotetext\bidipoem@p@LTRftntext%
+\let\@RTLfootnotetext\bidipoem@p@RTLftntext%
+\let\@xfootnotenext\bidipoem@p@xftntext%
+\let\@xfootnote\bidipoem@p@xfootnote%
+\let\@xLTRfootnotenext\bidipoem@p@xLTRftntext%
+\let\@xLTRfootnote\bidipoem@p@xLTRfootnote%
+\let\@xRTLfootnotenext\bidipoem@p@xRTLftntext%
+\let\@xRTLfootnote\bidipoem@p@xRTLfootnote%
+\ignorespaces##\unskip}&&
+\global\setbox\verse@ii=\hbox{%
+\let\@footnotetext\bidipoem@p@ftntext%
+\let\@LTRfootnotetext\bidipoem@p@LTRftntext%
+\let\@RTLfootnotetext\bidipoem@p@RTLftntext%
+\let\@xfootnotenext\bidipoem@p@xftntext%
+\let\@xfootnote\bidipoem@p@xfootnote%
+\let\@xLTRfootnotenext\bidipoem@p@xLTRftntext%
+\let\@xLTRfootnote\bidipoem@p@xLTRfootnote%
+\let\@xRTLfootnotenext\bidipoem@p@xRTLftntext%
+\let\@xRTLfootnote\bidipoem@p@xRTLfootnote%
+\ignorespaces##\unskip}
+\cr
+}
+\def\poem@lineparseend{%
+\crcr\egroup
+\vskip-\baselineskip
+}
+\def\traditionalpoem@cr{%
+ \cr\poem@line
+}
+\newbox\verse@i
+\newbox\verse@ii
+\newif\ifpoem@started
+
+\def\poem@line{%
+\poem@lineparseend
+\ifdim\wd\verse@i>\z@\global\poem@startedtrue\fi
+\ifdim\wd\verse@ii>\z@\global\poem@startedtrue\fi
+\ifpoem@started
+ \ifdim\wd\verse@ii>\z@\else
+ \nopagebreak[3]
+ \fi
+ \leavevmode
+ \poem@linebegin
+ \poem@verse\verse@i
+ \ifdim\wd\verse@ii>\z@
+ \poem@lineversesep
+ \poem@verse\verse@ii
+ \fi
+ \poem@lineend
+ \par
+ \vskip\poemextrabaselineskip
+\fi
+\poem@lineparsebegin
+}
+\def\@traditionalpoem{%
+\stepcounter{poem@no}
+ \ifnum\max@poem@no<\number\c@poem@no%
+\xdef\poem@width{\z@}%
+ \else
+\xdef\poem@width{\poem@prop{poem@width}}%
+\fi
+\xdef\new@poem@width{\z@}%
+\global\versewidth=\poem@width
+\poemskip\par
+\begingroup
+\tabskip=\z@
+\parskip=\z@
+\parindent=\z@
+\parfillskip=\z@
+\rightskip=\z@
+\leftskip=\z@
+\widowpenalty=10000% No break between verses of the same line.
+\clubpenalty=10000% Same as above. Not really needed.
+\def\newblock{\hfil\poemblocksep\hfil\null}%
+\def\traditionalpoem@par{\traditionalpoem@cr}% Redefine \par for possible \obeylines
+\def\\{\global\poem@startedtrue\traditionalpoem@cr}%
+\global\poem@startedfalse
+\csname poem@obeylines\endcsname
+\let\poem@obeylines\relax
+\poem@lineparsebegin
+}
+\def\@endtraditionalpoem{%
+\cr
+\ifdim\wd\verse@i>\z@\poem@line\else\ifdim\wd\verse@ii>\z@\poem@line\else
+\noalign{%
+\skip0=\poemextrabaselineskip
+\vskip-\skip0
+\vskip-\baselineskip
+}%
+\fi\fi
+\poem@lineparseend
+\endgroup
+\par
+\vskip\baselineskip
+\poemskip
+ \if@noparlist \else
+ \ifdim\lastskip >\z@
+ \@tempskipa\lastskip \vskip -\lastskip
+ \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
+ \vskip\@tempskipa
+ \fi
+ \@endparenv
+ \fi
+\ifdim\new@poem@width<\poem@width
+\global\let\poem@needrun\relax
+\fi
+ \poem@write@aux{poem@width@\romannumeral\c@poem@no}{\new@poem@width}%
+\ifx\AtEndDocument\undefined\poem@finish\fi
+}
+
+\long\def\bidipoem@p@ftntext#1{%
+ \edef\@tempx{\the\bidipoem@p@ftn\noexpand\footnotetext[\the\csname c@\@mpfn\endcsname]}%
+ \global\bidipoem@p@ftn\expandafter{\@tempx{#1}}}%
+\long\def\bidipoem@p@LTRftntext#1{%
+ \edef\@tempxi{\the\bidipoem@p@ftn\noexpand\LTRfootnotetext[\the\csname c@\@mpfn\endcsname]}%
+ \global\bidipoem@p@ftn\expandafter{\@tempxi{#1}}}%
+\long\def\bidipoem@p@RTLftntext#1{%
+ \edef\@tempxii{\the\bidipoem@p@ftn\noexpand\RTLfootnotetext[\the\csname c@\@mpfn\endcsname]}%
+ \global\bidipoem@p@ftn\expandafter{\@tempxii{#1}}}%
+
+\long\def\bidipoem@p@xftntext[#1]#2{%
+ \global\bidipoem@p@ftn\expandafter{\the\bidipoem@p@ftn\footnotetext[#1]{#2}}}
+
+\long\def\bidipoem@p@xLTRftntext[#1]#2{%
+ \global\bidipoem@p@ftn\expandafter{\the\bidipoem@p@ftn\LTRfootnotetext[#1]{#2}}}
+
+\long\def\bidipoem@p@xRTLftntext[#1]#2{%
+ \global\bidipoem@p@ftn\expandafter{\the\bidipoem@p@ftn\RTLfootnotetext[#1]{#2}}}
+
+\def\bidipoem@p@xfootnote[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \@footnotemark\bidipoem@p@xftntext[#1]}
+
+\def\bidipoem@p@xLTRfootnote[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \@footnotemark\bidipoem@p@xLTRftntext[#1]}
+
+\def\bidipoem@p@xRTLfootnote[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \@footnotemark\bidipoem@p@xRTLftntext[#1]}
+
+\newenvironment{traditionalpoem}{\@traditionalpoem}{\@endtraditionalpoem}
+\expandafter\def\csname traditionalpoem*\endcsname{\let\poem@obeylines=\traditionalpoem@obeylines\traditionalpoem}
+\expandafter\def\csname endtraditionalpoem*\endcsname{\endtraditionalpoem}
+\def\poem@finish{%
+\poem@write@aux{max@poem@no}{\number\c@poem@no}%
+\ifx\poem@needrun\relax
+\PackageWarning{bidipoem}{Unjustified poem. Rerun XeLaTeX to get poem right}%
+\global\let\poem@needrun\undefined
+\fi
+}
+\ifx\AtEndDocument\undefined\else\AtEndDocument\poem@finish\fi
+\newcounter{poem@no}\setcounter{poem@no}{\z@}
+\ifx\max@poem@no\undefined
+ \def\max@poem@no{0}%
+\fi
+\newcommand{\poem@prop}[1]{\@nameuse{#1@\romannumeral\c@poem@no}}
+\newcommand{\poem@write@aux}[2]{%
+ \def\@x{\immediate\write\@auxout{\global\noexpand\@namedef{#1}{#2}}}%
+ \@x
+}
+\def\@modernpoem{%
+\par
+\begingroup
+\parskip=\z@
+\parindent=\z@
+\def\[{\@settab\@tabplus\ignorespaces}%
+\def\]{\@tabminus\ignorespaces}%
+\def\newblock{\poemblocksep}%
+\let\newpoem@tabcr\@tabcr
+\def\modernpoem@par{% Redefine \par for possible \obeylines
+ \ifpoem@started\else
+ \ifdim\wd\@curline>\z@\global\poem@startedtrue\else
+ \@stopfield
+ \ifdim\wd\@curfield>\z@\global\poem@startedtrue\fi
+ \@contfield
+ \fi
+ \fi
+ \ifpoem@started\newpoem@tabcr\fi}%
+\def\@tabcr{\global\poem@startedtrue\newpoem@tabcr}%
+\global\poem@startedfalse
+\csname poem@obeylines\endcsname
+\let\poem@obeylines\relax
+\begin{tabbing}%
+}
+\def\@endmodernpoem{%
+\global\poem@startedfalse
+\ifdim\wd\@curline>\z@\global\poem@startedtrue\else
+ \@stopfield
+ \ifdim\wd\@curfield>\z@\global\poem@startedtrue\fi
+ \@contfield
+\fi
+\ifpoem@started\else\let\@stopline\@stopfield\fi
+\end{tabbing}%
+\endgroup
+\par
+ \if@noparlist \else
+ \ifdim\lastskip >\z@
+ \@tempskipa\lastskip \vskip -\lastskip
+ \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
+ \vskip\@tempskipa
+ \fi
+ \@endparenv
+ \fi
+}
+\newenvironment{modernpoem}{\@modernpoem}{\@endmodernpoem}
+\expandafter\def\csname modernpoem*\endcsname{\let\poem@obeylines=\modernpoem@obeylines\modernpoem}
+\expandafter\def\csname endmodernpoem*\endcsname{\endmodernpoem}
+\gdef\@startfield{%
+\global\setbox\@curfield\hbox\bgroup%
+\let\@footnotetext\bidipoem@p@ftntext%
+\let\@LTRfootnotetext\bidipoem@p@LTRftntext%
+\let\@RTLfootnotetext\bidipoem@p@RTLftntext%
+\let\@xfootnotenext\bidipoem@p@xftntext%
+\let\@xfootnote\bidipoem@p@xfootnote%
+\let\@xLTRfootnotenext\bidipoem@p@xLTRftntext%
+\let\@xLTRfootnote\bidipoem@p@xLTRfootnote%
+\let\@xRTLfootnotenext\bidipoem@p@xRTLftntext%
+\let\@xRTLfootnote\bidipoem@p@xRTLfootnote%
+\color@begingroup}
+\gdef\@stopfield{%
+ \color@endgroup\egroup\global\bidipoem@p@ftn\expandafter{\expandafter}\the\bidipoem@p@ftn}
+\gdef\@contfield{%
+\global\setbox\@curfield\hbox\bgroup%
+\let\@footnotetext\bidipoem@p@ftntext%
+\let\@LTRfootnotetext\bidipoem@p@LTRftntext%
+\let\@RTLfootnotetext\bidipoem@p@RTLftntext%
+\let\@xfootnotenext\bidipoem@p@xftntext%
+\let\@xfootnote\bidipoem@p@xfootnote%
+\let\@xLTRfootnotenext\bidipoem@p@xLTRftntext%
+\let\@xLTRfootnote\bidipoem@p@xLTRfootnote%
+\let\@xRTLfootnotenext\bidipoem@p@xRTLftntext%
+\let\@xRTLfootnote\bidipoem@p@xRTLfootnote%
+\color@begingroup\unhbox\@curfield}
+\endinput
+%%
+%% End of file `bidipoem.sty'.