%%%%%%%%%%%%%%%%%%%%%%%%%%% witbhs.sty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% witbhs.sty
% Scanner for a variant of the encoding used in the machine-readable
% Biblia Hebraica Stuttgartensia
% to install it, include it as a LaTeX package or style option "witbhs"
% with Plain TeX, say "\input witbhs.sty"
% to activate it, say "\setcode {witbhs}
% 14.09.2001
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% about the encoding contact: arian@th.vu.nl
% Dr Arian J.C.Verheij
% NWO / VU, Dpt. Biblical Studies & CS
% De Boelelaan 1105, kr. 14A-38
% NL 1081 HV Amsterdam
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (c) Klaus Lagally
%     Institut fuer Informatik
%     Universitaet Stuttgart
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\ifx \bhsatcode \undefined \else \expandafter \endinput
\fi % load only once

\chardef \bhsatcode = \catcode`\@  \catcode`\@ = 11

\a@ident {witbhs.sty} {3.10 read WITBHS Hebrew encoding} {14.09.2001}

\UsePackage {bhslabel} % process BHS labels

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% dynamic definitions for WITBHS Hebrew coding
{\catcode `\^ 7 \catcode `\ =9 \catcode `\^^M=9 \catcode `\^^I=9
\catcode `\"=12 \catcode `\>=11 \catcode `\&=12 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\gdef \setwitbhs@codes {% activate and change some codes
\globaldefs=1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def \sc@A {a}   \def \sc@B {b}   \def \sc@C {x}   \def \sc@D {d}
\def \sc@E {e} \def\sc@F{\n@xp\a@s} \def\sc@G{g}   \def \sc@H {h}
\def \sc@I {i}   \def \sc@J {y}   \def \sc@K {k}   \def \sc@L {l}
\def \sc@M {m}  \def \sc@N {n} \def\sc@O{\n@xp\a@o}\def \sc@P {p}
\def \sc@Q {q}   \def \sc@R {r}   \def \sc@S {s}   \def \sc@T {t}
\def \sc@U {u}   \def \sc@V {C}   \def \sc@W {w}   \def \sc@X {X}
\def \sc@Y {S}   \def \sc@Z {z}   \def \sc@@ {A}
\a@digits = {0123456789}     	\a@paren  = {[]}
\a@first = {>+<##&$":.,*0123456789}	
\globaldefs=0 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}% end of dynamic definitions for WITBHS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

{\arab@codes \catcode `\> 11

\gdef \witbhs@beg #1#2{% start WITBHS scanner
\@ssimfalse \def \next {\witbhs@word #1#2}%
\ifx #1\@\def \next {\sc@endscan #2}\else			% finished
\ifx #2\@\def \next {\witbhs@testpara #1#2}\else
\ifx #2?\def \next {\witbhs@testpara #1#2}\else
\fi\fi\fi \next }

\gdef \witbhs@word #1#2{% transform input into internal notation
\case #1\of
{      \@{\sc@endscan #2}
	]{\witbhs@word }
	/{\witbhs@word #2}
	0{\witbhs@zero #2}
	7{\witbhs@seven #2}
 12345689{\witbhs@word }
	?{\witbhs@query #2}
	:{\witbhs@colon #2}
%	O{\witbhs@O #2}
	W{\witbhs@W #2}
	*{\witbhs@star #2}
%       #2{\witbhs@word #1|#2}
\default {\witbhs@rest #1#2}
}\endcase }

\gdef \witbhs@rest #1#2{% transform input into internal notation
     \def \next {\sc@put \witbhs@word #2}%
\case #1\of 
{	.{\def \sc@char {\nxp \a@Zu }}
	|{\def \sc@char {\nxp \a@U }}
	'{\def \sc@char {'}}
	>{\def \sc@char {Q}}
	+{\def \sc@char {N}}	% phantom carrier
	${\def \sc@char {M}}	% phantom carrier
	={\def \sc@char {-}}	% medial form at end
	<{\def \sc@char {P}}
	&{\def \sc@char {\nxp \a@s }}
	;{\def \sc@char {\nxp \a@E }}
	-{\def \sc@char {B}}
\default {\ifcat \nxp #1\relax \def \next {\sc@back #1{#2}}\else
	\if \nxp #1\a@hash \def \sc@char {\nxp \a@S }\else
	\ifcat \nxp #1a\edef \sc@char {\csname sc@#1\endcsname }%
	\fi\fi\fi }
}\endcase \next }

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

\gdef \witbhs@star {% qere / qetiv
\def \sc@char {*}\sc@put \witbhs@word }

\gdef \witbhs@colon #1{% shwa or chatef
\def \next {\witbhs@word }%
\ifx #1A\def \sc@char {\nxp \a@A }\else
\ifx #1@\def \sc@char {\nxp \a@O }\else
\ifx #1E\def \sc@char {\nxp \a@I }\else
\def \sc@char {\nxp \a@e }\def \next {\witbhs@word #1}%
\fi\fi\fi \sc@put \next }

\iffalse
\gdef \witbhs@O {% cholem or cholem waw
\def \sc@char {\nxp \a@o }\sc@put \witbhs@word }
\fi

\gdef \witbhs@W #1{% waw or shureq
\def \sc@char {w}\def \next {\witbhs@word #1}%
\ifx #1.\def \sc@char {U}\def \next {\witbhs@word }%
\fi \sc@put \next }

\gdef \witbhs@seven #1{% meteg
\def \next {\witbhs@word }%
\ifx #15\def \sc@char {|}\sc@put \else
\if\is@in@set #1\a@digits \else \def \next {\witbhs@word #1}%
\fi\fi \next }

\gdef \witbhs@zero #1{% sop pasuq and pasuq
\def \next {\witbhs@word }%
\ifx #10\def \sc@char {:}\sc@put \else
%\ifx #15\def \sc@char {K}\sc@put \else
\ifx #15\def \next {\witbhs@pasuq }\else
\if\is@in@set #1\a@digits \else \def \next {\witbhs@word #1}%
\fi\fi\fi \next }

}% \arab@codes

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

\def \witbhs@testpara #1#2{% single initial P ?
\ifx #1P\def \next {\witbhs@para #1#2}%
\else \def \next {\witbhs@word #1#2}%
\fi \next }

\def \a@c@witbhspara {% small paragraph mark
\putwordb@x {\small \heb@font \heb@testfont
\act@cd '164 \advance \act@cd \heb@dsp 
\space \char \act@cd \space }\test@token }

\def \a@c@pasuq {% verse division
\putwordb@x {\small $\!|\!$}\test@token }

\def \witbhs@para P#1\@ \@@ {% prepare paragraph mark
\sc@back \witbhspara #1\@ \@@ }

\def \witbhs@pasuq #1\@ \@@ {% prepare verse division
\sc@back \pasuq #1\@ \@@ }

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

\def \witbhs@query #1\@ \@@ {% new line, push back the rest
\ifnum \bhsmode = 1 \sc@back \\#1\@ \@@ \else % finish line
\ifnum \bhsmode = 2 \sc@back \|#1\@ \@@ \else % stretch line
			\sc@back #1\@ \@@     % start next word
\fi\fi }

\newcount \bhsmode	\bhsmode 0

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

\def \set@witbhs {% substitute the BHS scanner
\let \sc@beg \witbhs@beg 	\let \sc@word \witbhs@word  
\let \sc@back \sc@@back         \let \sc@endscan \sc@@endscan
\let \a@scan \a@@scan           \setwitbhs@codes	
\let \arab@codes \wit@arab@codes
\let \unarab@codes \wit@unarab@codes
\a@message {input encoding set to WITBHS conventions}}

\xpa \def \xpa \sc@table \xpa {\sc@table % add the BHS encoding
witbhs\set@witbhs }

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

\def \wit@arab@codes {% save and set special characters
\csname originalTeX\endcsname
\chardef \spc@de = \catcode`\ 	\catcode`\  = 10
\chardef \dqc@de = \catcode`\"	\catcode`\" = \@other 		
\chardef \lsc@de = \catcode`\<	\catcode`\< = \@other 
\chardef \gtc@de = \catcode`\>	\catcode`\> = 11
\chardef \atc@de = \catcode`\@	\catcode`\@ = 11
\chardef \hsc@de = \catcode`\#	\catcode`\# = \@other 
\chardef \amc@de = \catcode`\&	\catcode`\& = \@other 
\arab@charsubdefmax \charsubdefmax \charsubdefmax \m@ne }

\def \wit@unarab@codes {% reset catcodes
\catcode`\  = \spc@de \catcode`\< = \lsc@de \catcode`\" = \dqc@de 
\catcode`\#  = \hsc@de \catcode`\>  = \gtc@de \catcode`\@  = \atc@de 
\catcode`\&  = \amc@de 
\charsubdefmax \arab@charsubdefmax }

{\catcode`\# = \@other \gdef \a@hash {#}}

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

\a@message {scanner for WITBHS encoding installed.}

\catcode `\@ = \bhsatcode
\endinput
%%%%%%%%%%%%%%%%%%%%%%%% EOF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%