% mmmacs -- macros for Malayalam TeX
% (c) 1993 Jeroen Hellingman
% last edit: 02-APR-1993
%
% History:
%   02-APR-1993 made virama stick out halfway. (JH)
%   12-JAN-1993 version 1.0 (Jeroen Hellingman)

\ifx\mmmacsloaded\relax\endinput\else\let\mmmacsloaded=\relax\fi

%%%%%% fonts

\input mmfont.tex		% load fonts

%%%%%% font selection

\newdimen\mmcbls        % Malayalam Current BaseLineSkip
\def\mmslant{0}         % slant factor of current Malayalam font
\newif\ifmmmode\mmmodefalse

% trick from the TeXbook, p. 375
{\catcode`p=12 \catcode`t=12 \gdef\xxx#1pt{#1}}
\let\getfactor=\xxx
\def\getslant#1{\expandafter\getfactor\the\fontdimen1#1}

\def\Z{\mmcursf}
\def\RMF{\mmcurrm}

\def\mm{\setmm\noexpand\mmmodetrue}
\def\setmm{\pretolerance=9999\tolerance=5000\hyphenpenalty=10000%
  \language=13\mmcurf\gdef\mmslant{\getslant\mmcurf}%
  \baselineskip=\mmcbls\emergencystretch=30pt}

\mmr                    % select Malayalam Regular 10pt

%%%%%% glyph composing macros

% put #1 centered on top of #2, taking into account \mmslant
\def\puton#1#2{\hskip0pt{\setbox0=\hbox{#2}\setbox1=\hbox{#1}%
    \dimen0=.5\wd0\advance\dimen0by.5\wd1%
    \dimen1=\ht0\advance\dimen1by\dp1%
    \dimen3=.5\wd0\advance\dimen3by-.5\wd1%
    \dimen5=\mmslant\dimen1 % calculate correction needed for slanted fonts
    \advance\dimen0by-\dimen5
    \advance\dimen3by-\dimen5
    \box0\kern-\dimen0\raise\dimen1\box1\kern\dimen3}}

% put #1 to the right on top of #2, taking into account \mmslant
\def\putrighton#1#2{\hskip0pt{\setbox0=\hbox{#2}\setbox1=\hbox{#1}%
    \dimen0=\wd1%
    \dimen1=\ht0\advance\dimen1by\dp1%
    \dimen3=0pt%
    \dimen5=\mmslant\dimen1 % calculate correction needed for slanted fonts
    \advance\dimen0by-\dimen5
    \advance\dimen3by-\dimen5
    \box0\kern-\dimen0\raise\dimen1\box1\kern\dimen3}}

% put #1 to the far right on top of #2, taking into account \mmslant
% #1 will stick partly out #2, for placing virama
\def\putfarrighton#1#2{\hskip0pt{\setbox0=\hbox{#2}\setbox1=\hbox{#1}%
    \dimen0=0.667\wd1%
    \dimen1=\ht0\advance\dimen1by\dp1%
    \dimen3=-0.333\wd1%
    \dimen5=\mmslant\dimen1 % calculate correction needed for slanted fonts
    \advance\dimen0by-\dimen5
    \advance\dimen3by-\dimen5
    \box0\kern-\dimen0\raise\dimen1\box1\kern\dimen3}}

\def\mmV#1{\putfarrighton{\N{.8}{\<77>}}{#1}}   	% place virama

% put #1 centered underneath #2, taking into account \mmslant
\def\putbelow#1#2{\hskip0pt{\setbox1=\hbox{#1}\setbox0=\hbox{#2}%
    \dimen0=.5\wd0\advance\dimen0by.5\wd1%
    \dimen1=\dp0\advance\dimen1by\ht1%
    \dimen3=.5\wd0\advance\dimen3by-.5\wd1%
    % test: if #1 wider than #2, kern 0.5(wd1-wd0) before, and idem after extra.
    \ifdim\wd1>\wd0\dimen7=\wd1\advance\dimen7by-\wd0%
    	\hbox{}\kern0.5\dimen7%
    	\advance\dimen3by0.5\dimen7%
    \fi
    \dimen5=-\mmslant\dimen1 % calculate correction needed for slanted fonts
    \advance\dimen0by-\dimen5
    \advance\dimen3by-\dimen5
    \box0\kern-\dimen0\lower\dimen1\box1\kern\dimen3}}
\def\B#1#2{\putbelow{#2}{#1}}

% put #1 right aligned underneath #2, taking into account \mmslant
\def\putrightbelow#1#2{\hskip0pt{\setbox1=\hbox{#1}\setbox0=\hbox{#2}%
    \dimen1=\dp0\advance\dimen1by\ht1%
    % test: if #1 wider than #2, kern wd1-wd0 extra.
    \ifdim\wd1>\wd0\dimen0=\wd1\advance\dimen0by-\wd0\kern\dimen0\fi
    \dimen5=-\mmslant\dimen1 % calculate correction needed for slanted fonts
    \box0\kern-\wd1%
      \ifdim\dimen5=0pt\else\kern\dimen5\fi % avoid unneccessary kerns
      \lower\dimen1\box1
      \ifdim\dimen5=0pt\else\kern-\dimen5\fi}}

% lower height of box #2 with #1
% to be used in conjunction with \M to construct consonant clusters
\def\R#1#2{\setbox0=\hbox{#2}%
  \dimen0=\ht0\advance\dimen0by-#1%
  \ht0=\dimen0\box0}
  
% lower glyph #2 with #1 ex
% to be used to lower the virama sign when it is placed on top of a glyph
\def\N#1#2{\setbox0=\hbox{\lower#1ex\hbox{#2}}\dp0=0pt\box0}

%%%%%% single letter commands

\def\D#1{{\mm\char#1}}		% show single Malayalam characters
\def\C{\char}
\def\K#1{\kern#1em}
\def\T{\puton}
\def\Q#1#2{\putrighton{#2}{#1}}
\def\M#1#2{\putrightbelow{#2}{#1}}
\def\X{\leavevmode\hbox}
\def\<#1>{\leavevmode{\char#1}}

%%%%%% digit usage

\newif\ifmmfigs\mmfigsfalse

\def\mmfigures{\mmfigstrue}
\def\rmfigures{\mmfigsfalse}

\def\mmzero{\ifmmfigs\<102>\else{\RMF 0}\fi}
\def\mmone{\ifmmfigs\<103>\else{\RMF 1}\fi}
\def\mmtwo{\ifmmfigs\<104>\else{\RMF 2}\fi}
\def\mmthree{\ifmmfigs\<105>\else{\RMF 3}\fi}
\def\mmfour{\ifmmfigs\<106>\else{\RMF 4}\fi}
\def\mmfive{\ifmmfigs\<107>\else{\RMF 5}\fi}
\def\mmsix{\ifmmfigs\<108>\else{\RMF 6}\fi}
\def\mmseven{\ifmmfigs\<109>\else{\RMF 7}\fi}
\def\mmeight{\ifmmfigs\<110>\else{\RMF 8}\fi}
\def\mmnine{\ifmmfigs\<111>\else{\RMF 9}\fi}

\endinput

%%%%%% end of mmmacs
