summaryrefslogtreecommitdiff
path: root/language/telugu/tlsyllable.tex
blob: 5a63978498f5d1d5707f3a4043164bba294a694d (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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
% This file is part of the TeluguTeX Software Package.
%Copyright (c) 1991 Lakshmankumar Mukkavilli
%
%The TeluguTeX Software Package is distributed in the hope that
%it will be useful,but WITHOUT ANY WARRANTY.  No author or distributor
%accepts responsibility to anyone for the consequences of using it
%or for whether it serves any particular purpose or works at all,
%unless he says so in writing.  Refer to the TeluguTeX Software Package
%General Public License for full details.
%
%Everyone is granted permission to copy, modify and redistribute
%the TeluguTeX Software Package, but only under the conditions described in the
%TeluguTeX Software Package General Public License.   A copy of this license is
%supposed to have been given to you along with TeluguTeX Software Package so you
%can know your rights and responsibilities.  It should be in a
%file named CopyrightLong.  Among other things, the copyright notice
%and this notice must be preserved on all copies.  
%%%%%%
%
% The macros in this file are used for recognizing the componants of
% of a  syllable and building the syllable from constituent symbols
% from the current  font. This file also contains macros for 
% processing various accents.
% When tlxlate.tex recognizes a consonant X the macro \tlcbX is
% invoked. When tlxlate.tex recognizes a vowel Y the macro \tlvoY
% is invoked. \tlcbX invokes the macro \tlconsonant with certain     
% parameters concerning X. Similarly \tlvoY invokes the macro
% \tlvowel with certain parameters concerning Y. \tlconsonant
% and \tlvowel are key macros.   
% \tlcosonant:
%     If the consonant is the base consonant
%      then
%         set appropriate flags. initialize syllable box with
%         the base consonant.
%      else
%         (this is a consonant conjunct that modifies the last
%         base consonant.) save the token (\tlccX)on the consonant
%         conjunct list. This list is executed after base consonant
%         is modified by a vowel. 
%    endif
%
% \tlvowel:
%    If the vowel is independent(stand alone) 
%     then
%        syllable consists of just this vowel.
%        place this vowel in the syllable box.
%     else
%        (this is a vowel modifier.)
%        check if the base consonant when modified by this vowel
%            needs any special handling.
%        If yes then invoke the macro \tlcvXY macro
%               else invoke the standard vowel modifier macro(\tlvmY)
%        execute macros on consonant conjunct list.
%    endif
%        add space in the syllable box. 
%        if preceeded by a box then insert a discretionary hyphen.
%        release the syllable box.
%
% processing accents:
%   when tlxlate.tex reads an accent it invokes a macro(there is a
%   macro for each accent) in this file. Typically processing an
%   accent involves pulling off the last box and applying the
%   accent.
%
\input tloffsets
%macro naming conventions:
%macro names begin with either tl or zz. Macros that begin with zz are those
%that are invoked after declaration of active characters used in
%transliteration.
%\tlbmxxx    These are used for box manipulation
%\tlcbxxx    When a consonant is read these macros are invoked(consonant base)
%\tlvmxxx    These process vowel modifiers
%\tlvoxxx    When a vowel is read these macros are invoked
%\tlccxxx    Process consonant conjuncts
%\tlcvxxx    Processes consonant+vowel combination. Existance of this
%                     macros indicates that the con.+vowel combination
%                     needs special treatment. The name of this macro is
%                     \tlcv+consonant+vowel
%Following are the declarations for fonts. If some of these are
%not available then those statements must be commented out.
%Else TeX will complain that 'TFM file is not found'.
\font\tla=tel10
\font\tlanx=tel10nx
\font\tlany=tel10ny
\font\tlab=tel10b
\font\tlas=tel10s
\font\tlb=tel11
\font\tlbnx=tel11nx
\font\tlbny=tel11ny
\font\tlbb=tel11b
\font\tlbs=tel11s
\font\tlc=tel12
\font\tlcnx=tel12nx
\font\tlcny=tel12ny
\font\tlcb=tel12b
\font\tlcs=tel12s
\font\tld=tel15
\font\tldb=tel15b
\font\tlds=tel15s
\font\tle=tel18
\font\tleb=tel18b
\font\tles=tel18s
\font\tlf=tel20
\font\tlfb=tel20b
\font\tlfs=tel20s
\font\tlg=tel25
\font\tlgb=tel25b
\font\tlgs=tel25s
\font\tlh=tel30
\font\tlhs=tel30s
\font\tli=tel35
\font\tlis=tel35s
\font\tlj=tel40
\font\tljs=tel40s
\font\tlk=tel55
\font\tlks=tel55s
\font\tll=tel72
\font\tlm=tel100
\font\tln=tel172
\font\tlspa=telspa
\font\tlspb=telspb
\font\tlspc=telspc
\newcount\cbcode    % code for the base consonant of the syllable
                    % zero if lone vowel
\newcount\zzBCBF    %contains code for telugu digit zero
\zzBCBF=\dtzeroCODE
\cbcode=0           %initialize


\newtoks\cbtok      %contains the macro name to process consonant+vowel
\newtoks\votok      %contains vowel
\newtoks\cctok      %contains the list of macros to process 
		    %               consonant conjuncts
\cctok={}           %initialize

\newdimen\vmpivot   % offset from left edge of the boundingbox for the 
		    % base consonant. Used for alligning some vowel modifiers.
		    % in em units.
\newdimen\ccpivot   % offset from left edge of the boundingbox for the 
		    % base consonant. used for alligning  consonant conjuncts
		    % and bottom symbol of vowel modifier for y.in em units.
\newdimen\cpivot    % This register contains dimen from \vmpivot initially
		    % After vowel modifier is processed this register
		    % contains dimen from \ccpivot. in em units
		    % Used by \tlbms, \tlbmsl and \tlbmsr for allignment.
\newdimen\leftovershoot % Amount by which a vowel modifier/accent goes
		    % to the left of the consonant left boundary.
                    % Used to increment ccpivot, xxxxOFFSETC's
\newdimen\lshift    % used in \tlbms. contains amount of left shift
\newdimen\rl        % contains amount by which symbols are raised/lowered    
\newdimen\scrdima   % for scratch work
\newdimen\bcwidth   % base consonant width , used in \tlbms,\tlbmsl and \tlbmsr

\newcount\vmcode    % code for the vowel in the syllable
\newcount\checkflag % some consonants(base) have a 'check' mark on the top
		    % This register contains 0 if no 'check' is present
		    %                        1 if 'check' is present
\newcount\consprime % contains prime number product for current consonant
\newcount\vowprime  % contains prime number code for the current vowel
\newcount\scrprime  % used as scratch for prime factoring

\newbox\syl         % box where  syllable(akshara) is built
\newbox\sym         % used in \tlbms. contains a symbol from the font
\newbox\testvoid    % used for saving \lastbox at the time of hyphenation

\def\tlbmspace{0.1em}% amount of space inserted after a syllable
\def\tlbmshift#1#2{%
   \setbox\sym=\hbox{\char#1}%
   %we need to consider the situation where the \sym might overshoot
   %\syl on the left. If so we will attach an empty box of width(p2-p1)
   %on the left. p2 is #2 and p1 is in cpivot.First compute (p2-p1)
   \scrdima=#2em\advance\scrdima by-\cpivot
   %if (p2-p1)>0 then 1. add a hbox of width (p2-p1) on the left
   %                  2. cpivot = cpivot + (p2-p1)
   %                  3. vmpivot = vmpivot + (p2-p1)
   %                  4. leftovershoot = leftovershoot + (p2-p1)
   % we do not increment ccpivot because  just before cctok list
   % is executed ccpivot is incremented by leftovershoot(in \tlbmro)
   \ifdim\scrdima>0em
      \setbox\syl=\hbox{\hbox to \scrdima{}\box\syl}%
      \advance\cpivot by \scrdima
   %   \advance\ccpivot by \scrdima
      \advance\vmpivot by \scrdima
      \advance\leftovershoot by\scrdima
   \fi
   \bcwidth=\wd\syl%width of the box \sty
   %compute (w-p1)+p2
   \lshift=\wd\syl
   \advance\lshift by -\cpivot
   \advance\lshift by #2em}
\def\tlbmadjustwidth{%
   %If the right edge of \sym is to the left of the right edge
   %of \syl then we want the width of the resultant box to be 
   %original width of \syl (w1, saved in \bcwidth)
   %if (w2-p2)<(w1-p1)then width of \syl=w1
   %or if 0<w1-w2+p2-p1 then width of \syl=w1
   %   \scrdima  contains (p2-p1)
   \advance\scrdima by \bcwidth\advance\scrdima by -\wd\sym%w1-w2
   % \scrdima contains w1-w2+p2-p1
   \ifdim0em<\scrdima\wd\syl=\bcwidth\fi}
%macro \tlbms is used to place vowel modifiers over consonant bases
% first parameter indicates the character code in the font(in decimal)
% second parameter indicates the offset from left edge of the bounding
% box. Used for alligning, in em units.
\def\tlbms#1#2{\tlbmshift{#1}{#2}%
   \setbox\syl=\hbox{\copy\syl\kern-\lshift\copy\sym}\tlbmadjustwidth}
   %\setbox\syl=\hbox{\copy\syl\kern-\lshift\unhbox\sym}\tlbmadjustwidth}
