1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2% heparse.sty
3% ArabTeX
4% Modifications for Hebrew mode
5% 27.04.2003
6%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7% (c) Klaus Lagally
8%     Institut fuer Formale Methoden der Informatik
9%     Universitaet Stuttgart
10%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
12\a@ident {heparse.sty} {3.11 Hebrew parser routines} {27.04.2003}
13
14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15% dynamic definitions for Hebrew
16{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9
17%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18\gdef \def@hebvoc {% define vowel parsing routines for Hebrew
19%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
20%%%%%%%%%%%%%%%%%%%%%%%%%% short vowels
21
22\def \sv@a {\sv@patach }		% a: patach
23\def \sv@e {\sv@segol }			% e: segol
24\def \sv@i {\sv@chireq }		% i: chireq breve
25\def \sv@o {\sv@qamesqatuf }		% o: qames-chatuph
26\def \sv@u {\sv@qibbus }		% u: qibbus
27
28%%%%%%%%%%%%%%%%%%%%%%%%%% long vowels
29
30\def \sv@A {\sv@qames }			% A: qames
31\def \sv@E {\sv@serelongum }		% E: sere yod
32\def \sv@I {\sv@chireqlongum }		% I: chireq yod
33\def \sv@O {\sv@cholemlongum }		% O: cholem waw
34\def \sv@U {\sv@shureq }		% U: shureq
35\def \sv@Y {\sv@qameslongum }		% _A: qames aleph
36
37%%%%%%%%%%%%%%%%%%%%%%%%%% long vowels, defective
38
39\sv@def \a@a {\sv@qames }		% _a: qames aleph	?
40\sv@def \a@e {\sv@shewa }		% .i: shewa
41\sv@def \a@i {\sv@chireq }		% _i: chireq yod ?
42\sv@def \a@o {\sv@cholem }		% _o: cholem breve
43\sv@def \a@u {\sv@shureq }		% _u: shureq ?
44
45%%%%%%%%%%%%%%%%%%%%%%%%%% special vowels
46
47\sv@def \a@A {\sv@chatef@patach }	% .a:
48\sv@def \a@E {\sv@sere }		% _e: sere breve
49\sv@def \a@I {\sv@chatef@segol }	% .e:
50\sv@def \a@O {\sv@chatef@qames }	% .o:
51\sv@def \a@U {\put@syl \syl@con }	% .u: no vowel mark
52
53%%%%%%%%%%%%%%%%%%%%%%%%%% extra marks
54
55\sv@def \a@Za {\sv@sindot }		% sin dot
56\sv@def \a@Ze {\sv@shindot }		% shin dot
57\sv@def \a@Zi {\sv@rdot }		% center dot
58\sv@def \a@Zo {\sv@raphe }		% raphe
59\sv@def \a@Zu {\sv@dagesh }		% dagesh
60
61\sv@def \a@ZA {\sv@ay }			% Yiddish ay
62\sv@def \a@ZE {\sv@ey }			% Yiddish ey
63\sv@def \a@ZI {\syl@voctest }		% free
64\sv@def \a@ZO {\sv@oy }			% Yiddish oy
65\sv@def \a@ZU {\syl@voctest }		% free
66
67%%%%%%%%%%%%%%%%%%%%%%%%%% hamza handling
68
69\def \syl@hamza {% non-initial hamza, context #1'
70\put@con a\syl@voctest }
71
72\let \syl@hamzabeg \syl@hamza
73
74\def \syl@test@voc {% vowel or shewa ?
75\h@test@voc }
76
77\def \check@high ##1{\relax }
78}
79%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80}% end of dynamic definitions for Hebrew
81%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
82% static definitions for Hebrew
83%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
84
85\newif \ifp@tach	\newif \ifch@lem
86
87\def \h@test@voc #1{% vowel or shewa ?
88\ifch@lem \ch@lemfalse \add@rdot \fi		% rdot
89\if\is@vowel #1\def \next {\syl@voc #1}\else  % test for vowel
90\ifx #1|\add@madda \def \next {\syl@shewa }%	% meteg
91\else \def \next {\syl@shewa #1}% 		non-vowel follows
92\fi\fi \next }
93
94\def \syl@shewa #1{% put shewa if appropriate
95\ifp@tach \add@patachf \p@tachfalse \else
96\xpa\ifx \the\last@con B\else
97\ifx #1<\add@@shewa \else
98\ifcat \nxp #1\nxp <\add@@shewa \else
99	\add@sukun 					% shewa
100\fi\fi\fi\fi \put@syl \syl@con #1}
101
102\def \add@@shewa {% put shewa on final kaf
103\xpa\case \the\last@con \of
104{  k R {\add@shewa }}
105\endcase }
106
107\def \syl@meteg #1#2{% test for meteg and patach furtivum
108\ifx #2|\add@madda \def \next {#1}\else
109\ifx #2\a@A\p@tachtrue \def \next {#1}\else
110	\def \next {#1#2}%
111\fi\fi \put@syl \next }
112
113\gdef \test@cont #1{% vowel contact? put dummy if not cholem male
114\ifx #1O\def \next {\syl@con #1}\else
115\ifx #1U\def \next {\syl@con #1}\else
116\if\is@vowel #1\def \next {\syl@con N#1}\else
117\def \next {\syl@con #1}\fi\fi\fi \next }
118
119\def \test@patf #1{% vowel contact? put dummy, test for guttural: 05.10.01
120\ifx #1O\def \next {\test@p@tf #1}\else
121\ifx #1U\def \next {\test@p@tf #1}\else
122\if\is@vowel #1\def \next {\syl@con N#1}\else
123\def \next {\test@p@tf #1}\fi\fi\fi \next }
124
125\def \test@p@tf #1#2#3{% guttural at end: prepare patach furtivum
126\ifx #1h\ifx #2\a@Zu \p@tachtrue
127	\fi\fi
128\ifx #2a\ifx #3<\if\is@in@list #1PX>\p@tachtrue
129	\fi\fi\fi
130\syl@con #1#2#3}
131
132%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
133
134\def \sv@patach {% a: put patach, test meteg
135\ifp@tach \add@patachf \p@tachfalse \else \add@fatha
136\fi \syl@meteg \test@cont }
137
138\def \sv@segol {% e: put segol, test meteg
139\add@zwarakay \syl@meteg \test@cont }
140
141\def \sv@qamesqatuf {% o: put qames qatuf, test meteg
142\add@ammad \syl@meteg \test@cont }
143
144\def \sv@qibbus {% u: put qibbus, test meteg
145\add@damma \syl@meteg \test@cont }
146
147%%%%%%%%%%%%%%%%
148
149\def \sv@qames {% long a: put qames, test meteg
150\add@fathaspec \syl@meteg \test@cont }
151
152\def \sv@qamesaleph {% long a: put qames, test meteg
153\add@fathaspec \syl@meteg \sv@qames@aleph }
154
155\def \sv@qames@aleph {% long a: put aleph
156\put@con a\put@syl \test@cont }
157
158%%%%%%%%%%%%%%%%
159
160\def \sv@sere {% long e: put sere breve, test meteg
161\add@kasraspec \syl@meteg \sv@s@re }
162
163\def \sv@s@re #1{% test for ey = E
164\ifx #1y\def \next {\sv@sere@longum }%
165\else \def \next {\test@patf #1}%
166\fi \next }
167
168\def \sv@serelongum {% long e: put sere, test meteg
169\add@kasraspec \syl@meteg \sv@sere@longum }
170
171\def \sv@sere@longum {% long e: put yod ?
172\test@yod }
173
174\def \test@yod #1{% vowel or consonant
175\if\is@vowel #1\def \next {\syl@con y#1}\else
176\put@con y\put@syl \def \next {\test@patf #1}%
177\fi \next }
178
179%%%%%%%%%%%%%%%%
180
181\def \sv@chireq {% i: put chireq, test meteg
182\add@kasra \syl@meteg \sv@ch@req }
183
184\def \sv@ch@req #1{% test for iy = I
185\ifx #1y\def \next {\sv@chireq@longum }%
186\else \def \next {\test@cont #1}%
187\fi \next }
188
189\def \sv@chireqlongum {% long i: put chireq, test meteg
190\add@kasra \syl@meteg \sv@chireq@longum }
191
192\def \sv@chireq@longum {% long i: put yod ?
193\test@yod }
194
195%%%%%%%%%%%%%%%%
196
197\def \sv@shureq {% long u: test meteg
198\syl@meteg \sv@sh@req }
199
200\def \sv@sh@req {% long u: put waw with shureq
201\put@con w\add@shadda \put@syl \test@patf }
202
203%%%%%%%%%%%%%%%%
204
205\def \sv@cholem #1{% short o: test meteg
206\ifx #1|\add@madda \def \next {\sv@ch@lem }%
207\else \def \next {\sv@ch@lem #1}%
208\fi \next }
209
210\def \sv@ch@lem #1{% short o: put cholem breve
211\xpa\ifx \the\last@con \a@s 		% omit cholem on sin
212\else	\case #1\of
213{          a A Q w{\ch@lemtrue }	% shift cholem
214	\default  {\add@cholem }	% deposit cholem
215}	\endcase
216\fi \put@syl \sv@ch@lemwaw #1}
217
218\def \sv@ch@lemwaw #1{% test for ow = O
219\ifx #1w\def \next {\sv@cholem@longum }%
220\else \def \next {\test@cont #1}%
221\fi \next }
222
223\def \sv@cholemlongum {% long o: test meteg
224\syl@meteg \sv@cholem@longum }
225
226\def \sv@cholem@longum {% long o: put waw with cholem
227\put@con w\add@rdot \ch@lemfalse \put@syl \test@patf }
228
229%%%%%%%%%%%%%%%%
230
231\def \sv@chatef@patach {% put chatef patach, test meteg
232\add@fathatan \syl@meteg \test@cont }
233
234\def \sv@chatef@segol {% put chatef segol, test meteg
235\add@kasratan \syl@meteg \test@cont }
236
237\def \sv@chatef@qames {% put chatef qames, test meteg
238\add@dammatan \syl@meteg \test@cont }
239
240%%%%%%%%%%%%%%%%
241
242\def \sv@shewa {% put shewa unconditionally
243\add@shewa \put@syl \syl@con }
244
245\def \sv@sindot {% sin dot
246\voc@suk \advance \last@mod 10 \syl@voctest }
247
248\def \sv@shindot {% shin dot
249\voc@suk \advance \last@mod 20 \syl@voctest }
250
251\def \sv@rdot {% center dot
252\voc@suk \advance \last@mod 30 \syl@voctest }
253
254\def \sv@raphe {% raphe
255\voc@suk \advance \last@mod 40 \syl@voctest }
256
257\def \sv@dagesh {% dagesh, ww -> U, shureq?
258\add@shadda
259\xpa\ifx \the\last@con w\put@syl \def \next {\test@patf }%
260%\else \def \next {\syl@test@voc }%
261%\else \def \next {\syl@voctest }%
262\else \voc@suk \def \next {\syl@voctest }%
263\fi \next }
264
265\def \sv@dagesh {% dagesh, ww -> U, shureq?
266\add@shadda \voc@suk \syl@voctest }
267
268%%%%%%%%%%%%%%%%
269
270\def \sv@ay {% Yiddish ay
271\put@syl \put@con \a@i \v@ctrue \add@fatha \put@syl \test@patf }
272
273\def \sv@ey {% Yiddish ey
274\put@syl \put@con \a@i \put@syl \test@patf }
275
276\def \sv@oy {% Yiddish oy
277\put@syl \put@con \a@o \put@syl \test@patf }
278
279%%%%%%%%%%%%%%%%
280
281\def \add@rdot {\advance \last@mod \c@hamza }
282
283\def \add@cholem {\ifv@c \last@voc \c@wasla \fi }
284
285\def \add@patachf {\ifv@c \last@voc 13 \fi }
286
287\def \add@shewa {% put shewa unconditionally
288\ifv@c \last@voc \c@sukun \fi }
289
290%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
291\endinput
292