summaryrefslogtreecommitdiff
path: root/fonts/tolkienfonts/tex/latex/boustr.sty
blob: c1bf8094b41ecb4b677f25a102389141b3760b1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
%% boustr.sty
%% Part of the tolkienfonts package
%% Copyright 2010 Ariel Barton
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% 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.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
% 
% The Current Maintainer of this work is Ariel Barton.
%
% This work consists of all the files listed in Appendix F of the file
% `tolkienfontsdoc.pdf'.
%
% Version: 2

\ProvidesPackage{boustr}[2010/08/29]

\RequirePackage{graphicx}

\def\zeroToSp@boust{\parskip=1sp plus 1pt
	\parfillskip = 1sp plus 1fil
	%\advance\leftskip by 1sp
	%\advance\rightskip by 1sp
	\def\vfil{\vskip 1sp plus 1fil}
	\def\vfill{\vskip 1sp plus 1fill}
	\abovedisplayshortskip = 1sp plus 3pt
	\postdisplaypenalty = 1
	\interlinepenalty=1}
	
\def\oddboxstep@boust{%
	\ifodd\lines@boust\global\setbox1=\vbox{\box0\unvbox1} 
	\else\global\setbox1=\vtop{\noindent\reflectbox{\box0}\unvbox1}\fi
	\global\advance\lines@boust 1
	}
\def\evenboxstep@boust{%
	\ifodd\lines@boust\global\setbox1=\vbox{\noindent\reflectbox{\box0}\unvbox1} 
	\else\global\setbox1=\vtop{\box0\unvbox1}\fi
	\global\advance\lines@boust 1
	}
\def\allboxstep@boust{%
	\global\setbox1=\vtop{\noindent\reflectbox{\box0}\unvbox1} 
	}
	
\def\fliplines@boust#1{%
	\global\lines@boust=0%
	\global\setbox1 = \vbox{}%
	\loop\Anyleft@boustfalse
	\ifdim\lastskip=0pt \ifdim\lastkern=0pt \ifnum\lastpenalty=0
		\global\setbox0=\lastbox \ifvoid0 
	\else\Anyleft@bousttrue \csname #1boxstep@boust\endcsname	\fi
	\else\Anyleft@bousttrue
		\pen@boust=\lastpenalty
		\global\setbox1=\vtop{\penalty\pen@boust\unvbox1}\unpenalty\fi
	\else\Anyleft@bousttrue
		\dimen0=\lastkern
		\global\setbox1=\vtop{\kern\dimen0\unvbox1}\unkern\fi
	\else\Anyleft@bousttrue
		\skip0=\lastskip
		\global\setbox1=\vtop{\vskip\skip0\unvbox1}\unskip\fi
	\ifAnyleft@boust\repeat} 
	
\newcount\lines@boust
\newcount\pen@boust
\newif\ifAnyleft@boust
\newif\ifboustright \boustrighttrue
\newif\ifNoindent@boust

\newenvironment{rtl}{\ifvmode\Noindent@boustfalse\else\Noindent@bousttrue\fi
\par\setbox4=\vtop\bgroup\zeroToSp@boust\ifNoindent@boust\noindent\fi}
{\egroup
\dimen0 = -\ht4 \ifdim\prevdepth>0pt\advance\dimen0 -\prevdepth\fi 
\advance\dimen0 \baselineskip
\ifdim\dimen0 <\lineskiplimit \dimen0=\lineskip \fi
\ifdim\prevdepth>0pt\vskip\dimen0\fi 
\ifNoindent@boust\else\vskip\parskip\fi
\setbox3 = \vbox{\unvcopy4\fliplines@boust{all}}
\ifvoid3\else\unvbox3\fi
\noindent\unvbox1}

\newenvironment{boustrophedon}{\ifvmode\Noindent@boustfalse\else\Noindent@bousttrue\fi
\par\setbox4=\vtop\bgroup\zeroToSp@boust\ifNoindent@boust\noindent\fi}
{\egroup
\dimen0=-\ht4\advance\dimen0-\prevdepth\advance\dimen0\baselineskip
\ifdim\dimen0<\lineskiplimit\dimen0=\lineskip\fi
\ifdim\prevdepth>0pt\vskip\dimen0\fi\ifNoindent@boust\else\vskip\parskip\fi
\setbox3=\vbox{\unvcopy4\fliplines@boust{odd}}
\ifboustright
	\ifodd\lines@boust\else\setbox3=\vbox{\unvcopy4\fliplines@boust{even}}\fi
\else
	\ifodd\lines@boust\setbox3=\vbox{\unvcopy4\fliplines@boust{even}}\fi
\fi
\ifvoid3\else\unvbox3\fi\unvbox1\noindent\ignorespacesafterend}

\newenvironment{sidewaysflip}[1]
{\ifvmode\Noindent@boustfalse\else\Noindent@bousttrue\fi
\par\setbox4=\vtop\bgroup\hsize=#1\zeroToSp@boust\ifNoindent@boust\noindent\fi}
{\egroup\noindent\rotatebox[origin=c]{90}{\reflectbox{\box4}}\par\noindent\ignorespacesafterend}
% May 2010: Added the \noindent