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