diff options
Diffstat (limited to 'language/arabic/arabtex/texinput/ascan.sty')
-rw-r--r-- | language/arabic/arabtex/texinput/ascan.sty | 1004 |
1 files changed, 502 insertions, 502 deletions
diff --git a/language/arabic/arabtex/texinput/ascan.sty b/language/arabic/arabtex/texinput/ascan.sty index 080aece86c..9478604190 100644 --- a/language/arabic/arabtex/texinput/ascan.sty +++ b/language/arabic/arabtex/texinput/ascan.sty @@ -1,502 +1,502 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%% ascan.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% ascan.sty
-% ArabTeX
-% Standard Scanner
-% 22.08.2003
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% (c) Klaus Lagally
-% Institut fuer Formale Methoden der Informatik
-% Universitaet Stuttgart
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\a@ident {ascan.sty} {3.11 standard ZDMG input encoding } {22.08.2003}
-
-\chardef \testatcode = \catcode`\@ \catcode`\@ = 11
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% dynamic definitions for Arabic
-{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\gdef \seta@codes {% define standard \ArabTeX input coding
-\globaldefs=1
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def \sc@@ {@} % illegal character
-\def \sc@a {a}
-\def \sc@b {b}
-\def \sc@c {\ift@rk G\else \ifs@nd J\else
- \ifm@lay J\else c\fi\fi\fi }
-\def \sc@d {d}
-\def \sc@e {e}
-\def \sc@f {\ifm@gh \n@xp \a@F \else f\fi }
-\def \sc@g {\ifm@lay \n@xp \a@K \else g\fi }
-\def \sc@h {h}
-\def \sc@i {i}
-\def \sc@j {\ift@rk j\else G\fi }
-\def \sc@k {\ifs@nd \n@xp \a@ax \else
- \ifk@fs \n@xp \a@k \else k\fi\fi }
-\def \sc@l {l}
-\def \sc@m {m}
-\def \sc@n {n}
-\def \sc@o {o}
-\def \sc@p {\ifm@lay v\else p\fi }
-\def \sc@q {\ifm@gh \n@xp \a@Q \else q\fi }
-\def \sc@r {r}
-\def \sc@s {s}
-\def \sc@t {t}
-\def \sc@u {u}
-\def \sc@v {\ifm@gh \n@xp \a@V \else \ift@rk w\else
- \ifm@lay \n@xp \a@x \else v\fi\fi\fi }
-\def \sc@w {\ifu@gh \n@xp \a@X \else w\fi }
-\def \sc@x {X}
-\def \sc@y {y}
-\def \sc@z {z}
-\def \sc@A {A}
-\def \sc@B {B}
-\def \sc@C {@}
-\def \sc@D {@}
-\def \sc@E {E}
-\def \sc@F {@}
-\def \sc@G {\n@xp \a@g } % Pashto gaf with ring
-\def \sc@H {\n@xp \a@H } % Heh marbouta
-\def \sc@I {I}
-\def \sc@J {@}
-\def \sc@K {K}
-\def \sc@L {@}
-\def \sc@M {M}
-\def \sc@N {N}
-\def \sc@O {O}
-\def \sc@P {@}
-\def \sc@Q {@}
-\def \sc@R {@}
-\def \sc@S {\n@xp \a@S }
-\def \sc@T {T}
-\def \sc@U {U}
-\def \sc@V {v}
-\def \sc@W {W}
-\def \sc@X {@}
-\def \sc@Y {Y}
-\def \sc@Z {@}
-\a@digits = {0123456789}
-\a@paren = {()[]}
-\global\a@first = {.^_-'`~,|"=:\a@tok \lq \rq \cap \MIN \IN }
-\globaldefs=0 }
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-}% end of dynamic definitions for Arabic
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def \a@@scan #1>{% standard scanner call: token sequence -> \a@tokens
-\iftest@scan \tracingmacros = 1
-\ifshow \else \a@verb #1>\fi\fi
-\global\def \a@rest {}\global\a@tokens = {}\sc@beg #1\@ \@@
-\iftest@scan \tracingmacros = 0 %
-\xpa \a@verb \xpa (\the\a@tokens )>\fi }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-{\arab@codes % because of special characters
-
-\gdef \set@next #1{\def \next {#1}}
-
-\gdef \t@b@g #1{% start \ArabTeX scanner
- \def \next {\sc@word {#1}}\def \sc@char {@}%
-\ifcat a\nxp #1\else % letter
-\apply \set@next \tocase #1\of
-{ \@{\sc@endscan } % finished
- '{\t@rquote }
- `{\t@lquote }
-\default {\sc@word {#1}}
-}\endcase
-\fi \next }
-
-\gdef \t@w@rd #1{% transform input into internal notation
- \def \next {\sc@word }%
-\ifx #1\@\def \next {\sc@endscan }\else % finished
-\ifcat \nxp #1a%
- \ifx #1a\def \next {\t@aa }\else % test for aa -> A
- \ifx #1n\def \next {\t@nn }\else % test for ng, ny
- \edef \sc@char {\csname sc@#1\endcsname }% letter
- \ifx \sc@char \relax \def \sc@char {#1}% undef letter
- \fi
- \ifs@nd \edef \next {\nxp \t@asp {\sc@char }}\else \sc@put
- \fi
- \fi\fi \else % other character
-\ifcat \nxp #1\relax \def \next {\t@cs #1}\else % control sequence
-\ifx #1'\def \next {\t@hamza }\else % hamza
- \def \sc@char {#1}%
-\apply \set@next \tocase #1\of
-{~\@ldtie{\t@tie }
- .{\t@dot }
- ,{\t@comma }
- -{\t@minus }
- `{\t@ain }
- "{\t@dquote }
- :={\t@colon }
- ^{\t@up }
- _{\t@down }
- |{\t@bar }
-\default {\t@w@@rd {#1}}
-}\endcase
-\fi\fi\fi\fi \next }
-
-\gdef \t@w@@rd #1{% default branch
-\ifcat \nxp #1\nxp ~\def \next {\t@cs #1}% % active character
-\else \def \sc@char {\nxp #1}% % other character
- \ifs@nd \edef \next {\nxp \t@asp {\sc@char }}%
- \else \sc@put \def \next {\sc@word }%
- \fi
-\fi \next }
-
-} % \arab@codes
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def \set@char@next #1#2{\def \sc@char {#1}\def \next {#2}}
-
-\def \set@@c@n #1{\set@char@next #1}
-
-\def \t@cs #1{% control sequence within a word; push back
-\apply \set@@c@n \tocase #1\of
-{ \a@tok \MIN \IN \cap
- \shadda \madda \sukun
- \raphe \dagesh \mappiq \ldot \rdot \cdot
- {{#1} {\csname t@\xpa\@gobble\string #1\endcsname }}
- \maqqef {{B} {\sc@put \sc@word }}
- \, {{"|} {\sc@put \sc@word }}
- \lq {{`} {\sc@put \sc@word }}
- \c@p {{\nxp \cap } {\sc@put \sc@word }}
- \abbr {{'} {\sc@put \sc@word }}
- \rq {{'} {\sc@put \sc@back }}
-\default {{#1} {\sc@back #1}}%
-}\endcase \next }
-
-\def \tdef #1{% define robust ArabTeX scanner command
-\def #1{\nxp #1}%
-\xpa\def \csname t@\xpa\@gobble\string #1\endcsname }
-
-\tdef \a@tok (#1){% direct substitution
-\global \a@tokens \xpa {\the\a@tokens #1}\sc@word }
-
-\tdef \MIN {\def \sc@char {\nxp\a@ao \nxp\a@Zi }\sc@put \sc@word }
-
-\tdef \IN {\def \sc@char {\nxp\a@ai \nxp\a@Zi }\sc@put \sc@word }
-
-\tdef \shadda {\sc@dep {\nxp \a@Ze }}
-\tdef \madda {\sc@dep {\nxp \a@ZE }}
-\tdef \sukun {\sc@dep {\nxp \a@e }}
-\tdef \raphe {\sc@dep {\nxp \a@Zo }}
-\tdef \dagesh {\sc@dep {\nxp \a@Zu }}
-\tdef \mappiq {\sc@dep {\nxp \a@Zu }}
-\tdef \ldot {\sc@dep {\nxp \a@Za }}
-\tdef \rdot {\sc@dep {\nxp \a@Ze }}
-
-\def \t@cdot {\sc@dep {\nxp \a@Zi }}
-\def \t@cap #1{\sc@word \c@p #1} % kill braces on #1
-
-\def \sc@@back #1\@ \@@ {% end scanning, push back into input
-\global\def \a@rest {#1}\global\let \test@token \test@rest }
-
-\def \sc@@endscan \@@ {\global\let \a@scan \a@@scan }
-
-\def \sc@dep #1{% deposit tokens and proceed
-\def \sc@char {#1}\sc@put \sc@word }
-
-\def \sc@put {% deposit a symbol % no group!
-\edef \temp {\global \nxp \a@tokens % \temp
- {\the\a@tokens \sc@char }}\temp }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def \t@rquote #1#2{% context '#1#2 , initial
-\ifh@mza \ifx #1\@ \def \sc@char {QQ}\sc@put % '>
- \def \next {\sc@endscan #2}\else
- \ifx #1'\ifx #2\@ \def \sc@char {'}\sc@put
- \def \next {\sc@word #2}% ''>
- \else \def \sc@char {QQ}\sc@put \def \sc@char {Q}%
- \def \next {\sc@word '#2}% ''x
- \fi
- \else \def \sc@char {QQ}\sc@put \def \sc@char {Q}%
- \def \next {\sc@word #1#2}% 'xy
- \fi\fi
-\else \ifu@gh \def \sc@char {QY}\sc@put
- \else \def \sc@char {Q}\sc@put
- \fi \def \next {\sc@word #1#2}%
-\fi \next }
-
-\def \t@hamza #1{% context \sc@char ' #1
-\ifh@mza % not verbatim mode
- \ifx #1'\let \next \t@hamza@ii \else
- \ifcat -\sc@char \def \sc@char {QQ}\sc@put
- \else \xpa\def \xpa\sc@char \xpa{\xpa Q\sc@char }\sc@put
- \fi \def \sc@char {Q}\def \next {\sc@word #1}%
- \fi
-\else % verbatim mode
- \ifx #1'\def \sc@char {'}\sc@put \let \next \sc@word
- \else \ifu@gh \def \sc@char {QY}\sc@put
- \else \def \sc@char {Q}\sc@put
- \fi \def \next {\sc@word #1}%
- \fi
-\fi \next }
-
-\def \t@hamza@ii #1#2{% context \sc@char '' #1 #2
-\ifcat \nxp #1a%
- \edef \sc@toks {\the\a@tokens Q\sc@char QQ}%
- \global \a@tokens =\xpa {\sc@toks }\def \sc@char {Q}%
-\else
-\ifcat \nxp #2a%
- \edef \sc@toks {\the\a@tokens Q\sc@char QQ}%
- \global \a@tokens =\xpa {\sc@toks }\def \sc@char {Q}%
-\else \def \sc@char {'}\sc@put % right quote
-\fi\fi \sc@word #1#2}
-
-\def \t@dquote #1{% verbatim
-\ifx #1'\ifh@mza \def \sc@char {"QQ}\sc@put
- \else \def \sc@char {"Q}\sc@put
- \fi \def \sc@char {Q}\let \next \sc@word
-\else \def \sc@char {"}\sc@put \def \next {\sc@word #1}%
-\fi \next }
-
-\def \t@ain {% ` = `ain
-\def \sc@char {P}\sc@put \sc@word }
-
-\def \t@lquote #1#2{% context `#1#2 at the beginning of a word
-\ifx #1`\def \sc@char {`}\sc@put \def \next {\sc@word #2}% ``x
-\else \def \sc@char {P}\sc@put \def \next {\sc@word #1#2}% `xy
-\fi \next }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def \t@aa #1{% aa -> A
-\edef \@tempa {\sc@char }%
-\xpa\ifx \@tempa Q\def \next {\sc@word #1}\def \sc@char {a}\else
-\ifx #1a\def \sc@char {A}\def \next {\sc@word }\else
- \edef \sc@char {\sc@a }\def \next {\sc@word #1}%
-\fi\fi \sc@put \next }
-
-\def \t@nn #1{% after n
- \def \sc@char {n}\def \next {\sc@word }%
-\ifm@lay \ifx #1g\def \sc@char {\nxp \a@p }\else
- \ifx #1y\def \sc@char {\nxp \a@am }\else
- \def \next {\sc@word #1}%
- \fi\fi
-\else \def \next {\sc@word #1}%
-\fi \sc@put \next }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def \t@minus #1{% after -
-\ifx #1-\def \sc@char {B}\def \next {\sc@word }\else
- \def \sc@char {-}\def \next {\sc@word #1}%
-\fi \sc@put \next }
-
-\def \t@bar #1{% after |
-\ifx #1|\def \next {\sc@word \,}\else
- \def \sc@char {|}\sc@put \def \next {\sc@word #1}%
-\fi \next }
-
-\def \set@char #1{\def \sc@char {#1}}
-
-\def \t@tail #1#2{% default exit
-\ifx \sc@char \empty \set@char {#1}\def \next {\sc@put \sc@word #2}%
-\else \def \next {\edef \temp {\nxp \t@asp {\sc@char }}\temp }%
-\fi \next }
-
-\def \t@dot #1{% after .
-\apply \set@char \tocase #1\of
-{ a{\ifk@sh \nxp \a@Za \else \nxp \a@A \fi }
- b{\nxp \a@b }
- c{c}
- d{D}
- e{\nxp \a@I }
- f{\nxp \a@f }
- g{R}
- h{H}
- i{\nxp \a@e }
- k{\ift@rk q\else \nxp \a@k \fi }
- l{\nxp \a@l }
- n{\ifp@sht \nxp \a@m \else
- \ifs@nd \nxp \a@an \else \nxp \a@n \fi\fi }
- o{\ifk@sh \nxp \a@Zo \else \nxp \a@O \fi }
- p{\nxp \a@f }
- r{\ifs@nd \nxp \a@ar \else \nxp \a@R \fi }
- s{S}
- t{V}
- u{\ifk@sh \nxp \a@Zu \else \nxp \a@U \fi }
- v{\nxp \a@b }
- y{\nxp \a@ZI }
- z{Z}
- A{\nxp \a@ZA }
- O{\nxp \a@ZO }
- U{\nxp \a@ZU }
- Z{\nxp \a@Zz }
- T{Y}
-}\endcase \t@tail .#1}
-
-\def \t@comma #1{% after ,
-\apply \set@char \tocase #1\of
-{ a{a\nxp \a@H }
- A{\nxp \a@a \nxp \a@H }
- c{\ift@rk J\else \nxp \a@c \fi }
- d{\ifp@sht \nxp \a@aA \else
- \ifs@nd \nxp \a@D \else \nxp \a@d \fi\fi }
- e{e\nxp \a@H }
- g{\nxp \a@L }
- h{\nxp \a@h }
- n{\ifs@nd \nxp \a@an \else \nxp \a@M \fi }
- r{\ifp@sht \nxp \a@q \else
- \ifs@nd \nxp \a@ar \else \nxp \a@r \fi\fi }
- s{\ift@rk x\else \nxp \a@s \fi }
- t{\ifp@sht \nxp \a@v \else
- \ifs@nd \nxp \a@at \else \nxp \a@t \fi\fi }
- z{\ift@rk D\else \nxp \a@z \fi }
-}\endcase \t@tail ,#1}
-
-\def \t@up #1{% after ^
-\apply \set@char \tocase #1\of
-{ c{J}
- d{\nxp \a@D }
- e{\nxp \a@E }
- g{\ift@rk \nxp \a@p \else \ifk@rd R\else
- \ifu@gh R\else G\fi\fi\fi }
- l{\nxp \a@l }
- n{\ifs@nd \nxp \a@ag \else \ifm@lay M\else K\fi\fi }
- s{x}
- u{U}
- z{j}
-}\endcase \t@tail ^#1}
-
-\def \t@down #1{% after _
-\apply \set@char \tocase #1\of
-{ a{\nxp \a@a }
- A{Y}
- d{F}
- e{\nxp \a@E }
- h{X}
- i{\nxp \a@i }
- k{R}
- o{\nxp \a@o }
- O{\nxp \a@O }
- s{C}
- t{C}
- u{\nxp \a@u }
- U{\nxp \a@o }
- z{F}
-}\endcase \t@tail @#1}
-
-\gdef \t@colon #1{% after = or :
-\apply \set@char \tocase #1\of
-{ a{\ifu@gh \nxp \a@H \else \nxp \a@A \fi }
- b{\nxp \a@ab }
- d{\nxp \a@ae }
- e{\nxp \a@I }
- g{\nxp \a@ak }
- i{\nxp \a@I }
- j{\nxp \a@ah }
- I{\nxp \a@e }
- n{\nxp \a@al }
- o{\ifu@gh \nxp \a@W \else \nxp \a@O \fi }
- s{\nxp \a@aJ }
- O{\nxp \a@P }
- t{V}
- u{\ifu@gh \nxp \a@aw \else \nxp \a@U \fi }
- U{\nxp \a@w }
- z{D}
-}\endcase \t@tail :#1}
-
-\gdef \t@colon #1{% after = or :
-\apply \set@char \tocase #1\of
-{ a{\nxp \a@A }
- b{\nxp \a@ab }
- d{\nxp \a@ae }
- e{\nxp \a@I }
- g{\nxp \a@ak }
- i{\nxp \a@I }
- j{\nxp \a@ah }
- I{\nxp \a@e }
- n{\nxp \a@al }
- o{\nxp \a@O }
- s{\nxp \a@aJ }
- O{\nxp \a@P }
- t{V}
- u{\nxp \a@U }
- U{\nxp \a@w }
- z{D}
-}\endcase \t@tail :#1}
-
-\def \t@tie #1{% after ~
-\apply \set@char \tocase #1\of
-{ l{\nxp \a@l }
- g{\nxp \a@p }
- n{\ifs@nd \nxp \a@ag \else \ifm@lay M\else K\fi\fi }
-}\endcase \t@tail ^#1}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\def \t@asp #1#2{% test for hah
-\ifs@nd \ifx #2h\def \next {\t@@asp {#1}}%
- \else \def \next {\sc@put \sc@word #2}%
- \fi
-\else \def \next {\sc@put \sc@word #2}%
-\fi \next }
-
-\def \t@@asp #1{% test for aspiration
-\apply \set@char \tocase #1\of
-{ b{\nxp \a@ap }
- c{J}
- d{\nxp \a@ad }
- p{\nxp \a@aq }
- k{\ifs@nd \nxp \a@k \else X\fi }
- t{\nxp \a@ac }
- J{\nxp \a@aj }
- \a@D{\nxp \a@af }
- \a@at{\nxp \a@T }
- \a@ax{\nxp \a@k }
-}\endcase
-\ifx \empty \sc@char \def \sc@char {\nxp #1}\def \next {\sc@word h}%
-\else \def \next {\sc@word }%
-\fi \sc@put \next }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% preparations for additional scanners
-\def \setcode #1{% switch the input encoding
-\lowercase {\def \sc@code {#1}%
-\ifx \sc@code \sc@oldcode \else
-\begingroup \def \sc@lookup ##1#1##2##3\@@ {\endgroup ##2}%
-\xpa \sc@lookup \sc@table #1\sc@default \@@ \fi }%
-\let \sc@oldcode \sc@code }
-
-\pdef \stdcode #1{% prepare temp switch to standard
-\let \a@oldcode \sc@code \sc@standard \test@token #1 \@stdcode }
-
-\def \a@c@@stdcode {\xpa\setcode\xpa{\a@oldcode }}
-
-\all@w@ne \stdcode
-\xpa \all@w@ne \csname stdcode \endcsname
-
-\def \sc@table {% table of code names
-standard\sc@standard arabtex\sc@standard }
-
-\def \sc@restore {% restore scanner defaults
-\let \vocalize \v@calize \let \fullvocalize \fullv@calize
-\let \sc@beg \t@b@g \let \sc@word \t@w@rd
-\let \sc@back \sc@@back \let \sc@endscan \sc@@endscan
-\let \a@scan \a@@scan \seta@codes
-\let \arab@codes \a@arab@codes
-\let \unarab@codes \a@unarab@codes
-}
-
-\def \sc@standard {\sc@restore % standard encoding
-\ifx \sc@code \sc@oldcode \else
-\a@message {input encoding set to ArabTeX standard conventions.}\fi }
-
-\def \sc@default {\sc@restore % unknown encoding
-\a@message {unknown input encoding `\sc@code';
-ArabTeX standard encoding is assumed.}}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\a@message {scanner for code `arabtex' installed.}
-\let \sc@oldcode \@ \setcode {standard} % default
-
-\endinput
-%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
+%%%%%%%%%%%%%%%%%%%%%%%%%%% ascan.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% ascan.sty +% ArabTeX +% Standard Scanner +% 22.08.2003 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% (c) Klaus Lagally +% Institut fuer Formale Methoden der Informatik +% Universitaet Stuttgart +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\a@ident {ascan.sty} {3.11 standard ZDMG input encoding } {22.08.2003} + +\chardef \testatcode = \catcode`\@ \catcode`\@ = 11 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% dynamic definitions for Arabic +{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\gdef \seta@codes {% define standard \ArabTeX input coding +\globaldefs=1 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def \sc@@ {@} % illegal character +\def \sc@a {a} +\def \sc@b {b} +\def \sc@c {\ift@rk G\else \ifs@nd J\else + \ifm@lay J\else c\fi\fi\fi } +\def \sc@d {d} +\def \sc@e {e} +\def \sc@f {\ifm@gh \n@xp \a@F \else f\fi } +\def \sc@g {\ifm@lay \n@xp \a@K \else g\fi } +\def \sc@h {h} +\def \sc@i {i} +\def \sc@j {\ift@rk j\else G\fi } +\def \sc@k {\ifs@nd \n@xp \a@ax \else + \ifk@fs \n@xp \a@k \else k\fi\fi } +\def \sc@l {l} +\def \sc@m {m} +\def \sc@n {n} +\def \sc@o {o} +\def \sc@p {\ifm@lay v\else p\fi } +\def \sc@q {\ifm@gh \n@xp \a@Q \else q\fi } +\def \sc@r {r} +\def \sc@s {s} +\def \sc@t {t} +\def \sc@u {u} +\def \sc@v {\ifm@gh \n@xp \a@V \else \ift@rk w\else + \ifm@lay \n@xp \a@x \else v\fi\fi\fi } +\def \sc@w {\ifu@gh \n@xp \a@X \else w\fi } +\def \sc@x {X} +\def \sc@y {y} +\def \sc@z {z} +\def \sc@A {A} +\def \sc@B {B} +\def \sc@C {@} +\def \sc@D {@} +\def \sc@E {E} +\def \sc@F {@} +\def \sc@G {\n@xp \a@g } % Pashto gaf with ring +\def \sc@H {\n@xp \a@H } % Heh marbouta +\def \sc@I {I} +\def \sc@J {@} +\def \sc@K {K} +\def \sc@L {@} +\def \sc@M {M} +\def \sc@N {N} +\def \sc@O {O} +\def \sc@P {@} +\def \sc@Q {@} +\def \sc@R {@} +\def \sc@S {\n@xp \a@S } +\def \sc@T {T} +\def \sc@U {U} +\def \sc@V {v} +\def \sc@W {W} +\def \sc@X {@} +\def \sc@Y {Y} +\def \sc@Z {@} +\a@digits = {0123456789} +\a@paren = {()[]} +\global\a@first = {.^_-'`~,|"=:\a@tok \lq \rq \cap \MIN \IN } +\globaldefs=0 } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +}% end of dynamic definitions for Arabic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \a@@scan #1>{% standard scanner call: token sequence -> \a@tokens +\iftest@scan \tracingmacros = 1 +\ifshow \else \a@verb #1>\fi\fi +\global\def \a@rest {}\global\a@tokens = {}\sc@beg #1\@ \@@ +\iftest@scan \tracingmacros = 0 % +\xpa \a@verb \xpa (\the\a@tokens )>\fi } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\arab@codes % because of special characters + +\gdef \set@next #1{\def \next {#1}} + +\gdef \t@b@g #1{% start \ArabTeX scanner + \def \next {\sc@word {#1}}\def \sc@char {@}% +\ifcat a\nxp #1\else % letter +\apply \set@next \tocase #1\of +{ \@{\sc@endscan } % finished + '{\t@rquote } + `{\t@lquote } +\default {\sc@word {#1}} +}\endcase +\fi \next } + +\gdef \t@w@rd #1{% transform input into internal notation + \def \next {\sc@word }% +\ifx #1\@\def \next {\sc@endscan }\else % finished +\ifcat \nxp #1a% + \ifx #1a\def \next {\t@aa }\else % test for aa -> A + \ifx #1n\def \next {\t@nn }\else % test for ng, ny + \edef \sc@char {\csname sc@#1\endcsname }% letter + \ifx \sc@char \relax \def \sc@char {#1}% undef letter + \fi + \ifs@nd \edef \next {\nxp \t@asp {\sc@char }}\else \sc@put + \fi + \fi\fi \else % other character +\ifcat \nxp #1\relax \def \next {\t@cs #1}\else % control sequence +\ifx #1'\def \next {\t@hamza }\else % hamza + \def \sc@char {#1}% +\apply \set@next \tocase #1\of +{~\@ldtie{\t@tie } + .{\t@dot } + ,{\t@comma } + -{\t@minus } + `{\t@ain } + "{\t@dquote } + :={\t@colon } + ^{\t@up } + _{\t@down } + |{\t@bar } +\default {\t@w@@rd {#1}} +}\endcase +\fi\fi\fi\fi \next } + +\gdef \t@w@@rd #1{% default branch +\ifcat \nxp #1\nxp ~\def \next {\t@cs #1}% % active character +\else \def \sc@char {\nxp #1}% % other character + \ifs@nd \edef \next {\nxp \t@asp {\sc@char }}% + \else \sc@put \def \next {\sc@word }% + \fi +\fi \next } + +} % \arab@codes + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \set@char@next #1#2{\def \sc@char {#1}\def \next {#2}} + +\def \set@@c@n #1{\set@char@next #1} + +\def \t@cs #1{% control sequence within a word; push back +\apply \set@@c@n \tocase #1\of +{ \a@tok \MIN \IN \cap + \shadda \madda \sukun + \raphe \dagesh \mappiq \ldot \rdot \cdot + {{#1} {\csname t@\xpa\@gobble\string #1\endcsname }} + \maqqef {{B} {\sc@put \sc@word }} + \, {{"|} {\sc@put \sc@word }} + \lq {{`} {\sc@put \sc@word }} + \c@p {{\nxp \cap } {\sc@put \sc@word }} + \abbr {{'} {\sc@put \sc@word }} + \rq {{'} {\sc@put \sc@back }} +\default {{#1} {\sc@back #1}}% +}\endcase \next } + +\def \tdef #1{% define robust ArabTeX scanner command +\def #1{\nxp #1}% +\xpa\def \csname t@\xpa\@gobble\string #1\endcsname } + +\tdef \a@tok (#1){% direct substitution +\global \a@tokens \xpa {\the\a@tokens #1}\sc@word } + +\tdef \MIN {\def \sc@char {\nxp\a@ao \nxp\a@Zi }\sc@put \sc@word } + +\tdef \IN {\def \sc@char {\nxp\a@ai \nxp\a@Zi }\sc@put \sc@word } + +\tdef \shadda {\sc@dep {\nxp \a@Ze }} +\tdef \madda {\sc@dep {\nxp \a@ZE }} +\tdef \sukun {\sc@dep {\nxp \a@e }} +\tdef \raphe {\sc@dep {\nxp \a@Zo }} +\tdef \dagesh {\sc@dep {\nxp \a@Zu }} +\tdef \mappiq {\sc@dep {\nxp \a@Zu }} +\tdef \ldot {\sc@dep {\nxp \a@Za }} +\tdef \rdot {\sc@dep {\nxp \a@Ze }} + +\def \t@cdot {\sc@dep {\nxp \a@Zi }} +\def \t@cap #1{\sc@word \c@p #1} % kill braces on #1 + +\def \sc@@back #1\@ \@@ {% end scanning, push back into input +\global\def \a@rest {#1}\global\let \test@token \test@rest } + +\def \sc@@endscan \@@ {\global\let \a@scan \a@@scan } + +\def \sc@dep #1{% deposit tokens and proceed +\def \sc@char {#1}\sc@put \sc@word } + +\def \sc@put {% deposit a symbol % no group! +\edef \temp {\global \nxp \a@tokens % \temp + {\the\a@tokens \sc@char }}\temp } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \t@rquote #1#2{% context '#1#2 , initial +\ifh@mza \ifx #1\@ \def \sc@char {QQ}\sc@put % '> + \def \next {\sc@endscan #2}\else + \ifx #1'\ifx #2\@ \def \sc@char {'}\sc@put + \def \next {\sc@word #2}% ''> + \else \def \sc@char {QQ}\sc@put \def \sc@char {Q}% + \def \next {\sc@word '#2}% ''x + \fi + \else \def \sc@char {QQ}\sc@put \def \sc@char {Q}% + \def \next {\sc@word #1#2}% 'xy + \fi\fi +\else \ifu@gh \def \sc@char {QY}\sc@put + \else \def \sc@char {Q}\sc@put + \fi \def \next {\sc@word #1#2}% +\fi \next } + +\def \t@hamza #1{% context \sc@char ' #1 +\ifh@mza % not verbatim mode + \ifx #1'\let \next \t@hamza@ii \else + \ifcat -\sc@char \def \sc@char {QQ}\sc@put + \else \xpa\def \xpa\sc@char \xpa{\xpa Q\sc@char }\sc@put + \fi \def \sc@char {Q}\def \next {\sc@word #1}% + \fi +\else % verbatim mode + \ifx #1'\def \sc@char {'}\sc@put \let \next \sc@word + \else \ifu@gh \def \sc@char {QY}\sc@put + \else \def \sc@char {Q}\sc@put + \fi \def \next {\sc@word #1}% + \fi +\fi \next } + +\def \t@hamza@ii #1#2{% context \sc@char '' #1 #2 +\ifcat \nxp #1a% + \edef \sc@toks {\the\a@tokens Q\sc@char QQ}% + \global \a@tokens =\xpa {\sc@toks }\def \sc@char {Q}% +\else +\ifcat \nxp #2a% + \edef \sc@toks {\the\a@tokens Q\sc@char QQ}% + \global \a@tokens =\xpa {\sc@toks }\def \sc@char {Q}% +\else \def \sc@char {'}\sc@put % right quote +\fi\fi \sc@word #1#2} + +\def \t@dquote #1{% verbatim +\ifx #1'\ifh@mza \def \sc@char {"QQ}\sc@put + \else \def \sc@char {"Q}\sc@put + \fi \def \sc@char {Q}\let \next \sc@word +\else \def \sc@char {"}\sc@put \def \next {\sc@word #1}% +\fi \next } + +\def \t@ain {% ` = `ain +\def \sc@char {P}\sc@put \sc@word } + +\def \t@lquote #1#2{% context `#1#2 at the beginning of a word +\ifx #1`\def \sc@char {`}\sc@put \def \next {\sc@word #2}% ``x +\else \def \sc@char {P}\sc@put \def \next {\sc@word #1#2}% `xy +\fi \next } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \t@aa #1{% aa -> A +\edef \@tempa {\sc@char }% +\xpa\ifx \@tempa Q\def \next {\sc@word #1}\def \sc@char {a}\else +\ifx #1a\def \sc@char {A}\def \next {\sc@word }\else + \edef \sc@char {\sc@a }\def \next {\sc@word #1}% +\fi\fi \sc@put \next } + +\def \t@nn #1{% after n + \def \sc@char {n}\def \next {\sc@word }% +\ifm@lay \ifx #1g\def \sc@char {\nxp \a@p }\else + \ifx #1y\def \sc@char {\nxp \a@am }\else + \def \next {\sc@word #1}% + \fi\fi +\else \def \next {\sc@word #1}% +\fi \sc@put \next } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \t@minus #1{% after - +\ifx #1-\def \sc@char {B}\def \next {\sc@word }\else + \def \sc@char {-}\def \next {\sc@word #1}% +\fi \sc@put \next } + +\def \t@bar #1{% after | +\ifx #1|\def \next {\sc@word \,}\else + \def \sc@char {|}\sc@put \def \next {\sc@word #1}% +\fi \next } + +\def \set@char #1{\def \sc@char {#1}} + +\def \t@tail #1#2{% default exit +\ifx \sc@char \empty \set@char {#1}\def \next {\sc@put \sc@word #2}% +\else \def \next {\edef \temp {\nxp \t@asp {\sc@char }}\temp }% +\fi \next } + +\def \t@dot #1{% after . +\apply \set@char \tocase #1\of +{ a{\ifk@sh \nxp \a@Za \else \nxp \a@A \fi } + b{\nxp \a@b } + c{c} + d{D} + e{\nxp \a@I } + f{\nxp \a@f } + g{R} + h{H} + i{\nxp \a@e } + k{\ift@rk q\else \nxp \a@k \fi } + l{\nxp \a@l } + n{\ifp@sht \nxp \a@m \else + \ifs@nd \nxp \a@an \else \nxp \a@n \fi\fi } + o{\ifk@sh \nxp \a@Zo \else \nxp \a@O \fi } + p{\nxp \a@f } + r{\ifs@nd \nxp \a@ar \else \nxp \a@R \fi } + s{S} + t{V} + u{\ifk@sh \nxp \a@Zu \else \nxp \a@U \fi } + v{\nxp \a@b } + y{\nxp \a@ZI } + z{Z} + A{\nxp \a@ZA } + O{\nxp \a@ZO } + U{\nxp \a@ZU } + Z{\nxp \a@Zz } + T{Y} +}\endcase \t@tail .#1} + +\def \t@comma #1{% after , +\apply \set@char \tocase #1\of +{ a{a\nxp \a@H } + A{\nxp \a@a \nxp \a@H } + c{\ift@rk J\else \nxp \a@c \fi } + d{\ifp@sht \nxp \a@aA \else + \ifs@nd \nxp \a@D \else \nxp \a@d \fi\fi } + e{e\nxp \a@H } + g{\nxp \a@L } + h{\nxp \a@h } + n{\ifs@nd \nxp \a@an \else \nxp \a@M \fi } + r{\ifp@sht \nxp \a@q \else + \ifs@nd \nxp \a@ar \else \nxp \a@r \fi\fi } + s{\ift@rk x\else \nxp \a@s \fi } + t{\ifp@sht \nxp \a@v \else + \ifs@nd \nxp \a@at \else \nxp \a@t \fi\fi } + z{\ift@rk D\else \nxp \a@z \fi } +}\endcase \t@tail ,#1} + +\def \t@up #1{% after ^ +\apply \set@char \tocase #1\of +{ c{J} + d{\nxp \a@D } + e{\nxp \a@E } + g{\ift@rk \nxp \a@p \else \ifk@rd R\else + \ifu@gh R\else G\fi\fi\fi } + l{\nxp \a@l } + n{\ifs@nd \nxp \a@ag \else \ifm@lay M\else K\fi\fi } + s{x} + u{U} + z{j} +}\endcase \t@tail ^#1} + +\def \t@down #1{% after _ +\apply \set@char \tocase #1\of +{ a{\nxp \a@a } + A{Y} + d{F} + e{\nxp \a@E } + h{X} + i{\nxp \a@i } + k{R} + o{\nxp \a@o } + O{\nxp \a@O } + s{C} + t{C} + u{\nxp \a@u } + U{\nxp \a@o } + z{F} +}\endcase \t@tail @#1} + +\gdef \t@colon #1{% after = or : +\apply \set@char \tocase #1\of +{ a{\ifu@gh \nxp \a@H \else \nxp \a@A \fi } + b{\nxp \a@ab } + d{\nxp \a@ae } + e{\nxp \a@I } + g{\nxp \a@ak } + i{\nxp \a@I } + j{\nxp \a@ah } + I{\nxp \a@e } + n{\nxp \a@al } + o{\ifu@gh \nxp \a@W \else \nxp \a@O \fi } + s{\nxp \a@aJ } + O{\nxp \a@P } + t{V} + u{\ifu@gh \nxp \a@aw \else \nxp \a@U \fi } + U{\nxp \a@w } + z{D} +}\endcase \t@tail :#1} + +\gdef \t@colon #1{% after = or : +\apply \set@char \tocase #1\of +{ a{\nxp \a@A } + b{\nxp \a@ab } + d{\nxp \a@ae } + e{\nxp \a@I } + g{\nxp \a@ak } + i{\nxp \a@I } + j{\nxp \a@ah } + I{\nxp \a@e } + n{\nxp \a@al } + o{\nxp \a@O } + s{\nxp \a@aJ } + O{\nxp \a@P } + t{V} + u{\nxp \a@U } + U{\nxp \a@w } + z{D} +}\endcase \t@tail :#1} + +\def \t@tie #1{% after ~ +\apply \set@char \tocase #1\of +{ l{\nxp \a@l } + g{\nxp \a@p } + n{\ifs@nd \nxp \a@ag \else \ifm@lay M\else K\fi\fi } +}\endcase \t@tail ^#1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \t@asp #1#2{% test for hah +\ifs@nd \ifx #2h\def \next {\t@@asp {#1}}% + \else \def \next {\sc@put \sc@word #2}% + \fi +\else \def \next {\sc@put \sc@word #2}% +\fi \next } + +\def \t@@asp #1{% test for aspiration +\apply \set@char \tocase #1\of +{ b{\nxp \a@ap } + c{J} + d{\nxp \a@ad } + p{\nxp \a@aq } + k{\ifs@nd \nxp \a@k \else X\fi } + t{\nxp \a@ac } + J{\nxp \a@aj } + \a@D{\nxp \a@af } + \a@at{\nxp \a@T } + \a@ax{\nxp \a@k } +}\endcase +\ifx \empty \sc@char \def \sc@char {\nxp #1}\def \next {\sc@word h}% +\else \def \next {\sc@word }% +\fi \sc@put \next } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% preparations for additional scanners +\def \setcode #1{% switch the input encoding +\lowercase {\def \sc@code {#1}% +\ifx \sc@code \sc@oldcode \else +\begingroup \def \sc@lookup ##1#1##2##3\@@ {\endgroup ##2}% +\xpa \sc@lookup \sc@table #1\sc@default \@@ \fi }% +\let \sc@oldcode \sc@code } + +\pdef \stdcode #1{% prepare temp switch to standard +\let \a@oldcode \sc@code \sc@standard \test@token #1 \@stdcode } + +\def \a@c@@stdcode {\xpa\setcode\xpa{\a@oldcode }} + +\all@w@ne \stdcode +\xpa \all@w@ne \csname stdcode \endcsname + +\def \sc@table {% table of code names +standard\sc@standard arabtex\sc@standard } + +\def \sc@restore {% restore scanner defaults +\let \vocalize \v@calize \let \fullvocalize \fullv@calize +\let \sc@beg \t@b@g \let \sc@word \t@w@rd +\let \sc@back \sc@@back \let \sc@endscan \sc@@endscan +\let \a@scan \a@@scan \seta@codes +\let \arab@codes \a@arab@codes +\let \unarab@codes \a@unarab@codes +} + +\def \sc@standard {\sc@restore % standard encoding +\ifx \sc@code \sc@oldcode \else +\a@message {input encoding set to ArabTeX standard conventions.}\fi } + +\def \sc@default {\sc@restore % unknown encoding +\a@message {unknown input encoding `\sc@code'; +ArabTeX standard encoding is assumed.}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\a@message {scanner for code `arabtex' installed.} +\let \sc@oldcode \@ \setcode {standard} % default + +\endinput +%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + |