%%%%%%%%%%%%%%%%%%%%%%%%%%% buck.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % buck.sty % Scanner for Tim Buckwalter's encoding % to install it, include it as a LaTeX style option "buck" % with Plain TeX, say "\input buck.sty" % to activate it, say "\setcode {buck} % 27.10.97 % 04.02.98 % 28.07.2003 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (c) Klaus Lagally % Institut fuer Informatik % Universitaet Stuttgart %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifx \buckatcode \undefined \else \expandafter \endinput \fi % load only once \chardef \buckatcode = \catcode`\@ \catcode`\@ = 11 \a@ident {buck.sty} {0.95 Tim Buckwalter's input encoding } {28.07.2003} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \xpa\def \csname sc@\string }\endcsname {Qy} % hamza on yah \xpa\def \csname sc@\string {\endcsname {-""} % medial alif waSla \def \sc@def #1#2{\xpa\def\csname sc@\string #1\endcsname {#2}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % dynamic definitions for Arabic {\catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \gdef \setbuck@codes {% activate and change some codes \globaldefs=1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \sc@@ {@} \def \sc@c {@} \def \sc@e {@} \def \sc@B {@} \def \sc@C {@} \def \sc@G {@} \def \sc@I {@} \def \sc@J {@} \def \sc@L {@} \def \sc@M {@} \def \sc@O {@} \def \sc@P {@} \def \sc@Q {@} \def \sc@R {@} \def \sc@U {@} \def \sc@V {@} \def \sc@W {@} \def \sc@X {@} \sc@def ' {Q|} \sc@def | {QA} \sc@def > {Qa} \sc@def & {Qw} \sc@def < {Qi} \sc@def ## {|} \def \sc@A {A} \def \sc@b {b} \def \sc@p {T} \def \sc@t {t} \def \sc@v {C} \def \sc@j {G} \def \sc@H {H} \def \sc@x {X} \def \sc@d {d} \sc@def * {F} \def \sc@r {r} \def \sc@z {z} \def \sc@s {s} \sc@def $ {x} \def \sc@S {S} \def \sc@D {D} \def \sc@T {V} \def \sc@Z {Z} \def \sc@E {P} \def \sc@g {R} \sc@def _ {B} \def \sc@f {f} \def \sc@q {q} \def \sc@k {k} \def \sc@l {l} \def \sc@m {m} \def \sc@n {n} \def \sc@h {h} \def \sc@w {w} \def \sc@Y {Y} \def \sc@y {y} \def \sc@F {"aN} \def \sc@N {"uN} \def \sc@K {"iN} \def \sc@a {"a} \def \sc@u {"u} \def \sc@i {"i} \sc@def ~ {\n@xp \a@Ze} \def \sc@o {""} \sc@def ` {"\n@xp \a@a} \a@digits = {0123456789} \a@paren = {()[]} \a@first = {"`} \globaldefs=0 } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% }% end of dynamic definitions for Arabic %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \long \def \buck@special #1{% check for special cases \if \is@in@set #1\a@first % normal case \def \next {\test@word #1}\else \if \relax \nxp #1% % command \def \next {\test@command #1}\else \def \next {\test@word #1}% % normal case \fi\fi \next } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newif \ifk@sra \def \lowkasra {\k@sratrue } \def \hikasra {\k@srafalse } \def \a@putkasra #1{% modification at kasra % m1 \ifcase #1\put@kasra \or \ifqur@n \put@kasra \else \put@fatha \fi \put@shadda \or \put@ihamza \put@kasra \or \put@fatha \put@hamza \put@shadda \or \put@madda \put@kasra \or \put@hamzalo \put@kasra \or \fi } \def \a@putkasratan #1{% modification at kasratan % m1 \ifcase #1\put@kasratan \or \ifqur@n \put@kasratan \else \put@fathatan \fi \put@shadda \or \put@ihamza \put@kasratan \or \put@fathatan \put@hamza \put@shadda \or \put@madda \put@kasratan \or \put@hamzalo \put@kasratan \or \fi } \def \put@ihamza {% hamza at depending on carrier \ifh@mza \ifnum \act@cd = \a@alif@iso \put@hamzalo \else \ifnum \act@cd = \a@alif@end \put@hamzalo \else \ifnum \act@cd = \a@lam@alif@iso \put@hamzalo \else \ifnum \act@cd = \a@lam@alif@end \put@hamzalo \else \put@hamza \fi\fi\fi\fi \else \put@hamza \fi } \def \syl@hamzaverb #1{% verbatim hamza, #1 = carrier \put@con #1\def \next {\syl@voctest }% \ifx #1|\put@con Q\else \ifx #1A\put@con a\add@madda \@sukfalse \else \add@hamza \ifx #1y\put@con Y% \ifqur@n \add@hamzalow \fi \else \ifx #1u\put@con w\else \ifx #1i\put@con a\add@hamzalow \else \fi\fi\fi\fi\fi \next } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \buck@cat {% change catcodes \catcode `\# 11 \catcode `\' 11 \catcode `\| 11 \catcode `\> 11 \catcode `\& 11 \catcode `\< 11 \catcode `\} 11 \catcode `\* 11 \catcode `\$ 11 \catcode `\_ 11 \catcode `\~ 11 \catcode `\` 11 \catcode `\{ 11 } \def \buck@recat {% change catcodes back \catcode `\# 6 \catcode `\' 12 \catcode `\| 12 \catcode `\> 12 \catcode `\& 4 \catcode `\< 12 \catcode `\2 11 \catcode `\* 12 \catcode `\$ 3 \catcode `\_ 8 \catcode `\~ 13 \catcode `\` 12 \catcode `\{ 1 } \def \buck@codes {% save and set special characters \a@arabcodes \buck@cat } \def \unbuck@codes {% reset catcodes \a@unarabcodes \buck@recat } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \xpa \def \csname a@c@end\string{arabtext\string}\endcsname {\end{arabtext} } {\catcode `\[ 1 \catcode `\] 2 \catcode `\{ 11 \catcode `\} 11 \gdef \a@c@end {arabtext}[\end[arabtext]] ] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \TB({\bgroup \def \a@c@end {\end }\buck@cat \T@B}% prepare reading \def \T@B #1){\protect \a@ins #1>\egroup }% now read the argument \def \<{\bgroup \def \a@c@end {\end }\buck@cat \T@@B}% prepare reading \def \T@@B #1\>{\protect \a@ins #1>\egroup }% now read the argument %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {\catcode `\[ 1 \catcode `\{ 11 \gdef \buck@beg #1[% start the TB scanner \h@mzafalse \iz@fetfalse \novocalize % because of explicit quoting \@ssimfalse \def \next [\buck@word #1}% \ifx #1\@ \def \next [\sc@endscan }\else % finished \ifx #1{\def \next [\buck@lbrace }\else \ifx #1"\def \next [\buck@lquote }\else \fi\fi\fi \next } } % catcodes 1 and 11 {\catcode `\^^M=13 \catcode `\~ 11 % \gdef \buck@word #1#2{% transform input into internal notation \def \next {\buck@word #2}% \ifx #1\@ \def \next {\sc@endscan #2}\else % finished \ifx #1-\def \next {\buck@minus #2}\else % \ifx #1"\def \next {\buck@rquote #2}\else % \if \nxp ^^M\nxp #1\def \next {\buck@par #1#2}\else % active character \ifx #1#2\def \next {\buck@two #1}\else % % \ifx #2~\def \next {\buck@word #1}\else % % \fi % \ifcat a\nxp #1\edef \sc@char {\csname sc@#1\endcsname }% \else \def \sc@char {\nxp #1}% \fi % \sc@put % \fi\fi\fi\fi\fi \next }% } % catcodes 13 and 11 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {\catcode `\# 11 \catcode `\& 6 \gdef \buck@two &1{% double character \def \next {\buck@word -&1}\edef \sc@char {\csname sc@&1\endcsname}% \ifx &1#\def \next {\buck@word &1}\fi \sc@put \next }} \def \buck@minus {% hyphen between words \def \sc@char {-}\sc@put \buck@beg } \def \buck@lquote {% left quote \def \sc@char {`}\sc@put \buck@beg } \def \buck@rquote {% right quote \def \sc@char {'}\sc@put \buck@word } \def \buck@lbrace {% initial left brace: alif wasla \def \sc@char {""}\sc@put \buck@word } \def \buck@par #1\@ \@@ {% new line, push back the rest \sc@back \\ #1\@ \@@ } \def \buck@endscan \@@ {\global\let \a@scan \a@@scan } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \a@buck {buck} \let \buck@setcode \setcode \let \a@arabcodes \arab@codes \let \a@unarabcodes \unarab@codes \def \set@buck {% substitute new scanner \let \sc@beg \buck@beg \let \sc@word \buck@word \let \sc@back \sc@@back \let \sc@endscan \sc@@endscan \let \a@scan \a@@scan \setbuck@codes \let \arab@codes \buck@codes \let \unarab@codes \unbuck@codes \let \test@special \buck@special \message {input coding set to Tim Buckwalter's encoding conventions}} \def \setcode #1{\def \next {#1}% switch input coding \ifx \next \a@buck \set@buck \else \buck@setcode {#1} \fi } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \message {scanner for Tim Buckwalter's encoding installed.} \catcode `\@ = \buckatcode \endinput %%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%