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.sty794
1 files changed, 397 insertions, 397 deletions
diff --git a/language/arabic/arabtex/texinput/awrite.sty b/language/arabic/arabtex/texinput/awrite.sty
index 2e70ef96b4..8ba345dcf7 100644
--- a/language/arabic/arabtex/texinput/awrite.sty
+++ b/language/arabic/arabtex/texinput/awrite.sty
@@ -1,397 +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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+