% 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
