%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% aparse.sty
% Parser 01.05.2000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (c) Klaus Lagally
%     Institut fuer Informatik
%     Universitaet Stuttgart
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\a@ident {aparse.sty} {3.10 get syllables } {01.05.2000}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% dynamic definitions for Arabic
{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\gdef \def@arabvoc {% define vowel parsing routines for Arabic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%% short vowels %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@a {\sv@@a }% short a
\def \sv@e {\sv@@e }% short e
\def \sv@i {\sv@@i }% short i
\def \sv@o {\sv@@o }% short o
\def \sv@u {\sv@@u }% short u

%%%%%%%%%%%%%%%%%%%%%%%%%% long vowels, plene %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@A {\sv@@A }% long a
\def \sv@E {\sv@@E }% long e
\def \sv@I {\sv@@I }% long i
\def \sv@O {\sv@@O }% long o
\def \sv@U {\sv@@U }% long u
\def \sv@Y {\sv@Ytest }% alif maqsura or tooth

%%%%%%%%%%%%%%%%%%%%%%%%%% long vowels, defective %%%%%%%%%%%%%%%%%%%%%%%%%% 

\sv@def \a@a {\sv@a@a }% defective long a = Qur'an alif
\sv@def \a@e {\sv@a@e }% explicit sukun
\sv@def \a@i {\sv@a@i }% defective long i
\sv@def \a@o {\sv@U   }% special short u
\sv@def \a@u {\sv@a@u }% defective long u

%%%%%%%%%%%%%%%%%%%%%%%%%% special vowels %%%%%%%%%%%%%%%%%%%%%%%%%% 

\sv@def \a@A {\sv@a }% Turkish "a
\sv@def \a@E {\sv@a@E }% kurdish ^e
\sv@def \a@I {\sv@i }% Turkish "i
\sv@def \a@O {\sv@a@O }% Kurdish and Turkish "o
\sv@def \a@U {\sv@u }% Turkish "u

%%%%%%%%%%%%%%%%%%%%%%%%%% extra vowels %%%%%%%%%%%%%%%%%%%%%%%%%% 

\sv@def \a@Za {\sv@Za }% Kashmiri .a
\sv@def \a@Ze {\sv@Ze }% explicit shadda
\sv@def \a@Zi {\sv@Zi }% Sindhi -IN
\sv@def \a@Zo {\sv@Zo }% Kashmiri .o
\sv@def \a@Zu {\sv@Zu }% Kashmiri .u

\sv@def \a@ZA {\sv@ZA }% Kashmiri .A
\sv@def \a@ZE {\sv@ZE }% explicit madda
\sv@def \a@ZI {\sv@ZI }% Kashmiri .y
\sv@def \a@ZO {\sv@ZO }% Kashmiri .O
\sv@def \a@ZU {\sv@ZU }% Kashmiri .U

%%%%%%%%%%%%%%%%%%%%%%%%%% hamza handling %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@hamzabeg {\syl@@hamzabeg }% initial hamza

\def \syl@hamza {\syl@@hamza }% non-initial hamza, context #1'

\def \syl@test@voc {\syl@@test@voc }% vowel or sukun ?

%%%%%%%%%%%%%%%%%%%%%%%%%% miscellaneous %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \check@high {\check@@high }% long form for tooth ?
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}% end of dynamic definitions for Arabic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% static definitions for Arabic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def \sv@def #1{% define \sv@#1 
\xpa \def \csname sv@\string #1\endcsname }

\newtoks \a@revwd       
\newtoks \sv@revwd       \newtoks \last@con
\newcount \last@mod     \newcount \last@voc
\newif \ifsyl@wdend	\newif \ifm@dda

\def \a@parse #1>{% parse token sequence into syllables
\iftest@parse \tracingmacros = 1 
\iftest@scan \else \a@verb (#1)>\fi\fi
\last@con ={.}\last@mod = 0 \last@voc = 0 \global\@highfalse
\global \sv@revwd ={}\global \a@revwd ={}\syl@beg #1<<<>%
\iftest@parse \tracingmacros = 0 %
\xpa \a@verb \xpa (\the\a@revwd )>\fi }

\def \test@wdend #1#2#3{% test for end of word: k #1 #2 #3
\case #1\of
{      N<{\syl@wdendtrue }
       |"{\test@wdend #2#3<}
\default {\if\is@shortvowel #1\test@wdend #2#3<\else
	\ifcat -\nxp #1\syl@wdendtrue \else \syl@wdendfalse
	\fi\fi	}
}\endcase }

\def \isat@wdend #1#2#3{00% at end of word?
\test@wdend #1#2#3\ifsyl@wdend \else \xpa \setiffalse \fi }

\def \is@vowel #1{% test for all vowels
\is@in@list #1aeiouAEIOUY%
\a@a \a@e \a@i \a@o \a@u 
\a@A \a@E \a@I \a@O \a@U 
\a@Za \a@Ze \a@Zi \a@Zo \a@Zu 
\a@ZA \a@ZE \a@ZI \a@ZO \a@ZU >} 

\def \is@shortvowel #1{% test for short vowels
\is@in@list #1aeiou\a@a >}

\def \syl@end #1>{% kill the rest
\relax }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start of word %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@beg #1{% start new word
\global\@highfalse
\case #1\of
{	<{\syl@end }
	Q{\syl@hamzabeg }
	^{\syl@hamzabeg A}
	B{\syl@tatwilbeg }
	"{\syl@quote@beg }
	|{\syl@bar }
	Y{\syl@con Y}
    \cap {\syl@beg }
\default {\syl@@beg #1}
}\endcase }

