1%%%%%%%%%%%%%%%%%%%%%%%%%%% hescan.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2% hescan.sty
3% Scanner for ISO 8859-8 Code, loaded by hebtex.sty
4% experimental scanner for Hebrew files
5% to activate it, say "\setcode {hed}" or "\setcode {HED}" or
6% "\setcode {pccode}" or "\setcode {newcode}" or "\setcode {iso8859-8}"
7% for Hebrew Windows encoding CP1255 say "\setcode{cp1255}"
8% 07.03.2002
9%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10% (c) Klaus Lagally
11%     Institut fuer Informatik
12%     Universitaet Stuttgart
13%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
15\ifx \hedatcode \undefined \else \xpa \endinput \fi
16
17\chardef \hedatcode = \catcode`\@  \catcode`\@ = 11
18
19\a@ident {hescan.sty}
20{3.10a scanner for HED and ISO 8859-8 encoding} {07.03.2002}
21
22%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
23% dynamic definitions for Hebrew
24{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9
25%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
26\gdef \sethed@codes {\seta@codes % activate and change some codes
27\globaldefs=1
28%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29\def \sc@a {b}   \def \sc@b {g}   \def \sc@c {d}   \def \sc@d {h}
30%\def \sc@a {v}   \def \sc@b {g}   \def \sc@c {d}   \def \sc@d {h}
31\def \sc@e {w}   \def \sc@f {z}   \def \sc@g {X}   \def \sc@h {C}
32\def \sc@i {y}   \def \sc@j {k}   \def \sc@k {k-}  \def \sc@l {l}
33\def \sc@m {m}   \def \sc@n {m-}  \def \sc@o {n}   \def \sc@p {n-}
34%\def \sc@q {s}   \def \sc@r {P}   \def \sc@s {f}   \def \sc@t {f-}
35\def \sc@q {s}   \def \sc@r {P}   \def \sc@s {p}   \def \sc@t {p-}
36\def \sc@u {S}   \def \sc@v {S-}  \def \sc@w {q}   \def \sc@x {r}
37\def \sc@y {\n@xp \a@S }  	  \def \sc@z {t}
38%
39\xpa \def \csname sc@`\endcsname {Q}
40\a@digits = {0123456789}	\a@paren  = {()[]}	\a@first = {}
41\globaldefs=0
42}
43%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
44}% end of dynamic definitions for Hebrew: oldcode and pccode
45%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46
47\def \hed@scan #1>{% modified scanner call: token sequence -> \a@tokens
48\iftest@scan \tracingmacros = 1
49\ifshow \else \lowercase {\a@verb #1>}\fi\fi
50\global\def \a@rest {}\global\a@tokens = {}\@ssimfalse
51\novocalize \lowercase {\sc@beg #1\@ \@@ }% transform
52\iftest@scan \tracingmacros = 0 \xpa \a@verb \xpa (\the\a@tokens )>\fi }
53
54%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55
56\def \hed@word #1#2{% transform input into internal notation
57	\def \next {\hed@word #2}%
58\ifx #1\@ \let \next \relax \else
59\ifcat \nxp #1\relax \def \next {\hed@cs #1#2}\else	% control sequence
60	\ifx #1-\def \sc@char {B}\else
61	\ifx #1`\def \sc@char {Q}\else
62	\ifcat \noexpand #1a\edef \sc@char
63		{\csname sc@#1\endcsname }%
64	\else \def \sc@char {#1}%
65	\fi\fi\fi \sc@put
66\fi\fi \next }
67
68\def \h@d@cs #1#2{% test word end
69\def \sc@char {#1}\sc@put
70\ifx #2\@ \def \next {\sc@endscan #2}\else
71\ifcat -\nxp #2 \def \next {\hed@word #2}\else
72\def \next {\sc@back #2}\fi \fi \next }
73
74\def \hed@cs #1#2{% control sequence within a word; push back?
75\xpa \ifx #1\closegeresh \def \next {\h@d@cs {\nxp \lq }#2}\else
76\xpa \ifx #1\closequote \def \next {\h@d@cs {`}#2}\else
77	\def \next {\sc@back #1#2}%
78\fi\fi \next }
79
80%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
81
82\def \hed@select {% select the new scanner
83\heb@catcodes			% inside hebtex.sty; to make sure
84\let \sc@beg \hed@word 		\let \sc@word \hed@word
85\let \sc@back \sc@@back		\let \sc@endscan \sc@@endscan
86\sethed@codes			\global\let \a@scan \hed@scan
87\a@message {input encoding set to ISO 8859-8 and other Hebrew conventions}}
88
89%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
90%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
91
92\def \hwin@catcodes {% assignments for CP 1255
93\countdef \is@m=2 	\is@m = 192	\is@n = 64
94\loop \catcode \is@m = 11 \lccode \is@m = \is@n
95\ifnum 255 > \is@m \advance \is@m 1 \advance \is@n 1 \repeat
96\is@m=0 \is@n=0 \catcode `\^^a0 12 }
97
98{\hwin@catcodes
99
100%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
101% dynamic definitions for Hebrew
102{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9
103%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104\gdef \sethwin@codes {% activate and change some codes
105\globaldefs=1
106%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
107\def \sc@^^c0 {"\n@xp\a@e}	\def \sc@^^c1 {"\n@xp\a@I}
108\def \sc@^^c2 {"\n@xp\a@A}	\def \sc@^^c3 {"\n@xp\a@O}
109\def \sc@^^c4 {"i} 		\def \sc@^^c5 {"\n@xp\a@E}
110\def \sc@^^c6 {"e}  		\def \sc@^^c7 {"a}
111\def \sc@^^c8 {"A}		\def \sc@^^c9 {"\n@xp\a@o}
112\def \sc@^^ca {L}		\def \sc@^^cb {"u}
113\def \sc@^^cc {"\n@xp\a@Zu}	\def \sc@^^cd {|}
114\def \sc@^^ce {B}		\def \sc@^^cf {"\n@xp\a@Zo}
115
116\def \sc@^^d0 {K}		\def \sc@^^d1 {"\n@xp\a@Ze}
117\def \sc@^^d2 {"\n@xp\a@Za}	\def \sc@^^d3 {:}
118\def \sc@^^d4 {w-w}   		\def \sc@^^d5 {wy}
119\def \sc@^^d6 {y-y}		\def \sc@^^d7 {@}
120\def \sc@^^d8 {@}  \def \sc@^^d9 {@}   \def \sc@^^da {@}   \def \sc@^^db {@}
121\def \sc@^^dc {@}  \def \sc@^^dd {@}   \def \sc@^^de {@}   \def \sc@^^df {@}
122
123\def \sc@M {M} %\def \sc@N {N}
124\def \sc@^^e0 {Q}  \def \sc@^^e1 {b}   \def \sc@^^e2 {g}   \def \sc@^^e3 {d}
125\def \sc@^^e4 {h}  \def \sc@^^e5 {w}   \def \sc@^^e6 {z}   \def \sc@^^e7 {X}
126\def \sc@^^e8 {C}  \def \sc@^^e9 {y}   \def \sc@^^ea {k}   \def \sc@^^eb {k}
127\def \sc@^^ec {l}  \def \sc@^^ed {m}   \def \sc@^^ee {m}   \def \sc@^^ef {n}
128
129\def \sc@^^f0 {n}  \def \sc@^^f1 {s}   \def \sc@^^f2 {P}   \def \sc@^^f3 {p}
130\def \sc@^^f4 {p}  \def \sc@^^f5 {S}   \def \sc@^^f6 {S}   \def \sc@^^f7 {q}
131\def \sc@^^f8 {r} \def\sc@^^f9{\n@xp\a@S} \def\sc@^^fa {t} \def \sc@^^fb {@}
132\def \sc@^^fc {@}  \def \sc@^^fd {@}   \def \sc@^^fe {@}   \def \sc@^^ff {@}
133\a@digits = {0123456789}
134\a@paren  = {()[]}
135\a@first = {"`^^e6}
136\globaldefs=0 }
137%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
138}% end of dynamic definitions for Hebrew, CP1255, ISO8859-8, newcode
139%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
140
141\gdef \hwin@scan #1>{% standard scanner call: token sequence -> \a@tokens
142\iftest@scan \tracingmacros = 1
143\ifshow \else \lowercase{\a@verb #1>}\fi\fi
144\global\def \a@rest {}\global\a@tokens = {}\sc@beg #1\@ \@@
145\iftest@scan \tracingmacros = 0 %
146\xpa \a@verb \xpa (\the\a@tokens )>\fi }
147
148%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
149
150\gdef \hwin@beg {% start CP 1255 scanner
151\h@mzafalse \iz@fetfalse \@ssimfalse \novocalize % because of explicit quoting
152\hwin@word }
153
154{\catcode `\^^M=13 \endlinechar = -1
155\gdef \hwin@word #1{% transform input into internal notation
156\ifx #1\@ \def \next {\sc@endscan }\else % finished
157\if \nxp ^^M\nxp #1\def \next {\hwin@par #1}% active character
158\else \def \next {\hwin@w@rd #1}%
159\fi\fi \next }%
160} % catcode 13
161
162\gdef \hwin@w@rd #1#2{% special cases
163\case #1\of
164{   	  #2{\hwin@word #1-#2}
165	   -{\hwin@minus #2}
166	^^a0{\sc@back #2}
167	^^ad{\hwin@minus #2}
168\default {\hwin@@word #1#2}
169}\endcase }
170
171\gdef \hwin@@word #1#2{% default branch
172\ifcat a\nxp #1\edef \sc@char {\csname sc@#1\endcsname }%
173\else \def \sc@char {\nxp #1}%
174\fi \sc@put
175\def \next {\hwin@word #2}%
176\next }
177
178\gdef \hwin@@word #1{% default branch
179\ifcat a\nxp #1\edef \sc@char {\csname sc@#1\endcsname }%
180\else \def \sc@char {\nxp #1}%
181\fi \sc@put \hwin@word }
182
183%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
184
185\gdef \hwin@minus {% hyphen between words
186\def \sc@char {-}\sc@put \hwin@beg }
187
188\gdef \hwin@par #1\@ \@@ {% new line, push back the rest
189\sc@back \\ #1\@ \@@ }
190
191\gdef \hwin@endscan \@@ {\global\let \a@scan \hwin@scan }
192} % \hwin@catcodes
193
194%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
195
196\def \set@hwin {% select the CP 1255 scanner
197\let \sc@beg \hwin@beg 		\let \sc@word \hwin@word
198\let \sc@back \sc@@back		\let \sc@endscan \hwin@endscan
199\global\let \a@scan \hwin@scan  \sethwin@codes
200\hwin@catcodes
201\a@message {input encoding set to Windows CP 1255 conventions}}
202
203%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
204
205\xpa \def \xpa \sc@table \xpa {\sc@table % add the Hebrew encodings
206hed\hed@select 		newcode\hed@select 	pccode\hed@select
207iso8859-8\hed@select 	hwin\set@hwin		cp1255\set@hwin	}
208
209%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
210
211\a@message {scanner for ISO 8859-8, CP1255, and other Hebrew codes installed.}
212
213\catcode `\@ = \hedatcode
214\endinput
215%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
216
217