% Vlna implementovana jako makra v encTeXu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Leden 2003                    Petr Olsak

% Toto je ukazka moznosti encTeXu. Na urovni maker muzeme
% naprogramovat program vlna.

% Pomocna makra:

\def\setmu #1#2{\mubyte #1##1 #2\endmubyte} % use encTeX Feb 2003
\bgroup \uccode`X=\endlinechar \uppercase{\gdef\endchar{X}}
        \uccode`X=`\{          \uppercase{\gdef\leftbrace{X}}
\egroup

\def\sylabi #1{%
   \setmu \spacesylab {\space#1}     % <mezera>v lese -> <mezera>v~lese
   \setmu \normalsylab {(#1}         % (v lese        -> (v~lese
   \setmu \normalsylab {\endchar#1}  % <zacatek radku>v lese -> v~lese
   \setmu \normalsylab {[#1}         % [v lese        -> [v~lese
   \setmu \specsylab  {\leftbrace#1} % {v lese        -> {v~lese
}
% dve moznosti za predlozkou: mezera nebo konec radku:

\def\sylab #1{\sylabi {#1\space}\sylabi {#1\endchar}} 

% seznam predlozek:

\sylab v \sylab k \sylab o \sylab s \sylab u \sylab z
\sylab V \sylab K \sylab O \sylab S \sylab U \sylab Z
\sylab A \sylab I \sylab i \sylab a

% makra neudelaji nic v matematickem modu a verbatim prostredi:

\def\exx{\expandafter\expandafter\expandafter}
\def\spacesylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\spacesylabP \fi\fi}
\def\normalsylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\normalsylabP \fi\fi}
\def\specsylab {\ifmmode\else\ifnum\catcode`\ =10 \exx\specsylabP \fi\fi}
                
\def\spacesylabP {\afterassignment\spacesylabR \let\next= }
\def\spacesylabR {\ifhmode\unskip\fi \next \normalsylabP}
\def\normalsylabP #1 {#1~}
\def\specsylabP #1{{\normalsylabP #1}}

\def\uv{\futurelet\next\uvR}
\def\uvR{\ifx \next\specsylab \expandafter \uvS \else \expandafter \uvP \fi}
\long\def\uvP #1{\clqq#1\crqq}
\long\def\uvS \specsylab #1{\normalsylab \clqq#1\crqq}

\mubytein=2  % potrebujeme i konstrukce "a v lese -> a~v~lese"

\endinput