\def \syl@@beg #1{% start new word
\ifcat -\nxp #1\def \next {\syl@spec #1}\else 	
\if\is@vowel #1\def \next {\syl@wasla #1}% check for wasla
  \else \def \next {\syl@con #1}% start syllable
\fi\fi \next }

\def \syl@bar #1{% check for || as "|
\case #1\of
{	|{\syl@quote@beg #1}
	B{\syl@con |B}
\default {\put@con W\v@cfalse \@sukfalse\syl@voctest #1}
}\endcase }

\def \syl@wasla #1{% start word with vowel without hamza
\put@con a\def \next {\syl@voc #1}% prepare for vowel
\ifx \a@lang \a@hebr % Hebrew mode
	\ifx #1U\put@con W\else % Hebrew: no carrier, shureq follows
	\ifx #1A\add@fathaspec % Hebrew: qames
\fi\fi\fi
\ifx #1E\put@con E\put@syl \def \next {\syl@con }\else
\ifx #1\a@ZA \add@kh@hamzl \put@syl \def \next {\syl@con }\else
\ifx #1A\ifiz@fet \add@madda \put@syl \def \next {\syl@con }\else 
		\def \next {\syl@voctest }% 
        \fi \else 	
\ifiz@fet \else	% wasla only in Arabic ?
\ifh@mza \if\is@shortvowel #1%
        \if@wasla \add@wasla \put@syl \def \next {\syl@con }% next syllable
        \fi\fi
\fi\fi\fi\fi\fi \next }

\def \syl@tatwilbeg #1{% start word with tatwIl: -- #1
	\put@con B%
\if\is@vowel #1\def \next {\syl@voc #1}% harakat on tatwil
\else \put@syl \def \next {\syl@con #1}% join
\fi \next }

\def \syl@spec #1#2{% deposit special character
\ifx #1<\let \next \syl@end
\else \put@spec #1% deposit character
	\ifx #1-\def \next {\syl@con #2}\else	% create joining form
	\ifx #2<\let \next \syl@end \else 	% isolated character
		\def \next {\syl@beg #2}% 	% start new word
	\fi\fi
\fi \next }

\def \sv@syl #1#2#3{% explicit syllable
\put@con #1\last@mod 0#2\last@voc 0#3\@highfalse \put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start of syllable %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@con #1{% start a new syllable
\case #1\of
{	<{\syl@end }% not done
	Q{\syl@hamza } % no Hamza
	B{\put@con B\put@syl \syl@con }
	W{\put@con w\syl@Wspec }% no ending wA or w-
	"{\syl@quote@con }
	|{\syl@bar@con }
    \cap {\syl@con }
 \sv@syl {\sv@syl }
\default {\syl@@con #1}
}\endcase }

\def \syl@@con #1#2{% start a new syllable
	\def \next {\syl@voctest #2}%
\ifx #2\cap \def \next {\syl@@con #1}\else
\ifx #1-\ifx #2<\def \next {\syl@spec #1#2}% joining form
	\else \def \next {\syl@beg #2}% ignore hyphen, tie
	\fi \else       
\ifcat -\nxp #1\def \next {\syl@spec #1#2}\else % special character
\ifx #2-\def \next {\syl@assim #1}% assimilate?
\else \put@con #1% deposit consonant
        \ifx #1#2\if@ssim \add@shadda 
		\def \next {\syl@shadd@voctest #2}%
        \fi\fi
	\ifiz@fet\ifx #1X\ifx #2w\put@syl 
        	\def \next {\syl@con #2}% waw-e-ma`dul
	\fi\fi\fi
\fi\fi\fi\fi \next }

\def \syl@bar@con #1{% |
\case #1\of
{	|{\syl@quote@con #1}
	B{\syl@tatwil }
\default {\put@con |\@sukfalse \syl@voctest #1}
}\endcase }

\def \syl@tatwil #1{% test for 2 tatwils
\put@con B%
\ifx #1B\add@shadda \def \next {\syl@voctest }%
\else \def \next {\syl@voctest #1}%
\fi \next }

\def\syl@shadd@voctest #1#2{% hyphen after shadda ? context #1#1 #2
\ifx #2-\def \next {\syl@hyphen #1}\else 
	\def \next {\syl@voctest #2}%
\fi \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% hyphen %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@hyphen #1#2#3{% hyphen after consonant,           	 #1 - #2 #3
\ifx #2<\add@sukun \put@syl \def \next {\syl@con -#2#3}\else 	% k - ||
\ifx #3<\def \next {\syl@contie #1#2#3}\else			% k - x ||
\ifx #3N\def \next {\syl@contie #1#2#3}\else			% k - x N
\ifcat -\nxp #3\def \next {\syl@contie #1#2#3}\else		% k - x -
\ifx #1l\def \next {\syl@art #2#3}\else 			% l - #2 #3
\ifx #1\a@H \put@syl \put@spec W\def \next {\syl@beg #2#3}\else	% H - x
\ifiz@fet \def \next {\syl@voctest #2#3}% 			Persian suffix
\else	\add@sukun \put@syl \def \next {\syl@beg #2#3}%    	start new word
\fi\fi\fi\fi\fi\fi\fi \next }

\def \syl@art #1#2#3{% article, (a)l-#1#2#3
	\def \next {\syl@beg #1#2#3}% ought to test for sun letter !
\ifx #1#2% no sukun before double (sun) letter
	\ifx #1Q\add@sukun \else
	\ifx #2#3\def \next {\syl@beg #2#3}% special case l-ll
	\fi \fi
\else \add@sukun % moon letter
\fi \put@syl \next }

\def \syl@assim #1#2{% test for assimilation #1 - #2
\ifx #2\cap \def \next {\syl@assim #1}\else
	\put@con #1\def \next {\syl@hyphen #1#2}% #1 - #2
\if@ssim\ifx #1#2% ought to test for sun letter !
	\put@con l\def\next {\syl@art #1#2}% substitute l - #1 #2
        \fi 
\fi\fi \next }

\def \syl@contie #1#2#3{% connecting vowel, #1 - #2#3
	\def \next {\syl@voctest #2#3}%
\ifiz@fet \sv@test@izafet #1#2#3%
\fi \next }

\def \syl@voctie #1#2#3{% hyphen after vowel, #1 - #2 #3
	\def \next {\syl@con -#2#3}%
\ifiz@fet\ifx #3<\sv@test@izafet #1#2#3\else
	\ifcat -\nxp #3\sv@test@izafet #1#2#3\else
	\ifx #1a\put@syl \put@con \a@H % supply final silent H
		\def \next {\syl@hyphen \a@H #2#3}\else
	\ifx #1e\put@syl \put@con \a@H % supply final silent H
		\def \next {\syl@hyphen \a@H #2#3}%
	\else \put@syl
	\fi\fi\fi\fi
\else \put@syl
\fi \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% special cases for Persian %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@hahtie #1#2#3{% connecting vowel, H - #2#3
   \def \next {\syl@hah #2#3}%
\case #2\of
{      IE{}
\default {\sv@test@izafet #1#2#3}
}\endcase \next }

\def \syl@hah{% H at the end, ha-ye hawwaz-e ma.hfi
\put@syl \put@spec W\syl@beg }

\def \sv@izafet #1#2{% #1 - i/e/_i
\case #1\of
{  I\a@H{\add@hamza }
      AU{\put@syl \put@con y}
}\endcase
\ifx #2\a@i \add@kasraspec \else \add@kasra % long izafet ?
\fi \put@syl \syl@con }

\def \sv@wahdat #1#2{% #1 - I/E
\case #1\of
{  I\a@H{\put@syl \put@spec W\put@con a}
      AU{\put@syl \put@con Y\add@hamza }
}\endcase
\ifx #2I\add@kasra \fi
\put@syl \put@con y\put@syl \syl@con }

\def \sv@test@izafet #1#2#3{% special cases for -e, -i, -_e, -_i, -I, -E
\case #2\of
{	e{\def \next {\sv@izafet #1e#3}}
i\a@i\a@E{\def \next {\sv@izafet #1i#3}}
	I{\def \next {\sv@wahdat #1I#3}}
	E{\def \next {\sv@wahdat #1E#3}}
}\endcase }

\def \syl@endvoc #1{% test for H
	\def \next {\syl@con #1}%
\ifiz@fet \ifx #1\a@H \put@con \a@H
	\def \next {\syl@@endvoc }%
\fi\fi \next }

\def \syl@@endvoc #1{% test for H
\case #1\of
{	-{\syl@hahtie -}
	Q{\add@hamza \add@kasraspec \put@syl \syl@end }
	<{\put@syl \syl@end }
	"{\put@syl \syl@quote@beg }
	|{\put@syl \syl@bar }
\default {\put@syl 
	  \ifcat -\nxp #1\def \next {\syl@end #1}\else 
		\def \next {\syl@beg #1}% start a new word
	  \fi \next }
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% quoting %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@quote@beg #1#2{% start word with quote: " #1 #2
\case #1\of
{	'{\put@con Q\syl@voctest #2}
	Q{\put@con Q\syl@voctest }
	|{\put@spec W\syl@beg #2}% start new word
\default {\syl@@quote@beg #1#2}
}\endcase }

\def \syl@@quote@beg #1{% start word with quote: " #1 #2
\if\is@vowel #1\def \next {\syl@wasla #1}% 	" v k: alif vowel
%	\if@wasla \v@ctrue \else \add@wasla \togglev@c \fi 
	\if@wasla \v@ctrue \@waslafalse \else \@waslatrue \togglev@c \fi 
\else \put@con a\togglev@c \add@wasla \put@syl  % alif implied
	\ifx #1"\def \next {\syl@con }% 	" " k: alif wasla
     	\else \def \next {\syl@con #1}% 	" k:   alif wasla
	\fi 
\fi \next }

\def \syl@quote@con #1#2{% start syllable with quote: " #1 #2
\case #1\of
{	'{\put@con Q\syl@voctest #2}
	Q{\put@con Q\syl@voctest }
	|{\put@con W\syl@voctest #2}
\default {\togglev@c \syl@con #2}
}\endcase }

% original version of logic:
\def \syl@quote@voc #1#2{% continue syllable with quote: " #1 #2
\case #1\of 
{	B{\togglev@c \add@sukun \put@syl \syl@con #1#2}
	"{\togglev@c \add@sukun \put@syl \syl@beg #2}
	|{\syl@@quote@voc #2}
	'{\add@hamza \syl@voctest #2}
	Q{\add@hamza \syl@voctest }
\default {\togglev@c \syl@voctest #1#2}% vowel: sukun
}\endcase }

% patches for Arnoud Vrolijk:
% make "' sukun hamza instead of hamza modifier
\def \syl@quote@voc #1{% continue syllable with quote: " #1 #2
\case #1\of 
{	B{\togglev@c \add@sukun \put@syl \syl@con #1}
	"{\togglev@c \add@sukun \put@syl \syl@beg }
	|{\syl@@quote@voc }
\default {\togglev@c \syl@voctest #1}% vowel: sukun
}\endcase }

\def \syl@@quote@voc #1{% continue syllable with quote: "| #1 #2
	\put@syl \put@spec W%
\if\is@vowel #1\def \next {\syl@wasla #1}% vowel: wasla
\else \def \next {\syl@con #1}% consonant
\fi \next }

\def \togglev@c {% toggle diacritic
\ifv@c  \v@cfalse  \else \v@ctrue  \fi % toggle vowel indicator
\if@suk \@sukfalse \else \@suktrue \fi % toggle sukun, wasla 
}

\def \voc@suk {% normalize vowels and sukun
\let \ifv@c \if@vocals \let \if@suk \if@sukun }

%%%%%%%%%%%%%%%%%%%%%%%%%% vowel or end of syllable %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@@test@voc #1{% vowel or sukun ? 	variant in Hebrew!
\if\is@vowel #1\def \next {\syl@voc #1}% test for vowel
\else \def \next {\syl@con #1}%
	\ifurd@ \ifx #1h\else \add@sukun \fi 
	\else \add@sukun 
	\fi \put@syl 
\fi \next }

\def \syl@voctest #1{% continue open syllable: K #1 
\case #1\of
{	"{\syl@quote@voc }
	^{\m@ddatrue \syl@voctest }
	|{\syl@bar@voc }
	B{\syl@tatwil@voc }
    \cap {\syl@voctest }
\default {\syl@test@voc #1}
}\endcase }

\def \syl@bar@voc #1{% K | #1
\ifx #1|\def \next {\syl@quote@voc |}\else 
\ifx #1"\def \next {\syl@test@quote }\else 
\if\is@vowel #1\def \next {\syl@test@voc #1|}\else
	\def \next {\syl@test@voc |#1}% no bar
\fi\fi\fi \next }

\def \syl@tatwil@voc #1{% K B #1
\if\is@vowel #1\def \next {\syl@test@voc #1B}\else 
	\def \next {\syl@test@voc B#1}% no vowel
\fi \next }

\def \syl@test@quote #1{% K |" #1
\if\is@vowel #1\def \next {\syl@quote@voc #1|}\else
	\put@syl \put@con |\def \next {\syl@quote@voc "#1}%
\fi \next }

\iffalse % deleted for efficiency; for documentation only !
% and also for compatibility with the Hebrew mode !!
\def \syl@voc #1{% test for vowel
\case #1\of
{	<{\syl@end }% this cannot happen! or can it?
	-{\syl@voc }% ignore hyphen here
   a \a@A{\sv@@a }% short a, Turkish "a
   e	 {\sv@@e }% short e
   i \a@I{\sv@@i }% short i, Turkish "i
   o	 {\sv@@o }% short o
   u \a@U{\sv@@u }% short u, Turkish "u
   A	 {\sv@@A }% long a
   E	 {\sv@@E }% long e
   I	 {\sv@@I }% long i
   O	 {\sv@@O }% long o
   U \a@o{\sv@@U }% long u, special short u
   Y	 {\sv@Ytest }% alif maqsura or tooth
    \a@a {\sv@a@a }% Qur'an alif
    \a@e {\sv@a@e }% frei
    \a@i {\sv@a@i }% defective long i
    \a@u {\sv@a@u }% defective long u
    \a@E {\sv@a@E }% kurdish ^e
    \a@O {\sv@a@O }% Kurdish and Turkish "o
   \a@Za {\sv@Za }% Kashmiri .A
   \a@Ze {\sv@Ze }% Kashmiri .a
   \a@Zi {\sv@Zi }% Sindhi -IN
   \a@Zo {\sv@Zo }% Kashmiri u'
   \a@Zu {\sv@Zu }% Kashmiri U'
\default {\csname sv@\string #1\endcsname}% switch on vowel
}\endcase }
\fi

\def \syl@voc #1{% test for vowel, also for Hebrew mode
\case #1\of
{	<{\syl@end }% this cannot happen! or can it?
	-{\syl@voc }% ignore hyphen here
\default {\csname sv@\string #1\endcsname}% switch on vowel
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% auxiliary vowel routines
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def \test@B #1#2{% tatweel or ligature break
\case #1\of
{      |B{\put@con #1\put@syl #2}
\default {#2#1}% deposit vowel carrier
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% short vowels %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@a #1{% short a
\ifk@rd \put@syl \def \next {\test@B #1\sv@a@Hvwl }\else
\def \next {\sv@aInt #1}\fi \next }

\def \sv@a@Hvwl {% kurdish aH carrier
\put@con \a@H \put@syl \syl@endvoc }

\def \sv@aInt #1{% short a
\ifx #1N\def \next {\syl@Nspec }% tanwin alif
\else \add@fatha \put@syl \def \next {\sv@@aInt #1}% 
\fi \next }

\def \sv@@aInt #1{% short a
\case #1\of
{	e{\ifurd@ \put@con E\else \put@con Y\add@hamza 
	  \fi \put@syl \syl@con }\else
       ou{\put@con w\put@syl \syl@con }\else
	i{\put@con y\put@syl \syl@con }\else
\default {\syl@endvoc #1}% test for H
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@e {% short e
\ifk@rd \let \next \sv@a \else 
\ift@rk \let \next \sv@a \else 
\let \next \sv@eInt 
\fi\fi \next }

\def \sv@eInt #1{% zwarakay in Pashto, otherwise short a
\ifk@sh \put@syl \put@con \a@E \put@syl \def \next {\syl@con #1}%
\else \def \next {\syl@endvoc #1}% test for H
	\ifp@sht \add@zwarakay \put@syl
		\ifx #1e\def \next {\syl@con }\put@con Y\add@hamza \put@syl 
		\fi
	\else \add@kasra \put@syl
%		\ifiz@fet \if\is@in@list #1aeiuoAEIUO>%
		\ifiz@fet % provisions for the preposition be-
		\if\is@vowel #1\def \next {\syl@beg #1}% 
		\fi\fi
	\fi
\fi \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@i #1{% short i
\case #1\of
{	y{\sv@@I }% iy -> I
	N{\add@kasratan \put@syl \syl@ignore }% tanwin yah
	-{\add@kasra \syl@voctie i}
\default {\add@kasra \put@syl \syl@con #1}% next syllable
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@o #1{% ammad in Pashto, otherwise short u
\ifk@sh \put@syl \put@con \a@W \put@syl 
		\def \next {\syl@con #1}\else
\ifk@rd \put@syl \def \next {\test@B #1\sv@a@Wvwl }\else 
	\def \next {\sv@oInt #1}%
\fi\fi \next }

\def \sv@a@Wvwl {% kurdish O carrier
\put@con \a@W \put@syl \syl@con }

\def \sv@oInt #1{% ammad in Pashto, otherwise short u
\ifp@sht \add@ammad \else \add@damma 
\fi \put@syl 
\ifx #1i\put@con y\put@syl \def \next {\syl@con }\else
	\def \next {\syl@endvoc #1}% test for H
\fi \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@u {% short u
\ifk@rd \put@syl \def \next {\sv@ukurd }\else 
\def \next {\sv@uInt }\fi \next }

\def \sv@ukurd #1{% short u, for Kurdish
\ifx #1Q\def \next {\syl@hamza }\else
\def \next {\test@B #1\sv@wvwl }\fi \next }

\def \sv@wvwl {% w carrier
\put@con w\put@syl \syl@con }

\def \sv@uInt #1{% short u, otherwise
\case #1\of
{	w{\sv@UInt }% uw -> U
	N{\add@dammatan \put@syl \syl@ignore }% tanwin waw
\default {\add@damma \put@syl \syl@con #1}% next syllable
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% long vowels %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@A #1{% long A
\ifk@rd \else \add@fatha \fi
\put@syl \test@B #1\sv@Avwl }

\def \sv@Avwl #1{% long A vowel
	\put@con a% may also serve as consonant, carry vowels
	\ifm@dda \add@madda \m@ddafalse \fi
\ifx #1-\def \next {\syl@voctie A}\else
	\def \next {\syl@voctest #1}\@sukfalse % next syllable
\fi \next }

\def \sv@Aa #1{% long a + a ? whence ??
\case #1\of
{      |B{\put@con #1\put@syl \put@con a%
	  \ifm@dda \add@madda \m@ddafalse 
	  \fi \put@syl \syl@con }
	-{\ifm@dda \add@madda \m@ddafalse 
	  \fi \syl@voctie A}
	a{\ifm@dda \add@madda \m@ddafalse 
	  \fi \sv@AaN }
	"{\ifm@dda \add@madda \m@ddafalse 
	  \fi \v@ctrue \@suktrue \sv@Aa }
\default {\ifm@dda \add@madda \m@ddafalse 
	  \fi \put@syl \syl@con #1}% next syllable
}\endcase }

\def \sv@AaN #1{% long a + aN ?
	\def \next {\syl@con a#1}% next syllable
\ifx #1N\def \next {\syl@aN}\else \put@syl
\fi \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@E {% long e
\ift@rk \let \next \sv@I \else \let \next \sv@EInt \fi \next }

\def \sv@EInt #1{% long E
\ifk@sh \put@syl \put@con E\put@syl \def \next {\syl@con #1}%
\else	\def \next {\test@B #1\sv@Evwl }%
	\ifp@sht \add@zwarakay \else
	\ifiz@fet \else \add@kasra
	\fi\fi 	\put@syl 
\fi \next }

\def \sv@Evwl #1{% long E vowel
\ifx #1e\put@con L\def \next {\syl@con }\else 	% ey
	\def \next {\syl@con #1}% next syllable
\ifp@sht \put@con \a@Y \else 
\ifurd@ \put@con E\else 
	\put@con y%
\fi\fi\fi \put@syl \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@I #1{% long i
\ifk@sh \put@syl \put@con y\add@kasraspec \put@syl 
		\def \next {\syl@con #1}\else 
	\add@kasra \put@syl \def \next {\test@B #1\sv@Ivwl }%
\fi \next }

\def \sv@Ivwl #1{% long i carrier
	\put@con y\ifm@dda \add@madda \m@ddafalse \fi	% -I becomes -iy, 
\case #1\of
{	y{\@sukfalse \add@shadda \syl@voctest}		% -Iy becomes -iyy
	-{\syl@voctie I}
\default {\@sukfalse \syl@voctest #1}% next syllable
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@O #1{% long o
\ifp@sht \add@ammad \else
\ifiz@fet \else \add@damma 
\fi\fi \put@syl \test@B #1\sv@Ovwl }

\def \sv@Ovwl {% long o carrier
\put@con w\put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@@U #1{% long u
\ifk@sh \put@syl \put@con w\add@ammad \put@syl 
		\def \next {\syl@con #1}\else
\ifk@rd \put@syl \def \next {\test@B #1\sv@wwvwl }\else	
	\def \next {\sv@UInt #1}%
\fi\fi \next }

\def \sv@wwvwl {% kurdish double w carrier
\put@con w\put@syl \put@con w\put@syl \syl@con }

\def \sv@UInt #1{% long u
\add@damma \put@syl \test@B #1\sv@Uvwl }

\def \sv@Uvwl #1{% long u carrier
	\put@con w\ifm@dda \add@madda \m@ddafalse \fi	% -U becomes -uw
\case #1\of
{	w{\@sukfalse\add@shadda \syl@voctest}		% -Uw becomes -uww
	-{\syl@voctie U} 				% not -U-
	A{\put@syl \put@con a\put@syl \syl@con }	% not -UA
\default {\sv@@Uvwl #1}
}\endcase }

\def \sv@@Uvwl #1{% long u carrier
\ifiz@fet\ifx #1Q\def \next {\sv@UQ}\else		% not -U'
		\def \next {\syl@voctest #1}\@sukfalse 	% next syllable
	 \fi 
\else 	 \def \next {\syl@voctest #1}\@sukfalse 	% next syllable
\fi \next }

\def \sv@UQ #1#2#3#4{% UQU#2#3#4, U' in Farsi
\if\isat@wdend #2#3#4\add@hamza % final hamza on waw ?
	\ifx #2-\def \next {\syl@hyphen Q#3#4}% ezafe ?
	\else \def \next {\syl@voctest #2#3#4}% vowel ?
	\fi
\else \put@syl \def \next {\syl@hamza U#2#3#4}% next syllable
\fi \next }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@Ytest #1{% is alif maqsura vowel or consonant?
\case #1\of
{	"{\put@syl \syl@con Y#1}
      < B{\sv@YInt #1}
\default {\ifcat -\nxp #1\def \next {\sv@YInt #1}%
	  \else \put@syl \def \next {\syl@con Y#1}%
	  \fi \next }
}\endcase }

\def \sv@YInt #1{% alif maqsura is vowel
\add@fatha \put@syl \test@B #1\sv@Yvwl }

\def \sv@Yvwl {% put alif maqsura 
\put@con Y\ifqur@n \add@fathaspec \fi \put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%% special vowels %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@a@a #1{% Qur'an alif
	\add@fathaspec \put@syl 
\case #1\of
{   \a@H {\put@con \a@H\put@syl \syl@con }%
	U{\put@con w\put@syl \syl@con }%
	Y{\put@con Y\put@syl \syl@con }%
	I{\put@con y\put@syl \syl@con }%
\default {\syl@con #1}%
}\endcase }

\def \sv@a@e {% explicit sukun
\add@sukun \put@syl \syl@con }

\def \sv@a@i {% defective long i
\add@kasraspec \put@syl \syl@con }

\def \sv@a@u {% defective long u
\add@ammad \put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \sv@a@E #1{% kurdish ^e
\ifk@rd \put@syl \def \next {\test@B #1\sv@a@Evwl }\else
\add@kasraspec \put@syl \def \next {\syl@con #1}\fi \next }

\def \sv@a@Evwl {% kurdish E carrier
\put@con \a@E \put@syl \syl@con }

\def \sv@a@O #1{% Kurdish and Turkish "o
\put@syl 
\ifk@rd \def \next {\test@B #1\sv@wa@Evwl }\else 
\def \next {\test@B #1\sv@wvwl }\fi \next }

\def \sv@wa@Evwl {% kurdish W E carrier
\put@con w\put@syl \put@con \a@E \put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def \sv@Za {% Kashmiri .a
\add@kh@hamza \put@syl \syl@con }

\def \sv@Ze {% explicit shadda
%\add@shadda \put@syl \syl@con }
%\add@shadda \syl@voctest }
\voc@suk \add@shadda \syl@voctest }

\def \sv@Zi {% Sindhi -IN
\add@bars \put@syl \syl@con }

\def \sv@Zo {% Kashmiri .o
\put@syl \put@con \a@aU \put@syl \syl@con }

\def \sv@Zu {% Kashmiri .u
\add@kl@hamza \put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def \sv@ZA {% Kashmiri .A
\put@syl \put@con A%
\add@kh@hamzl \put@syl \syl@con }

\def \sv@ZE {% explicit madda
\add@madda \put@syl \syl@con }

\def \sv@ZI {% Kashmiri .y
\put@syl \put@con \a@as \syl@voctest }

\def \sv@ZO {% Kashmiri .O
\put@syl \put@con \a@aU \put@syl \put@con A\add@fatha \put@syl \syl@con }

\def \sv@ZU {% Kashmiri .U
\add@kl@hamzl \put@syl \syl@con }

%%%%%%%%%%%%%%%%%%%%%%%%%% Nunation %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \syl@Nspec {% tanwin fatha
\ifh@mza \ifaN@alif \def \next {\syl@aN@alif }%
	\else \def \next {\syl@aN }%
	\fi 
\else \add@fathatan \put@syl \def \next {\syl@ignore }%
\fi \next }

\def \syl@aN #1{% tanwin fatha on actual character, alif required ?
	\add@fathatan \put@syl \def \next {\syl@ignore #1}%
\ifcat -\nxp #1%
	\xpa\if \xpa\is@in@list \the\last@con YTaB>\else
		\put@con a\put@syl 	% deposit alif
	\fi
\fi \next }

\def \syl@aN@alif #1{% tanwin fatha at the end, alif required ?
\ifcat -\nxp #1\def \next {\syl@ignore #1}%
	\xpa\if \xpa\is@in@list \the\last@con YTaB>\else
		\ifv@c \put@syl \v@ctrue \else \put@syl 
		\fi \put@con a% 		% deposit alif
	\fi
\else	\def \next {\syl@ignore }%
	\ifv@c \put@syl \v@ctrue \else \put@syl 
	\fi \put@con #1% 		% deposit character
\fi \add@fathatan \put@syl \next }

\def \syl@Wspec #1{% final w with silent alif ?
\case #1\of
{	-{\syl@Wspec }% ignore hyphen
	u{\add@damma \put@syl 
	  \put@con a\put@syl \syl@con }%	% ending w-u
\default {\add@sukun \put@syl 
	  \put@con a\put@syl \syl@con }%	% ending w
}\endcase }

\def \syl@ignore #1{% kill the rest after Tanwin except U, A, a, y, and Y
\case #1\of
{	-{\syl@ignore }
	U{\put@con w\put@syl \syl@ignore }
       aA{\put@con a\put@syl \syl@ignore }
	Y{\put@con Y\put@syl \syl@ignore }
	y{\put@con y\put@syl \syl@ignore }
\default {\let \next \syl@ignore 
	  \ifcat -\nxp #1\def \next {\syl@con #1}% 	% tie
	  \fi \next }
}\endcase }

%%%%%%%%%%%%%%%%%%%%%%%%%% Hamza %%%%%%%%%%%%%%%%%%%%%%%%%% 

\newif \if@ay

\def \syl@@hamzabeg #1#2{% initial hamza
\ifk@rd \ifx #2i\def \next {\syl@con }\put@con a% alif
	\add@hamza \add@hamzalow \put@syl 
	\else \put@con Y\add@hamza \def \next {\syl@voctest #2}%
	\fi \else
\ifh@mza \def \next {\syl@beghamza #1#2}\else
	\def \next {\syl@hamzaverb #1#2}% verbatim mode
\fi\fi \next }

\def \syl@@hamza #1{% non-initial hamza, context #1'
\ifx #1-\def \next {\syl@hamzabeg #1}\else 
\ifh@mza \def \next {\syl@arabhamza #1}\else
	\def \next {\syl@hamzaverb #1}% verbatim mode
\fi\fi \next }

\def \syl@hamzaverb #1{% verbatim hamza, #1 = carrier
\case #1\of
{	|{\put@con Q}
	A{\put@con a\add@madda \@sukfalse }
	y{\put@con Y\add@hamza }
	u{\put@con w\add@hamza }
	i{\put@con a\add@hamza \add@hamzalow }
\default {\put@con #1\add@hamza }	
}\endcase \syl@voctest }

\def \syl@beghamza #1#2{% start word with hamza, context '#2
\ifx #2"\def \next {\syl@beghamza #1}\togglev@c % toggle vowel
\else \def \next {\syl@@beghamza #2}%
\fi \next }

\def \syl@@beghamza #1{% start word with hamza, context '#1
\put@con a\def \next {\syl@con }% alif
\case #1\of
{	A{\add@madda }
    \a@a {\add@fathaspec }
    a\a@A{\add@hamza \add@fatha }
i\a@i\a@I{\add@hamza \add@kasra \add@hamzalow }
ou\a@O\a@U{\add@hamza \add@damma }
   eE\a@E{\add@hamza \ifp@sht \add@zwarakay \else \add@kasra \fi }
    I\a@e{\add@hamza \add@kasra \add@hamzalow \put@syl \put@con y}
OU\a@o\a@p\a@w{\add@hamza \add@damma \put@syl \put@con w}
\default {\add@hamza \add@sukun \def \next {\syl@con #1}}
}\endcase
\put@syl \next }

\def \syl@arabhamza #1#2#3{% non-initial hamza, context #1'#2#3
\case #2\of
{	"{\togglev@c \syl@hamza #1#3}	% toggle vowel
	|{\syl@hamza #1#3} 		% ignore bar
   AIUYEO{\syl@hamzamid #1#2#3#3} 	% arabic rules
\default {\syl@@arabhamza #1#2#3}	% test for final position
}\endcase }

\def \syl@@arabhamza #1#2#3#4{% non-initial hamza, context #1'#2#3#4
	\def \next {\syl@hamzamid #1#2#3#3#4}%
\if\isat@wdend #2#3#4% test for hamza as last consonant
\ifiz@fet \else \def \next {\syl@hamzaend #1#2#3#4}%
\fi\fi \next }

\def \syl@hamzamid #1#2#3{% test for #1 a y ; obsolete?
	\@ayfalse 
\ifx #2a\ifx #3y\@aytrue 
\fi\fi \syl@@hamzamid #1#2#3}

\def \syl@@hamzamid #1#2#3{% intermediate hamza, context #1'#2#3
	\def \next {\syl@voctest #2}%
\ifx #1I\ifqur@n \put@con B\else \put@con Y\fi \add@hamza \else
\if\is@in@list #1iy>\put@con Y\add@hamza \else
\if\is@in@list #2iIE>\put@con Y\add@hamza
	\ifqur@n \add@hamzalow \fi \else
\if\is@in@list #1uo>\put@con w\add@hamza \else
\if\is@in@list #2uo>\put@con w\add@hamza \else
\if\is@in@list #2UO>%
	\ifqur@n \put@Q #1\else \put@con w\add@hamza \fi \else
\if\is@in@list #1AUO>\put@Q #1\else
\if\is@in@list #2A>\put@con a\add@madda 
	\put@syl \def \next {\syl@con }\else
\if\is@in@list #2\a@a>\put@con a\add@fathaspec
	\put@syl \def \next {\syl@con }\else
\ifx #1a\put@con a\add@hamza \else
\ifx #2a\ifqur@n \put@Q #1\else \put@con a\add@hamza \fi \else
	\put@Q #1% deposit Hamza
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
\ifx #2Q\def \next {\syl@doublehamza }%
\fi \next }

\def \syl@hamzaend #1{% final hamza, context #1'
\case #1\of
{	i{\put@con Y\add@hamza \syl@voctest }
	u{\put@con w\add@hamza \syl@voctest }
	a{\put@con a\add@hamza \syl@voctest }
\default {\syl@@hamzaend #1}
}\endcase }

\def \syl@@hamzaend #1#2#3{% final hamza, context #1'#2#3
\put@con Q\def \next {\syl@voctest #2#3}% deposit Hamza
\ifx #2a\ifx #3N\def \next {\syl@hamza@Nspec #1}%
\fi\fi \next }

\def \syl@hamza@Nspec #1#2{% #1'aN , put alif ?
\ifx #1A\else
\ifx #1U\else
\if\is@end@char #1\else
	\ifqur@n \put@con B\else \put@con Y\fi \add@hamza
\fi\fi\fi
	\add@fathatan \put@syl
\ifx #1A\else
	\ifx #2Y\put@con Y% put alif maqsoura
	\else \put@con a% put alif
	\fi 
	\put@syl
\fi \syl@ignore #2}

\def \syl@doublehamza #1{% double Hamza
\add@shadda \syl@voctest }

\def \put@Q #1{% deposit isolated hamza after #1
\ifqur@n \if\is@end@char #1\put@con Q\else \put@con B\add@hamza \fi 
\else\put@con Q%
\fi }

%%%%%%%%%%%%%%%%%%%%%% deposit characters %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \check@@high #1{%				% long form for tooth ?
\if\is@in@list #1YntCbyp>%			% YntCbyp : toggle
	\if@high \global\@highfalse \else \global\@hightrue 
	\fi \else 
\if\is@in@list #1sxSD>\global\@hightrue \else 	% sxSD    : force high
	\global\@highfalse			% otherwise : force low
\fi\fi }

\def \put@con #1{% start syllable
\last@con ={#1}}

\def \put@syl {% deposit syllable
\if@high \advance \last@mod \c@high \fi
\xpa \check@high \the\last@con
\let \ifv@c \if@vocals \let \if@suk \if@sukun
\def \rev@wd {\the\last@con \the\last@mod +\the\last@voc *}\put@rev@wd
\global \@waslatrue }

\def \put@spec #1{% deposit special character
\last@con={#1}\def \rev@wd {#10+0*}\put@rev@wd
\global \@waslafalse }

\def \put@rev@wd {% deposit output item				% no group!
\edef \temp {\global \nxp\a@revwd {\rev@wd \the\a@revwd }%	% \temp
\global \nxp\sv@revwd {\the\sv@revwd \rev@wd }}\temp 
\last@mod = 0 \last@voc = 0 }

%%%%%%%%%%%%%%%%%%%%%% deposit .harakAt %%%%%%%%%%%%%%%%%%%%%%%%%% 

\def \add@shadda    {\advance \last@mod \c@shadda }
\def \add@hamza     {\advance \last@mod \c@hamza }
\def \add@hamzalow  {\advance \last@mod \c@hamzalow }
\def \add@madda     {\advance \last@mod \c@madda }

\def \add@wasla     {\if@suk \last@voc \c@wasla \fi }
\def \add@sukun     {\if@suk \last@voc \c@sukun \fi }
\def \add@fatha     {\ifv@c \last@voc \c@fatha 	\fi }
\def \add@kasra     {\ifv@c \last@voc \c@kasra 	\fi }
\def \add@damma     {\ifv@c \last@voc \c@damma 	\fi }
\def \add@zwarakay  {\ifv@c \last@voc \c@zwarakay \fi }
\def \add@fathatan  {\ifv@c \last@voc \c@fathatan \fi }
\def \add@kasratan  {\ifv@c \last@voc \c@kasratan \fi }
\def \add@dammatan  {\ifv@c \last@voc \c@dammatan \fi }
\def \add@fathaspec {\ifv@c \last@voc \c@fathaspec \fi }
\def \add@kasraspec {\ifv@c \last@voc \c@kasraspec \fi }
\def \add@ammad     {\ifv@c \last@voc \c@ammad 	  \fi }
\def \add@bars      {\ifv@c \last@voc \c@bars     \fi }
\def \add@kh@hamza  {\ifv@c \last@voc \c@kh@hamza \fi }
\def \add@kl@hamza  {\ifv@c \last@voc \c@kl@hamza \fi }
\def \add@kh@hamzl  {\ifv@c \last@voc \c@kh@hamzl \fi }
\def \add@kl@hamzl  {\ifv@c \last@voc \c@kl@hamzl \fi }

%%%%%%%%%%%%%%%%%%%%% output code constants %%%%%%%%%%%%%%%%%%%%%%%%%% 

\chardef \c@shadda   = 1     \chardef \c@hamza    = 2
\chardef \c@hamzalow = 3     \chardef \c@madda    = 4
\chardef \c@high     = 10

\chardef \c@sukun     = 1    \chardef \c@fatha     = 2
\chardef \c@kasra     = 3    \chardef \c@damma     = 4
\chardef \c@fathatan  = 5    \chardef \c@kasratan  = 6
\chardef \c@dammatan  = 7    \chardef \c@zwarakay  = 8
\chardef \c@wasla     = 9    \chardef \c@fathaspec = 10
\chardef \c@kasraspec = 11   \chardef \c@ammad     = 12
\chardef \c@kas@fath  = 13   \chardef \c@bars      = 14
\chardef \c@kh@hamza  = 15   \chardef \c@kl@hamza  = 16
\chardef \c@kh@hamzl  = 17   \chardef \c@kl@hamzl  = 18

%%%%%%%%%%%%%%%%%%%%%%%% end of routines %%%%%%%%%%%%%%%%%%%%%%%% 

\endinput
%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%% 
