summaryrefslogtreecommitdiff
path: root/language/arabic/arabtex/texinput/awrite.sty
diff options
context:
space:
mode:
Diffstat (limited to 'language/arabic/arabtex/texinput/awrite.sty')
-rw-r--r--language/arabic/arabtex/texinput/awrite.sty397
1 files changed, 397 insertions, 0 deletions
diff --git a/language/arabic/arabtex/texinput/awrite.sty b/language/arabic/arabtex/texinput/awrite.sty
new file mode 100644
index 0000000000..2e70ef96b4
--- /dev/null
+++ b/language/arabic/arabtex/texinput/awrite.sty
@@ -0,0 +1,397 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% awrite.sty
+% ArabTeX
+% basic contextual analysis
+% called in HMODE
+% Version 05.06.2003
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% (c) Klaus Lagally
+% Institut fuer Informatik
+% Universitaet Stuttgart
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\a@ident {awrite.sty} {3.11 build output word } {05.06.2003}
+
+\UsePackage {xarbsymb} % character definitions
+\UsePackage {arabskel} % skeleton definitions
+\UsePackage {xarbskel}
+\UsePackage {aboxes} % deposit output boxes
+
+\UsePackage {arabtoks} % token definitions
+\UsePackage {arabchrs} % character macros
+
+% ACT = 1. char
+\newcount \act@cd \newcount \act@cls \newcount \act@mod
+\newcount \act@con \newcount \act@tie
+
+% CHR = 2. char
+\newcount \chr@cd \newcount \chr@cls \newcount \chr@mod
+\newcount \chr@con \newcount \chr@tie
+
+% SKL = 3. char
+\newcount \skl@cd \newcount \skl@cls \newcount \skl@mod
+\newcount \skl@con
+
+\newcount \red@mod \newcount \a@shp
+\newcount \a@max \newcount \a@min
+
+\newif \if@con \newif \if@mod@act \newif \if@high@act
+\newif \if@mod@chr \newif \if@tat \newif \if@tatl
+\newif \if@updia \newif \if@lodia \newif \ifa@sk
+\newif \ifa@min \newif \ifa@max
+
+\newdimen \a@min@dp \newdimen \a@dx \newdimen \a@dy
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif \ifa@@write \a@@writetrue
+
+\def \a@@write #1>{% Arabic output
+\iftest@write \tracingmacros 1
+\iftest@parse \else \a@verb (#1 )>\fi\fi
+\a@write@hook
+\ifa@@write \arab@testfont \aw@beg #1>0+0*>0+0*>\fi
+\iftest@write \tracingmacros 0 \fi }
+
+\let \a@write \a@@write \let \a@write@hook \relax
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%em# := 25.4dx#; %ex# := 8dy#;
+
+{\catcode `p=12 \catcode `t=12 % see TeXbook, Appendix D
+\csname expandafter\endcsname \gdef
+\csname getfactor\endcsname #1pt{#1}}
+
+\def \arab@testfont {% diagnose font, look for vowels and ayin
+\edef \next {\the\font }%
+\ifx \next \a@font \else
+\iftest@font \a@message{Arabic font \next selected.}\fi
+\global\let \a@font \next \a@testfont \fi }
+
+\def \a@testfont {% diagnose font, set params
+\xdef \a@slant {\xpa\getfactor \the\fontdimen1\font }%
+\dimen@ 128\fontdimen7\font % assumes \fontdimen7 < 128 pt
+\divide \dimen@ \fontdimen6\font \multiply \dimen@ 512
+\xdef \a@skew {\xpa\getfactor \the\dimen@}}
+
+\def \a@norm {% start a new character group
+\global\@highfalse \global\a@min@dp \z@ \global\a@min \z@
+\global\a@max \z@ \a@disp \z@ \@high@actfalse \global\a@sktrue }
+
+\def \aw@init {% start word, get font parameters
+\a@norm \leavevmode \a@dx .04em \a@dy .125ex }
+
+\def \a@skew {0} \def \a@slant {0}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \aw@beg #1#2*#3#4*#5{% start output
+% c m * c m * c
+ \aw@init
+ \test@chr #1\def \next {\aw@end #1#2*#3#4*#5}%
+\ifx #1-\test@chr #3\chr@fam #3%
+ \def \next {\aw@mid #3#4*#5}%
+ \ifx #3>\ac@other #1#2*#3#4*#5<%
+ \fi \else
+\ifcat -\nxp #1\a@shift \test@chr #3%
+ \@confalse \ac@other #1#2*#3#4*#5<\else
+\fi\fi \next }
+
+\def \aw@beg #1#2*#3#4*#5{% start output
+% c m * c m * c
+\ifx #1>\let \next \relax \else
+ \aw@init
+ \test@chr #1\def \next {\aw@end #1#2*#3#4*#5}%
+\ifx #1-\test@chr #3\chr@fam #3%
+ \def \next {\aw@mid #3#4*#5}%
+ \ifx #3>\ac@other #1#2*#3#4*#5<%
+ \fi \else
+\ifcat -\nxp #1\a@shift \test@chr #3%
+ \@confalse \ac@other #1#2*#3#4*#5<\else
+\fi\fi\fi \next }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \aw@end #1#2*#3#4*#5{% character is not joined to the left
+% c m * c m * c
+% ACT, CHR defined
+\ifx #1>\let \next \relax \else
+\if \AND{\isx #3|}{\is@end@char #5}\def \next {\aw@end #1#2*#5}%
+\else \def \next {\aw@end #3#4*#5}%
+ \a@shift \test@chr #3%
+ \if \AND{\iscat -{\nxp #3}}%
+ {\NOT {\is@end@char #5}}\@contrue
+ \fi
+ \ifnum \act@cd = \a@alif \def \next {\alif@lig #2*#3#4*#5}\else
+ \ifcat \nxp ~\nxp #1\else
+ \ifx #1-\chr@fam #3\else
+% \ifcat -\nxp #1\ac@other #1#2*#3#4*#5<\else
+ \ifcat -\nxp #1\@confalse \ac@other #1#2*#3#4*#5<\else
+ \ifnum \act@cd = \a@hamzc \@confalse \else
+ \ifnum \act@cd = \a@break \@confalse \else
+ \if@con \chr@fam #3%
+ \fi
+ \ifu@gh \@mod@acttrue
+ \ifnum \act@cd = \a@qaf \set@act\sk@q@s
+ \fi
+ \else \aw@endligs #1#2*#3#4*#5%
+ \fi
+ \fi\fi
+ \a@kern
+ \ifnum \act@cd = \a@waw \under@cut #2*\else
+ \ifnum \act@cls = \rah@cls \under@cut #2*\else
+ \ifnum \act@cd = \a@hah \a@kern
+ \fi\fi\fi
+ \put@end #2*#3#4*#5<%
+ \fi\fi\fi\fi
+\fi\fi \next }
+
+\def \alif@lig #1*#2#3*#4{% alif, test for ligature
+% m * c m * c
+\a@kern
+\chr@fam #2\global\@highfalse
+\ifx #2l\def \next {\lam@alif #1*#3*#4}\else
+ \gim@test #4% closed gim?
+ \kaf@test #2% kaf-alif ?
+ \aw@lower #4%
+ \put@end #1*#2#3*#4<%
+\fi \next }
+
+\def \lam@alif #1*#2*#3#4*#5{% ligature lam-alif
+% m * m * c m * c
+\global\@highfalse \a@shift \test@chr #3\chr@fam #3%
+\gim@test #5% closed gim?
+\ifu@gh \else \kaf@test #3\fi % kaf-lam ?
+\set@act\sk@l@a
+\if@con \lig@end #1*#2*\def \next {\aw@mid #3#4*#5}%
+ \else \lig@iso #1*#2*\def \next {\aw@end #3#4*#5}%
+\fi \next }
+
+\def \lig@iso #1*#2*{% isolated shape % m1 * m2 *
+\put@lig@skel 0\a@f@iso #1*#2*\a@norm }
+
+\def \lig@end #1*#2*{% final shape % m1 * m2 *
+\put@lig@skel 1\a@f@end #1*#2*}
+
+\def \aw@lower #1{% adjust vertical position
+% uses ACT, CHR, and #1
+\ifligs
+\ifnum \chr@cd = \a@hah
+ \ifx #1l\set@lowww@act \fi
+\fi
+\ifnum \chr@cls = 3 % gim etc
+ \a@test {#1}\xxpa \unp@ck@skl \skl@skel \relax
+% \ifnum \skl@cls = 0 \set@lowww@act \fi
+ \ifnum \skl@cls = 1 \set@lowww@act \fi
+ \ifnum \skl@cls = 2 \set@lowww@act \fi
+ \ifnum \skl@cls = 5 \set@lowww@act \fi
+\fi\fi }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \aw@mid #1#2*#3#4*#5{% character is joined to the left
+% c m * c m * c
+% ACT, CHR defined
+\ifx #1>\let \next \relax \else
+\if \AND{\isx #3|}{\is@end@char #5}\def \next {\aw@mid #1#2*#5}\else
+\ifx #1-\test@chr #3\chr@fam #3\def \next {\aw@mid #3#4*#5}\else
+ \a@shift \test@chr #3\chr@fam #3%
+\ifcat -\nxp #1\ac@other #1#2*#3#4*#5<%
+\else \if \AND{\iscat -{\nxp #3}}%
+ {\NOT {\is@end@char #5}}\@contrue
+ \fi
+ \ifu@gh \else
+ \aw@midligs #1#2*#3#5%
+ \fi
+ \put@mid #2*#3#4*#5<%
+ \if@con \else % initial shape
+ \ifnum \act@cls = \kaf@cls % kaf etc.
+ \xpa\if \xpa\is@in@list \chr@skel \sk@a \sk@l >\a@kern
+ \else \unkern \a@mkern
+ \fi
+ \fi\fi
+\fi\fi\fi\fi \next }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \test@updia #1+#2*{% test for upper diacritic
+% m21 + m22 *
+\@updiafalse \@lodiafalse
+\global\red@mod #1 \relax
+\ifnum #1 > 9 \global\advance \red@mod -10 \fi
+\ifcase \red@mod
+ \relax\or \@updiatrue\or \@updiatrue\or \@updiatrue\or
+ \@updiatrue\or \@lodiatrue\or
+\fi
+\ifcase #2\relax
+ \relax\or \@updiatrue\or \@updiatrue\or \@lodiatrue\or
+ \@updiatrue\or \@updiatrue\or \@lodiatrue\or \@updiatrue\or
+ \@updiatrue\or \@updiatrue\or \@updiatrue\or \@lodiatrue\or
+ \@updiatrue\or
+\fi }
+
+\def \is@updia #1*{00% is there an upper diacritic ?
+\test@updia #1*\if@updia \else \xpa \setiffalse \fi }
+
+\def \is@lodia #1*{00% is there a lower diacritic ?
+\test@updia #1*\if@lodia \else \xpa \setiffalse \fi }
+
+\def \under@cut #1*{% if no upper diacritic % m2 *
+\ifdim \a@dp > .5ex \else % \if\is@updia #1*\else
+\unkern \a@mkern \fi }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \put@end #1*#2<{% deposit non-joining character, set new state
+% m * c m * c <
+\if@con \ac@end #1*\def \next {\aw@mid #2}%
+ \else \ac@iso #1*\def \next {\aw@end #2}%
+\fi }
+
+\def \put@mid #1*#2<{% deposit joining character, set new state
+% m * c m * c <
+\if@con \ac@mid #1*\def \next {\aw@mid #2}%
+ \else \ac@beg #1*\def \next {\aw@end #2}%
+\fi }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \ac@high #1{\raise.5ex\hbox{#1}}
+\def \ac@high #1{% raise punctuation
+\ifu@gh #1\else \raise.5ex\hbox{#1}\fi }
+
+% define CS names for special punctuation
+
+{\catcode`\$ 12 \gdef \a@dlr {$} % $
+\catcode `\# 12 \gdef \a@hsh {#} % #
+\catcode `\% 12 \gdef \a@pct {%}} % %
+{\catcode`\^ 12 \gdef \a@up {^} % ^
+\catcode `\_ 12 \gdef \a@dn {_} % _
+\catcode `\& 12 \gdef \a@amp {&} % &
+\catcode `\A 12 \gdef \a@dq {A} % "
+\catcode `\B 12 \gdef \f@sila {B} % ,
+\catcode `\C 12 \gdef \h@phen {C} % -
+\catcode `\D 12 \gdef \a@bar {D} % |
+\catcode `\E 12 \gdef \a@qt {E} % '
+\catcode `\F 12 \gdef \a@bsl {F} % \
+\catcode `\G 12 \gdef \a@lbc {G} % {
+\catcode `\H 12 \gdef \a@rbc {H} % }
+\catcode `\I 12 \gdef \a@ell {I} % ...
+\catcode `\J 12 \gdef \a@div {J} % :-
+\catcode `\K 12 \gdef \a@lab {K} % <
+\catcode `\L 12 \gdef \a@rab {L} % >
+\catcode `\M 12 \gdef \a@end {M} % --
+\catcode `\N 12 \gdef \a@emd {N} % ---
+\catcode `\O 12 \gdef \a@lq {O} % `
+\catcode `\P 12 \gdef \a@rq {P} % '
+
+\gdef \ac@other #1#2*#3<{% special punctuation mark
+% c * c m * c
+\case #1\of
+{ ){\ac@high {(}}
+ ({\ac@high {)}}
+ ]{\ac@high {[}}
+ [{\ac@high {]}}
+ `{\a@kern \ac@high {\char \a@lquotes }}
+ '{\ac@high {\char \a@rquotes }\a@kern }
+ ^{{\tt ^}}
+ _{{\tt _}}
+ &{{\tt \char`\&}}
+ A{{\tt "}}
+ B{{\rm \bf ,}}
+ C{\ac@high {-}}
+ D{{\tt \char`\|}}
+ E{{\tt \char'015}}
+ F{{\tt \char`\\}}
+ G{{\tt \char`\}}}
+ H{{\tt \char`\{}}
+ I{{\bf $\cdots$}}
+ J{{\bf $\div$}}
+ K{{\tt \char`\>}}
+ L{{\tt \char`\<}}
+ M{{\rm \bf \char'173}}
+ N{{\rm \bf \char'174}}
+ O{{\rm \bf `}}
+ P{{\rm \bf '}}
+% |{\char \a@break }
+ |{}
+ 4{\ac@high {\iff@rsn \char \a@f@iv \else 4\fi }\a@kern }
+ 5{\ac@high {\iff@rsn \char \a@f@v \else 5\fi }\a@kern }
+ 6{\ac@high {\iff@rsn \char \a@f@vi \else 6\fi }\a@kern }
+\default {\ac@high {#1}\a@kern }
+}\endcase
+\if@con \def \next {\aw@mid #3}%
+ \else \def \next {\aw@end #3}%
+\fi }
+%\def \next {\aw@end #3}}
+}% catcodes 12
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \ac@iso #1*{% isolated shape % m *
+\put@skel 0\a@f@iso #1*\a@norm }
+
+\def \ac@end #1*{% final shape % m *
+\put@skel 1\a@f@end #1*}
+
+\def \ac@mid #1*{% medial shape % m *
+\put@skel 2\a@f@mid #1*}
+
+\def \ac@beg #1*{% initial shape % m *
+\put@skel 3\a@f@beg #1*\a@norm }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \a@shift {% go to next position
+% ACT := CHR
+\let \act@skel \chr@skel \act@mod \chr@mod \get@act
+\act@tie \chr@tie
+\let \if@mod@act \if@mod@chr \@mod@chrfalse }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def \test@chr #1{% get attributes of next character
+% set CHR := SKL := <#1>
+\a@test #1\chr@tie 0
+\let \chr@skel \skl@skel \chr@mod \skl@mod \get@chr
+\ifnum \chr@con = 0 \@confalse \else \@contrue \fi }
+
+\def \a@test #1{% get character attributes
+% set SKL := <#1>
+\set@skl \sk@def \skl@mod 0
+\ifcat \nxp #1a%
+ \xpa \ifx \csname tc@\string #1\endcsname \relax
+ \else \unp@ck@tc {#1}%
+ \fi \else
+\if \nxp #1\relax \unp@ck@cs {#1}\else
+\ifx #1-\set@skl \sk@B \else
+\ifx #1|\set@skl \sk@spc \else
+\fi\fi\fi\fi }
+
+\def \a@test #1{% get character attributes
+% set SKL := <#1>
+ \skl@mod 0
+\ifcat \nxp #1a%
+ \xpa \ifx \csname tc@\string #1\endcsname \relax
+ \set@skl \sk@def
+ \else \unp@ck@tc {#1}%
+ \fi \else
+\if \nxp #1\relax \unp@ck@cs {#1}\else
+\ifx #1-\set@skl \sk@B \else
+\ifx #1|\set@skl \sk@spc \else
+ \set@skl \sk@def
+\fi\fi\fi\fi }
+
+\def \unp@ck@cs #1{% evaluate token routine
+\xpa\unp@ck@token #1\relax }
+
+\def \unp@ck@tc #1{% evaluate letter description
+\xxpa\unp@ck@token \csname tc@\string #1\endcsname \relax }
+
+\def \unp@ck@token #1,#2\relax {% unpack letter description
+\def \skl@skel {#1}\skl@mod #2}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+