%macro \tlbmsl is used shift left and lower symbols
\def\tlbmsl#1#2{\tlbmshift{#1}{#2}%\showbox\syl\showbox\sym%
   \rl=\dp\syl% amount by which to lower the symbol
   \setbox\syl=\hbox{\copy\syl\kern-\lshift\lower\rl\copy\sym}\tlbmadjustwidth}
%macro \tlbmsr is used shift left and raise symbols
\def\tlbmsr#1#2{\tlbmshift{#1}{#2}
   \rl=\ht\syl% amount by which to raise the symbol
   \setbox\syl=\hbox{\copy\syl\kern-\lshift\raise\rl\copy\sym}\tlbmadjustwidth}
%The offsets in the offsets file were computed(during font generation)
% assuming that the left edge of the syllable box was same as the left
% edge of the base consonant. But when we attach a vowel modifier or
% an accent that goes beyond the left edge of the base base consonant
% we need to adjust the offsets. That is the purpose of this macro.
% Typically used to adjust \xxxxOFFSETC's in \tlcvxxxx macros.
% Also used to adjust ccpivot.
\def\tlbmro#1{\cpivot=#1\advance\cpivot by\leftovershoot}%revise offset
% After processing a syllable do a reset to prepare for processing
% next syllable.
\def\tlreset{\leftovershoot=0em\cbcode=0\cctok={}}%
%*** Hyphenation and spacing
% Guiding principle for hyphenation is that a syllable should not be
% broken across lines. Since all syllables are built in boxes and
% boxes are not broken up for hyphenation we are ensuring that this
% principle is followed. But then we are not giving enough freedom
% to TeX for breaking lines into paragraphs. So what we do is suggest
% some places where lines can be broken. This is done by inserting
% discretionary hyphens. Discretionary hyphens are inserted between
% syllables within a word. The problem is that we know we processing a 
% syllable but we do not know if this is preceeded immediatly
% by a syllable. It is not easy to determine either. The device
% that is used decide if current syllable is preceeded by a syllable
% is to extract lastbox. If lastbox is not void then insert a
% discretionary hyphen. Since all syllables are output as boxes
% we will always have a discretionary hyphen between syllables.
% But if the lastbox is not void then we can not say that the lastbox
% is indeed a syllable box. One example is paragraph indent box.
% This is not a serious problem.(Paragraph indentation appears at
% the begining of a line, hence is hardly a candidate for hyphenation.)
% Note that punctuation, digits and other non-syllable characters
% are not held in boxes and hence lastbox operation returns void.
% See TeX Book for details about \lastbox.
%
% For the purpose of readability \tlbmspace space is added following
% a syllable. This is not necessary in English because each symbol in
% the font represents a standalone symbol.Spacing is provided in
% the font itself. Whereas in Telugu font most symbols are parts
% for composing syllables. Spacing is not provided in the font
% for these symbols. 
%\tlbmskip introduces blank space after a syllable. Depending on context
% a discretionary hyphen is added before the syllable.
\def\tlbmskip{\setbox\syl=\hbox{\copy\syl\hbox to\tlbmspace{}}%
      \setbox\testvoid=\lastbox\copy\testvoid%  reinstate lastbox
      \ifvoid\testvoid\else\discretionary{-}{}{}\fi%
      \box\syl}%
\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax}%from TeX book
%*** macros to process consonants
%\tlconsonanant is called whenever a consonant is encountered
% the consonant could be base consonant(first consonant of a syllable)
% or a conjunct. If base consonant then 1. set base consonant seen flag
% to yes 2. put the consonant in \syl box 3. place the name of the
% consonant in the token list \cbtok. This is used by \tlvowel to
% form the macro name to process consonant+vowel
% If consonant conjunct then store the macro name to process the conjunct 
% in the token list \cctok. If the consonant is 'x' then the macro to
% process the conjunct form of 'x' is \tlccx
% parameters:
%   #1   name of the consonant
%   #2   position in the font( of base consonant)
%   #3   offset from the left edge of the bounding box for the
%            base consonant. Used for alligning vowel modifiers
%            Received as \xxxxOFFSETA.
%   #4   offset from the left edge of the bounding box for the
%            base consonant. Used for alligning consonant conjuncts
%            Received as \xxxxOFFSETB.
%   #5   This is either 0 or 1. 1 indicates that when modified
%            by vowel 'a' there is a hat (a check mark) on the top
%            else no hat.
%   #6    If this consonant needs special treatment when modified by certain
%            vowels then this is the product of prime numbers associated with
%            those groups of vowels otherwise this parameter is 113
\def\tlconsonant#1#2#3#4#5#6{\ifnum\cbcode=0%this is base consonant
  \cbcode=1\cpivot=#3em\ccpivot=#4em\checkflag=#5\consprime=#6%
  \setbox\syl=\hbox{\char#2}%
  %used by \tlvowel macro to generate consonant+vowel modifier
  \cbtok={#1}%
\else          % this is consonant conjunct
	      % next we build a sequence of macro invokations
	      % to process consonant conjuncts. A 'dirty trick' from
	      % TeX book (appendix D, macro madness) is used
	      \cctok=\expandafter{\the\cctok\csname tlcc#1\endcsname}%
	\fi}
\def\tlcbk{\tlconsonant{k}{\cbkaCODE}{\cbkaOFFSETA}{\cbkaOFFSETB}{1}{5}}%
\def\tlcbkh{\tlconsonant{kh}{\cbkhaCODE}{\cbkhaOFFSETA}{\cbkhaOFFSETB}{0}{42}}%
\def\tlcbg{\tlconsonant{g}{\cbgaCODE}{\cbgaOFFSETA}{\cbgaOFFSETB}{1}{3}}%
\def\tlcbgh{\tlconsonant{gh}{\cbghaCODE}{\cbghaOFFSETA}{\cbghaOFFSETB}{1}{154}}%
\def\tlcbNG{\tlconsonant{NG}{\cbngaCODE}{\cbngaOFFSETA}{\cbngaOFFSETB}{0}{10}}%
\def\tlcbc{\tlconsonant{c}{\cbchaCODE}{\cbchaOFFSETA}{\cbchaOFFSETB}{1}{21}}%
\def\tlcbch{\tlconsonant{ch}{\cbcchaCODE}{\cbcchaOFFSETA}{\cbcchaOFFSETB}{1}{21}}%
\def\tlcbj{\tlconsonant{j}{\cbjaCODE}{\cbjaOFFSETA}{\cbjaOFFSETB}{0}{210}}%
\def\tlcbjh{\tlconsonant{jh}{\cbjhaCODE}{\cbjhaOFFSETA}{\cbjhaOFFSETB}{1}{154}}%
\def\tlcbnx{\tlconsonant{nx}{\cbnyaCODE}{\cbnyaOFFSETA}{\cbnyaOFFSETB}{0}{10}}%
\def\tlcbT{\tlconsonant{T}{\cbttaCODE}{\cbttaOFFSETA}{\cbttaOFFSETB}{0}{70}}%
\def\tlcbTh{\tlconsonant{Th}{\cbtthaCODE}{\cbtthaOFFSETA}{\cbtthaOFFSETB}{1}{3}}%
\def\tlcbD{\tlconsonant{D}{\cbddaCODE}{\cbddaOFFSETA}{\cbddaOFFSETB}{1}{5}}%
\def\tlcbDh{\tlconsonant{Dh}{\cbddhaCODE}{\cbddhaOFFSETA}{\cbddhaOFFSETB}{1}{5}}%
\def\tlcbN{\tlconsonant{N}{\cbnnaCODE}{\cbnnaOFFSETA}{\cbnnaOFFSETB}{0}{226}}%
\def\tlcbt{\tlconsonant{t}{\cbtaCODE}{\cbtaOFFSETA}{\cbtaOFFSETB}{1}{21}}%
\def\tlcbth{\tlconsonant{th}{\cbthaCODE}{\cbthaOFFSETA}{\cbthaOFFSETB}{1}{3}}%
\def\tlcbd{\tlconsonant{d}{\cbdaCODE}{\cbdaOFFSETA}{\cbdaOFFSETB}{1}{3}}%
\def\tlcbdh{\tlconsonant{dh}{\cbdhaCODE}{\cbdhaOFFSETA}{\cbdhaOFFSETB}{1}{3}}%
\def\tlcbn{\tlconsonant{n}{\cbnaCODE}{\cbnaOFFSETA}{\cbnaOFFSETB}{1}{21}}%
\def\tlcbp{\tlconsonant{p}{\cbpaCODE}{\cbpaOFFSETA}{\cbpaOFFSETB}{1}{770}}%
\def\tlcbph{\tlconsonant{ph}{\cbphaCODE}{\cbphaOFFSETA}{\cbphaOFFSETB}{1}{770}}%
\def\tlcbb{\tlconsonant{b}{\cbbaCODE}{\cbbaOFFSETA}{\cbbaOFFSETB}{0}{42}}%
\def\tlcbbh{\tlconsonant{bh}{\cbbhaCODE}{\cbbhaOFFSETA}{\cbbhaOFFSETB}{1}{42}}%
\def\tlcbm{\tlconsonant{m}{\cbmaCODE}{\cbmaOFFSETA}{\cbmaOFFSETB}{1}{462}}%
\def\tlcbY{\tlconsonant{Y}{\cbyaCODE}{\cbyaOFFSETA}{\cbyaOFFSETB}{1}{462}}%
\def\tlcbr{\tlconsonant{r}{\cbraCODE}{\cbraOFFSETA}{\cbraOFFSETB}{1}{3}}%
\def\tlcbR{\tlconsonant{R}{\cbrraCODE}{\cbrraOFFSETA}{\cbrraOFFSETB}{0}{5}}%
\def\tlcbl{\tlconsonant{l}{\cblaCODE}{\cblaOFFSETA}{\cblaOFFSETB}{0}{210}}%
\def\tlcbL{\tlconsonant{L}{\cbllaCODE}{\cbllaOFFSETA}{\cbllaOFFSETB}{1}{105}}%
\def\tlcbv{\tlconsonant{v}{\cbvaCODE}{\cbvaOFFSETA}{\cbvaOFFSETB}{1}{210}}%
\def\tlcbS{\tlconsonant{S}{\cbcaCODE}{\cbcaOFFSETA}{\cbcaOFFSETB}{1}{105}}%
\def\tlcbSh{\tlconsonant{Sh}{\cbshaCODE}{\cbshaOFFSETA}{\cbshaOFFSETB}{1}{770}}%
\def\tlcbs{\tlconsonant{s}{\cbsaCODE}{\cbsaOFFSETA}{\cbsaOFFSETB}{1}{154}}%
\def\tlcbH{\tlconsonant{H}{\cbhaCODE}{\cbhaOFFSETA}{\cbhaOFFSETB}{1}{770}}%
\def\tlcbXh{\tlconsonant{Xh}{\cbkshaCODE}{\cbkshaOFFSETA}{\cbkshaOFFSETB}{1}{5}}%
\def\tlcbbb{\tlconsonant{bb}{\cbbbCODE}{\cbbbOFFSETA}{\cbbbOFFSETB}{0}{113}}%
\def\tlcbob{\tlconsonant{ob}{\cbobCODE}{\cbobOFFSETA}{\cbobOFFSETB}{0}{113}}%
\def\tlcbeb{\tlconsonant{eb}{\cbebCODE}{\cbebOFFSETA}{\cbebOFFSETB}{0}{113}}%
%*** macros to process consonant conjuncts
\def\tlcck{\setbox\syl=\hbox{\copy\syl\char\cckaCODE}}%
\def\tlcckh{\tlbmsl{\cckhaCODE}{\cckhaOFFSETA}}%
\def\tlccg{\tlbmsl{\ccgaCODE}{\ccgaOFFSETA}}%
\def\tlccgh{\tlbmsl{\ccghaCODE}{\ccghaOFFSETA}}%
\def\tlccNG{\tlbmsl{\ccngaCODE}{\ccngaOFFSETA}}%
\def\tlccc{\setbox\syl=\hbox{\copy\syl\char\ccchaCODE}}%
\def\tlccch{\setbox\syl=\hbox{\copy\syl\char\cccchaCODE}}%
\def\tlccj{\tlbmsl{\ccjaCODE}{\ccjaOFFSETA}}%
\def\tlccjh{\tlbmsl{\ccjhaCODE}{\ccjhaOFFSETA}}%
\def\tlccnx{\tlbmsl{\ccnyaCODE}{\ccnyaOFFSETA}}%
\def\tlccT{\tlbmsl{\ccttaCODE}{\ccttaOFFSETA}}%
\def\tlccTh{\tlbmsl{\cctthaCODE}{\cctthaOFFSETA}}%
\def\tlccD{\tlbmsl{\ccddaCODE}{\ccddaOFFSETA}}%
\def\tlccDh{\tlbmsl{\ccddhaCODE}{\ccddhaOFFSETA}}%
\def\tlccN{\tlbmsl{\ccnnaCODE}{\ccnnaOFFSETA}}%
\def\tlcct{\tlbmsl{\cctaCODE}{\cctaOFFSETA}}%
\def\tlccth{\tlbmsl{\ccthaCODE}{\ccthaOFFSETA}}%
\def\tlccd{\tlbmsl{\ccdaCODE}{\ccdaOFFSETA}}%
\def\tlccdh{\tlbmsl{\ccdhaCODE}{\ccdhaOFFSETA}}%
\def\tlccn{\setbox\syl=\hbox{\copy\syl\char\ccnaCODE}}%
\def\tlccp{\setbox\syl=\hbox{\copy\syl\char\ccpaCODE}}%
\def\tlccph{\setbox\syl=\hbox{\copy\syl\char\ccphaCODE}}%
\def\tlccb{\setbox\syl=\hbox{\copy\syl\char\ccbaCODE}}%
\def\tlccbh{\setbox\syl=\hbox{\copy\syl\char\ccbhaCODE}}%
\def\tlccm{\setbox\syl=\hbox{\copy\syl\char\ccmaCODE}}%
\def\tlccY{\setbox\syl=\hbox{\copy\syl\char\ccyaCODE}}%
\def\tlccr{\tlbmsl{\ccraCODE}{\ccraOFFSETA}}%
\def\tlccR{\tlbmsl{\ccrraCODE}{\ccrraOFFSETA}}%
\def\tlccl{\tlbmsl{\cclaCODE}{\cclaOFFSETA}}%
\def\tlccL{\setbox\syl=\hbox{\copy\syl\char\ccllaCODE}}%
\def\tlccv{\setbox\syl=\hbox{\copy\syl\char\ccvaCODE}}%
\def\tlccS{\setbox\syl=\hbox{\copy\syl\char\cccaCODE}}%
\def\tlccSh{\tlbmsl{\ccshaCODE}{\ccshaOFFSETA}}%
\def\tlccs{\setbox\syl=\hbox{\copy\syl\char\ccsaCODE}}%
\def\tlccH{\tlbmsl{\cchaCODE}{\cchaOFFSETA}}%
\def\tlccXh{\message{**No Conjunct form for Xh}}%
%*** macros to process vowels
%\tlvowel is called to complete box building. This macro is called
%  when a vowel is read. The vowel could be a stand alone vowel or
%  it could modify base consonant. In the latter case following steps
%  are executed.  a) check if the particular combination of Consonant
%  and vowel need special handling. That is if \vowprime divides \consprime
%  evenly. If yes then form the macro name
%  and invoke it. Else invoke the handler for the particular vowel.
%   (An alternate way of implementing this would be to check if \tlcvCV
%    macro exits. If yes then invoke this macro)
%  b) Then process consonant conjucts. The list of consonant conjunct 
%  macros is built in \cctok. 
% Parameters:
%   #1. code for the vowel (This  is not used.)
%   #2. name of the vowel
%   #3. position of the vowel in the font
%   #4. vowels are partitioned into 5 groups. Each group gets a different prime
%        number.The groups/codes are{A-2},{i,I-3},{u,U-5},{o,O-7},
%                                 {ow-11},{others-109}
%        The groups are formed such that if a consonant when combined with a
%        member of a group needs special handling then so with other vowels
%        in the same group.
% After syllable is formed some space is inserted(for readability)
\def\tlvowel#1#2#3#4{\leavevmode%
	     \ifnum\cbcode=0% stand alone vowel 
		 \setbox\syl=\hbox{\char#3}\cpivot=0.5\wd\syl\tlbmskip%
             \else          % vowel modifier
		 \votok={#2}\vmcode=#1\vowprime=#4%
			    \scrprime=\consprime\divide\scrprime by \vowprime
			 \multiply\scrprime by\vowprime%\consprime mod \vowprime
                          \ifnum\consprime=\scrprime%if yes C+V need specialcare
				 \csname tlcv\the\cbtok\the\votok\endcsname%else
				 \else\csname tlvm\the\votok\endcsname\fi%normal
                 \tlbmro{\ccpivot}\the\cctok\tlbmskip\tlreset
            \fi}%
\def\tlvoa{\tlvowel{0}{a}{\vaCODE}{109}}%
\def\tlvoA{\tlvowel{3}{A}{\vaaCODE}{2}}%
\def\tlvoi{\tlvowel{2}{i}{\veCODE}{3}}%
\def\tlvoI{\tlvowel{6}{I}{\veeCODE}{3}}%
\def\tlvou{\tlvowel{1}{u}{\vuCODE}{5}}%
\def\tlvoU{\tlvowel{8}{U}{\vuuCODE}{5}}%
\def\tlvorx{\tlvowel{11}{rx}{\vroCODE}{109}}%
\def\tlvoRx{\tlvowel{14}{Rx}{\vrooCODE}{109}}%
\def\tlvolx{\tlvowel{15}{lx}{\vloCODE}{109}}%
\def\tlvoLx{\tlvowel{16}{Lx}{\vlooCODE}{109}}%
\def\tlvoe{\tlvowel{7}{e}{\veaCODE}{109}}%
\def\tlvoE{\tlvowel{5}{E}{\veaeCODE}{109}}%
\def\tlvoy{\tlvowel{10}{y}{\viCODE}{109}}%
\def\tlvoo{\tlvowel{9}{o}{\vaoCODE}{7}}%
\def\tlvoO{\tlvowel{4}{O}{\vaooCODE}{7}}%
\def\tlvoow{\tlvowel{12}{ow}{\vauCODE}{11}}%
\def\tlvoX{\tlvowel{13}{X}{\vmpCODE}{109}}%
%*** macros to process consonant+vowel
\def\tlvma{\ifnum\checkflag=1\tlbms{\vmaCODE}{\vmaOFFSETA}\fi}%vowel modifier for a('check')
\def\tlvmA{\tlbms{\vmaaCODE}{\vmaaOFFSETA}}%        % A
\def\tlvmAa{\tlbms{\vmaaaCODE}{\vmaaaOFFSETA}}%        % A(special)
\def\tlvmAb{\tlbms{\vmaaaCODE}{\vmaaaOFFSETB}}%        % A(special)
\def\tlvmi{\tlbms{\vmeCODE}{\vmeOFFSETA}}%          % i
\def\tlvmI{\tlbms{\vmeeCODE}{\vmeeOFFSETA}}%        % I
\def\tlvmIa{\tlbms{\vmeeaCODE}{\vmeeaOFFSETA}}%        % I(special)
\def\tlvmIb{\tlbms{\vmeebCODE}{\vmeeaOFFSETA}}%        % I(special)
\def\tlvmu{\setbox\syl=\hbox{\copy\syl\char\vmuCODE}\tlvma}%    % u
\def\tlvmU{\setbox\syl=\hbox{\copy\syl\char\vmuuCODE}\tlvma}%    % U
\def\tlvmrx{\setbox\syl=\hbox{\copy\syl\char\vmroCODE}\tlvma}%    % rx
\def\tlvmRx{\setbox\syl=\hbox{\copy\syl\char\vmrooCODE}\tlvma}%    % Rx
\def\tlvmlx{\tlvma%                                               % lx
      \cctok=\expandafter{\the\cctok\tlvmlxb}}%  
\def\tlvmLx{\tlvma%                                               % Lx
      \cctok=\expandafter{\the\cctok\tlvmLxb}}%  
\def\tlvme{\tlbms{\vmeaCODE}{\vmeaOFFSETA}}%               % e
\def\tlvmE{\tlbms{\vmeaeCODE}{\vmeaeOFFSETA}}%              % E
\def\tlvmy{\tlbms{\vmeaCODE}{\vmeaOFFSETA}%                % y (two symbols )
      \cctok=\expandafter{\the\cctok\tlvmyb}}%  
\def\tlvmo{\tlbms{\vmaoCODE}{\vmaoOFFSETA}}%                 % o
\def\tlvmO{\tlbms{\vmaooCODE}{\vmaooOFFSETA}}%                % O 
\def\tlvmOa{\tlbms{\vmaooaCODE}{\vmaooaOFFSETA}}%             % O(special) 
\def\tlvmow{\tlbms{\vmauCODE}{\vmauOFFSETA}}%                 % ow
\def\tlvmowa{\tlbms{\vmauCODE}{\vmauOFFSETB}}%                % ow(p,ph,s,Sh)
\def\tlvmX{\tlbms{\vmpCODE}{\vmpOFFSETA}}%                        % X
\def\tlvmlxb{\tlbmsl{\vmloCODE}{\vmloOFFSETA}}% this symbol goes at the bottom of consonant
\def\tlvmLxb{\tlbmsl{\vmlooCODE}{\vmlooOFFSETA}}% this symbol goes at the bottom of consonant
\def\tlvmyb{\tlbmsl{\vmibCODE}{\vmibOFFSETA}}% this symbol goes at the bottom of consonant
\def\tlcv{\setbox\syl=\hbox{\char\cCODE}\cpivot=\OFFSET em\tlvm}%
% macros to handle special C+V situations
\def\tlcvku{\setbox\syl=\hbox{\char\cvkuCODE}}%
\def\tlcvkU{\setbox\syl=\hbox{\char\cvkuCODE}\cpivot=\cvkuOFFSETA em\tlvmAb}%
\def\tlcvkhA{\tlvmAa}%
\def\tlcvkhi{\setbox\syl=\hbox{\char\cvkheCODE}}%
\def\tlcvkhI{\setbox\syl=\hbox{\char\cvkheCODE}\cpivot=\cvkheOFFSETA em\tlvmIa}%
\def\tlcvkho{\setbox\syl=\hbox{\char\cvkhaoCODE}}%
\def\tlcvkhO{\setbox\syl=\hbox{\char\cvkhaoCODE}\cpivot=\cvkhaoOFFSETA em\tlvmOa}%
\def\tlcvgi{\setbox\syl=\hbox{\char\cvgeCODE}}%
\def\tlcvgI{\setbox\syl=\hbox{\char\cvgeCODE}\cpivot=\cvgeOFFSETA em\tlvmIb}%
\def\tlcvghA{\tlvma\tlbmro{\cbghaOFFSETC em}\tlvmA}%
\def\tlcvgho{\tlvme\setbox\syl=\hbox{\copy\syl\char\vmuCODE}}%
\def\tlcvghO{\tlvme\tlbmro{\cbghaOFFSETC em}\tlvmA}%
\def\tlcvghow{\tlvma\tlbmro{\cbghaOFFSETC em}\tlvmow}%
\def\tlcvNGA{\tlvmAa}%
\def\tlcvNGu{\setbox\syl=\hbox{\copy\syl\char\cvnguCODE}}%
\def\tlcvNGU{\setbox\syl=\hbox{\copy\syl\char\cvnguuCODE}}%
\def\tlcvci{\setbox\syl=\hbox{\char\cvcheCODE}}%
\def\tlcvcI{\setbox\syl=\hbox{\char\cvcheCODE}\cpivot=\cvcheOFFSETA em\tlvmIa}%
\def\tlcvco{\setbox\syl=\hbox{\char\cvchaoCODE}}%
\def\tlcvcO{\setbox\syl=\hbox{\char\cvchaoCODE}\cpivot=\cvchaoOFFSETA em\tlvmOa}%
\def\tlcvchi{\setbox\syl=\hbox{\char\cvccheCODE}}%
\def\tlcvchI{\setbox\syl=\hbox{\char\cvccheCODE}\cpivot=\cvccheOFFSETA em\tlvmIa}%
\def\tlcvcho{\setbox\syl=\hbox{\char\cvcchaoCODE}}%
\def\tlcvchO{\setbox\syl=\hbox{\char\cvcchaoCODE}\cpivot=\cvcchaoOFFSETA em\tlvmOa}%
\def\tlcvjA{\tlvmAa}%
\def\tlcvji{\setbox\syl=\hbox{\char\cvjeCODE}}%
\def\tlcvjI{\setbox\syl=\hbox{\char\cvjeCODE}\cpivot=\cvjeOFFSETA em\tlvmIa}%
\def\tlcvju{\setbox\syl=\hbox{\copy\syl\char\cvjuCODE}}%
\def\tlcvjU{\setbox\syl=\hbox{\copy\syl\char\cvjuuCODE}}%
\def\tlcvjo{\setbox\syl=\hbox{\char\cvjaoCODE}}%
\def\tlcvjO{\setbox\syl=\hbox{\char\cvjaoCODE}\cpivot=\cvjaoOFFSETA em\tlvmOa}%
\def\tlcvjhA{\tlvma\tlbmro{\cbjhaOFFSETC em}\tlvmA}%
\def\tlcvjho{\tlvme\setbox\syl=\hbox{\copy\syl\char\vmuCODE}}%
\def\tlcvjhO{\tlvme\tlbmro{\cbjhaOFFSETC em}\tlvmA}%
\def\tlcvjhow{\tlvma\tlbmro{\cbjhaOFFSETC em}\tlvmow}%
\def\tlcvnxA{\tlvmAa}%
\def\tlcvnxu{\setbox\syl=\hbox{\copy\syl\char\cvnguCODE}}%
\def\tlcvnxU{\setbox\syl=\hbox{\copy\syl\char\cvnguuCODE}}%
\def\tlcvTA{\tlvmAa}%
\def\tlcvTu{\cpivot=\cbttaOFFSETC em\tlbms{\vmuCODE}{0}}%
\def\tlcvTU{\cpivot=\cbttaOFFSETC em\tlbms{\vmuuCODE}{0}}%
\def\tlcvTo{\setbox\syl=\hbox{\char\cvttaoCODE}}%
\def\tlcvTO{\setbox\syl=\hbox{\char\cvttaoCODE}\cpivot=\cvttaoOFFSETA em\tlvmOa}%
\def\tlcvThi{\setbox\syl=\hbox{\char\cvttheCODE}}%
\def\tlcvThI{\setbox\syl=\hbox{\char\cvttheCODE}\cpivot=\cvttheOFFSETA em\tlvmIb}%
\def\tlcvDu{\setbox\syl=\hbox{\char\cvdduCODE}}%
\def\tlcvDU{\setbox\syl=\hbox{\char\cvdduCODE}\cpivot=\cvdduOFFSETA em\tlvmAb}%
\def\tlcvDhu{\setbox\syl=\hbox{\char\cvddhuCODE}}%
\def\tlcvDhU{\setbox\syl=\hbox{\char\cvddhuCODE}\cpivot=\cvddhuOFFSETA em\tlvmAb}%
\def\tlcvNA{\tlvmAa}%
\def\tlcvti{\setbox\syl=\hbox{\char\cvteCODE}}%
\def\tlcvtI{\setbox\syl=\hbox{\char\cvteCODE}\cpivot=\cvteOFFSETA em\tlvmIa}%
\def\tlcvto{\setbox\syl=\hbox{\char\cvtaoCODE}}%
\def\tlcvtO{\setbox\syl=\hbox{\char\cvtaoCODE}\cpivot=\cvtaoOFFSETA em\tlvmOa}%
\def\tlcvthi{\setbox\syl=\hbox{\char\cvtheCODE}}%
\def\tlcvthI{\setbox\syl=\hbox{\char\cvtheCODE}\cpivot=\cvtheOFFSETA em\tlvmIb}%
\def\tlcvdi{\setbox\syl=\hbox{\char\cvdeCODE}}%
\def\tlcvdI{\setbox\syl=\hbox{\char\cvdeCODE}\cpivot=\cvdeOFFSETA em\tlvmIb}%
\def\tlcvdhi{\setbox\syl=\hbox{\char\cvdheCODE}}%
\def\tlcvdhI{\setbox\syl=\hbox{\char\cvdheCODE}\cpivot=\cvdheOFFSETA em\tlvmIb}%
\def\tlcvni{\setbox\syl=\hbox{\char\cvneCODE}}%
\def\tlcvnI{\setbox\syl=\hbox{\char\cvneCODE}\cpivot=\cvneOFFSETA em\tlvmIa}%
\def\tlcvno{\setbox\syl=\hbox{\char\cvnaoCODE}}%
\def\tlcvnO{\setbox\syl=\hbox{\char\cvnaoCODE}\cpivot=\cvnaoOFFSETA em\tlvmOa}%
\def\tlcvpA{\setbox\syl=\hbox{\char\cvpaaCODE}\cpivot=\cvpaaOFFSETA em\tlvmA}%
\def\tlcvpu{\tlvma\tlbms{\cvpuCODE}{\cvpuOFFSETA}}%
\def\tlccvpu{\setbox\syl=\hbox{\copy\syl\char\ccvpuCODE}\tlvoa}%
\def\tlcvpU{\tlvma\tlbms{\cvpuuCODE}{\cvpuuOFFSETA}}%
\def\tlccvpU{\setbox\syl=\hbox{\copy\syl\char\ccvpuuCODE}\tlvoa}%
\def\tlcvpo{\setbox\syl=\hbox{\char\cvpaaCODE}\cpivot=\cvpaaOFFSETA em\tlvmo}%
\def\tlcvpO{\setbox\syl=\hbox{\char\cvpaaCODE}\cpivot=\cvpaaOFFSETA em\tlvmO}%
\def\tlcvpow{\setbox\syl=\hbox{\char\cvpaaCODE}\cpivot=\cvpaaOFFSETB em\tlvmowa}%
\def\tlcvphA{\setbox\syl=\hbox{\char\cvphaaCODE}\cpivot=\cvphaaOFFSETA em\tlvmA}%
\def\tlcvphu{\tlvma\tlbms{\cvpuCODE}{\cvpuOFFSETA}}%
\def\tlccvphu{\setbox\syl=\hbox{\copy\syl\char\ccvphuCODE}\tlvoa}%
\def\tlcvphU{\tlvma\tlbms{\cvpuuCODE}{\cvpuuOFFSETA}}%
\def\tlccvphU{\setbox\syl=\hbox{\copy\syl\char\ccvphuuCODE}\tlvoa}%
\def\tlcvpho{\setbox\syl=\hbox{\char\cvphaaCODE}\cpivot=\cvphaaOFFSETA em\tlvmo}%
\def\tlcvphO{\setbox\syl=\hbox{\char\cvphaaCODE}\cpivot=\cvphaaOFFSETA em\tlvmO}%
\def\tlcvphow{\setbox\syl=\hbox{\char\cvphaaCODE}\cpivot=\cvphaaOFFSETB em\tlvmowa}%
\def\tlcvbA{\tlvmAa}%
\def\tlcvbi{\setbox\syl=\hbox{\char\cvbeCODE}}%
\def\tlcvbI{\setbox\syl=\hbox{\char\cvbeCODE}\cpivot=\cvbeOFFSETA em\tlvmIa}%
\def\tlcvbo{\setbox\syl=\hbox{\char\cvbaoCODE}}%
\def\tlcvbO{\setbox\syl=\hbox{\char\cvbaoCODE}\cpivot=\cvbaoOFFSETA em\tlvmOa}%
\def\tlcvbhA{\tlvmAa}%
\def\tlcvbhi{\setbox\syl=\hbox{\char\cvbheCODE}}%
\def\tlcvbhI{\setbox\syl=\hbox{\char\cvbheCODE}\cpivot=\cvbheOFFSETA em\tlvmIa}%
\def\tlcvbho{\setbox\syl=\hbox{\char\cvbhaoCODE}}%
\def\tlcvbhO{\setbox\syl=\hbox{\char\cvbhaoCODE}\cpivot=\cvbhaoOFFSETA em\tlvmOa}%
\def\tlcvmA{\tlvma\tlbmro{\cbmaOFFSETC em}\tlvmA}%
\def\tlcvmi{\setbox\syl=\hbox{\char\cvveCODE\char\vmuCODE}}%
\def\tlcvmI{\setbox\syl=\hbox{\char\cvveCODE\char\vmuCODE}\cpivot=\cvveOFFSETA em\tlvmIa}%
\def\tlcvmo{\tlvme\setbox\syl=\hbox{\copy\syl\char\vmuCODE}}%
\def\tlcvmO{\tlvme\tlbmro{\cbmaOFFSETC em}\tlvmA}%
\def\tlcvmow{\tlvma\tlbmro{\cbmaOFFSETC em}\tlvmow}%
\def\tlcvYA{\tlvma\tlbmro{\cbyaOFFSETC em}\tlvmA}%
\def\tlcvYi{}%
\def\tlcvYI{\tlbmro{\cbyaOFFSETC em}\tlvmA}%
\def\tlcvYo{\tlvme\setbox\syl=\hbox{\copy\syl\char\vmuCODE}}%
\def\tlcvYO{\tlvme\tlbmro{\cbyaOFFSETC em}\tlvmA}%
\def\tlcvYow{\tlvma\tlbmro{\cbyaOFFSETC em}\tlvmow}%
\def\tlcvri{\setbox\syl=\hbox{\char\cvreCODE}}%
\def\tlcvrI{\setbox\syl=\hbox{\char\cvreCODE}\cpivot=\cvreOFFSETA em\tlvmIb}%
\def\tlcvRu{\cpivot=\cbrraOFFSETC em\tlbms{\vmuCODE}{0}}%
\def\tlcvRU{\cpivot=\cbrraOFFSETC em\tlbms{\vmuuCODE}{0}}%
\def\tlcvlA{\tlbms{\vmaaaCODE}{\vmaaaOFFSETB}}%
\def\tlcvli{\setbox\syl=\hbox{\char\cvleCODE}}%
\def\tlcvlI{\setbox\syl=\hbox{\char\cvleCODE}\cpivot=\cvleOFFSETA em\tlvmIa}%
\def\tlcvlu{\cpivot=\cblaOFFSETC em\tlbms{\vmuCODE}{0}}%
\def\tlcvlU{\cpivot=\cblaOFFSETC em\tlbms{\vmuuCODE}{0}}%
\def\tlcvlo{\setbox\syl=\hbox{\char\cvlaoCODE}}%
\def\tlcvlO{\setbox\syl=\hbox{\char\cvlaoCODE}\cpivot=\cvlaoOFFSETA em\tlvmOa}%
\def\tlcvLi{\setbox\syl=\hbox{\char\cvlleCODE}}%
\def\tlcvLI{\setbox\syl=\hbox{\char\cvlleCODE}\cpivot=\cvlleOFFSETA em\tlvmIa}%
\def\tlcvLu{\setbox\syl=\hbox{\char\cvlluCODE}}%
\def\tlcvLU{\setbox\syl=\hbox{\char\cvlluCODE}\cpivot=\cvlluOFFSETA em\tlvmAb}%
\def\tlcvLo{\setbox\syl=\hbox{\char\cvllaoCODE}}%
\def\tlcvLO{\setbox\syl=\hbox{\char\cvllaoCODE}\cpivot=\cvllaoOFFSETA em\tlvmOa}%
\def\tlcvvA{\tlvmAb}%
\def\tlcvvi{\setbox\syl=\hbox{\char\cvveCODE}}%
\def\tlcvvI{\setbox\syl=\hbox{\char\cvveCODE}\cpivot=\cvveOFFSETA em\tlvmIa}%
\def\tlcvvu{\tlvma\tlbms{\cvpuCODE}{\cvpuOFFSETA}}%
\def\tlcvvU{\tlvma\tlbms{\cvpuuCODE}{\cvpuuOFFSETA}}%
\def\tlcvvo{\setbox\syl=\hbox{\char\cvvaoCODE}}%
\def\tlcvvO{\setbox\syl=\hbox{\char\cvvaoCODE}\cpivot=\cvvaoOFFSETA em\tlvmOa}%
\def\tlcvSi{\setbox\syl=\hbox{\char\cvceCODE}}%
\def\tlcvSI{\setbox\syl=\hbox{\char\cvceCODE}\cpivot=\cvceOFFSETA em\tlvmIa}%
\def\tlcvSu{\tlvma\cpivot=\cbcaOFFSETC em\tlbms{\vmuCODE}{0}}%
\def\tlcvSU{\tlvma\cpivot=\cbcaOFFSETC em\tlbms{\vmuuCODE}{0}}%
\def\tlcvSo{\setbox\syl=\hbox{\char\cvcaoCODE}}%
\def\tlcvSO{\setbox\syl=\hbox{\char\cvcaoCODE}\cpivot=\cvcaoOFFSETA em\tlvmOa}%
\def\tlcvShA{\setbox\syl=\hbox{\char\cvshaaCODE}\cpivot=\cvshaaOFFSETA em\tlvmA}%
\def\tlcvShu{\setbox\syl=\hbox{\char\cvshuCODE}}%
\def\tlcvShU{\setbox\syl=\hbox{\char\cvshuCODE}\cpivot=\cvshuOFFSETA em\tlvmAb}%
\def\tlcvSho{\setbox\syl=\hbox{\char\cvshaaCODE}\cpivot=\cvshaaOFFSETA em\tlvmo}%
\def\tlcvShO{\setbox\syl=\hbox{\char\cvshaaCODE}\cpivot=\cvshaaOFFSETA em\tlvmO}%
\def\tlcvShow{\setbox\syl=\hbox{\char\cvshaaCODE}\cpivot=\cvshaaOFFSETB em\tlvmowa}%
\def\tlcvsA{\setbox\syl=\hbox{\char\cvsaaCODE}\cpivot=\cvsaaOFFSETA em\tlvmA}%
\def\tlcvso{\setbox\syl=\hbox{\char\cvsaaCODE}\cpivot=\cvsaaOFFSETA em\tlvmo}%
\def\tlcvsO{\setbox\syl=\hbox{\char\cvsaaCODE}\cpivot=\cvsaaOFFSETA em\tlvmO}%
\def\tlcvsow{\setbox\syl=\hbox{\char\cvsaaCODE}\cpivot=\cvsaaOFFSETB em\tlvmowa}%
\def\tlcvHA{\setbox\syl=\hbox{\char\cvhaaCODE}}%
\def\tlcvHu{\tlvma\setbox\syl=\hbox{\copy\syl\char\cvjuCODE}}%
\def\tlcvHU{\tlvma\setbox\syl=\hbox{\copy\syl\char\cvjuuCODE}}%
%\def\tlcvHo{\tlvma\tlbmro{\cbhaOFFSETC em}\tlvmo}%
%\def\tlcvHO{\tlvma\tlbmro{\cbhaOFFSETC em}\tlvmO}%
\def\tlcvHo{\setbox\syl=\hbox{\char\cvhaoCODE}}%
\def\tlcvHO{\setbox\syl=\hbox{\char\cvhaoCODE}\cpivot=\cvhaoOFFSETA em\tlvmOa}%
\def\tlcvHow{\tlvma\tlbmro{\cbhaOFFSETC em}\tlvmow}%
\def\tlcvXhu{\setbox\syl=\hbox{\char\cvkshuCODE}}%
\def\tlcvXhU{\setbox\syl=\hbox{\char\cvkshuCODE}\cpivot=\cvkshuOFFSETA em\tlvmAb}%
%Following macros are useful for accessing special punctuation symbols,
%ubhayaksharas, accents (in other words everything not available
%otherwise).
\def\tluaas{\setbox\syl=\hbox{\lastbox\char\uasCODE}\box\syl}  % ardhasunna
\def\tluasu{\setbox\syl=\hbox{\lastbox\char\usCODE}\box\syl}  % sunna
\def\tluavi{\setbox\syl=\hbox{\lastbox\char\uviCODE}\box\syl} % visarga  
\def\tluaav{\setbox\syl=\hbox{\lastbox\char\uavCODE}\box\syl}  % ardhavisarga  
\def\tluaag{\setbox\syl=\hbox{\lastbox\char\uaCODE}\box\syl}    % avagraha  
\def\tlacuo{\setbox\syl=\lastbox\tlbmsr{\buoneCODE}{\buoneOFFSETA}\box\syl}   % udatta(one bar)
\def\tlacut{\setbox\syl=\lastbox\tlbmsr{\butwoCODE}{\butwoOFFSETA}\box\syl}   % udatta(two bars)
\def\tlacan{\setbox\syl=\lastbox\tlbmsl{\baCODE}{\baOFFSETA}\box\syl}   % anudatta
\def\tlcbdt{\setbox\syl=\lastbox\tlbmsr{\cbdtCODE}{\cbdtOFFSETA}\box\syl}   % dantyam
\def\tlcbnp{\setbox\syl=\hbox{\lastbox\char\cbnpCODE}\box\syl} % nakarapollu
\def\tlcbvg{\setbox\syl=\hbox{\lastbox\char\cbvgCODE}\box\syl} % valapalagilaka
\def\tlptob{\setbox\syl=\hbox{\lastbox\char\pbarCODE}\box\syl} % one bar (punctuation)
\def\tlpttb{\setbox\syl=\hbox{\lastbox\char\pdbarCODE}\box\syl} % two bars (punctuation)
%***
\input tlxlate %
\Q