diff options
Diffstat (limited to 'language/arabic/arabtex/texinput/awrite.sty')
-rw-r--r-- | language/arabic/arabtex/texinput/awrite.sty | 794 |
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + |