summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex/xepersian/persianpoem.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xepersian/persianpoem.sty')
-rw-r--r--Master/texmf-dist/tex/xelatex/xepersian/persianpoem.sty220
1 files changed, 220 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xepersian/persianpoem.sty b/Master/texmf-dist/tex/xelatex/xepersian/persianpoem.sty
new file mode 100644
index 00000000000..8aed77da7b5
--- /dev/null
+++ b/Master/texmf-dist/tex/xelatex/xepersian/persianpoem.sty
@@ -0,0 +1,220 @@
+%%
+%% This is file `poem.sty',
+%% Copyright(C) 2002, 2004 Behdad Esfahbod <behdad@farsitex.org>
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.2
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% TODO: Add some penalties and whistles to newpoem
+%%
+\ifx\fmtname{LaTeX2e}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{persianpoem}%
+ [2004/09/27 Environments for Setting Persian Poetry]
+\else
+ \typeout{2004/09/27 Environments for Setting Persian Poetry}
+\fi
+
+\def\poemcolsepskip{.1\versewidth plus .1\versewidth minus .05\versewidth}
+\def\poemmarginskip{1em plus 1fil minus 1em}
+\def\poemextrabaselineskip{0\baselineskip}
+\def\poemskip{\medskip}
+\def\poemblocksep{\quad$\Box$}
+
+%% oldpoem environment
+
+\newdimen\versewidth
+
+\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}%
+}
+\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{\ignorespaces##\unskip}&&
+ \global\setbox\verse@ii=\hbox{\ignorespaces##\unskip}
+ \cr
+}
+\def\poem@lineparseend{%
+ \crcr\egroup
+ \vskip-\baselineskip
+}
+\def\oldpoem@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
+ \nopagebreak
+ \endgraf
+ \vskip\poemextrabaselineskip
+ \fi
+%
+ \poem@lineparsebegin
+}
+\def\@oldpoem{%
+ \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\leavevmode\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\par{\oldpoem@cr}% Redefine \par for possible \obeylines
+ \def\\{\global\poem@startedtrue\oldpoem@cr}%
+ \global\poem@startedfalse
+ \csname poem@obeylines\endcsname
+ \let\poem@obeylines\relax
+ \poem@lineparsebegin
+}
+\def\@endoldpoem{%
+ \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
+ \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
+}
+\newenvironment{oldpoem}{\@oldpoem}{\@endoldpoem}
+
+\expandafter\def\csname oldpoem*\endcsname{\let\poem@obeylines=\obeylines\oldpoem}
+\expandafter\def\csname endoldpoem*\endcsname{\endoldpoem}
+
+
+\def\poem@finish{%
+ \poem@write@aux{max@poem@no}{\number\c@poem@no}%
+ \ifx\poem@needrun\relax
+ \@@warning{Unjustified poetry. Rerun to get poems 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
+}
+
+%% newpoem environment
+
+\def\@newpoem{%
+ \par
+ \begingroup
+ \parskip=\z@
+ \parindent=\z@
+ \def\[{\@settab\@tabplus\ignorespaces}%
+ \def\]{\@tabminus\ignorespaces}%
+ \def\newblock{\poemblocksep}%
+ \let\newpoem@tabcr\@tabcr
+ \def\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\@endnewpoem{%
+ \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
+}
+
+\newenvironment{newpoem}{\@newpoem}{\@endnewpoem}
+
+\expandafter\def\csname newpoem*\endcsname{\let\poem@obeylines=\obeylines\newpoem}
+\expandafter\def\csname endnewpoem*\endcsname{\endnewpoem}
+
+
+\endinput
+%%
+%% End of file `poem.sty'.
+