summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/fonts/malayalam/article/mmmacs.tex
blob: bbf5464dd727fbd53ee51a732505ac568e856428 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
% 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