summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/itrans
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/itrans')
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kan12.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kan12b.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kan12nx.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kan12ny.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kan12s.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kan18.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kanbase.mf896
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kancodes.mf269
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kanlets.mf220
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kanmain.mf1298
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kanparam.mf181
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kanspc.mf52
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/kanvarna.mf2359
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tamilORG.mf2020
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tel12.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tel12b.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tel12nx.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tel12ny.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tel12s.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/tel18.mf7
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telbase.mf871
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telchrs1.mf1061
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telchrs2.mf506
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telchrs3.mf502
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telcodes.mf282
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telmode.mf21
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telparam.mf135
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telspc.mf52
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telugu.mf48
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/wntml12.mf77
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/wntml17.mf77
31 files changed, 11023 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kan12.mf b/Master/texmf-dist/fonts/source/public/itrans/kan12.mf
new file mode 100644
index 00000000000..77c76cd2d2d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kan12.mf
@@ -0,0 +1,7 @@
+%kan12%
+%input kanmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.5pt#;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kan12b.mf b/Master/texmf-dist/fonts/source/public/itrans/kan12b.mf
new file mode 100644
index 00000000000..24b4b8bcf21
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kan12b.mf
@@ -0,0 +1,7 @@
+%kan12b%
+%input kanmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.68pt#;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kan12nx.mf b/Master/texmf-dist/fonts/source/public/itrans/kan12nx.mf
new file mode 100644
index 00000000000..4c08daab7a8
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kan12nx.mf
@@ -0,0 +1,10 @@
+%kan12nx% non-uniform pen(x-axis)
+%input kanmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.74pt#;
+vardef special_kanpen =
+ pickup pencircle xscaled (pen_width/2) yscaled (pen_width);
+enddef;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kan12ny.mf b/Master/texmf-dist/fonts/source/public/itrans/kan12ny.mf
new file mode 100644
index 00000000000..7c75f240bd1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kan12ny.mf
@@ -0,0 +1,10 @@
+%kan12ny% non-uniform pen(y-axis)
+%input kanmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.65pt#;
+vardef special_kanpen =
+ pickup pencircle xscaled pen_width yscaled (pen_width/2);
+enddef;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kan12s.mf b/Master/texmf-dist/fonts/source/public/itrans/kan12s.mf
new file mode 100644
index 00000000000..a06fd7485a8
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kan12s.mf
@@ -0,0 +1,7 @@
+%kan12s%
+%input kanmode;
+font_size 12pt#;
+slant:=1/4;
+pen_width#:=0.61pt#;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kan18.mf b/Master/texmf-dist/fonts/source/public/itrans/kan18.mf
new file mode 100644
index 00000000000..eaa54528774
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kan18.mf
@@ -0,0 +1,7 @@
+%kan18%
+%input kanmode;
+font_size 18pt#;
+slant:=0;
+pen_width#:=0.86pt#;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kanbase.mf b/Master/texmf-dist/fonts/source/public/itrans/kanbase.mf
new file mode 100644
index 00000000000..8aab7aeb8cf
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kanbase.mf
@@ -0,0 +1,896 @@
+% This file is part of the KannadaTeX Software Package.
+%Copyright (c) 1991 G.S. Jagadeesh & Venkatesh. Gopinath.
+%
+%Author: Modified from TeluguTex by, GS. Jagadeesh.
+%The KannadaTeX 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 KannadaTeX Software Package
+%General Public License for full details.
+%
+%Everyone is granted permission to copy, modify and redistribute
+%the KannadaTeX Software Package, but only under the conditions described in the
+%KannadaTeX Software Package General Public License. A copy of this license is
+%supposed to have been given to you along with KannadaTeX 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.
+%%%%%
+
+% This file contains several macros. These are used for setting
+% up the environment and character generation. Before you change
+% anything in this file you should be very clear about the impact
+% of the change.
+%
+ % when testing is false all symbols in the font are
+ % generated automatically else when testing is true
+ % only selected symbols will be generated.
+
+
+if unknown testing:boolean testing; testing:=false; fi
+showstopping := 1; % for debugging only
+let kanchar=\;
+let generate=input;
+let sketch=draw;
+let pos=penpos;
+let stop=bye;
+string tl_symname,tl_stra,tl_strb,tl_strc,tl_strw,tl_strx,tl_stry;
+ % contains the name of the symbol being created
+tl_symname:=""; % used for creating substitute commands on log file
+tl_stra:="OFFSETA{"; tl_strb:="OFFSETB{"; tl_strc:="OFFSETC{";
+tl_strw:="CODE{";
+tl_strx:="\def\";tl_stry:="}%";
+
+
+if testing:
+ %To test different characters use following definitions of
+ % stest and etest.
+ def stest (text s) =
+ quote def s =
+ enddef;
+ let etest=enddef;
+else:
+ %To generate all the characters use following definitions of
+ % stest and etest.
+ def stest (text s) =
+ tl_symname := str s;% symbol name - used in various messages
+ enddef;
+ let etest=;;
+fi;
+
+let ee:=end;
+
+% We should be very careful about implications of currenttransform
+% (particularly 'slanted' transform). When a path is drawn/filled
+% currenttransform is applied. When a transform is applied to
+% currentpicture, the transform is really applied to slanted (or
+% whatever currenttransform is) path.
+def font_setup =
+ let adjust_fit = normal_adjust_fit;
+ currenttransform := currenttransform slanted slant;
+ define_pixels(u,v,uh,asc_height,des_depth,x_height);
+ define_pixels(pen_width,ul,ur,em_width);
+
+ define_pixels(pen_thick,ul,ur,em_width);
+
+ define_pixels(bot_depth,top_height);
+ define_pixels(fig_height,kfig_height,kfig_width);
+ define_pixels(ascunit,vmwidth);
+ define_pixels(top_accent,bot_accent);
+ define_pixels(bot_cc_ceiling,bot_cc_floor,bot_cc_width,ccwidth);
+ define_pixels(c_height,w_height,j_height);
+ define_pixels(asc_height1,asc_height2);
+ define_pixels(dot_radius,wedge_height,wedge_depth);
+ define_pixels(half_plus_width,sc_height);
+
+ define_pixels(v_a_width,v_e_width,v_u_width, v_uu_width);
+ define_pixels(v_ro_width,v_ea_width,v_i_width);
+
+ define_pixels(vm_a_width,vm_aa_width,vm_e_width,vm_ee_width,vm_e_height1);
+ define_pixels(vm_e_height2,vm_e_heightx,vm_e_heightj, vm_u_width, vm_uu_width);
+ define_pixels(vm_ro_width,vm_y_width,vm_bar_width, vm_ao_width,vm_aoo_width);
+ define_pixels(vm_ea_width, vm_ea_height, vm_ea1_width, vm_ah_height, vm_ah_width, vm_au_width);
+
+ define_pixels(cb_ka_width,cb_kha_width,cb_ga_width,cb_cha_width);
+ define_pixels(cb_ja_width,cb_tta_width,cb_nna_width);
+ define_pixels(cb_ta_width,cb_da_width,cb_na_width);
+ define_pixels(cb_ba_width,cb_ya_width,cb_ra_width, cb_rra_width);
+ define_pixels(cb_la_width,cb_lla_width,cb_pa_width,cb_ca_width);
+ define_pixels(cb_sha_width,cb_ksha_width);
+ define_pixels(cb_ksha_depth);
+ define_pixels(cb_np_width,cb_vg_width, cb_ha_width);
+
+ define_pixels(cv_pu_width,cv_pu_depth);
+
+ define_pixels(p_comma_width);
+
+ %define pen
+ if unknown special_kanpen:
+ pickup pencircle scaled pen_width;
+ %pickup pencircle xscaled 1/2pt yscaled 1/3 rotated -35;
+ %pickup pencircle yscaled pen_width xscaled pen_thick rotated 30 ;
+ kanpen:=savepen;
+ else:
+ special_kanpen;
+ kanpen:=savepen;
+ fi;
+
+ %print titles if generating font
+ if unknown offsets_only:
+ tracingtitles:=1;
+ fi;
+enddef;
+
+newinternal l,r; %adjustment to spacing
+
+def normal_adjust_fit(expr left_adjustment,right_adjustment) =
+ l := -hround(left_adjustment*hppp);
+ interim xoffset := -l;
+ charwd := charwd + left_adjustment + right_adjustment;
+ r := l+hround(charwd*hppp) ;
+ w := r - hround(right_adjustment*hppp) ;
+enddef;
+
+def makebox(text rule) =
+ for y=0,asc_height,-des_depth,x_height,-bot_depth,
+ top_height,w_height,c_height,
+ j_height: rule((l,y)t_,(r,y)t_); % horizontal rules
+ endfor;
+ rule((0,h),(r+pen_width,h)); rule((0,-d),(r+pen_width,-d));%height,depth markers
+ for x=l,r:rule((x,-bot_depth)t_,(x,top_height)t_); % vertical
+ endfor;
+ for x=u*(1+floor(l/u)) step u until r-1:
+ rule((x,-bot_depth)t_,(x,top_height)t_);
+ endfor; % vertical lines at each u
+ if charic <> 0:
+ rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_));
+ fi % italic correction
+enddef;
+
+rulepen := pensquare;
+
+def begintchar(expr a,b,c,d,e,f,g) =
+ beginchar(a,b,c,d);
+ italcorr e;
+ if known offsets_only:
+ message tl_strx&tl_symname&tl_strw&decimal(a)&tl_stry;
+ fi;
+ numeric left_space,right_space,l_s,r_s;
+ l_s:=f; r_s:=g;
+ left_space:=hround(hppp*f); right_space:=hround(hppp*g);
+ pickup kanpen;
+ enddef;
+
+extra_endchar := extra_endchar&"w:=r-l;";
+
+def endtchar =
+ charwd:=w/hppp; charht:= h/vppp; chardp:= d/vppp;
+ adjust_fit(l_s,r_s);
+ penlabels(range 1 thru 20);
+ message "";
+ % If any special effects are needed then those should be
+ % defined as special_effects macro.
+ if known special_effects: special_effects; fi;
+ endchar;
+ enddef;
+
+% pivot_message macro is used to print offsets to certain points
+% in the symbol being generated. These offsets are used by syllable
+% building macros to allign vowel modifiers/consonant conjuncts.
+% Unlike in english where all symbols stand alone, in Kannada
+% various symbols in the font combine to form text.
+% For consonant bases two/three offsets are identified. One is used to place
+% vowel modifiers and the other is used to place consonant conjuncts(excluding
+% those that appear on side). Third offset is used in attaching vowel modifiers
+% in some special cases. Offsets have suffixes A,B and C.
+% Vowel modifiers, accents and consonant
+% conjuncts that appear above/below base consonant indicate one offset value.
+% Same macro works in all cases.
+% The messages are in the form of TeX macros.
+% The log file contains TeX macros mixed with other messages. Use
+% some pattern matching program like grep to eliminate all lines containing
+% not begining with a \ sign. Name this file tloffsets.
+% grep '^\\' xxxxx.log>tloffsets.tex
+% The offsets are in em units. So the offsets would be same for any designsize
+% and pen width combination.
+% Print the offsets only when offsets are being generated.
+if unknown offsets_only: % do not print offsets
+ def pivot_message (text t) =
+ enddef;
+else: %print offsets
+ def pivot_message (text t) =
+ numeric count,piv[],index;
+ % count indicates the number of arguments
+ count:=0;
+ for index=t: count:=count+1; piv[count]:=index; endfor;
+ if count=1:
+ message tl_strx&tl_symname&tl_stra&decimal((piv[1]+left_space)/em_width)&tl_stry;
+ elseif count=2:
+ message tl_strx&tl_symname&tl_stra&decimal((piv[1]+left_space)/em_width)&tl_stry;
+ message tl_strx&tl_symname&tl_strb&decimal((piv[2]+left_space)/em_width)&tl_stry;
+ else:
+ message tl_strx&tl_symname&tl_stra&decimal((piv[1]+left_space)/em_width)&tl_stry;
+ message tl_strx&tl_symname&tl_strb&decimal((piv[2]+left_space)/em_width)&tl_stry;
+ message tl_strx&tl_symname&tl_strc&decimal((piv[3]+left_space)/em_width)&tl_stry;
+
+ fi;
+ enddef;
+fi;%end of if unknown offsets
+
+def fill_dot(suffix $) =
+ z$t = (x$,y$+dot_radius);
+ z$l = (x$-dot_radius,y$);
+ z$b = (x$,y$-dot_radius);
+ z$r = (x$+dot_radius,y$);
+ path fill_dot_p;
+ fill_dot_p = z$t..z$l..z$b..z$r..cycle;
+ fill fill_dot_p;
+ penlabels($t,$l,$b,$r);
+ enddef;
+
+def fill_dotb(suffix $) =
+ z$t = (x$,y$+.75dot_radius);
+ z$l = (x$-.75dot_radius,y$);
+ z$b = (x$,y$-.75dot_radius);
+ z$r = (x$+.75dot_radius,y$);
+ path fill_dot_p;
+ fill_dot_p = z$t..z$l..z$b..z$r..cycle;
+ fill fill_dot_p;
+ penlabels($t,$l,$b,$r);
+ enddef;
+
+def lit_cir_form =
+ lft z61l = (0,c_height/2); top z61t = (c_height/2,c_height);
+ rt z61 = (c_height,c_height/2); bot z61b = (c_height/2,0);
+ path lit_cir_p;
+ lit_cir_p = z61..z61t..z61l..z61b..cycle;
+ sketch lit_cir_p;
+ penlabels(61t,61l,61b);
+ enddef;
+
+def barandhook_formk (suffix $)(expr bar_width,t) =
+ z$a=(x$+bar_width-u,y$); rt z$b=(x$a+u,y$-uh);
+ bot z$c =(x$b-u,y$-2uh); lft z$d=(x$b-2u,y$b);
+ top z$e=(x$a-u,y$); rt z$f=(x$b,y$+1.5uh);
+ top z$g=(x$a,y$f+uh); z$h=(x$d,y$f);
+path barandhook_p;
+barandhook_p= subpath(0,t) of (rt z$--z$a..z$b..z$c..z$d..z$e..z$f..z$g..z$h);
+sketch barandhook_p;
+penlabels($a,$b,$c,$d);
+enddef;
+
+def wedge(suffix $) =
+bot z$w=(x$,-wedge_depth);
+ path wedge_p;
+ wedge_p = z$--z$w;
+ sketch wedge_p;
+ penlabels($u,$v,$w,$x,$y);
+ enddef;
+
+
+def vm_hook_form (suffix $)(expr t) =
+ z$a = (x$,y$+1.5ascunit);
+ z$b = (x$+u,y$+3ascunit);
+ z$c = (x$+2u,y$+1.5ascunit);
+ sketch subpath (0,t) of (z$..z$a..z$b..z$c);
+ penlabels ($a,$b,$c);
+ h:=top y$b;
+enddef;
+
+ def v_a_form =
+ top z1=(1/4v_a_width,x_height);
+ z10=(x1-u,y1-uh); z11=(x1,y1-2(y1-y10));
+ lft z3=(0,2/3x_height); bot z4=(1/2v_a_width,0);
+ rt z5=(v_a_width,2/3x_height); top z6=(v_a_width-1.5u,x_height);
+ z7=(3.5/5x5,1/2x_height); z8=(1/4w,1/2x_height);
+ z12=(.65v_a_width,5/6x_height); rt z2=(v_a_width,1/2x_height);
+ enddef;
+
+def v_e_form =
+ lft z1=(0,j_height); top z2=(1/5v_e_width,x_height);
+ z3=(2/5v_e_width,1.2j_height); top z4=(3/5v_e_width,x_height);
+ rt z5=(v_e_width,1/2x_height); z6=(4/5v_e_width,1/5x_height);
+ bot z7=(1/2v_e_width,0); z8=(1/5v_e_width,1/4x_height);
+ z9=(1/2v_e_width,1/2x_height); rt z10=(v_e_width,-1/5des_depth);
+ path v_e_p;
+ v_e_p = z1..z2..tension 1.2..z3&z3..tension 1.2..z4..z5..z6..z7..z8..z9..z10;
+ sketch v_e_p;
+ enddef;
+
+def v_u_form =
+ z1=(v_u_width-1/2w_height,1/2w_height); z2=(v_u_width-u,w_height);
+ rt z3=(v_u_width,1/6x_height); bot z4=(3/4v_u_width,0);
+ z5=(1/2v_u_width,w_height); bot z6=(1/3v_u_width,0);
+ lft z7=(0,1/2x_height); top z8=(1/2v_u_width,x_height);
+ top z9=(v_u_width-w_height,x_height);
+path v_u_p;
+v_u_p=z1..z2..z3..z4..tension 1.2..z5&z5..tension 1.2..z6..z7..z8..z9;
+sketch v_u_p;
+ enddef;
+
+def v_lo_form =
+ lft z1=(0,j_height); top z2=(v_lo_width/5,x_height);
+ z3=(2/5v_lo_width,j_height); top z4=(3/5v_lo_width,x_height);
+ z5=(4/5v_lo_width,j_height); z6=(3/5v_lo_width,w_height);
+ bot z7=(4/5v_lo_width,0); rt z8=(v_lo_width,1/2x_height);
+ top z9=(9/10v_lo_width,x_height);
+ path v_lo_p;
+v_lo_p= z1..z2..z3&z3..z4..z5..z6..z7..z8..z9;
+sketch v_lo_p;
+ enddef;
+
+def v_ea_form =
+ lit_cir_form;
+ bot z2=(2/3v_ea_width,0); rt z3=(v_ea_width,1/3x_height);
+ z4=(2/3v_ea_width,4/5x_height);top z5=(1/3v_ea_width,x_height);
+sketch z1..z2..z3..z4..z5;
+ enddef;
+
+ def vm_a_form (suffix $) =
+ path vm_a_p ;
+ top lft z$a=(x$-2/5vm_a_width,asc_height1);
+ top rt z$b=(x$+3/5vm_a_width,asc_height);
+ z$c = z$;
+ vm_a_p = z$a..tension 6..z$c..tension 16..z$b;
+ sketch vm_a_p;
+ penlabels($a,$b,$c);
+ enddef;
+
+def vm_e_form =
+ lft z1 = (0,x_height+1.2ascunit);
+ top z2 = (1/2vm_e_width,x_height);
+ rt z3 = (vm_e_width,x_height+2ascunit);
+ lft z5 = (0,x_height+3ascunit);
+ z6 = (1/2vm_e_width,y5);
+ top z7=(1/2vm_e_width,vm_e_height1+ascunit);
+ sketch subpath (0.4,1) of z1{down}..{right}z2..z3..z7..z5..z6;
+ % hook can be attached at z7
+enddef;
+
+def vm_e_form_a (expr xcoord) =
+% used for vowel modifier e for some consonants (eg. khe, che, ne etc)
+% 999 was chosen arbitrarily. we needed something not used elsewhere!
+% same suffix should be used by vm_ee_form_a.
+ top z999=(xcoord,vm_e_height1); rt z999i=((lft x999)-1.8u,(y999+y999j)/2);
+ top z999j=(x999,asc_height1);
+ path vm_e_pa;
+ vm_e_pa=z999..z999i..z999j..cycle; h:= (top y999)+pen_width;
+ penlabels(z999,z999i,z999j);
+enddef;
+
+def vm_ee_form_a (expr xcoord) =
+% used for vowel modifier ee for some consonants (eg. khee, chee, nee etc)
+% 999 was chosen arbitrarily. we needed something not used elsewhere!
+% same suffix should be used by vm_e_form_a.
+ vm_e_form_a(xcoord); vm_hook_form(999,3);
+enddef;
+
+def vm_u_form (suffix $) =
+ bot z$a = (x$+vm_u_width/2,0);
+ rt z$b = (x$+vm_u_width,y$);
+ z$c = (x$+3/4vm_u_width,3/4x_height);
+ top z$d = (x$+.55vm_u_width,x_height);
+path vm_u_p;
+ vm_u_p=z$..z$a..z$b..z$c..z$d;
+ sketch vm_u_p;
+ penlabels($a,$b,$c,$d);
+ enddef;
+
+def vm_ro_form =
+ z1 = (1/3vm_ro_width,-1/2des_depth);
+ z2 = (1/2vm_ro_width,-1/2des_depth);
+ z3 = (1/3vm_ro_width,0);
+ lft z4 = (0,-1/2des_depth);
+ bot z5 = (1/2vm_ro_width,-des_depth);
+ rt z6 = (vm_ro_width,(y5+y7)/2);
+ top z7 = (1/2vm_ro_width,x_height);
+sketch z1..z2..z3..z4..z5..z6..z7;
+enddef;
+
+def vm_ea_form(suffix $) (expr bar_width) =
+ z$a=(5/7bar_width,y$);
+ z$b=(x$a,asc_height2);
+ lft z$c=(0,y$b);
+ rt z$d=(bar_width,(y$+y$b)/2);
+penlabels ($a,$b,$c,$d);
+ sketch z$c--z$b..z$d..z$a--z$;
+enddef;
+
+def vm_ao_form(suffix $)(expr x_offset) =
+ z$a = (1/6vm_ao_width+x_offset,x_height);
+ lft z$b = (0+x_offset,asc_height1);
+ z$c = (1/6vm_ao_width+x_offset,asc_height2);
+ z$d = (2/6vm_ao_width+x_offset,asc_height1);
+ z$e = (3/6vm_ao_width+x_offset,asc_height2);
+ z$f = (5/6vm_ao_width+x_offset,asc_height2);
+ rt z$g = (vm_ao_width+x_offset,1/2(asc_height1+asc_height2));
+ top z$h = (5/6vm_ao_width+x_offset,asc_height1);
+ z$i = (4/6vm_ao_width+x_offset,asc_height2);
+ top z$j = (5/6vm_ao_width+x_offset,asc_height);
+ top z$k = (vm_aoo_width+x_offset-1.5u,asc_height);
+ rt z$l = (vm_aoo_width+x_offset,asc_height2);
+ %rt z$l = (vm_aoo_width+x_offset,1/2(asc_height+asc_height2));
+ %rt z$k = (vm_ao_width+x_offset,1/2(asc_height+asc_height2));
+ path vm_ao_pa,vm_ao_pb;
+ vm_ao_pa = z$a..z$b..z$c..tension1.2..z$d;
+ vm_ao_pb= z$d..tension1.2..z$e..tension 1.8..z$f..z$g..z$h..z$i..z$j..tension 1.8..z$k..z$l;
+ w:= rt x$g; h:= top y$c;
+ penlabels ($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l);
+enddef;
+
+% b---------c--------------d
+% | |_|
+% $------a
+def vm_au_form (suffix $)(expr bar_width) = % see the above diagram
+ numeric na;
+ top z$e=z$;
+ z$a = (x$e+2/10(bar_width-u),y$e);
+ z1000 = (x$-u,asc_height2);
+ % 1000 was chosen arbitrarily
+ % we needed some suffix not used by any user of
+ % this macro
+ barandhook_form(1000,bar_width,5);
+ z$d=z1000a;
+ %next two statements solve for c
+ x$c = x$a;
+ z$c = whatever[z1000,z$d];
+ na:=x$c+(x1000a-x$c)/3; % used for alligning pa,pha,sha..
+ sketch z$e--z$a{right}..{left}z$c;
+ penlabels($a,$b,$c,$d,$e,1000);
+enddef;
+
+def cb_ka_form =
+rt x1=rt x5=cb_ka_width; y1=8/10x_height; y5=1/4x_height;
+x2=x4=x6=1/2cb_ka_width; top y2=x_height; y4=1/2x_height; bot y6=0;
+lft x3=lft x7=0; y3=3/4x_height; y7=x_height-y1;
+path cb_ka_p;
+%cb_ka_p=z7..z6..z5..z4..z3..z2..z1..cycle;
+% added a .. cycle to make a kannada "ka"
+cb_ka_p=z7..z6..z5..z4..z3..z2..z1..cycle;
+enddef;
+
+def cb_kha_form =
+z1=(4/15cb_kha_width,5/6x_height);z2=(2/15cb_kha_width,y1-uh);
+lft z3=(0,y1); top z4=(x6,x_height);
+z5=(5/12cb_kha_width,1/8x_height); bot z6=(1/4cb_kha_width,0);
+lft z7=(0,1/4x_height); z8=(1/4cb_kha_width,1/3x_height);
+bot z9=(3/4cb_kha_width,0); rt z10=(cb_kha_width,1/3x_height);
+top z11=(x9,x_height);
+path cb_kha_p;
+cb_kha_p=z1..z2..z3..z4..z5..z6..z7..z8..z9..z10..z11;
+sketch cb_kha_p;
+numeric a,b;
+(a,b)=(subpath (3,5) of cb_kha_p) intersectiontimes
+ subpath (6,9) of cb_kha_p;
+z15 = point a of (subpath (3,5) of cb_kha_p); wedge(15);
+enddef;
+
+def cb_ga_form =
+bot z1=(u,0); x5=cb_ga_width-x1; bot y5=0;
+y2=y4=1/3x_height; lft x2=0; rt x4=cb_ga_width;
+top z3=(1/2cb_ga_width,x_height);
+path cb_ga_p,cv_ge_p;
+ cb_ga_p=z1..z2..z3..z4..z5;
+ sketch cb_ga_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_ga_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_ga_width,vm_e_height2));
+ z30= point na of cb_ga_p;
+ (nc,nd)= cb_ga_p intersectiontimes
+ ((1/2cb_ga_width,vm_e_height2)--(cb_ga_width,vm_e_height2));
+ z32= point nc of cb_ga_p;
+ top z31=(1/2cb_ga_width,vm_e_height3);
+ cv_ge_p=z30..z31..z32;
+enddef;
+
+def cb_cha_form =
+ lft z1=(0,x_height/2); z2=(cb_cha_width/3,x_height/2);
+ z3=(cb_cha_width/6,w_height); bot z4=(cb_cha_width/4,0);
+z5=(cb_cha_width/2,w_height); bot z6=(3/4cb_cha_width,0);
+ rt z7=(cb_cha_width,w_height); top z8=(cb_cha_width/2,x_height);
+ path cb_cha_p;
+ cb_cha_p=z1--z2..z3..z4..tension1.2..z5&z5..tension1.2..z6..z7..z8;
+ sketch cb_cha_p;
+ enddef;
+
+def cb_ja_form =
+ lft z1 = (0,j_height); top z2 = (cb_ja_width/4,x_height);
+ z3 = (cb_ja_width/2,j_height); z4 = (cb_ja_width/4,x_height/2);
+ lft z5 = (0,w_height); bot z6 = (cb_ja_width/4,0);
+ z7 = (cb_ja_width/2,w_height); bot z8 = (3/4cb_ja_width,0);
+ rt z9 = (cb_ja_width,w_height);
+ %following are useful for defining a bowl at the top
+ bot lft z3w=top z3; z3x=(x8,y1); rt z3y=(w,5/6x_height);
+ top z3z=(4/5w,x_height);
+ path cb_ja_pa,cb_ja_pb;
+ cb_ja_pa=z1..z2..z3..z4..z5..z6..tension1.2..z7&z7..tension1.2..z8..z9;
+ cb_ja_pb=z3w..z3x..z3y..z3z;
+ sketch cb_ja_pa;
+ penlabels(3w,3x,3y,3z);
+ enddef;
+
+def cb_tta_form =
+ top z1=(1/4cb_tta_width,x_height);
+ y2=y6=1/2x_height;
+ lft x2=0; rt x6=cb_tta_width;
+ x3=x1; x5=cb_tta_width-x3;
+ bot y3=bot y5=0;
+ top z4=(1/2cb_tta_width,w_height);
+ top z7=(cb_tta_width-x1,x_height);
+ z11=(x1+1.5u,y1-1.45uh);
+ path cb_tta_p,cb_tta_pa,cb_tta_pb;
+ cb_tta_pb=z1..z2..z3..tension1.2..z4&z4..tension1.2..z5..z6..z7;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_tta_pb intersectiontimes
+ ((0,5/6x_height)--(1/2cb_tta_width,5/6x_height));
+ z8=point na of cb_tta_pb;
+ (nc,nd)= cb_tta_pb intersectiontimes
+ ((0.6cb_tta_width,w_height)--(cb_tta_width,w_height));
+ z20=point nc of cb_tta_pb;
+ z19=rt z20;
+ cb_tta_pa=bot z8..z11..z1;
+ cb_tta_p=cb_tta_pa..cb_tta_pb;
+ bot lft z18= z1;% used for placing a vertical line
+ enddef;
+
+def cb_nna_form =
+z1a=(1/3cb_nna_width,1/2sc_height);
+bot z1=(1/4cb_nna_width,0); lft z2=(0,1/4x_height);
+z3=(1/6cb_nna_width,1/2x_height); lft z4=(0,3/4x_height);
+top z5=(1/4cb_nna_width,x_height); z6=(1/2cb_nna_width,j_height);
+top z7=(5/8cb_nna_width,x_height); rt z8=(cb_nna_width,1/2x_height);
+bot z9=(2/3cb_nna_width,0); z10=(x9-1/2sc_height,sc_height);
+z11=(x9,3/2sc_height); z12=(x9+1/2sc_height,sc_height);
+ path cb_nna_p;
+cb_nna_p= z1a..z1..z2..z3&z3..z4..z5..z6&z6..z7..z8..z9..z10..z11..z12;
+sketch cb_nna_p;
+ penlabels(1a);
+enddef;
+
+def cb_ta_form =
+lft z1=(0,1/2x_height);
+z2=(x1+u,y1-uh); z3=(x1+2u,y1); z4=(x2,y1+uh);
+bot z5=(1/2cb_ta_width,0); rt z6=(cb_ta_width,1/2x_height);
+z7=(x6-u,y6+uh); z8=(x6-2u,y6); z9=(x7,y6-uh);
+top z10=(1/2cb_ta_width,x_height);
+ path cb_ta_p;
+ cb_ta_p = z1..z2..z3..z4..z1..z5..z6..z7..z8..z9..z6..{left}z10;
+enddef;
+
+def cb_da_form =
+ top z1=(1/2cb_da_width,x_height); lft z2=(0,w_height);
+ bot z3=(1/3cb_da_width,0);z4=(1/2cb_da_width,w_height);
+ bot z5=(2/3cb_da_width,0);rt z6=(cb_da_width,1/2x_height);
+ path cb_da_p,cv_de_p;
+ cb_da_p= z4..tension 1.2..z5..z6..z1..z2..z3..tension 1.2..z4;
+ sketch cb_da_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_da_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_da_width,vm_e_height2));
+ z30= point na of cb_da_p;
+ (nc,nd)= cb_da_p intersectiontimes
+ ((1/2cb_da_width,vm_e_height2)--(cb_da_width,vm_e_height2));
+ z32= point nc of cb_da_p;
+ top z31=(1/2cb_da_width,vm_e_height3);
+ cv_de_p=z30..z31..z32;
+ enddef;
+
+def cb_na_form =
+ bot lft z1=(0,0); lft z2=(0,1/2w_height);
+ z3=(1/3cb_na_width,w_height); bot z4=(2/3cb_na_width,0);
+ rt z5=(cb_na_width,1/3x_height); top z6=(1/2cb_na_width,x_height);
+ path cb_na_p;
+ cb_na_p=z1..z2..z3..z4..z5..z6;
+ enddef;
+
+def cb_ba_form =
+ lft z1 = (u/2,j_height); top z2 = (cb_ba_width/5,x_height);
+ z3 = (cb_ba_width/3,j_height); lft z4 = (0,w_height);
+ bot z5 = (cb_ba_width/4,0); bot z6 = (cb_ba_width/2,w_height);
+ bot z7 = (3/4cb_ba_width,0);
+ rt z8 = (cb_ba_width,w_height); %z8 contact point
+ top z9 = (2/3cb_ba_width,x_height); % z9 another contact point
+ path cb_ba_p;
+ cb_ba_p = z1..z2..z3..z4..z5..tension 1.2..z6&z6..tension 1.2..z7..z8..z9;
+ sketch cb_ba_p;
+ enddef;
+
+def cb_ya_form =
+ lft z1 = (0,2/5x_height);
+ top z2 = (3/10cb_ya_width,8/10x_height);
+ rt z3 = (3/5cb_ya_width,y1);
+ bot z4 = (x2,0);
+ bot z5 = (4/5cb_ya_width,0);
+ rt z6 = (cb_ya_width,w_height);
+ z7 = ((x5+x6)/2,7.3/10x_height);
+ top z8 = (9/20cb_ya_width,x_height);
+enddef;
+
+def cb_ra_form =
+ top z1=(cb_ra_width/2,x_height);
+ lft z2 = (0,w_height);
+ bot z3 = (cb_ra_width/2,0);
+ rt z4 = (cb_ra_width,y2);
+ path cb_ra_p,cv_re_p;
+ cb_ra_p = z1..z2..z3..z4..cycle;
+ sketch cb_ra_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_ra_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_ra_width,vm_e_height2));
+ z30= point na of cb_ra_p;
+ (nc,nd)= cb_ra_p intersectiontimes
+ ((1/2cb_ra_width,vm_e_height2)--(cb_ra_width,vm_e_height2));
+ z32= point nc of cb_ra_p;
+ top z31=(1/2cb_ra_width,vm_e_height3);
+ cv_re_p=z30..z31..z32;
+ enddef;
+
+def cb_rra_form =
+cb_tta_form;
+z14=(cb_tta_width-1.5x1,x_height-sc_height);
+z15=(x7,1/2x_height);z16=(x1,y15);
+ path cb_rra_p;
+ cb_rra_p= cb_tta_p..z14..z15--z16;
+ sketch cb_rra_p;
+enddef;
+
+def cb_la_form =
+top z1=(1/4cb_la_width,x_height);
+lft z2=(0,x_height/2); bot z3=(1/2cb_la_width,0);
+rt z4=(cb_la_width,y2); top z5=(cb_la_width-x1,x_height);
+z7=(x1+1.5u,2/3x_height);
+ path cb_la_pa,cb_la_pb,cb_la_p;
+ cb_la_pb=z1..z2..z3..z4..z5;
+z6=point 0.35 of cb_la_pb;
+ cb_la_pa= bot rt z6..z7..z1;
+ cb_la_p=cb_la_pa..cb_la_pb;
+% z8 is useful for la+u and la+uu
+numeric na,nb;
+(na,nb)=cb_la_pb intersectiontimes
+ ((cb_la_width/2,w_height)..(cb_la_width,w_height));
+z9=point na of cb_la_pb;
+z8=rt z9;
+enddef;
+
+def cb_lla_form =
+top z1=(cb_lla_width/2,w_height);
+bot z2 =(x1,0);
+z6=(1/3cb_lla_width,x_height-2uh); z3=(x6+u/2,y6-uh);
+z4=(x6,.6x_height); z5=(x6+u/2,y3); lft z7=(0,2/3x_height);
+bot z8=top z1; rt z9=(cb_lla_width,y7); top z10=(1/2cb_lla_width,x_height);
+path cb_lla_pa,cb_lla_pb;
+cb_lla_pa=z3..z4..z5..z6..z7..z8..z9..z10;
+cb_lla_pb=z1..z2..cycle;
+sketch cb_lla_pa;
+sketch cb_lla_pb;
+% z12 is useful for lla+u and lla+uu
+numeric na,nb;
+(na,nb)=cb_lla_pa intersectiontimes
+ ((cb_lla_width/2,x_height/2)..(cb_lla_width,x_height/2));
+z13=point na of cb_lla_pa;
+z12=rt z13;
+enddef;
+
+def cb_va_form =
+ lit_cir_form;
+ bot z62 = (3/5cb_pa_width,0); rt z63 = (cb_pa_width,w_height);
+ z64 = (7/8cb_pa_width,j_height); top lft z65 = (x1,x_height);
+path cb_va_p,cv_paa_p;
+cb_va_p=z61..z62..z63..z64..z65;
+top z20=(cb_pa_width/2,h);
+cv_paa_p=subpath(0,2) of cb_va_p{up}..z20;
+% z22 is useful for alligning au modifier
+numeric na,nb;
+(na,nb)=cv_paa_p intersectiontimes
+ ((cb_pa_width/2,asc_height2)..(cb_pa_width,asc_height2));
+z22=point na of cv_paa_p;
+ enddef;
+
+def cb_ca_form =
+lft z1=(0,1/2x_height); z2=(1/3cb_ca_width,6/8x_height);
+bot z3=(1/3cb_ca_width,0); z4=(3/4cb_ca_width,1/3x_height);
+rt z5=(cb_ca_width,2/3x_height); top z6=(1/2cb_ca_width,x_height);
+lft z7=(0,1/6x_height);
+path cb_ca_p,cb_ca_pa;
+cb_ca_p=z1..z2{right}..z4..z3..z7..z4..z5..z6;
+sketch cb_ca_p;
+% z10 is useful for ca+u and ca+uu
+cb_ca_pa=subpath(1,3) of cb_ca_p;
+numeric na,nb;
+(na,nb)=cb_ca_pa intersectiontimes
+ ((0,w_height)..(cb_ca_width,w_height));
+z11=point na of cb_ca_pa;
+z10=rt z11;
+enddef;
+
+def cb_ksha_form =
+ cb_ka_form;
+ top z11 = (1/5cb_ka_width,0);
+ lft z12 = (0,-1/2cb_ksha_depth);
+ bot z13 = (x11,-cb_ksha_depth);
+ z14 = (2/5cb_ka_width,-2/3cb_ksha_depth);
+ bot z15 = (3/5cb_ka_width,-cb_ksha_depth);
+ z16 = (4/5cb_ka_width,-1/2cb_ksha_depth);
+ top z17 = (x15,0);
+ bot rt z18 = (cb_ka_width,-cb_ksha_depth);
+ sketch z11..z12..z13..z14; sketch z14..z15..z16..z17;
+ sketch z16..z18;
+ enddef;
+
+
+def cc_clear =
+%erase all that is drawn so far.
+ clearit;
+ lft z99=(0,100);
+ left_spill := xpart(lft (z99 scaled cc_scale)) - xpart(lft z99);
+ bot z98=(100,0);
+ bot_spill := ypart(bot (z98 scaled cc_scale)) - ypart(bot z98);
+ top((z97 scaled cc_scale)
+ shifted (0,-bot_accent-(x_height*cc_scale))
+ shifted (-left_spill,-bot_spill))=
+ (w*cc_scale/2,x_height);
+enddef;
+
+def cc_transform(text t) =
+% used to obtain consonant conjuncts for some consonants and vowels lo&loo
+path cc_transformed_path;
+cc_transformed_path = t scaled cc_scale
+ shifted (0,-bot_accent-(x_height*cc_scale));
+sketch cc_transformed_path;
+enddef;
+
+def cc_my_transform(text t) =
+% used to obtain consonant conjuncts for some consonants and vowels lo&loo
+path cc_transformed_path;
+cc_transformed_path = t scaled cc_scale
+ shifted (0,-bot_accent-(x_height*cc_scale));
+sketch cc_transformed_path;
+enddef;
+
+def cc_f_transform(text t) =
+% used to obtain consonant conjuncts for some consonants and vowels lo&loo
+fill t scaled cc_scale
+ shifted (0,-bot_accent-(x_height*cc_scale));
+enddef;
+
+def cc_whd (expr hh,dd) =
+%this macro sets w, h and d for accents that appear below baseline.
+% for some consonant conjuncts that result from transforming
+% consonant bases the height is not zero (eg. cha, ba ,pa etc)
+% for such symbols hh should be 1 and for others hh should be 0.
+% Some consonant bases have wedges that hang below base line (eg. bha, pha
+% ddha etc. ). For these dd should be 1 and for others dd should be 0.
+%
+%When a picture is scaled, what really happens is the componant paths
+% are scaled and the picture is redrawn. Hence we need to adjust w,h and d.
+% Still consonant conjunct for nya needs special care( for d).
+w:=w*cc_scale-pen_width*cc_scale+pen_width;;
+h:=hh*x_height;
+d:=bot_accent+((x_height+(dd*wedge_depth))*cc_scale)+dd*bot_spill;
+% (x,y) slanted s shifted (a,b) is (x+sy+a,y+b) whereas
+% (x,y) shifted (a,b) slanted s is (x+sy+a+ bs,y+b). Hence we
+% need to add the correction 'bs'. 'bs' is -bot_spill*slant
+currentpicture:=currentpicture shifted
+ (-left_spill+((-bot_spill)*slant),-bot_spill);
+enddef;
+
+def cv_ngu_form =
+ z1=(0,j_height); z2=(cb_ja_width/4,j_height-uh#);
+ rt z3=(cb_ja_width/2,5/6x_height); top z4=(4/10cb_ja_width,x_height);
+ sketch z1..z2..z3..z4;
+enddef;
+
+def cv_ju_form =
+ z1=(0,5/6x_height); z2=(cb_ja_width/4,j_height);
+ rt z3=(cb_ja_width/2,y1); top z4=(4/10cb_ja_width,x_height);
+ sketch z1..z2..z3..z4;
+enddef;
+
+def cv_pu_form =
+ top lft z1=(0,c_height/2); bot z2=(cv_pu_width/2,-cv_pu_depth);
+ rt z3=(cv_pu_width,h/2); top z4=(cv_pu_width-2u,x_height);
+ sketch z1..z2..z3..z4;
+enddef;
+
+def dr_sixnine_form =
+ path dr_sixnine_p;
+ top rt z1 = (w,fig_height);
+ z2 = (w/2+u,y1-uh);
+ bot z4 = (w/2,0);
+ rt z5 = (w,x4);
+ z6 = (x4,x5-x7);
+ lft z7 = (0,y5);
+ dr_sixnine_p = z1..z2..z7..z4..z5..z6..z7;
+enddef;
+
+def cc_arkavattu=
+path dt_six_pa,dt_six_pb;
+ top z1=(w/5,h); lft z2=(0,3h/4); z3=(x1,h/2);
+ z4=(w/3,h/2); lft z5=(0,h/4); bot z6=(x1,0);
+ bot rt z7=(w,0);
+arka_pa= flex(z1,z2,z3)& z3--z4;
+arka_pb=flex(z3,z5,z6)& z6--z7;
+enddef;
+
+
+def p_comma_form =
+path p_comma_p;
+ z1 = (dot_radius,dot_radius);
+ rt z2 = (p_comma_width,0);
+ bot lft z3 = (x1-1/2dot_radius,-des_depth);
+fill_dot(1); p_comma_p= flex(z1,z2,z3);
+sketch p_comma_p;
+enddef;
+
+def p_bar_form =
+path p_bar_p;
+ bot lft z1 = (0,0);
+ top lft z2 = (0,x_height);
+p_bar_p= z1--z2;
+enddef;
+
+def p_slash_form =
+path p_slash_p;
+ bot lft z1 = (0,-des_depth);
+ top rt z2 = (6u,asc_height);
+p_slash_p= z1--z2;
+enddef;
+
+def p_lbracket_form = % square bracket
+path p_lbracket_p;
+ top lft z1 = (0,top_height);
+ bot lft z2 = (0,-bot_depth);
+ rt z3 = (w,y1);
+ rt z4 = (w,y2);
+p_lbracket_p=z3--z1--z2--z4;
+enddef;
+
+
+def p_rparen_form =
+path p_rparen_p;
+ top lft z1 = (0,top_height); bot lft z2 = (0,-bot_depth);
+ rt z3 = (w,(-d+h)/2);
+p_rparen_p= flex(z1,z3,z2);
+enddef;
+
+
+def p_lbrace_form =
+path p_lbrace_p;
+ top rt z1 = (w,h); lft z4 = (0,(h-d)/2);
+ z2 = (w/2,-d+7/8(h+d));
+ z3 = (x2,-d+5/8(h+d));
+p_lbrace_p= z1..z2..z3..z4;
+p_lbrace_p:=(p_lbrace_p reflectedabout (z4,z4+(w,0)) )..reverse(p_lbrace_p);
+enddef;
+
+
+def dk_five_form =
+ z1 = (.2w, .7h); lft z2 = (0, 3h/4);
+ top z3 = (1/4w, h) ; z4 = (.5w, .5h);
+ bot z5 = (1/4w, 0) ; lft z6 = (0, 1/4 h);
+ z6a = (.45w, .45h) ;
+ z7 = (.5w, .5h); z8 = (.95w, .8h) ;
+ top z9 = (.9w, .96h); z10 = (.6w, .8h) ;
+ rt z11 = (w, 1/4h) ; bot z12 = (.85w, 0) ;
+ sketch z1..z2..z3..z4..z5..z6..tension 1.3..z7..z8..z9..z10..z11..tension 1.2..z12;
+enddef;
+
+def dk_six_form =
+ lft top z1 = (.05w, h); lft z2 = (.12w, .8h);
+ z3 = (.25w, .45h); z4 = (x3, .65h) ;
+ z4a = (.4w, (y3+y4)/2);
+ lft z5 = (0, .25h) ; bot z6 = (.25w, 0) ;
+ rt bot z7 = (w, 0) ;
+ sketch z1..z2..z3..z4a..z4..tension 1.2..z5...z6--z7 ;
+
+enddef;
+
+def cb_dollar_form =
+ rt x1=rt x5=cb_ka_width; y1=8/10x_height; y5=1/4x_height;
+ x2=x4=x6=1/2cb_ka_width; top y2=x_height; y4=1/2x_height; bot y6=0;
+ lft x3=lft x7=0; y3=3/4x_height; y7=x_height-y1;
+ path dol_p;
+ dol_p = z1..z2..z3..z4..z5..z6..z7;
+enddef;
+
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kancodes.mf b/Master/texmf-dist/fonts/source/public/itrans/kancodes.mf
new file mode 100644
index 00000000000..c5a1d2c71f5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kancodes.mf
@@ -0,0 +1,269 @@
+% This file is part of the KannadaTeX Software Package.
+%Copyright (c) 1991 G.S. Jagadeesh & Venkatesh. Gopinath.
+%
+%Author: Modified from TeluguTex by, GS. Jagadeesh. & Venkatesh Gopinath.
+%The KannadaTeX 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 KannadaTeX Software Package
+%General Public License for full details.
+%
+%Everyone is granted permission to copy, modify and redistribute
+%the KannadaTeX Software Package, but only under the conditions described in the
+%KannadaTeX Software Package General Public License. A copy of this license is
+%supposed to have been given to you along with KannadaTeX 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.
+%%%%%
+
+% This file contains codes to determine where various symbols
+% are placed in the font. The symbols that are also part of ASCII
+% character set are placed at the same location as in ASCII code.
+% Any revision of this file MUST maintain this assignment.
+% All kannada digits are given contiguous codes in the order
+% 0,1,2,3,4,5,6,7,8,9. Any revision of this file MUST maintain
+% this property.
+%
+% vowels
+
+v_a_code := oct"027";
+v_aa_code := v_a_code +1;
+v_e_code := v_aa_code +1;
+v_ee_code := v_e_code +1;
+v_u_code := v_ee_code +1;
+v_uu_code := v_u_code +1;
+v_ro_code := v_uu_code +1;
+v_roo_code := v_ro_code +1;
+v_ea_code := v_roo_code +1;
+v_eae_code := v_ea_code +1;
+v_i_code := oct"101" ;
+v_ao_code := v_i_code +1;
+v_aoo_code := v_ao_code +1;
+v_au_code := v_aoo_code +1;
+
+% vowel modifiers
+%vm_a_code := v_au_code +1;
+vm_a_code := oct"200";
+vm_aa_code := vm_a_code +1;
+vm_ah_code := vm_aa_code +1;
+vm_e_code := vm_ah_code +1;
+vm_ee_code := vm_e_code +1;
+vm_u_code := vm_ee_code +1;
+vm_uu_code := vm_u_code +1;
+vm_ro_code := vm_uu_code +1;
+vm_roo_code := vm_ro_code +1;
+vm_ea_code := vm_roo_code +1;
+vm_ea1_code := vm_ea_code +1;
+vm_y_code := vm_ea1_code +1;
+vm_au_code := vm_y_code +1;
+vm_p_code := vm_au_code +1;
+
+% Consonant bases
+%cb_ka_code := vm_p_code +1;
+cb_ka_code := v_au_code +1;
+cb_kha_code := cb_ka_code +1;
+cb_ga_code := cb_kha_code +1;
+cb_gha_code := cb_ga_code +1;
+cb_nga_code := cb_gha_code +1;
+cb_cha_code := cb_nga_code +1;
+cb_ccha_code := cb_cha_code +1;
+cb_ja_code := cb_ccha_code +1;
+cb_jha_code := cb_ja_code +1;
+cb_nya_code := cb_jha_code +1;
+cb_tta_code := cb_nya_code +1;
+cb_ttha_code := cb_tta_code +1;
+cb_dda_code := cb_ttha_code +1;
+cb_ddha_code := cb_dda_code +1;
+cb_nna_code := cb_ddha_code +1;
+cb_ta_code := cb_nna_code +1;
+cb_tha_code := cb_ta_code +1;
+cb_da_code := cb_tha_code +1;
+cb_dha_code := cb_da_code +1;
+cb_na_code := cb_dha_code +1;
+cb_naa_code := cb_na_code +1;
+cb_pa_code := cb_naa_code +1;
+
+cb_pha_code := oct"141";
+%cb_pha_code := cb_pa_code +1;
+cb_ba_code := cb_pha_code +1;
+cb_bha_code := cb_ba_code +1;
+cb_ma_code := cb_bha_code +1;
+cb_ya_code := cb_ma_code +1;
+cb_ra_code := cb_ya_code +1;
+cb_rra_code := cb_ra_code +1;
+cb_la_code := cb_rra_code +1;
+cb_lla_code := cb_la_code +1;
+cb_llaa_code := cb_lla_code +1;
+cb_va_code := cb_llaa_code +1;
+cb_ca_code := cb_va_code +1;
+cb_sha_code := cb_ca_code +1;
+cb_sa_code := cb_sha_code +1;
+cb_ha_code := cb_sa_code +1;
+cb_ksha_code := cb_ha_code +1;
+cb_dt_code := cb_ksha_code +1;
+cb_np_code := cb_dt_code +1;
+cb_vg_code := cb_np_code +1;
+cb_bb_code := cb_vg_code +1; % boxes(bb,bo,be)(used for demonstrating
+% vowel modifiers, cons. conjuncts)
+cb_bo_code := cb_bb_code +1;
+cb_be_code := cb_bo_code +1;
+
+% Consonant conjuncts
+cc_ka_code := vm_p_code;
+cc_kha_code := cc_ka_code +1;
+cc_ga_code := cc_kha_code +1;
+cc_gha_code := cc_ga_code +1;
+cc_nga_code := cc_gha_code +1;
+cc_cha_code := cc_nga_code +1;
+cc_ccha_code := cc_cha_code +1;
+cc_ja_code := cc_ccha_code +1;
+cc_jha_code := cc_ja_code +1;
+cc_nya_code := cc_jha_code +1;
+cc_tta_code := cc_nya_code +1;
+cc_ttha_code := cc_tta_code +1;
+cc_dda_code := cc_ttha_code +1;
+cc_ddha_code := cc_dda_code +1;
+cc_nna_code := cc_ddha_code +1;
+cc_ta_code := cc_nna_code +1;
+cc_tha_code := cc_ta_code +1;
+cc_da_code := cc_tha_code +1;
+cc_dha_code := cc_da_code +1;
+cc_na_code := cc_dha_code +1;
+cc_pa_code := cc_na_code +1;
+cc_pha_code := cc_pa_code +1;
+cc_ba_code := cc_pha_code +1;
+cc_bha_code := cc_ba_code +1;
+cc_ma_code := cc_bha_code +1;
+cc_ya_code := cc_ma_code +1;
+cc_ra_code := cc_ya_code +1;
+cc_rra_code := cc_ra_code +1;
+cc_ara_code := cc_rra_code +1;
+cc_la_code := cc_ara_code +1;
+cc_lla_code := cc_la_code +1;
+cc_va_code := cc_lla_code +1;
+cc_ca_code := cc_va_code +1;
+cc_sha_code := cc_ca_code +1;
+cc_sa_code := cc_sha_code +1;
+cc_ha_code := cc_sa_code +1;
+
+% bars used for transliteration of vedic hymns
+% and other symbols used for singing
+b_udatta1_code := oct"005";
+b_udatta2_code := b_udatta1_code +1;
+b_anudatta_code := b_udatta2_code +1;
+
+% Roman digits
+dr_zero_code := ASCII"0";
+dr_one_code := dr_zero_code +1;
+dr_two_code := dr_one_code +1;
+dr_three_code := dr_two_code +1;
+dr_four_code := dr_three_code +1;
+dr_five_code := dr_four_code +1;
+dr_six_code := dr_five_code +1;
+dr_seven_code := dr_six_code +1;
+dr_eight_code := dr_seven_code +1;
+dr_nine_code := dr_eight_code +1;
+
+% Kannada digits
+dk_zero_code := oct"015";
+dk_one_code := dk_zero_code +1;
+dk_two_code := dk_one_code +1;
+dk_three_code := dk_two_code +1;
+dk_four_code := dk_three_code +1;
+dk_five_code := dk_four_code +1;
+dk_six_code := dk_five_code +1;
+dk_seven_code := dk_six_code +1;
+dk_eight_code := dk_seven_code +1;
+dk_nine_code := dk_eight_code +1;
+
+% Punctuations
+p_period_code := ASCII".";
+p_comma_code := ASCII",";
+p_equal_code := ASCII"=";
+p_bar_code := oct"177";
+p_dbar_code := oct"000";
+p_colon_code := ASCII":";
+p_scolon_code := ASCII";";
+p_cquote_code := ASCII"'";
+p_cquotes_code := oct"001";
+p_oquote_code := ASCII"`";
+p_oquotes_code := oct"002";
+p_dquotes_code := ASCII ditto; %ASCII "
+p_slash_code := ASCII"/";
+p_hash_code := ASCII"#";
+p_excla_code := ASCII"!";
+p_asterisk_code := ASCII"*";
+p_plus_code := ASCII"+";
+p_lbracket_code := ASCII"[";
+p_rbracket_code := ASCII"]";
+p_lparen_code := ASCII"(";
+p_rparen_code := ASCII")";
+p_lbrace_code := ASCII"{";
+p_rbrace_code := ASCII"}";
+p_percent_code := ASCII"%";
+p_bslash_code := ASCII"\";
+p_lbar_code := ASCII"|";
+p_hyphen_code := ASCII"-";
+p_lhyphen_code := oct"003";
+p_vlhyphen_code := oct"004";
+p_ubar_code := ASCII"_";
+p_question_code := ASCII"?";
+p_dollar_code := ASCII"$";
+p_greater_code := ASCII">";
+p_less_code := ASCII"<";
+p_at_code := ASCII"@";
+p_tilde_code := ASCII"~";
+p_hat_code := ASCII"^";
+p_ampersand_code := ASCII"&";
+
+% Ubayaksharas
+u_sunna_code := oct"010" ;
+u_visarga_code := u_sunna_code +1;
+u_uss_code := u_visarga_code +1;
+%u_ardhavisarga_code := u_visarga_code +1;
+%u_avagraha_code := u_ardhavisarga_code +1;
+
+%some consonant+vowel's need special symbols. Next we will
+%define codes for these symbols.
+cv_ke_code := cc_ha_code+1;
+cv_khe_code := cv_ke_code+1;
+cv_ge_code := cv_khe_code+1;
+cv_ghe_code := cv_ge_code+1;
+cv_che_code := cv_ghe_code+1;
+cv_cche_code := cv_che_code+1;
+cv_je_code := cv_cche_code+1;
+cv_jhe_code := cv_je_code+1;
+cv_tte_code := cv_jhe_code+1;
+cv_tthe_code := cv_tte_code+1;
+cv_dde_code := cv_tthe_code+1;
+cv_ddhe_code := cv_dde_code+1;
+cv_te_code := cv_ddhe_code+1;
+cv_the_code := cv_te_code+1;
+cv_de_code := cv_the_code+1;
+cv_dhe_code := cv_de_code+1;
+cv_ne_code := cv_dhe_code+1;
+cv_pe_code := cv_ne_code+1;
+cv_phe_code := cv_pe_code+1;
+cv_be_code := cv_phe_code+1;
+cv_bhe_code := cv_be_code+1;
+cv_me_code := cv_bhe_code+1;
+cv_re_code := cv_me_code+1;
+cv_le_code := cv_re_code+1;
+cv_ye_code := cv_le_code+1;
+cv_lle_code := cv_ye_code+1;
+cv_ve_code := cv_lle_code+1;
+cv_vu_code := cv_ve_code+1;
+cv_vuu_code := cv_vu_code+1;
+cv_ce_code := cv_vuu_code+1;
+cv_she_code := cv_ce_code+1;
+cv_se_code := cv_she_code+1;
+cv_he_code := cv_se_code+1;
+cv_kshe_code := cv_he_code+1;
+
+
+
+% Some Special characters
+kn_spla_code := cv_kshe_code +1 ;
+kn_splb_code := kn_spla_code +1;
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kanlets.mf b/Master/texmf-dist/fonts/source/public/itrans/kanlets.mf
new file mode 100644
index 00000000000..3445e2ca81b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kanlets.mf
@@ -0,0 +1,220 @@
+% This file is part of the KannadaTeX Software Package.
+%Copyright (c) 1991 G.S. Jagadeesh & Venkatesh. Gopinath.
+%
+%Author: GS. Jagadeesh.
+%The KannadaTeX 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 KannadaTeX Software Package
+%General Public License for full details.
+%
+%Everyone is granted permission to copy, modify and redistribute
+%the KannadaTeX Software Package, but only under the conditions described in the
+%KannadaTeX Software Package General Public License. A copy of this license is
+%supposed to have been given to you along with KannadaTeX 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.
+%%%%%
+
+CBKA;
+CCKA;
+CBKHA;
+CCKHA;
+CBGA;
+CCGA;
+CBGHA ;
+CCGHA;
+CBNGA ;
+CCNGA ;
+CBCHA ;
+CCCHA ;
+CBCCHA;
+CCCCHA;
+CBJA ;
+CCJA ;
+CBJHA ;
+CCJHA ;
+CBNYA;
+CCNYA;
+CBTTA;
+CCTTA;
+CBTTHA;
+CCTTHA;
+CBDDA;
+CCDDA;
+CBDDHA;
+CCDDHA;
+CBNNA;
+CCNNA;
+CBTA;
+CCTA;
+CBTHA;
+CCTHA;
+CBDA;
+CCDA;
+CBDHA;
+CCDHA;
+CBNA;
+CBNAA;
+CCNA;
+CBPA;
+CCPA;
+CBPHA;
+CCPHA;
+CBBA;
+CCBA;
+CBBHA;
+CCBHA;
+CBMA;
+CCMA;
+CBYA;
+CCYA;
+CBRA ;
+CBRRA ;
+CCRA ;
+CCRRA ;
+CBLA ;
+CCLA ;
+CBVA;
+CVVE;
+CVVU;
+CVVUU;
+CCVA;
+CBCA;
+CCCA;
+CBSA ;
+CCSA ;
+CBHA ;
+CCHA ;
+CBLLA ;
+CBLLAA ;
+CCLLA ;
+CBSHA;
+CCSHA;
+CBKSHA ;
+VA ;
+VAA;
+VE;
+VEE ;
+VU;
+VUU;
+VRO;
+VROO;
+VEA;
+VEAE;
+VI ;
+VAO ;
+VAOO ;
+VAU;
+VMAH ;
+VMA ;
+VMAA ;
+VMEE;
+VMU ;
+VMUU ;
+VMRO ;
+VMROO ;
+VMEA ;
+VMEAA ;
+VMY ;
+VMAU;
+CVKE ;
+CVKHE ;
+CVGE;
+CVGHE;
+CVCHE ;
+CVCCHE;
+CVJE ;
+CVJHE ;
+CVTTE;
+CVTTHE ;
+CVDDE;
+CVDDHE;
+CVTE;
+CVTHE;
+CVDE;
+CVDHE;
+CVNE;
+CVPE;
+CVPHE;
+CVBE;
+CVBHE;
+CVME;
+CVYE;
+CVRE ;
+CVLE ;
+CVCE;
+CVSHE ;
+CVSE ;
+CVHE ;
+CVLLE ;
+CVKSHE ;
+VME;
+
+
+DRZERO
+DRONE
+DRTWO
+DRTHREE
+DRFOUR
+DRFIVE
+DRSIX
+DRSEVEN
+DREIGHT
+DRNINE
+DKZERO
+DKONE
+DKTWO
+DKTHREE
+DKFOUR
+DKFIVE
+DKSIX
+DKSEVEN
+DKEIGHT
+DKNINE
+PPERIOD
+PCOMMA
+PEQUAL
+PBAR
+PDBAR
+PCOLON
+PSCOLON
+PCQUOTE
+PCQUOTES
+POQUOTE
+POQUOTES
+PDQUOTES
+PSLASH
+PHASH
+PEXCLA
+PASTERISK
+PPLUS
+PLBRACKET
+PRBRACKET
+PLPAREN
+PRPAREN
+PLBRACE
+PRBRACE
+PPERCENT
+PBSLASH
+PLBAR
+PHYPHEN
+PLHYPHEN
+PVLHYPHEN
+PUBAR
+PQUESTION
+PDOLLAR
+PGREATER
+PLESS
+PAT
+PTILDE
+PHAT
+PAMPERSAND
+BOXA
+BOXB
+BOXC
+
+FROWN
+SMILE
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kanmain.mf b/Master/texmf-dist/fonts/source/public/itrans/kanmain.mf
new file mode 100644
index 00000000000..783a6b6d389
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kanmain.mf
@@ -0,0 +1,1298 @@
+% This file is part of the KannadaTeX Software Package.
+%Copyright (c) 1991 G.S. Jagadeesh & Venkatesh. Gopinath.
+%
+%Author: GS. Jagadeesh.
+%The KannadaTeX 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 KannadaTeX Software Package
+%General Public License for full details.
+%
+%Everyone is granted permission to copy, modify and redistribute
+%the KannadaTeX Software Package, but only under the conditions described in the
+%KannadaTeX Software Package General Public License. A copy of this license is
+%supposed to have been given to you along with KannadaTeX 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.
+%%%%%
+
+font_coding_scheme := "TeX text";
+
+%font_size 10pt#; slant:=0; pen_width#:=0.35pt#; penangle := 30 ;
+
+% avinash: June 1998: do not set mode here, that is set by MakeTeXPK
+% mode=localfont;
+
+input kancodes; % codes for kannada symbols
+input kanparam;
+
+font_coding_scheme := "TeX text";
+
+mode_setup; font_setup;
+
+
+def v_e_form =
+ lft z1=(0,j_height); top z2=(1/5v_e_width,x_height);
+ z3=(2/5v_e_width,1.2j_height); top z4=(3/5v_e_width,x_height);
+ rt z5=(v_e_width,1/2x_height); z6=(4/5v_e_width,1/5x_height);
+ bot z7=(1/2v_e_width,0); z8=(1/5v_e_width,1/4x_height);
+ z9=(1/2v_e_width,1/2x_height); rt z10=(v_e_width,-1/5des_depth);
+ path v_e_p;
+ v_e_p = z1..z2..tension 1.2..z3&z3..tension 1.2..z4..z5..z6..z7..z8..z9..z10;
+ sketch v_e_p;
+enddef;
+
+def place_lit_circ (suffix $) (expr sc) =
+ lit_cir_form;
+ erase sketch lit_cir_p;
+ path pl_lit_cir_p ;
+ transform t;
+ t=identity scaled sc shifted z$ ;
+ %sketch lit_cir_p transformed t;
+ pl_lit_cir_p = lit_cir_p transformed t;
+ sketch pl_lit_cir_p ;
+enddef ;
+
+def bar_form(suffix $) (expr width) =
+ path bar_p;
+ z$b= (x$+width-2u, y$);
+ bar_p = z$--z$b;
+ sketch bar_p;
+enddef;
+
+def bar_forma(expr width) =
+ path bar_pa;
+ z300=rt bot (0,x_height); z301= bot(width-2u, x_height);
+ bar_pa=z300--z301;
+ sketch bar_pa;
+enddef;
+
+def vmfa_form(suffix $) = % tale-kattu
+ path bar_p;
+ z$c= (x$+1.4u, y$);
+ top z$d= (x$c+.5u, y$+2.5u);
+ bar_p = z$--z$c{z$c-z$}..z$d;
+ sketch bar_p;
+enddef;
+
+def vm_aa_form =
+ top z1 = (0+u,x_height);
+ top z2 = (vm_aa_width-2u,x_height);
+ rt z3 = (vm_aa_width, 1/2y1);
+ bot z4 = (x2, 0);
+ z5 = (x2-x1, y4+.1y1);
+ z6 = (x2-1/4x1, y4+.2y1);
+ z7 = (x2-1/8x1, y4+.1y1);
+ sketch z1..tension 7..z2..tension 1.8..z3..z4..z5..z6..z7;
+ flop(4);
+enddef;
+
+def vmfaa_form(suffix $) = % tale-a ile.
+ top z1a = (x$+0,x_height);
+ z1b = (x$+4.2u,y1a);
+ rt z1c = (x1b+2u, .5y1a);
+ bot z1d = (x1b-.4u, 0);
+ bot z1e = (x1d, 1.5u);
+ z1f = (x1e+.25u, y1e-.5u);
+
+ sketch z1a---z1b..tension 1.8..z1c..tension 1.2..z1d..z1e..z1f;
+ %sketch z1a..tension 10..z1b..tension 1.8..z1c..tension 1.2..z1d..z1e..z1f;
+ %sketch z1a; draw z1b; draw z1c; draw z1d; draw z1e; draw z1f; draw z1f;
+enddef;
+
+
+def vmfea_form(suffix $) = % tale-athwa
+ path bar_p;
+ z$c= (x$+1.5u, y$);
+ z$d= (x$c+.5u, y$+2.5u);
+ z$e= (x$+1u, y$+1.5u);
+ z$f= (x$+1.5u, y$e-.4u);
+ bar_p = z$---z$c{z$c-z$}..z$d..z$e..z$f;
+ sketch bar_p;
+enddef;
+
+def vmah_form(suffix $) = % tale-ardha akshara
+ path bar_p;
+ z$c= (x$+1.2u, y$);
+ z$cc= (x$c+1.5u, y$);
+ z$d= (x$cc-.75u, y$-1u);
+ %z$e= (x$+2.75u, y$+1.25u); % adjust if you want it..
+ z$e= (x$+3u, y$+1.5u);
+ bar_p = z$--z$c..z$cc{dir 2}..z$d..tension 1.4..z$e;
+ sketch bar_p;
+enddef;
+
+def cb_ka_form =
+ path cb_ka_pa, cb_ka_pb, cb_ka_pc;
+ rt top z1=(0.5cb_ka_width, 0.75x_height); lft z2=(0, 3/8x_height);
+ bot z3=(.5cb_ka_width, 0);
+ rt z4=(cb_ka_width, 3/8x_height);
+ lft z5=(0, 0.75x_height); rt z6=(cb_ka_width, .75x_height);
+ top z7=(0.5cb_ka_width, 0.75x_height);
+ top z8=(0.55cb_ka_width, x_height);
+ path cb_ka_p;
+ cb_ka_pa = z1..z2..z3..z4..cycle;
+ cb_ka_pb = z5--z6;
+ cb_ka_pc = z7..{dir 125}z8;
+ sketch cb_ka_pa;
+ sketch cb_ka_pb;
+ sketch cb_ka_pc;
+ lft top z0 = (0, x_height);
+ bar_forma(cb_ka_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %bar_form(0,cb_ka_width);
+
+ % to compute the joining point of "kombu for ka".
+ path inter;
+ inter = (1/2cb_ka_width, .3x_height)--(1.1cb_ka_width, .3x_height);
+ z400 = cb_ka_pa intersectionpoint inter;
+
+enddef;
+
+def cb_kha_form =
+ z1=(4/15cb_kha_width,5/6x_height);z2=(2/15cb_kha_width,y1-uh);
+ lft z3=(0,y1); top z4=(x6,x_height);
+ z5=(5/12cb_kha_width,1/8x_height); bot z6=(1/4cb_kha_width,0);
+ lft z7=(0,1/4x_height); z8=(1/4cb_kha_width,1/3x_height);
+ bot z9=(3/4cb_kha_width,0); rt z10=(cb_kha_width,1/3x_height);
+ top z11=(x9,x_height);
+ path cb_kha_p;
+ cb_kha_p=z1..z2..z3..z4..z5..z6..z7..z8..z9..z10..z11;
+ %sketch cb_kha_p;
+ z12 = lft z11;
+ %vmfaa_form(12) ;
+ %vmfea_form(12);
+
+ % to compute the joining point of "kombu for ka".
+ path inter;
+ inter = (.8cb_kha_width, .3x_height)--(1.1cb_kha_width, .3x_height);
+ z400 = cb_kha_p intersectionpoint inter;
+
+enddef;
+
+def cb_ga_form =
+ bot z1=(u,0); x5=cb_ga_width-x1; bot y5=0;
+ y2=y4=1/3x_height; lft x2=0; rt x4=cb_ga_width;
+ top z3=(1/2cb_ga_width,x_height);
+ path cb_ga_p, cv_ge_p, cb_ga_pt;
+ cb_ga_p=z1..z2..z3..z4..z5;
+ %sketch cb_ga_p;
+
+ % following is for vowel modifier "e".
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_ga_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_ga_width,vm_e_height2));
+ z30= point na of cb_ga_p;
+ top z31=(1/6cb_ga_width,.9vm_e_heightx);
+ %top z31=(1/2cb_ga_width,vm_e_heightx);
+ (nc,nd)= cb_ga_p intersectiontimes
+ ((1/2cb_ga_width,vm_e_height2)--(cb_ga_width,vm_e_height2));
+ z32= point nc of cb_ga_p;
+ cv_ge_p=z30..z31..tension1.2..z32;
+
+ % to compute the joining point of "kombu for ka".
+ path inter;
+ inter = (.8cb_ga_width, .3x_height)--(1.1cb_ga_width, .3x_height);
+ z400 = cb_ga_p intersectionpoint inter;
+
+enddef;
+
+% following macro is used for many derivatives of "pa" like gha, va etc.,
+def cb_pa_form =
+ top z41=0.85(1/8cb_pa_width+1/2u, 1/4x_height+1/4u);
+ top z42=0.85(1/4cb_pa_width, 3/8x_height);
+ top z43=0.85(1/8cb_pa_width, 1/2x_height);
+ top z44=0.85(0, 3/8x_height);
+ bot z45=(1/4cb_pa_width, 0);
+ bot z46=(1/2cb_pa_width, 0.6w_height);
+ bot z47=(3/4cb_pa_width, 0);
+ rt top z48=(cb_pa_width, 1/2x_height);
+ rt z33=(0.9cb_pa_width, .85x_height) ;
+
+ path cb_pa_p,cb_paa_p;
+ cb_pa_p = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z33;
+
+
+ % to compute the joining point of "kombu for pa and its derivatives".
+ path inter;
+ inter = (.8cb_pa_width, .25x_height)--(1.1cb_pa_width, .25x_height);
+ z400 = cb_pa_p intersectionpoint inter;
+
+enddef;
+
+def vm_ghu_form (suffix $) =
+ numeric diff_ht;
+ numeric mx, my, mz;
+ diff_ht = x_height-y$;
+ bot z$x = (x$+vm_u_width/4,y$-1/9diff_ht);
+ rt z$y = (x$+vm_u_width/2,y$+1/2diff_ht);
+ top rt z$z = (x$+vm_u_width/3,y$+diff_ht-0.3u);
+ path vm_ghu_p;
+ vm_ghu_p=z$..z$x..z$y..z$z;
+ sketch vm_ghu_p;
+ %penlabels($aa,$bb,$cc,$d);
+enddef;
+
+def cb_cch_form =
+ path cb_ccha_pa, cb_ccha_pb, cb_ccha_pc;
+ numeric k_w, k_yo, k_h, k_xo;
+ k_w=1/4cb_ja_width; % Kondi width
+ k_xo=1/6cb_ja_width;
+ k_yo=3/4x_height;
+ k_h=1/4x_height;
+
+ top rt rt z1=(k_xo+1/3k_w, k_yo+1/2k_h);
+ rt top z2=(k_xo+1/2k_w, k_yo);
+ rt top z3=(k_xo+k_w, k_yo+1/2k_h);
+ rt top z4=(k_xo+1/2k_w,k_yo+k_h);
+
+ rt z5=(0.075cb_ja_width, 3/4x_height);
+
+ z6=(0, 1/2x_height);
+ bot z7=(1/4cb_ja_width, 0);
+ z8=(1/2cb_ja_width, .6w_height);
+ bot z9=(3/4cb_ja_width, 0);
+ rt z10=(cb_ja_width, 1/2x_height);
+ top z11=(0.80cb_ja_width, x_height);
+
+ cb_ccha_pa = z1..z2..z3..z4..z5..z6..z7..z8..z8..z9..z10..z11;
+ sketch cb_ccha_pa;
+ z12 = (x11-.5u, y11);
+
+ %vmfa_form(12); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(12) ;
+ %vmfea_form(12);
+ %bar_form(0,cb_ja_width);
+ %vm_au_form(12,w);
+
+ % to compute the joining point of "kombu for ka".
+ path inter;
+ inter = (.8cb_ja_width, .3x_height)--(1.1cb_ja_width, .3x_height);
+ z400 = cb_ccha_pa intersectionpoint inter;
+
+enddef ;
+
+
+def cb_ch_ja_base=
+ numeric j_offset;
+ j_offset = 0.08cb_ja_width;
+ lft z1 = (0,j_height); top z2 = (cb_ja_width/8,x_height);
+ z3 = (cb_ja_width/4+j_offset,j_height);
+ z4 = (cb_ja_width/8+j_offset,x_height/2);
+ lft z5 = (0,w_height); bot z6 = (cb_ja_width/8,0);
+ %z7 = (cb_ja_width/2,0.8w_height); bot z8 = (3/4cb_ja_width,0);
+ z7 = (cb_ja_width/2,0.8w_height); bot z8 = (.8cb_ja_width,0);
+enddef ;
+
+def cb_ja_form =
+
+ cb_ch_ja_base; % Defines some base points for ja, ch O etc.,
+ rt z9 = (cb_ja_width,w_height);
+ path cb_ja_pa,cb_ja_pb, cb_nga_p, cb_ja_pc, cb_ja_pe;
+ cb_ja_pa=z1..z2..z3..z4..z5..z6..tension1.15..z7&z7..tension1.2..z8..z9;
+
+ % to define BOWL for ja.
+ z40 = (0.2cb_ja_width, .9x_height); top z41=(.95cb_ja_width, x_height);
+ z60= (z40..z41) intersectionpoint cb_ja_pa ;
+ z50 = (1.4x3,0.8x_height);
+ cb_ja_pb=z60..z50..z41;
+
+ % to define BOWL for nga.
+ z20 = (0.2cb_ja_width, .8x_height); top z21=(.95cb_ja_width, .9x_height);
+ z30= (z20..z21) intersectionpoint cb_ja_pa ;
+ top z10 = (1.4x3,.95x_height);
+ cb_nga_p=z30..z10..z21;
+
+ z42= (x41, y41+1.5u) ;
+ z43= (x41-u, y42-.75u) ;
+ z44= (x41-.7u, y42-1.4u) ;
+ cb_ja_pe = z60..z50..z41..z42..z43..z44 ;
+ z35=(0.62cb_ja_width, y40-u) ;
+ cb_ja_pc = rt bot z35 ;
+ sketch cb_ja_pa;
+ %penlabels(3w,3x,3y,3z);
+
+ % for "ile" and "tale kattu"
+
+ z52=(x41-u, y41);
+ %vmfa_form(52); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(52) ;
+ %vmfea_form(52);
+ %bar_form(0,cb_ka_width);
+ %vm_au_form(52,w);
+
+ % to compute the joining point of "kombu for ka".
+ path inter;
+ inter = (.8cb_ja_width, .3x_height)--(1.1cb_ja_width, .3x_height);
+ z400 = cb_ja_pa intersectionpoint inter;
+
+ enddef;
+
+def cb_ch_form =
+ path cb_cha_pa, cb_cha_pb, cb_cha_pc;
+ cb_ch_ja_base;
+ rt rt z9 = (0.9cb_ja_width, .6x_height);
+ cb_cha_pa=z1..z2..z3..z4..z5..z6..tension1.2..z7&z7..tension1.15..z8..tension1.1..z9;
+ sketch cb_cha_pa;
+ y11 = y10 = y9; x10=cb_ja_width; x11=x9-(x10-x9);
+
+ top z12 = (x9, x_height);
+ cb_cha_pb = z10--z11;
+ cb_cha_pc = z9{dir 40}..z12;
+ sketch cb_cha_pb ;
+ sketch cb_cha_pc ;
+
+ z20 = (x12-.1u,y12) ;
+ %vmfa_form(20); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(20) ;
+ %vmfea_form(20);
+ %bar_form(0,cb_ka_width);
+ %vm_au_form(20,w);
+
+ % to compute the joining point of "kombu for ka".
+ path inter;
+ inter = (.8cb_ja_width, .3x_height)--(1.2cb_ja_width, .3x_height);
+ %sketch inter;
+ z400 = cb_cha_pa intersectionpoint inter;
+
+enddef ;
+
+def cb_nya_form=
+ v_e_form;
+ path cb_ny_pb;
+ z14= v_e_p intersectionpoint ((x4,.8x_height)--(w,.8x_height));
+ z15=z14;
+ z16=(v_e_width+half_plus_width, .9y14);
+ cb_ny_pb = z14{dir 60}..z16;
+ sketch cb_ny_pb;
+ z17=top(.6(x14+x16), x_height);
+ %pivot_message(x15c,x7);
+ %vmfa_form(17); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(17) ;
+ %vmfea_form(17);
+ %bar_form(0,cb_ka_width);
+ %vm_au_form(400,w);
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8v_e_width, .3x_height)--(1.1v_e_width, .3x_height);
+ z500 = v_e_p intersectionpoint inter;
+ z400=(x500+3u,y500);
+ %vm_u_form(400);
+
+enddef ;
+
+def cb_ta_form =
+ lft z1=(0,.35x_height); bot z2=(.55cb_ta_width, 0);
+ rt z3=(cb_ta_width, .35x_height); z4=(.55cb_ta_width, .55x_height);
+ rt z5=(.4cb_ta_width, .42x_height);
+ top z6=(.7cb_ta_width, .48x_height);
+ bot z7=(.75cb_ta_width, .68x_height);
+ bot z8=(.7cb_ta_width, .78x_height);
+ top z9=(.5cb_ta_width, x_height);
+
+ top z10 = (.4cb_ta_width, x_height) ;
+ z11 = (.41cb_ta_width, .8x_height) ;
+ z12 = (.5cb_ta_width, .85x_height) ;
+
+ path cb_ta_p, cb_te_p;
+ cb_ta_p = z1..z2..z3..z4..tension 1.2..z5..tension1.2..z6..z7..z8..z9;
+ cb_te_p = cb_ta_p softjoin z9..z10..z11..z12 ;
+ bar_forma(cb_ta_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_ta_width, .3x_height)--(1.1cb_ta_width, .3x_height);
+ z400 = cb_ta_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def cb_tta_form =
+ path cb_tta_p, cb_tta_pa, cb_tta_pe;
+ lft top z1=(0.12cb_tta_width,x_height);
+ lft top z2=(0.1cb_tta_width,x_height);
+ top z3=(0,.75x_height);
+ lft z4=(.15cb_tta_width, 0.43x_height);
+ lft z5=(.2cb_tta_width, 0.55x_height);
+ z6=(0, .25x_height);
+ bot z7=(1/4cb_tta_width, 0);
+
+ z8=(1/2cb_tta_width, 0.6w_height);%(wedge)
+
+ bot z9=(3/4cb_tta_width, 0);
+ lft z10=(cb_tta_width, 1/4x_height);
+
+ z11=(0.85cb_tta_width, 1/2x_height); %(wedge)
+ rt lft z12=(cb_tta_width, 3/4x_height);
+ rt top z13=(.9cb_tta_width, x_height);
+
+ %For consanant +e
+ z14=(.8cb_tta_width, .9x_height);
+ z15=(.89cb_tta_width, .8x_height);
+
+ %cb_tta_pa = z1..tension1.2..z2..z3..tension1.2..z4;
+ cb_tta_pa = z1..tension1.2..z2..z3..{curl 6.3}z4;
+ cb_tta_p = z4..z5..tension1.2..z6..z7
+ ..z8..z8..z9..z10..z11..z11..z12..z13;
+ %For consanant +e
+ cb_tta_pe = z4..z5..tension1.2..z6..z7
+ ..z8..z8..z9..z10..z11..z11..z12..z13..z14..z15;
+ sketch cb_tta_pa ;sketch cb_tta_p;
+ z20=(x13-u,y13);
+
+ %vmfa_form(20); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(20) ;
+ %vmfea_form(20);
+ %bar_form(0,cb_ka_width);
+ %vm_au_form(20,w);
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_tta_width, .3x_height)--(1.1cb_tta_width, .3x_height);
+ z400 = cb_tta_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+
+def cb_da_form =
+ top z1=(1/2cb_da_width,x_height); lft z2=(0,w_height);
+ bot z3=(1/3cb_da_width,0);z4=(1/2cb_da_width,.6w_height);
+ bot z5=(2/3cb_da_width,0);rt z6=(cb_da_width,1/2x_height);
+ path cb_da_p,cv_de_p;
+ cb_da_p= z4..tension 1.2..z5..z6..z1..z2..z3..tension 1.2..z4;
+ sketch cb_da_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_da_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_da_width,vm_e_height2));
+ z30= point na of cb_da_p;
+ (nc,nd)= cb_da_p intersectiontimes
+ ((1/2cb_da_width,vm_e_height2)--(cb_da_width,vm_e_height2));
+ z32= point nc of cb_da_p;
+ top z31=(1/2cb_da_width,.95vm_e_heightx);
+ cv_de_p=z30{curl 3}..z31..z32;
+ bar_forma(cb_da_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_da_width, .3x_height)--(1.1cb_da_width, .3x_height);
+ z400 = cb_da_p intersectionpoint inter;
+ %vm_u_form(400);
+
+ enddef;
+
+def cb_dda_form =
+ path cb_dda_p, cv_dde_p;
+ rt z1=(0.1cb_da_width, .5x_height); bot z2=(0.25cb_da_width, 0);
+ bot z3=(1/2cb_da_width,0.6w_height);
+ bot z4=(0.7cb_da_width,0); lft z5=(0.9cb_da_width, 0.4x_height);
+ top z6=(0.6cb_da_width, 0.6x_height);
+ lft z7=(0.79cb_da_width, 0.7x_height);
+ top z8=(0.45cb_da_width, .99x_height);
+
+ cb_dda_p=z1...z2..z3..z3...z4...z5..{curl 2.5}z6..z7..z8..tension 1.0..cycle;
+ sketch cb_dda_p;
+
+ bar_forma(cb_da_width-u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_dda_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_da_width,vm_e_height2));
+ z30= point na of cb_dda_p;
+ (nc,nd)= cb_dda_p intersectiontimes
+ ((1/2cb_da_width,vm_e_height2)--(cb_da_width,vm_e_height2));
+ z32= point nc of cb_dda_p;
+ top z31=(1/2cb_da_width,.92vm_e_heightx);
+ cv_dde_p=z30{curl 3}..z31...z32;
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_da_width, .3x_height)--(1.1cb_da_width, .3x_height);
+ z400 = cb_dda_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def cb_na_form =
+ bot lft z1=(0,0); lft z2=(0,1/2w_height);
+ bot lft z1=(0,0); lft z2=(0,1/2w_height);
+ z3=(1/3cb_na_width,w_height); bot z4=(2/3cb_na_width,0);
+ rt z5=(cb_na_width,1/3x_height); top z6=(1/2cb_na_width,x_height);
+ bot z10=(.12cb_na_width, -.65w_height);
+
+ % For consonant+e
+ top z7 = (.3cb_na_width, x_height);
+ z8 = (.3cb_na_width, .7x_height);
+ z9 = (.45cb_na_width, .8x_height);
+
+ path cb_na_p, cb_ne_p;
+
+ cb_na_p=z10..z1..z2..z3..z4..z5..z6;
+ cb_ne_p = cb_na_p softjoin z6..tension1.3..z7..z8..z9;
+
+ bar_forma(cb_na_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_na_width, .3x_height)--(1.1cb_na_width, .3x_height);
+ z400 = cb_na_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def cb_nna_form =
+ z1a=(1/3cb_nna_width,1/2sc_height);
+ bot z1=(1/4cb_nna_width,0); lft z2=(0,1/4x_height);
+ z3=(1/6cb_nna_width,1/2x_height); lft z4=(0,3/4x_height);
+ top z5=(1/4cb_nna_width,x_height); z6=(1/2cb_nna_width,.8x_height);
+ top z7=(5/8cb_nna_width,x_height); rt z8=(cb_nna_width,1/2x_height);
+ bot z9=(2/3cb_nna_width,0); bot z10=(x9-1/2sc_height,sc_height);
+ bot z11=(x9,3/2sc_height); bot z12=(x9+1/2sc_height,sc_height);
+ path cb_nna_p;
+ cb_nna_p= z1a..z1..z2..z3&z3..z4..z5..z6&z6..z7..z8..z9..z10
+ ..tension 1.1..z11..z12;
+ sketch cb_nna_p;
+ z20=bot(.8cb_na_width, x_height);
+ %bar_forma(vm_ea1_width);
+ %bar_forma(cb_nna_width);
+ %vmfa_form(20); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(20) ;
+ %vmfea_form(301);
+ %vm_au_form(20,vm_au_width);
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_nna_width, .3x_height)--(1.1cb_nna_width, .3x_height);
+ z400 = cb_nna_p intersectionpoint inter;
+ %vm_u_form(400);
+
+ penlabels(1a);
+enddef;
+
+def cb_ba_form =
+ lft z1 = (u/2,j_height); top z2 = (cb_ba_width/5,x_height);
+ z3 = (cb_ba_width/3,j_height); lft z4 = (0,w_height);
+ bot z5 = (cb_ba_width/4,0); bot z6 = (cb_ba_width/2,.6w_height);
+ bot z7 = (3/4cb_ba_width,0);
+ rt z8 = (cb_ba_width,w_height); %z8 contact point
+ top z9 = (.8cb_ba_width,x_height); % z9 another contact point
+
+ %for consant+e
+ z10 = (.65cb_ba_width, 1.1x_height);
+ z11 = (.65cb_ba_width, .91x_height);
+
+ path cb_ba_p, cb_be_p;
+ cb_ba_p = z1..z2..z3..z4..z5..tension 1.2..z6&z6..tension 1.2..z7..z8..z9;
+ cb_be_p = cb_ba_p softjoin z9..tension1.7..z10..z11;
+ sketch cb_ba_p;
+
+ z12 = (x9-u,y9);
+ %vmfa_form(12); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(12) ;
+ %vmfea_form(12);
+ %vm_au_form(12,vm_au_width);
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_ba_width, .3x_height)--(1.1cb_ba_width, .3x_height);
+ z400 = cb_ba_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def vb_ea_form =
+ cb_pa_form ;
+ path vb_a_p,vb_a_pa;
+ top z9 = (.80cb_ba_width,.80x_height); % z9 another contact point
+ top z10 = (.35cb_ba_width,x_height); % z9 another contact point
+ vb_a_p = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..tension 1.2..z10;
+enddef ;
+
+def vb_eae_form =
+ vb_ea_form;
+ path vb_a_pb;
+ z11 = (.25cb_ba_width,.82x_height);
+ top z12 = (.13cb_ba_width,x_height);
+ vb_a_pb = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..tension 1.2..z10..z10..z11..z12
+enddef ;
+
+def vb_i_form =
+ cb_pa_form;
+ path vb_a_pb;
+ top z9 = (3/4cb_pa_width, x_height); z10 = ( 1/2cb_pa_width, .8x_height);
+ top z11 = (1/4cb_pa_width, x_height); lft z12 = (0, .75x_height);
+ vb_a_pb = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..z10..z10..z11..z12
+enddef ;
+
+%def cb_va_form =
+% cb_pa_form ;
+% path cb_va_p,cb_va_pa;
+% top z9 = (.82cb_ba_width,.83x_height); % z9 another contact point
+% top z10 = (.4cb_ba_width,x_height); % z9 another contact point
+% cb_va_p = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..z10;
+% z20 = (.6cb_ba_width,w_height);
+% z21 = (cb_ba_width, w_height);
+% z30= (z20--z21) intersectionpoint cb_va_p ;
+% vm_u_form(30);
+%enddef ;
+
+def cb_ya_form =
+
+ path cb_ya_pa, cb_ya_pb, cb_ya_pc, cb_ye_p;
+ lft z1 = (0, .49x_height); bot z2 = (3/10cb_ya_width, 0);
+ rt z3 = (3/5cb_ya_width, y1) ; top z4 = (x2, 2y1);
+ z20 = (.7x2, 3/10x_height);
+ z21 = (cb_ya_width+vm_u_width, 3/10x_height);
+ cb_ya_pa = superellipse( z3, z4, z1, z2, .7) ;
+ top z30 = (z20--z21) intersectionpoint cb_ya_pa ;
+ bot z5 = (8/10cb_ya_width, 0); lft z6 = (.85*2x3, .5x_height);
+ %top z7 = (.9x5, x_height);
+ top z7 = (.77cb_ya_width, x_height);
+
+ %for consonant+e
+ z50 = (.75x5, 1.15x_height);
+ z51 = (.68x5, .98x_height);
+ z52 = (.89x5, .92x_height);
+ cb_ya_pb = z30..tension 1.12..z5..z6..z7;
+ cb_ye_p = z30..tension 1.12..z5..z6..z7..tension 1.4..z50..z51..z52;
+ %cb_ye_p = z30..tension 1.12..z5..z6..z7;
+ %sketch z6;sketch z7;sketch z50;sketch z51;sketch z52;
+ %cb_ye_p = z30..tension 1.12..z5..z6..z7..tension 1.6..z50; sketch z51; sketch z52;
+
+ top z40 = (z20--z21) intersectionpoint cb_ya_pb ;
+ numeric ya_width ;
+ ya_width = cb_ya_width + vm_u_width ;
+ bot z8 = (.79(ya_width), 0); rt z9 = (ya_width, .5x_height);
+ top z10 = (.8ya_width, x_height) ;
+ cb_ya_pc = z40..z8..z9..z10 ;
+ draw cb_ya_pa ;
+ draw cb_ya_pb ;
+ draw cb_ya_pc ;
+
+ z90=(x7-1.5u, y7);
+ bar_form(90, .4cb_ya_width);
+ %vmfa_form(7); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(10) ;
+ %vmfea_form(7);
+ %vm_au_form(10,vm_au_width);
+
+ % to compute the joining point of "kombu for ya".
+ path inter;
+ inter = (.7ya_width, .3x_height)--(1.1ya_width, .3x_height);
+ z400 = cb_ya_pc intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def cb_la_form =
+ top z1=(1/4cb_la_width,x_height);
+ lft z2=(0,x_height/2); bot z3=(1/2cb_la_width,0);
+ rt z4=(cb_la_width,y2); top z5=(cb_la_width-.8x1,x_height);
+ z7=(x1+1.5u,2/3x_height);
+ path cb_la_pa,cb_la_pb,cb_la_p, cb_le_p, cb_le_pb;
+ cb_la_pb=z1..z2..z3..z4..z5;
+ z6=point 0.35 of cb_la_pb;
+ cb_la_pa= bot rt z6..z7..z1;
+ cb_la_p=cb_la_pa..cb_la_pb;
+
+ %for consonant+e
+
+ z20=(x5-1.5u, x_height+.7u);
+ z21=(x5-2.3u, x_height-.75u);
+ z22=(x5-.1u, x_height-.4u);
+ %draw z21;
+
+ %cb_le_pb=z1..z2..z3..z4..z5..{curl 2}z20..z21;
+ cb_le_pb=z1..z2..z3..z4..z5..tension1.6..z20..z21..z22;
+ cb_le_p=cb_la_pa..cb_le_pb;
+
+ % z8 is useful for la+u and la+uu
+ numeric na,nb;
+ (na,nb)=cb_la_pb intersectiontimes
+ ((cb_la_width/2,w_height)..(cb_la_width,w_height));
+ z9=point na of cb_la_pb;
+ z8=rt z9;
+ z55= lft z5;
+ %bar_forma(cb_ra_width); % z301 is comming from bar_forma...
+ %vmfa_form(55); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(55) ;
+ %vmfea_form(55);
+ %vm_au_form(55,vm_au_width);
+ %vmah_form(55); % tale-ardha akshara
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_la_width, .5x_height)--(1.1cb_la_width, .3x_height);
+ z400 = cb_la_p intersectionpoint inter;
+ %vm_u_form(400);
+enddef;
+
+def cb_ra_form =
+ top z1=(cb_ra_width/2,x_height);
+ lft z2 = (0,w_height);
+ bot z3 = (cb_ra_width/2,0);
+ rt z4 = (cb_ra_width,y2);
+ path cb_ra_p,cv_re_p;
+ cb_ra_p = z1..z2..z3..z4..cycle;
+ sketch cb_ra_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_ra_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_ra_width,vm_e_height2));
+ z30= point na of cb_ra_p;
+ (nc,nd)= cb_ra_p intersectiontimes
+ ((1/2cb_ra_width,vm_e_height2)--(cb_ra_width,vm_e_height2));
+ z32= point nc of cb_ra_p;
+ top z31=(.05cb_ra_width,.8vm_e_heightx);
+ cv_re_p=z30..z31..tension1.2..z32;
+
+ bar_forma(cb_ra_width); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+ %vmah_form(301); % tale-ardha akshara
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_ra_width, .3x_height)--(1.1cb_ra_width, .3x_height);
+ z400 = cb_ra_p intersectionpoint inter;
+ %vm_u_form(400);
+ enddef;
+
+def cb_rra_form =
+ top z1=(1/4cb_rra_width,x_height);
+ y2=y6=1/2x_height;
+ lft x2=0; rt x6=cb_rra_width;
+ x3=x1; x5=cb_rra_width-x3;
+ bot y3=bot y5=0;
+ top z4=(1/2cb_rra_width,w_height);
+ top z7=(cb_rra_width-x1,x_height);
+ z11=(x1+1.5u,y1-1.45uh);
+ path cb_rra_p,cb_rra_pa,cb_rra_pb;
+ cb_rra_pb=z1..z2..z3..tension1.2..z4&z4..tension1.2..z5..z6..z7;
+ numeric na,nb,nc,nd, ne, nf;
+ (na,nb)= cb_rra_pb intersectiontimes
+ ((0,5/6x_height)--(1/2cb_rra_width,5/6x_height));
+ z8=point na of cb_rra_pb;
+ (nc,nd)= cb_rra_pb intersectiontimes
+ ((0.6cb_rra_width,w_height)--(cb_rra_width,w_height));
+ z20=point nc of cb_rra_pb;
+ z19=rt z20;
+ cb_rra_pa=bot z8..z11..z1;
+ cb_rra_p=cb_rra_pa..cb_rra_pb;
+ bot lft z18= z1;% used for placing a vertical line
+
+ z14=(cb_rra_width-1.6x1,x_height-sc_height);
+ %z15=(x7,1/2x_height);z16=(x1,y15);
+ z15 = cb_rra_p intersectionpoint
+ ((0.7cb_rra_width,y8-.6u)--(cb_rra_width,y8-.6u));
+
+ z22 = cb_rra_p intersectionpoint
+ ((0, .6x_height)--(.4cb_rra_width, .6x_height)) ;
+ z23 = cb_rra_p intersectionpoint
+ ((.6cb_rra_width, .6x_height)--(cb_rra_width, .6x_height)) ;
+
+ z16=(x1,y15);
+ path cb_rra_pc, cb_rra_pd;
+ %cb_rra_pc= cb_rra_p..z14..z15--z16;
+ cb_rra_pc= cb_rra_p..z14..z15;%--z16;
+ cb_rra_pd = z22--z23 ;
+ sketch cb_rra_pc;
+ sketch cb_rra_pd ;
+
+ path inter;
+ inter = (.8cb_rra_width, .3x_height)--(1.1cb_rra_width, .3x_height);
+ z400 = cb_rra_pc intersectionpoint inter;
+ enddef;
+
+def arkavattu =
+ path arka_pa, arka_pb ;
+ top z1=(w/5,h); lft z2=(0,3h/4); z3=(x1,h/2);
+ z4=(w/3,h/2); lft z5=(0,h/4); bot z6=(x1,0);
+ bot rt z7=(w,0);
+ arka_pa= flex(z1,z2,z3)& z3--z4;
+ arka_pb=flex(z3,z5,z6)& z6--z7;
+enddef;
+
+
+def flop(expr e) =
+ for d = 1 step 1 until e:
+ draw z[d];
+ endfor;
+enddef ;
+
+def cb_ca_form =
+ path cb_ca_p, cb_ce_p, cb_ca_pb;
+ lft z1 = (0, .25x_height); bot z2= (.5cb_ca_width, 0);
+ rt z3 = (cb_ca_width, .42x_height); z4 = (.75cb_ca_width, .82 x_height);
+ top lft z5 = (.3cb_ca_width, .98x_height) ;
+ top lft z6 = (.15cb_ca_width, .8x_height) ;
+ top lft z7 = (.2cb_ca_width, .74x_height) ;
+ top lft z8 = (.35cb_ca_width, .78x_height) ;
+ top z9 = (.33cb_ca_width, .85x_height) ;
+ z22 = (.3cb_ca_width, y3);
+ z21 = (.58cb_ca_width, .7x_height);
+ top z20 = (.45cb_ca_width, x_height);
+
+ z30 = (x20-1.25u, x_height+1u);
+ z31 = (x20-2.25u, x_height+.5u);
+ z32 = (x20-1.25u, x_height+.1u);
+
+
+ cb_ca_p = z20..z21..z22..z1..z2..{dir 92}z3..z4..z5..z6..z7..z8..z9;
+ cb_ca_pb = z32..z31..z30..tension1.6..z20;
+
+ cb_ce_p = cb_ca_pb softjoin cb_ca_p ;
+ bar_forma(cb_ca_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+ %vmah_form(301); % tale-ardha akshara
+
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_ca_width, .3x_height)--(1.1cb_ca_width, .3x_height);
+ z400 = cb_ca_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def cb_va_form =
+ cb_pa_form ;
+ path cb_va_p, cb_va_pa, cb_ve_p;
+ top z9 = (.82cb_ba_width,.8x_height); % z9 another contact point
+ top z10 = (.5cb_ba_width,x_height); % z9 another contact point
+
+ %for consonant +e
+ top z11 = (.3cb_ba_width, .8x_height);
+ z12 = (.5cb_ba_width, .85x_height);
+
+ %cb_va_p = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..{left}z10;
+ cb_va_p = z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..z10;
+ cb_ve_p =z41..z42..z43..z43..z44..z45..z46 & z46..z47..z48..z9..z10..z11..z12;
+
+ bar_forma(cb_pa_width-.2u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfea_form(301);
+ %vm_u_form(46);
+
+enddef ;
+
+def cv_vu_form(suffix $) =
+ path cv_vu_p;
+ z$a = z$;
+ bot z$b = (x$a+.25cb_ba_width, -.5des_depth) ;
+ z$c = (cb_ba_width+.5vm_u_width, .4x_height);
+ rt z$d = (cb_ba_width+.35vm_u_width, .8x_height);
+ sketch z$..z$b..z$c..z$d;
+enddef;
+
+def cv_vuu_form(suffix $) =
+ path cv_vu_p;
+ z$a = z$;
+ bot z$b = (x$a+.25cb_ba_width, -.5des_depth) ;
+ z$c = (cb_ba_width+.2vm_uu_width, .4x_height);
+ rt z$d = (cb_ba_width+.5vm_uu_width, .9x_height);
+ z$e = (cb_ba_width+.8vm_uu_width, .5x_height);
+ rt z$g = (cb_ba_width+.7vm_uu_width, .05x_height);
+ z$h = (cb_ba_width+.55vm_uu_width, .1x_height);
+ z$i = (cb_ba_width+.65vm_uu_width, .25x_height);
+ sketch z$..z$b..z$c..z$d..z$e..z$g..z$h..z$i;
+enddef;
+
+def vm_a_form(suffix $) =
+ path vm_a_p ;
+ rt x$a = vm_a_width; y$a = y$;
+ x$b = x$a ; y$b = 1.3y$a;
+ vm_a_p = z$--z$a..{dir 160}z$b;
+ penlabels($a,$b,$c);
+enddef ;
+
+def vm_a_forma(suffix $) =
+ path vm_a_p ;
+ top z51$=(x$-1/6vm_a_width,x_height);
+ top z52$=(x$+.6vm_a_width,x_height);
+ top top z53$=(x$+.6vm_a_width,1.3x_height);
+ vm_a_p = z51$--z52$..{dir 160}z53$;
+enddef ;
+
+def cb_sa_form =
+ bot lft z1=(0,0); lft z2=(0,1/2w_height);
+ z3=(.5cb_na_width,.4x_height); bot rt z4=(.85cb_na_width,.02x_height);
+ rt z44=(.98cb_na_width,.1x_height);
+
+ rt z5=(cb_na_width,.5x_height); top z6=(.8cb_na_width,.9x_height);
+ path cb_sa_p;
+ top lft z77=(1/3cb_na_width-1/2c_height, top (x_height - c_height));
+ place_lit_circ(77, 1);
+ cb_sa_p=z1..z2..z3..{z5-z6}z4.. z44..z5..z6;
+ bar_forma(cb_na_width-u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+ %vmah_form(301); % tale-ardha akshara
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_na_width, .3x_height)--(1.1cb_na_width, .3x_height);
+ z400 = cb_sa_p intersectionpoint inter;
+ %vm_u_form(400);
+enddef;
+
+def cb_ha_form =
+ lft z1 = (0, .45x_height) ; bot z2 = (.24cb_ha_width, 0);
+ z3 = (.48cb_ha_width, .3x_height); z4 = (cb_ha_width-x3, .6x_height);
+ z5 = (.76cb_ha_width, .8x_height); rt z6 = (cb_ha_width, .4x_height);
+ bot z7 = (.76cb_ha_width, 0); z8 = (cb_ha_width-x3, y3);
+ z9 = (x3, y4); z10 = (x2, y5);
+ z11 = (x3,.65x_height); top z12 = (.4cb_ha_width, x_height);
+ path cb_ha_p, cb_ha_pa ;
+ cb_ha_p = z1..z2..z3..z4..z5..z6..z7..z8..z9..z10..cycle;
+ cb_ha_pa = z11..{dir 130}z12;
+ sketch cb_ha_p ;
+ sketch cb_ha_pa ;
+ bar_forma(cb_ha_width-u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+ %vmah_form(301); % tale-ardha akshara
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.8cb_ha_width, .3x_height)--(1.1cb_ha_width, .3x_height);
+ z400 = cb_ha_p intersectionpoint inter;
+ %vm_u_form(400);
+enddef ;
+
+def cb_lla_form =
+ z1=(.18cb_lla_width,.84x_height); z2=(.25cb_lla_width,.8x_height);
+ top z3=(.32cb_lla_width,.86x_height); top z4=(x2,x_height);
+ lft z5 =(0, .8x_height);
+ z6 = (1/2cb_lla_width, .4x_height);
+ z7 = (3/4cb_lla_width, .2x_height);
+ bot z8 = (1/2cb_lla_width,0);
+ z9 = (1/4cb_lla_width,y7);
+ rt z10 = (cb_lla_width,.75x_height);
+
+ top z11 = (.8cb_lla_width,x_height);
+
+ z19 = (.9cb_lla_width, .9x_height);
+ z20 = (x19-1.2u, y19+1.2u);
+ z21 = (x19-1.5u, y19);
+ z22 = (x19-.95u, y19+.15u);
+ path cb_lla_p, cb_lle_p, cb_lla_pb;
+
+ cb_lla_p = z1..z2..z3..z4..z5..z6..z7..z8..z9..z6..z10..z11;
+
+ %cb_lla_pb = z11..tension 1.3..z20..z21;
+
+ %cb_lle_pb = cb_lla_p softjoin cb_lla_pb ;
+ cb_lle_p = z1..z2..z3..z4..z5..z6..z7..z8..z9..z6..z10..z19..tension 1.6..z20...z21..z22;
+ %cb_lle_p = z1..z2..z3..z4..z5..z6..z7..z8..z9..z6..z10..z19..z11;
+ z12 = lft lft z11;
+ %vmfa_form(12); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(12) ;
+ %vmfea_form(12);
+ %vm_au_form(12,vm_au_width);
+ %vmah_form(12); % tale-ardha akshara
+ % to compute the joining point of "kombu for nya".
+ path inter;
+ inter = (.6cb_lla_width, .22x_height)--(1.1cb_lla_width, .22x_height);
+ z400 = cb_lla_p intersectionpoint inter;
+ %vm_u_form(400);
+
+enddef;
+
+def cb_sha_form =
+ cb_va_form;
+ top lft z77=(1/2cb_pa_width-1/2c_height-.5u, top (x_height - c_height));
+ place_lit_circ(77, 1);
+ bot rt z66 = (cb_pa_width, 0);
+ path cb_sha_pb;
+ z65 = (.65cb_pa_width, .6x_height);
+ cb_sha_pb = z65--z66;
+ %bar_forma(cb_ra_width); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+ %vmah_form(301); % tale-ardha akshara
+enddef ;
+
+def cb_ksha_form =
+ cb_ka_form;
+ top z11 = (1/6cb_ka_width, -.4cb_ksha_depth);
+ lft z12 = (0,-1/2cb_ksha_depth);
+ bot z13 = (1/4cb_ka_width,-cb_ksha_depth);
+ z14 = (.48cb_ka_width,-2/3cb_ksha_depth);
+ bot z15 = (3/4cb_ka_width,-cb_ksha_depth);
+ rt z16 = (.95cb_ka_width,-1/2cb_ksha_depth);
+ top z17 = (.8cb_ka_width, -.01cb_ksha_depth);
+ bot rt z18 = (cb_ka_width,-cb_ksha_depth);
+ bot z19 = (.9cb_ka_width, y16);
+ sketch z11..z12..z13..z14; sketch z14..z15..z16..z17;
+ sketch z19..z18;
+enddef;
+
+def v_a_form =
+ top z1=(1/4v_a_width,x_height);
+ z10=(x1-u,y1-uh); z11=(x1,y1-2(y1-y10));
+ lft z3=(0,2/3x_height); bot z4=(1/2v_a_width,0);
+ rt z5=(v_a_width,2/3x_height); top z6=(v_a_width-1.5u,x_height);
+ z7=(4/5x5,.55x_height); z8=(1/4w,y7);
+ z12=(.65v_a_width,5/6x_height); rt z2=(v_a_width,1/2x_height);
+enddef;
+
+def v_aa_form =
+ z1=(.1v_a_width,.7x_height); z2=(.3v_a_width,.85x_height);
+ top z3 = (.15v_a_width, x_height); lft z4 = (0, .75x_height);
+ lft z4a = (.12v_a_width, .2x_height);
+ bot z5 = (.5v_a_width, 0); rt z6 = (v_a_width, .3x_height);
+ bot z66 = (.85v_a_width, .55x_height);
+ top z7 = (.76v_a_width, .7x_height); top z8 = (.88v_a_width, x_height);
+ rt z9 =(v_a_width, .85x_height);
+ rt z11 =(x7, y7);
+ rt z12 =(.4v_a_width, y11);
+ sketch z1..z2..z3..z4..z4a..z5 ..tension 1.2..z6..z66..z7..z8..z9..z7..z11--z12;
+enddef;
+
+def v_u_form =
+ path v_u_pa, v_u_pb;
+ z1 = (.13v_u_width, .78x_height); z2= (2x1, .88x_height); z3a=(.09v_u_width,y2);
+ top lft z3 = (x1, x_height);
+ lft z4 = (0, .43x_height); bot z5 = lft (.2v_u_width, 0);
+ z5a = (.38v_u_width, .53y6);
+ %top z6 = (.52v_u_width, x_height); z6a = (.65v_u_width, 1.2y5a);
+ top z6 = (.52v_u_width, x_height); z6a = (.66v_u_width, y5a);
+ bot z7 = (.8v_u_width, 0); rt z7a = (v_u_width, .5x_height);
+ rt z8 = (.94v_u_width, .9x_height) ; top rt z8a = (.91v_u_width,x_height);
+
+ %v_u_pa = z1..z2..z3..z3a..tension 1.2..z4..z5...z5a..tension 1.2..z6
+ % {dir 9}..z6a{dir -85}..z7..z7a..z8..z8a;
+ v_u_pa = z1..z2..z3..z3a..z4..z5...z5a..z6..z6a..z7..z7a..z8..z8a;
+ %v_u_pb = z1..z2..z3..z3a..tension 1.2..z4..z5..z5a..tension 1.2..z6
+ % {dir 5}..z6a{dir -85}..z7;
+ %flop(8); draw z3a; draw z5a; draw z6a; draw z7a; draw z8a ;
+ sketch v_u_pa;
+enddef;
+
+def vm_uu_form (suffix $) =
+ bot z1$ = (x$+.1vm_uu_width, 0); z2$ = (x$+.4vm_uu_width, .66x_height);
+ top z3$ = (x$+.52vm_uu_width,x_height);
+ rt z4$ = (x$+vm_uu_width, .5x_height);
+ bot z5$ = (x$+.75vm_uu_width, 0); z6$ = (x$+.65vm_uu_width, .1x_height);
+ rt z7$ =(x$+.85vm_uu_width, .25x_height);
+ sketch z$..z1$..z2$..z3$..z4$..z5$..z6$..z7$;
+enddef;
+
+def v_uu_form =
+ numeric wid, het ;
+ wid = v_uu_width ; het = x_height ;
+ z1 = (1/10wid,8/10het) ; z2 = (2x1, y1); top z3 = (x1, het) ;
+ lft z4 = (0-.5u, 1/2 het) ; bot z5 = (1/8wid, 0) ;
+ z6 = (1/4wid, 1/2het) ; top z7 = (3/8wid, het) ;
+ z8 = (1/2wid, 1/2het) ; bot z9 = (5/8wid, 0) ;
+ z10 = (3/4wid, 1/2het); top z11 = (7/8wid, het) ;
+ rt z12 = (wid+.5u, 1/2het) ;bot z13 = (wid-x3, 0) ;
+ z14 = (wid-x2, het-y2) ; z15 = (wid-x1, het-y1) ;
+ %sketch z1...z2...z3...z4...z5...z6...z7...z8...z9...z10...z11...z12...z13...z14...z15;
+ sketch z1..z2..z3..z4..tension 1.2..z5..tension 1.2..z6..tension 1.2..z7..tension 1.2..z8..tension 1.2..z9..tension 1.2..z10..tension 1.2..z11..tension 1.2..z12..z13..z14..z15;
+enddef;
+
+def v_ro_form =
+ path v_ro_p;
+ z1 = (.5v_ro_width, .8x_height); z2 = (.25v_ro_width, .7x_height);
+ lft z3 = (0, .8x_height); top z4 = (.5v_ro_width, x_height);
+ rt z5 = (v_ro_width, .5x_height);
+ bot z6 = (x4, 0); lft z7 = (0, .2x_height); z8 = (x2, .3x_height);
+ z9 = (x1, .2x_height);
+ v_ro_p = z1..z2..z3..z4..z5..z6..z7..z8..z9;
+
+ z10 = (.6v_ro_width, y8); z11 = (v_ro_width+2vm_u_width, y10);
+ sketch v_ro_p;
+ z19 = (z10--z11) intersectionpoint v_ro_p;
+ vm_u_form(19);
+ z29 = (x19+.4vm_u_width, x_height);
+ vm_a_forma(29);
+ sketch vm_a_p;
+ z20=z19b;
+ vm_u_form(20);
+ z39 = z20b;
+enddef;
+
+def barandhook_formk (suffix $)(expr bar_width,t) =
+ z$a=(x$+bar_width-u,y$); rt z$b=(x$a+u,y$-uh);
+ bot z$c =(x$b-u,y$-2uh); lft z$d=(x$b-2u,y$b);
+ top z$e=(x$a-u,y$); rt z$f=(x$b,y$+1.5uh);
+ top z$g=(x$a,y$f+uh); z$h=(x$d,y$f);
+ path barandhook_p;
+ barandhook_p= subpath(0,t) of (rt z$--z$a..z$b..z$c..z$d..z$e..z$f..z$g..z$h);
+ sketch barandhook_p;
+ penlabels($a,$b,$c,$d);
+enddef;
+
+def barandhook_form (suffix $)(expr bar_width,t) =
+ z$a=(x$+bar_width-u,y$); rt z$bb=(x$a+u,y$-1/2des_depth);
+ rt z$b=(x$a+u,y$-des_depth+uh);
+ bot z$c =(x$b-u,y$b-uh); lft z$d=(x$b-1.75u,y$b);
+ top z$e=(x$d+.75u,y$b+.5u); rt z$f=(x$b,y$+1.5uh);
+ path barandhook_p;
+ barandhook_p= (rt z$--z$a..z$bb..z$b..z$c..z$d..z$e);
+ %barandhook_p= subpath(0,t) of (rt z$--z$a..z$bb..z$b..z$c..z$d..z$e);
+ sketch barandhook_p;
+ penlabels($a,$b,$c,$d);
+enddef;
+
+%Following is old version it's obsolete...............
+def vm_au_forma (suffix $)(expr bar_width) = % see the above diagram
+ numeric na;
+ %top z$e=z$; % screwed up GHA+AU.
+ %z$e=z$;
+ z$e=(x$, y$);
+ z$a = (x$e+2/10(bar_width-u),y$e);
+ z1000 = (x$-.5u,asc_height2);
+ % 1000 was chosen arbitrarily
+ % we needed some suffix not used by any user of
+ % this macro
+ barandhook_form(1000,bar_width,5);
+ z$d=z1000a;
+ %next two statements solve for c
+ x$c = x$a;
+ z$c = whatever[z1000,z$d];
+ na:=x$c+(x1000a-x$c)/3; % used for alligning pa,pha,sha..
+ sketch z$e--z$a{right}..{left}z$c;
+ penlabels($a,$b,$c,$d,$e,1000);
+enddef;
+
+def vm_au_form (suffix $)(expr bar_width) = % see the above diagram
+ numeric na;
+ %top z$e=z$; % screwed up GHA+AU.
+ %z$e=z$;
+ z$e=(x$, y$);
+ z$a = (x$e+5/10(bar_width-u),y$e);
+ z1000 = (x$+2.3u,asc_height2);
+ % 1000 was chosen arbitrarily
+ % we needed some suffix not used by any user of
+ % this macro
+ barandhook_form(1000,.9bar_width,5);
+ z$d=z1000a;
+ %next two statements solve for c
+ x$c = x$a;
+ z$c = whatever[z1000,z$d];
+ na:=x$c+(x1000a-x$c)/3; % used for alligning pa,pha,sha..
+ sketch z$e--z$a{right}..{left}z$c;
+ penlabels($a,$b,$c,$d,$e,1000);
+enddef;
+
+% Begin of Vowel Modifiers.....
+
+def vm_ee_form =
+ z0 = (.5vm_ee_width+u, y2);
+ z1 = (.7vm_ee_width+u, 2/3x_height);
+ rt z2 = (vm_ee_width+u, y1+1/6x_height);
+ top z3 = (1/2vm_ee_width+u, x_height);
+ lft z4 = (0+u, .6x_height); bot z5 = (3/5vm_ee_width+u, 0);
+ sketch z0..z1..z2..z3..z4..z5;
+enddef;
+
+def vm_ro_form =
+ z1=(.8vm_ro_width,3/5x_height);rt z2=(vm_ro_width,0);
+ bot z3=(1/2vm_ro_width,-des_depth);z4=(.15vm_ro_width,-.1des_depth);
+ z5=(.2vm_ro_width,.05x_height); z6 = (.25vm_ro_width, .1x_height);
+ z7=(.3vm_ro_width,-.2des_depth);
+ path vm_ro_p;
+ vm_ro_p = z1..z2..z3..z4..z5..z6..z7;
+ path ct;
+ ct = vm_ro_p scaled 1 shifted (-3u, -.5des_depth) rotated 0 ;
+ sketch ct;
+enddef;
+
+def vm_y_form =
+ top z1=(.75vm_y_width, 3/5x_height); rt z1a=(vm_y_width,3/10x_height);
+ rt z2=(.8vm_y_width,.1x_height);
+ rt z3a=(vm_y_width,-1/2des_depth);
+ bot z3=(1/2vm_y_width,-des_depth);z4=(.15vm_y_width,-.1des_depth);
+ z5=(.2vm_y_width,.05x_height); z6 = (.25vm_y_width, .1x_height);
+ z7=(.3vm_y_width,-.2des_depth);
+ path vm_y_p ;
+ vm_y_p = z1..z1a..z2..z2..z3a..z3..z4..z5..z6..z7;
+enddef;
+
+%def vm_e_form_a (suffix $) (expr xoff, yoff) =
+% z$1 = (x$+xoff, y$+yoff);
+% z$2 = (x$1+u, y$1+u);
+% z$3 = (x$1, y$1+2u);
+% z$4 = (x$1-u, y$1+u);
+% z$5 = (x$1-.7u, y$1+.1u);
+% path vm_e_p;
+% vm_e_p = z$..z$1..z$2..z$3..z$4..z$5;
+%enddef;
+
+def vm_e_form_a (suffix $) (expr xoff, yoff) =
+ z31 = (x$+xoff, y$+yoff);
+ z32 = (x31+u, y31+u);
+ z33 = (x31, y31+2u);
+ z34 = (x31-u, y31+u);
+ z35 = (x31-.7u, y31+.1u);
+ path vm_e_p;
+ vm_e_p = z$..z31..z32..z33..z34..z35;
+enddef;
+
+def vm_e_formb(suffix $) (expr a, b) =
+ z50 = (a-1/2u, b+u) ;
+ z51 = (a, b) ;
+ sketch z$..z50..z51 ;
+enddef;
+
+def vm_e_form =
+ path vm_e_p;
+ lft z551 = (0,x_height+1.2ascunit);
+ top z552 = (1/2vm_e_width,x_height);
+ rt z553 = (vm_e_width,x_height+2ascunit);
+ z554 = z553;
+ lft z555 = (0,x_height+3ascunit);
+ z556 = (1/2vm_e_width,y555);
+ top z557=(1/2vm_e_width,vm_e_height1+ascunit);
+ vm_e_p = subpath (0.4,1) of z551{down}..{right}z552..z553..z557..z555..z556;
+ sketch vm_e_p;
+ %sketch subpath (0.4,1) of z551{down}..{right}z552..z553..z557..z5..z556;
+ % hook can be attached at z7
+enddef;
+
+def naa_form =
+ path naa_p ;
+ z1 = bot lft (cb_na_width, x_height) ; z2 = bot ( 2u, x_height) ;
+ z3 = rt (0, 5/6x_height) ;
+ z4 = bot (u, 2/3x_height) ; z5 = (3/4cb_na_width, y4) ;
+ z6 = rt (0, 1/2x_height) ;
+ z7 = bot (u, 1/3x_height); z8 = (1/2cb_na_width, y7) ;
+ z9 = rt (0, 1/6x_height) ;
+ z10 = top (u, 0) ;
+
+ naa_p = z1--z2...z3...z4--z5 &z5--z4...z6...z7--z8 & z8--z7...z9..z10 ;
+ sketch naa_p ;
+enddef ;
+
+input kanvarna ;
+input kanlets;
+
+end;
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kanparam.mf b/Master/texmf-dist/fonts/source/public/itrans/kanparam.mf
new file mode 100644
index 00000000000..8346ee22b24
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kanparam.mf
@@ -0,0 +1,181 @@
+% This file is part of the KannadaTeX Software Package.
+%Copyright (c) 1991 G.S. Jagadeesh & Venkatesh. Gopinath.
+%
+%Author: Modified from TeluguTex by, GS. Jagadeesh & Venkatesh Gopinath.
+%The KannadaTeX 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 KannadaTeX Software Package
+%General Public License for full details.
+%
+%Everyone is granted permission to copy, modify and redistribute
+%the KannadaTeX Software Package, but only under the conditions described in the
+%KannadaTeX Software Package General Public License. A copy of this license is
+%supposed to have been given to you along with KannadaTeX 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.
+%%%%%
+
+%%%%%%%%
+% This file contains various parameters used in making a font
+% for kannada. Many of the parameters are used in several places.
+% Before changing anything here you should be very clear about
+% the possible impact.
+%
+%
+input kanbase % read basefile
+
+font_identifier :="KANNADA";
+
+% parameters
+
+u#:=designsize/18; % unit width
+v#:=designsize; % total height
+uh#:=v#/18; % unit height
+top_shoulder:=2/36; % top shoulder proportion
+bot_shoulder:=2/36; % bottom shoulder proportion
+xheight:=15/36; % x height proportion
+ascheight:=10/36; % ascender height proportion
+desdepth:=7/36; % descender depth proportion
+figheight:=6/36; % height of roman digits
+
+em_width#:=18u#; % same as font_quad
+%font_quad em_width#;
+
+asc_height#:=(ascheight+xheight)*v#;
+des_depth#:=desdepth*v#;
+x_height#:=xheight*v#;
+bot_depth#:=(bot_shoulder+desdepth)*v#;
+top_height#:=(top_shoulder+ascheight+xheight)*v#;
+fig_height#:=(figheight+xheight)*v#; % height of roman digits
+kfig_width#:=7.5u#; % width of kannada digits
+kfig_height#:=x_height#; % height of kannada digits
+
+asc_height1#:=(1/3ascheight+xheight)*v#;
+asc_height2#:=(2/3ascheight+xheight)*v#;
+
+%j_height#:=2/3x_height#; % height of bowls in ja,ta etc
+j_height#:=.6x_height#; % height of bowls in ja,ta etc
+c_height#:=1/3x_height#; % height of circle in ma, pa etc
+% c_height is used to draw small circles. If we use a wide pen then the circle
+% may not be clearly visible. Hence the following statement.
+if c_height# < (3.2*pen_width#):c_height#:=3.2pen_width#; fi;
+w_height#:=1/3x_height#; % height of wedge in da,ta etc
+ascunit#:=1/6(asc_height#-x_height#); % a unit for acsender area
+vmwidth#:=7u#; % width of vowel modifiers
+top_accent#:=1.5uh#; % base for accents that appear at top
+bot_accent#:=1.5uh#; % base for accents that appear below
+cc_scale:=0.65; % scale factor for consonant conjuncts
+ccwidth#:=vmwidth#; % width of co.conjuncts that appear on % the side
+dot_radius#:=u#; % radius of dot
+wedge_height#:=x_height#/4; % height of wedge (in dha, uu etc)
+wedge_depth#:=4/9des_depth#; % depth of wedge(in dha,uu etc)
+sc_height#:=1/6x_height#; % misc. usage
+
+v_a_width#:=10u#; % width of vowel a
+v_e_width#:=7.5u#; % width of vowel e
+v_u_width#:=10u#; % width of vowel u (like dda no hat
+v_uu_width#:=13u#; % width of vowel u (like dda no hat
+v_lo_width#:=11u#; % width of vowel lo(inverted ja)
+v_ea_width#:=6u#; % width of vowel ea(like pa without
+v_i_width#:=7u#; % width of vowel i
+v_ro_width#:=4.5u#; % width of vowel ro
+
+vm_ah_width# :=4u#;
+vm_ah_height# :=3u#;
+vm_a_width#:=2u#; % width of vowel modifier a
+vm_aa_width#:=6u#; % width of vowel modifier aa
+vm_e_width#:=4u#; % width of vowel modifier e
+vm_ee_width#:=4u#; % width of vowel modifier e
+vm_e_height1#:=asc_height2#; % height of vowelmodifier e (used
+vm_ea_width# := 2u#;
+vm_ea1_width# := 8u#;
+vm_ea_height# := 2u#;
+vm_e_height2#:=5/6x_height#; % vowel mod. e for ra,ga.da sits
+vm_e_heightx#:=(1/2ascheight+xheight)*v#; % between vm_e_height2 and 3
+ % with certain consonants kha,cha,
+ % ccha,ja,ta,na,ba,bha,ma,la,va etc)
+vm_u_width#:=4.5u#; % width of ubowl (attached to letter
+vm_uu_width#:=8u#; % width of uubowl (attchd to lett).
+vm_ro_width#:=6u#; % width of vowel modifier ro
+vm_y_width#:=6u#; % width of vowel modifier ro
+vm_bar_width#:=4u#; % width of vowel modifier ro
+vm_ao_width#:=8u#; % width of vowel modifier ao
+vm_aoo_width#:=vm_ao_width#+1.5u#; % width of vowel modifier aoo
+vm_au_width#:=8u#; % width of vowel modifier ao
+
+vm_e_width1#:=3u#; % width of vowel modifier e
+vm_e_heightj#:=2.25u#; % height of vowel modifier e
+
+%vm_e_width#:=3u#; % width of vowel modifier ao
+%vm_e_height#:=2u#; % width of vowel modifier ao
+
+cb_ka_width#:=6u#; % width of ka
+cb_kha_width#:=7.5u#; % width of kha
+cb_ga_width#:=6u#; % width of ga
+cb_cha_width#:=9u#; % width of cha
+cb_ja_width#:=7.5u#; % width of ja
+%cb_tta_width#:=10.5u#; % width of tta
+cb_tta_width#:=7.5u#; % width of tta
+cb_nna_width#:=9u#; % width of nna
+cb_ta_width#:=7u#; % width of ta
+cb_da_width#:=9.0u#; % width of da
+cb_ha_width#:=9.0u#; % width of da
+cb_na_width#:=7u#; % width of na
+cb_ba_width#:=7.5u#; % width of ba
+cb_ya_width#:=10u#; % width of ya (without bowl)
+cb_ra_width#:=6u#; % width of ra
+cb_rra_width#:=9u#; % width of rra
+cb_la_width#:=9u#; % width of la
+cb_lla_width#:=6u#; % width of lla
+cb_pa_width#:=7.5u#; % width of pa
+cb_ca_width#:=5.5u#; % width of ca
+cb_sha_width#:=cb_pa_width#+1.5u#; % width of sha
+cb_ksha_width#:=cb_ka_width#; % width of ksha
+cb_ksha_depth#:=des_depth#; % floor of ksha
+cb_np_width#:=ccwidth#; % width of nakarapollu
+cb_vg_width#:=ccwidth#; % width of valapalagilaka
+
+cv_pu_width#:=cb_pa_width#+2u#; % width of u modifier for pa
+cv_pu_depth#:=1.5uh#; % depth of u modifier for pa
+
+p_comma_width#:=2dot_radius#+u#; % width of comma
+half_plus_width#:=cb_ja_width#/2; % width of symbol like truncated +
+
+% ul#, ur# indicate the amount of white space that is added
+% to a symbol. Following are the criteria used to add space
+% consonant base, vowels - none
+% punctuation,digits - on right
+% consonant conjuncts that appear below,vowel modifiers that appear
+% above/below - none
+% accents that appear below/above - none
+% consonant conjuncts that appear on the side - on left
+% vowel modifiers for u, uu - none
+% vowel modifiers for ro, roo - on left
+% While composing Kannada text using TeX, space is added after a syllable
+% by the macros that build a syllable.
+ul#:=2u#; % white space (on left)
+ur#:=2u#; % white space (on right)
+
+
+%generate kannada; % switch to driver files
+% Font Dimensions
+
+font_slant slant;
+font_x_height x_height#;
+font_normal_space 6u#;
+font_normal_stretch 3u#;
+font_normal_shrink 2u#;
+font_quad em_width#;
+font_extra_space 2u#;
+
+%ligature and kern information
+
+%ligtable "'": "'" =: p_cquotes_code; % close quotes
+%ligtable "`": "`" =: p_oquotes_code; % open quotes
+%ligtable "-": "-" =: p_lhyphen_code; % en dash
+%ligtable p_lhyphen_code: "-" =: p_vlhyphen_code; % em dash
+
+%if not testing: expandafter stop fi;
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kanspc.mf b/Master/texmf-dist/fonts/source/public/itrans/kanspc.mf
new file mode 100644
index 00000000000..98d74be993f
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kanspc.mf
@@ -0,0 +1,52 @@
+%kanspc%
+% generates striped characters with shading
+%input kanmode;
+font_size 72pt#;
+slant:=0;
+pen_width#:=2.5pt#;
+% Following code(with minor modifications) is taken from the article,
+% The ABC's of Special Effects by Georgia K. M. Tobin,
+% that appeared in TUGboat, Volume 9(1988), No. 1
+vardef special_effects=
+% creates characters filled with stripes and followed by a shadow.
+ cullit;
+ picture Normalchar;
+ Normalchar:=currentpicture;
+ clearit;
+% Depending on the output device, pen size(0.1pt) may need to be
+% changed.
+ pickup pencircle scaled 0.1pt;
+ filldraw (0,-d)--(w,-d)--
+ (w,h)--(0,h)--cycle;
+ picture Blackbox;
+ Blackbox:=currentpicture;
+ picture Reversevideo;
+ Reversevideo:=Blackbox-Normalchar;
+ clearit;
+% Depending on the output device,stepsize(uh/3) may need to be
+% changed.
+ for f=-d step uh/3 until h:
+ draw(0,f)--(w,f);
+ endfor;
+ currentpicture:=
+ currentpicture-Reversevideo;
+ cullit;
+ picture Stripedchar;
+ Stripedchar:=currentpicture;
+ clearit;
+% Depending on the output device,offset(1.5pt) may need to be
+% changed.
+ currentpicture:=Normalchar shifted(1.5pt,-1.5pt);
+ picture Shadow;
+ Shadow:=currentpicture;
+ clearit;
+ currentpicture:=Shadow-Normalchar;
+ cullit;
+ picture Shadowonly;
+ Shadowonly:=currentpicture;
+ clearit;
+
+ currentpicture:=Shadowonly+Stripedchar;
+enddef;
+input kanmain;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/kanvarna.mf b/Master/texmf-dist/fonts/source/public/itrans/kanvarna.mf
new file mode 100644
index 00000000000..f2a429c2dd3
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/kanvarna.mf
@@ -0,0 +1,2359 @@
+% This file is part of the KannadaTeX Software Package.
+%Copyright (c) 1991 G.S. Jagadeesh & Venkatesh. Gopinath.
+%
+%Author: GS. Jagadeesh.
+%The KannadaTeX 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 KannadaTeX Software Package
+%General Public License for full details.
+%
+%Everyone is granted permission to copy, modify and redistribute
+%the KannadaTeX Software Package, but only under the conditions described in the
+%KannadaTeX Software Package General Public License. A copy of this license is
+%supposed to have been given to you along with KannadaTeX 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.
+%%%%%
+% This file contains all Kannada aksharas in it's varnamale.
+% along vowel modifiers and consonant conjunctions.
+
+%-------------- Begin of are the Vowel and Vowel modifiers.---------------
+def VA =
+ stest(va); kanchar "vowel a";
+ begintchar(v_a_code,v_a_width#,x_height#,0,0,0,0);
+ v_a_form;
+ sketch z10..z11..z1..z3..z4..z5..z6..z7--z8;
+ endtchar; etest;
+enddef ;
+
+def VAA=
+ stest(vaa); kanchar "vowel aa";
+ begintchar(v_aa_code,v_a_width#,x_height#,0,0,0,0);
+ v_a_form;
+ sketch z10..z11..z1..z3..z4..z2 &z2{(0,1)}..{up}z12..z6..z5..{left}z7--z8;
+ endtchar; etest;
+enddef ;
+
+def VE=
+ stest(ve); kanchar "vowel e";
+ begintchar(v_e_code,v_e_width#,x_height#,des_depth#,0,0,0);
+ v_e_form;
+ endtchar; etest;
+enddef ;
+
+def VEE =
+ stest(vee); kanchar "vowel ee";
+ begintchar(v_ee_code,cb_ra_width#+2.6u#,asc_height#,0,0,0,0);
+ cb_ra_form;
+ z1a = (0, 1/2x_height);
+ z1b = (cb_ra_width+1.1u, y1a);
+ rt z1c = (x1b+1.5u, .7x_height);
+ z1d = (x1b+.75u, .85x_height);
+ rt z1e = (x1b+1.5u, .25x_height);
+ bot z1f = (x1b+.5u, 0);
+ draw z1a--z1b..z1c..z1d..z1b..z1e..z1f;
+ vmfa_form(301); % Following are test to see How vowel modifer looks.
+ endtchar; etest;
+enddef ;
+
+def VU=
+ stest(vu); kanchar "vowel u";
+ begintchar(v_u_code,v_u_width#,asc_height#,0,0,0,0);
+ v_u_form;
+ %sketch v_u_pa;
+ endtchar; etest;
+enddef;
+
+def VUU=
+ stest(vuu); kanchar "vowel uu";
+ begintchar(v_uu_code,v_uu_width#+.5u#,x_height#,0,0,0,0);
+ v_uu_form;
+ endtchar; etest;
+enddef;
+
+def VRO=
+ stest(vro); kanchar "vowel ro";
+ begintchar(v_ro_code,v_ro_width#+1.7vm_u_width#,x_height#+2u#,0,0,0,0);
+ v_ro_form;
+ endtchar; etest;
+enddef;
+
+def VROO=
+ stest(vroo); kanchar "vowel roo";
+ begintchar(v_roo_code,v_ro_width#+2vm_u_width#+vm_uu_width#,x_height#+2u#,0,0,0,0);
+ v_ro_form;
+ %z3a = (0, .7w_height);
+ vm_uu_form(39);
+ endtchar; etest;
+enddef;
+
+def VEA=
+ stest(vea); kanchar "vowel ea";
+ begintchar(v_ea_code,cb_pa_width#,x_height#,0,0,0,0);
+ vb_ea_form;
+ sketch vb_a_p;
+ endtchar; etest;
+enddef ;
+
+def VEAE=
+ stest(veae); kanchar "vowel eae";
+ begintchar(v_eae_code,cb_pa_width#,x_height#,0,0,0,0);
+ vb_eae_form;
+ sketch vb_a_pb;
+ endtchar; etest;
+enddef ;
+
+def VI =
+ stest(vi); kanchar "vowel y";
+ begintchar(v_i_code,cb_pa_width#,x_height#,0,0,0,0);
+ vb_i_form;
+ draw vb_a_pb;
+ endtchar; etest;
+enddef;
+
+def VAO =
+ stest(vao); kanchar "vowel ao";
+ begintchar(v_ao_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_ja_form;
+ endtchar; etest;
+enddef;
+
+def VAOO =
+ stest(vaoo); kanchar "vowel aoo";
+ begintchar(v_aoo_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_ja_form;
+ vm_hook_form(2,2);
+ endtchar; etest;
+enddef;
+
+def VAU=
+ stest(vau); kanchar "vowel ow";
+ begintchar(v_au_code,5/4cb_ja_width#,asc_height#,0,0,0,0);
+ cb_ja_form;
+ z12=top z2;
+ vm_au_form(12,w);
+ h:=top y12c; w:=rt x1000b;
+ endtchar; etest;
+enddef;
+
+% Begin of Vowel Modifiers.......
+
+def VMAH =
+ stest(vmp); kanchar "vowel modifier of ah";
+ begintchar(vm_ah_code,vm_ah_width#,x_height#+vm_ah_height#,0,0,0,0);
+ lft top z77 = (0, x_height);
+ vmah_form(77);
+ pivot_message(x77);
+ endtchar; etest;
+enddef;
+
+def VMA =
+ stest(vma); kanchar "vowel modifier of a";
+ begintchar(vm_a_code,vm_a_width#,asc_height#,0,0,0,0);
+ lft top z1=(0,x_height);
+ vmfa_form(1);
+ pivot_message(x1);
+ endtchar; etest;
+enddef ;
+
+def VMAA =
+ stest(vmaa); kanchar "vowel modifier of aa";
+ % used for kha,nga,ja,nya etc.
+ begintchar(vm_aa_code,vm_aa_width#,asc_height#,0,0,0,0);
+ lft top z0 = (0, x_height);
+ vmfaa_form(0) ;
+ pivot_message(x0);
+ endtchar; etest;
+enddef ;
+
+def VME=
+ stest(vme); kanchar "vowel modifer of e ";
+ begintchar(vm_e_code,vm_e_width#,vm_e_height1#+ascunit#,0,0,0,0);
+ vm_e_form;
+ pivot_message(.5u);
+ endtchar; etest;
+enddef ;
+
+def VMEE=
+ stest(vmee); kanchar "vowel modifier of ee";
+ begintchar(vm_ee_code,vm_e_width#,asc_height#,0,0,0,0);
+ vm_ee_form;
+ %vm_hook_form(7,3);
+ pivot_message(x2);
+ endtchar; etest;
+enddef;
+
+def VMU =
+ stest(vmu); kanchar "vowel modifier of u";
+ begintchar(vm_u_code,vm_u_width#,x_height#,0,0,0,0);
+ rt z1 = (0,.6w_height);
+ vm_u_form(1);
+ w:=rt x1b;
+ pivot_message(x1d);
+ endtchar; etest;
+enddef;
+
+def VMUU =
+ stest(vmuu); kanchar "vowel modifier of uu";
+ begintchar(vm_uu_code,vm_uu_width#,x_height#,0,0,0,0);
+ rt z1 = (0,.6w_height);
+ vm_uu_form(1);
+ endtchar; etest;
+enddef;
+
+def VMRO =
+ stest(vmro); kanchar "vowel modifier of ro";
+ begintchar(vm_ro_code,vm_ro_width#-3u#,x_height#,.5des_depth#,0,ul#,0);
+ cc_clear ;
+ vm_ro_form; %cc_whd(0,1);
+ %cc_whd(0,1);
+ endtchar; etest;
+enddef;
+
+
+def VMROO =
+ stest(vmroo); kanchar "vowel modifier of roo";
+ begintchar(vm_roo_code,vm_ro_width#+vm_bar_width#-3u#,x_height#,.5des_depth#,0,ul#,0);
+ cc_clear ;
+ vm_ro_form;
+ z10 =(x1+.9vm_bar_width, y1);
+ rt z11 = (x1+vm_bar_width, y1 -2u);
+ z12 = (x1+.9vm_bar_width, y1 -u);
+ path cd, bar_p;
+ bar_p = z1---z10..z11..z12;
+ cd = bar_p scaled 1 shifted (-3u, -.5des_depth) rotated 0 ;
+ sketch cd;
+ endtchar; etest;
+enddef;
+
+def VMEA =
+ stest(vmea); kanchar "vowel modifier of ea";
+ begintchar(vm_ea_code,vm_ea_width#,x_height#+vm_ea_height#,0,0,0,0);
+ lft top z77 = (0, x_height);
+ vmfea_form(77);
+ pivot_message(x77);
+ endtchar; etest;
+enddef;
+
+def VMEAA =
+ stest(vmeaa); kanchar "vowel modifier of ea";
+ begintchar(vm_ea1_code,vm_ea1_width#,x_height#+vm_ea_height#,0,0,0,0);
+ bar_forma(vm_ea1_width) ;
+ %lft top z77 = (0, x_height);
+ vmfea_form(301);
+ pivot_message(x300);
+ endtchar; etest;
+enddef;
+
+def VMY =
+ stest(vmy); kanchar "vowel modifier of y";
+ begintchar(vm_y_code,.5vm_ro_width#,x_height#,des_depth#+1.4u#,0,ul#,0);
+ vm_y_form; %cc_whd(0,1);
+ path ct ;
+ %ct = vm_y_p scaled 1.3 shifted (-1.5u, 4.3u) rotated 0 ;
+ ct = vm_y_p scaled .85 shifted (-2.0u, -.5des_depth) rotated 0 ;
+ sketch ct;
+ %cc_clear; cc_transform(ct);
+ %cc_whd(1,0);
+ endtchar; etest;
+enddef;
+
+def VMAU=
+ stest(vmau); kanchar "vowel modifier au";
+ begintchar(vm_au_code,vm_au_width#,asc_height#,0,0,0,0);
+ lft z12 = (0, x_height);
+ vm_au_form(12,w);
+ pivot_message(x12);
+ endtchar; etest;
+enddef;
+
+% --------------------End of the Vowel and Vowel modifiers.------------
+
+%---------------------Begin of Kannada Consonant and its conjunctions.--------
+def CBKA=
+ stest(cbka); kanchar "base of consonant ka";
+ begintchar(cb_ka_code,cb_ka_width#,x_height#,0,0,0,0);
+ cb_ka_form;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCKA=
+ stest(ccka); kanchar "consonant conjunction of ka";
+ begintchar(cc_ka_code,cb_ka_width#,x_height#,0,0,0,0);
+ cb_ka_form;
+ cc_clear; cc_transform(cb_ka_pa);
+ cc_transform(cb_ka_pb); cc_transform(cb_ka_pc);
+ cc_whd(1,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBKHA=
+ stest(cbkha); kanchar "base of consonant kha";
+ begintchar(cb_kha_code,cb_kha_width#,x_height#,wedge_depth#,0,0,0);
+ cb_kha_form;
+ sketch cb_kha_p;
+ pivot_message(x12,x400);
+ endtchar; etest;
+enddef ;
+
+def CCKHA=
+ stest(cckha); kanchar "consonant conjunction of kha";
+ begintchar(cc_kha_code,cb_kha_width#,x_height#,0#,0,0,0);
+ cb_kha_form;
+ cc_clear; cc_transform(cb_kha_p);
+ cc_whd(1,0);
+ pivot_message(.6w);
+ endtchar; etest;
+enddef ;
+
+def CBGA=
+ stest(cbga); kanchar "base of consonant ga";
+ begintchar(cb_ga_code,cb_ga_width#,x_height#,0,0,0,0);
+ cb_ga_form;
+ sketch cb_ga_p;
+ bar_forma(cb_ga_width-.5u);
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCGA=
+ stest(ccga); kanchar "consonant conjunct of ga";
+ begintchar(cc_ga_code,cb_ga_width#,x_height#,0,0,0,0);
+ cb_ga_form;
+ cc_clear; cc_transform(cb_ga_p);cc_whd(0,0);
+ %pivot_message(x3*cc_scale);
+ cc_whd(1,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+
+def CBGHA =
+ stest(cbgha); kanchar "base of consonant gha";
+ begintchar(cb_gha_code,cb_pa_width#+1/2vm_u_width#,x_height#,wedge_depth#,0,0,0);
+ cb_pa_form;
+ top lft z77=(1/2cb_pa_width-1/2c_height-.5u, top (x_height - c_height));
+ place_lit_circ(77, 1);
+ path new_path ;
+
+ sketch cb_pa_p ;
+ top z10=1/2[z46,z46];
+ %z50=(x48+1/4u,y48) ;
+ wedge(10);
+ vm_ghu_form(48);
+ bar_forma(.9cb_pa_width); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %bar_form(0,cb_ka_width);
+ %vm_au_form(301,w);
+ %vmah_form(301); % tale-ardha akshara
+ %vm_u_form(400);
+
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def transform_gha(text t) =
+ path ct_p ;
+ cc_transform(t) ;
+ undraw cc_transformed_path ;
+ ct_p = cc_transformed_path scaled .95 shifted (-1.5u, 2u) rotated 0 ;
+ sketch ct_p ;
+enddef ;
+
+def CCGHA=
+ stest(ccgha); kanchar "consonant conjunct of gha";
+ begintchar(cc_gha_code,cb_pa_width#+1/4vm_u_width#-2u#,x_height#,0,0,0,0);
+ cb_pa_form;
+
+ top lft z77=(1/2cb_pa_width-1/2c_height-.5u, top (x_height - c_height));
+ place_lit_circ(77, 1);
+
+ sketch cb_pa_p;
+ top z10=1/2[z46,z46];
+ z50=(x48+1/4u,y48) ;
+ wedge(10);
+ vm_ghu_form(48);
+
+ path ca, cb, cc ;
+ cc_clear; %cc_transform(pl_lit_cir_p);
+ transform_gha(cb_pa_p);
+ transform_gha(wedge_p);
+ transform_gha(vm_ghu_p);cc_whd(1,1);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+
+def CBNGA =
+ stest(cbnga); kanchar "base of consonant nga";
+ begintchar(cb_nga_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_ja_form;
+ sketch cb_ja_pc;
+ sketch cb_nga_p; % puts bowl to nga.
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(21) ;
+ %vmfea_form(21);
+ %vm_au_form(21,w);
+
+ pivot_message(x21-1.5u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCNGA =
+ stest(ccnga); kanchar "base of consonant nga";
+ begintchar(cc_nga_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_ja_form;
+ cc_clear; cc_transform(cb_ja_pa);
+ cc_transform(cb_nga_p); cc_transform(cb_ja_pc);
+ cc_whd(1,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+
+def CBCHA =
+ stest(cbcha); kanchar "base of consonant cha";
+ begintchar(cb_cha_code,cb_ja_width#+.5u#,x_height#,0,0,0,0);
+ cb_ch_form;
+ pivot_message(x20-u,x400);
+ endtchar; etest;
+enddef ;
+
+def transform_char(text t) =
+ path ct_p ;
+ cc_transform(t) ;
+ undraw cc_transformed_path ;
+ ct_p = cc_transformed_path scaled 1 shifted (-u, 1.5u) rotated 0 ;
+ sketch ct_p ;
+enddef ;
+
+def CCCHA =
+ stest(cccha); kanchar "consonant conjunction of cha";
+ begintchar(cc_cha_code,cb_ja_width#-2.5u#,x_height#,0,0,0,0);
+ cb_ch_form;
+ cc_clear; transform_char(cb_cha_pa);
+ transform_char(cb_cha_pb);
+ transform_char(cb_cha_pc);
+ cc_whd(1,1);
+ endtchar; etest;
+enddef ;
+
+def CBCCHA=
+ stest(cbccha); kanchar "base of consonant ccha";
+ begintchar(cb_ccha_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_cch_form;
+ wedge(8);
+ pivot_message(x12-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCCCHA=
+ stest(ccccha); kanchar "consonant conjunction ccha";
+ begintchar(cc_ccha_code,cb_ja_width#-2u#,x_height#,0,0,0,0);
+ cb_cch_form;
+ wedge(8);
+ cc_clear; transform_char(cb_ccha_pa);
+ transform_char(wedge_p);
+ cc_whd(0,0);
+ endtchar; etest;
+enddef ;
+
+
+def CBJA =
+ stest(cbja); kanchar "base of consonant ja";
+ begintchar(cb_ja_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_ja_form;
+ sketch cb_ja_pb; % puts bowl to ja.
+ pivot_message(x52-u,x400);
+ %vmfa_form(52); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(52) ;
+ %vmfea_form(52);
+ %vm_au_form(52,vm_au_width);
+ %vmah_form(52); % tale-ardha akshara
+ endtchar; etest;
+enddef ;
+
+def CCJA =
+ stest(ccja); kanchar "base of consonant ja";
+ begintchar(cc_ja_code,cb_ja_width#-2u#,x_height#,0,0,0,0);
+ cb_ja_form;
+ %sketch cb_ja_pb; % puts bowl to ja.
+ cc_clear; transform_char(cb_ja_pa);
+ transform_char(cb_ja_pb);cc_whd(0,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBJHA =
+stest(cbjha); kanchar "base of consonant jha";
+ begintchar(cb_jha_code,cb_ra_width#+2vm_u_width#,x_height#,wedge_depth#,
+ 0,0,0);
+ cb_ra_form;
+ % The next statement will identify the point on ra_form
+ % where the bowl will be attached.
+ z5 = (cb_ra_p) intersectionpoint ((x1,w_height)--(x1+w,w_height));
+ vm_u_form(5);
+ z6 = z5b;
+ wedge(6);
+ z7 = z6;
+ vm_u_form(7);
+ w:=rt x7b;
+ z8a=(x7d-.5u,y7d);
+
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(8a) ;
+ %vmfea_form(301);
+ %bar_form(0,cb_ka_width);
+ %vm_au_form(8a,w);
+
+ % to compute the joining point of "kombu for jha".
+ path inter;
+ inter = (.9w, .3x_height)--(1.1w, .3x_height);
+ z401 = vm_u_p intersectionpoint inter;
+ %vm_u_form(401);
+
+ pivot_message(x301,x401,x8a);
+
+ endtchar; etest;
+enddef;
+
+def CCJHA =
+ stest(ccjha); kanchar "consonant conjunct of jha";
+ begintchar(cc_jha_code,cb_ra_width#+2vm_u_width#-2.5u#,x_height#,0,0,0,0);
+ cb_ra_form;
+ % The next statement will identify the point on ra_form
+ % where the bowl will be attached.
+ z5=z4;
+ vm_u_form(5);
+ path p; p:=vm_u_p;
+ z6 = z5b;
+ wedge(6);
+ z7 = z6;
+ vm_u_form(7);
+ w:=rt x7b;
+ cc_clear; transform_char(cb_ra_p);
+ transform_char(p); transform_char(vm_u_p);
+ transform_char(wedge_p);cc_whd(1,0);
+ penlabels(5,6);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBNYA=
+ stest(cbnya); kanchar "base mf consonant nya";
+ begintchar(cb_nya_code,v_e_width#+half_plus_width#,x_height#,0,0,0,0);
+ cb_nya_form;
+ pivot_message(x17-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCNYA=
+ stest(ccnya); kanchar "consonant conjunction of nya";
+ begintchar(cc_nya_code,v_e_width#+half_plus_width#,x_height#,0,0,0,0);
+ cb_nya_form;
+ cc_clear; cc_transform(v_e_p);
+ cc_transform(cb_ny_pb); cc_whd(0,1);
+ pivot_message(0) ;
+ endtchar; etest;
+enddef;
+
+def CBTTA=
+ stest(cbtta); kanchar "base of consonant tta";
+ begintchar(cb_tta_code,cb_tta_width#,x_height#,0,0,0,0);
+ cb_tta_form;
+ pivot_message(x13-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCTTA=
+ stest(cctta); kanchar "base of consonant tta";
+ begintchar(cc_tta_code,cb_tta_width#-1.75u#,x_height#,0,0,0,0);
+ cb_tta_form;
+ cc_clear; transform_char(cb_tta_p);; cc_whd(1,0);
+ pivot_message(w);
+ endtchar; etest;
+enddef ;
+
+def CBTTHA=
+ stest(cbttha); kanchar "base of consonant ttha";
+ begintchar(cb_ttha_code,cb_ra_width#,x_height#,0,0,0,0);
+ cb_ra_form;
+ z10 = (x1,1/2x_height);
+ fill_dot(10);
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCTTHA=
+ stest(ccttha); kanchar "consonant conjunct of ttha";
+ begintchar(cc_ttha_code,cb_ra_width#,x_height#,0,0,0,0);
+ cb_ra_form;
+ z10 = (x1,1/2x_height);
+ fill_dot(10);
+ cc_clear; cc_transform(cb_ra_p);
+ cc_f_transform(fill_dot_p);cc_whd(0,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+
+def CBDDA=
+ stest(cbdda); kanchar "base of consonant dda";
+ begintchar(cb_dda_code,.9cb_da_width#,x_height#,0,0,0,0);
+ cb_dda_form;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCDDA=
+ stest(ccdda); kanchar "consonant conjunction of dda";
+ begintchar(cc_dda_code,.9cb_da_width#-2u#,x_height#,0,0,0,0);
+ cb_dda_form;
+ cc_clear; cc_transform(cb_dda_p);cc_whd(0,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBDDHA=
+ stest(cbddha); kanchar "base of consonant ddha";
+ begintchar(cb_ddha_code,.9cb_da_width#,x_height#,0,0,0,0);
+ cb_dda_form;
+ wedge(3);
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCDDHA=
+ stest(ccddha); kanchar "consonant conjunction of ddha";
+ begintchar(cc_ddha_code,.9cb_da_width#-2u#,x_height#,0,0,0,0);
+ cb_dda_form;
+ wedge(3);
+ cc_clear; cc_transform(cb_dda_p);
+ cc_transform(wedge_p);cc_whd(1,1);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBNNA=
+ stest(cbnna); kanchar "base of consonant nna";
+ begintchar(cb_nna_code,cb_nna_width#,x_height#,0,0,0,0);
+ cb_nna_form;
+ pivot_message(x400-.5u);
+ endtchar; etest;
+enddef ;
+
+def CCNNA=
+ stest(ccnna); kanchar "consonant conjunct of nna";
+ begintchar(cc_nna_code,cb_nna_width#-u#,x_height#,0,0,0,0);
+ cb_nna_form;
+ cc_clear; cc_transform(cb_nna_p);cc_whd(0,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBTA=
+ stest(cbta); kanchar "base of consonant ta";
+ begintchar(cb_ta_code,cb_ta_width#,x_height#,0,0,0,0);
+ cb_ta_form;
+ sketch cb_ta_p;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCTA=
+ stest(ccta); kanchar "consonant conjunct of ta";
+ begintchar(cc_ta_code,vmwidth#,0,0,0,0,0);
+ % d is set later
+ top z1=(0,0); barandhook_formk(1,w,5); erase sketch barandhook_p;
+ sketch barandhook_p reflectedabout ( top z1, top z1+(w,0))
+ shifted (0, (-bot_accent+ (bot y1c)));
+ d:=bot_accent- (bot y1c);
+ pivot_message(w);
+ endtchar; etest;
+enddef ;
+
+def CBTHA=
+ stest(cbtha); kanchar "base of consonant tha";
+ begintchar(cb_tha_code,cb_da_width#,x_height#,wedge_depth#,0,0,0);
+ cb_da_form;
+ wedge(4);
+ z10 = (x1,2/3x_height-uh);
+ fill_dot(10);
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCTHA=
+ stest(cctha); kanchar "consonant conjunct of tha";
+ begintchar(cc_tha_code,cb_da_width#-2u#,x_height#,0,0,0,0);
+ cb_da_form;
+ wedge(4);
+ z10 = (x1,2/3x_height-uh);
+ fill_dot(10);
+ cc_clear; cc_transform(cb_da_p);
+ cc_transform(wedge_p); cc_f_transform(fill_dot_p);
+ cc_whd(0,1);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBDA=
+ stest(cbda); kanchar "base of consonant da";
+ begintchar(cb_da_code,cb_da_width#,x_height#,0,0,0,0);
+ cb_da_form;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCDA=
+ stest(ccda); kanchar "consonant conjunct of da";
+ begintchar(cc_da_code,cb_da_width#-2u#,x_height#,0,0,0,0);
+ cb_da_form;
+ cc_clear; cc_transform(cb_da_p);
+ cc_whd(0,0);
+ %pivot_message(x4*cc_scale);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+
+def CBDHA=
+ stest(cbdha); kanchar "base of consonant dha";
+ begintchar(cb_dha_code,cb_da_width#,x_height#,0,0,0,0);
+ cb_da_form;
+ wedge(4);
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCDHA=
+ stest(ccdha); kanchar "consonant conjunct of da";
+ begintchar(cc_dha_code,cb_da_width#-2u#,x_height#,0,0,0,0);
+ cb_da_form;
+ wedge(4);
+ cc_clear; cc_transform(cb_da_p);
+ cc_transform(wedge_p);
+ cc_whd(1,1);
+ pivot_message(w/2);
+ %pivot_message(x4*cc_scale);
+ endtchar; etest;
+enddef ;
+
+
+def CBNA=
+ stest(cbna);kanchar "base of consonant na";
+ begintchar(cb_na_code,cb_na_width#,x_height#,wedge_depth#,0,0,0);
+ cb_na_form;
+ sketch cb_na_p;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CBNAA=
+ stest(cbnaa); kanchar "consonant of nX (alternative)";
+ begintchar(cb_naa_code,cb_na_width#,x_height#,0,0,0,0);
+ naa_form ;
+ pivot_message(0);
+ endtchar; etest;
+enddef ;
+
+def CCNA=
+ stest(ccna); kanchar "consonant conjunct of na";
+ begintchar(cc_na_code,2.5u#,x_height#-3u#,des_depth#,0,ul#,0);
+ numeric wid;
+ wid = 7u ;
+ top lft z1 = (.4wid,.5x_height);
+ z2 = (.55wid,(x_height-d)/2);
+ bot z3 = (1/4wid,-d);
+ lft z4 = (0,-d+1/2sc_height);
+ z5 = (x3,y3+sc_height);
+ bot z6 = (3/4wid,-d);
+ rt z7 = (wid,y4);
+ path cc_na_p, ct;
+ cc_na_p = z1..z2..z3..z4..z5..z6..z7;
+ ct = cc_na_p scaled 1 shifted (-3u, 6u) rotated -10 ;
+ cc_clear; transform_char(ct);
+ cc_whd(1,0);
+ pivot_message(w/2);
+ endtchar; etest;
+enddef ;
+
+def CBPA=
+ stest(cbpa); kanchar "base of consonant pa";
+ begintchar(cb_pa_code,cb_pa_width#,x_height#,0,0,0,0);
+ cb_pa_form;
+ top lft z77=(1/2cb_pa_width-1/2c_height-.5u, top (x_height - c_height));
+ place_lit_circ(77, 1);
+ sketch cb_pa_p;
+
+ bar_forma(cb_pa_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def transform_charb(text t) =
+ path ct_p ;
+ cc_transform(t) ;
+ undraw cc_transformed_path ;
+ ct_p = cc_transformed_path scaled 1 shifted (-2u, 2.5u) rotated 0 ;
+ sketch ct_p ;
+enddef ;
+
+def CCPA=
+ stest(ccpa); kanchar "consonant conpunction of pa";
+ begintchar(cc_pa_code,cb_pa_width#-2u#,x_height#,0,0,0,0);
+ cb_pa_form;
+ pivot_message(3/4w);
+ cc_clear; transform_charb(cb_pa_p);
+ cc_whd(1,0);
+ endtchar; etest;
+enddef ;
+
+
+def CBPHA=
+ stest(cbpha); kanchar "base of consonant pha";
+ begintchar(cb_pha_code,cb_pa_width#,x_height#,0,0,0,0);
+ cb_pa_form;
+ %pivot_message(x1,x1);
+ top lft z77=(1/2cb_pa_width-1/2c_height-.5u, top (x_height - c_height));
+ place_lit_circ(77, 1);
+ top z10=1/2[z46,z46];
+ wedge(10);
+ sketch cb_pa_p;
+ sketch wedge_p;
+ bar_forma(cb_pa_width-.5u); % z301 is comming from bar_forma...
+ %vmfa_form(301); % Following are test to see How vowel modifer looks.
+ %vmfaa_form(301) ;
+ %vmfea_form(301);
+ %vm_au_form(301,vm_au_width);
+
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCPHA=
+ stest(ccpha); kanchar "consonant conpunction of pha";
+ begintchar(cc_pha_code,cb_pa_width#-2u#,x_height#,0,0,0,0);
+ cb_pa_form;
+
+ sketch cb_pa_p;
+ top z10=1/2[z46,z46];
+ wedge(10);
+
+ cc_clear; transform_charb(cb_pa_p);
+ transform_charb(wedge_p);
+ cc_whd(1,1);
+ endtchar; etest;
+
+enddef ;
+
+def CBBA=
+ stest(cbba); kanchar "base of consonant ba";
+ begintchar(cb_ba_code,cb_ba_width#,x_height#,0,0,0,0);
+ cb_ba_form;
+ pivot_message(x9-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCBA=
+ stest(ccba); kanchar "consonant conjunct of ba";
+ begintchar(cc_ba_code,cb_ba_width#-3.5u#,top_height#,0,0,ul#,0);
+ cb_ba_form;
+ cc_clear; transform_charb(((subpath(0,7) of cb_ba_p)..(x9,1.3y9)));
+ cc_whd(1,0);
+ endtchar; etest;
+enddef;
+
+def CBBHA=
+ stest(cbbha); kanchar "base of consonant bha";
+ begintchar(cb_bha_code,cb_ba_width#,x_height#,0,0,0,0);
+ cb_ba_form;
+ wedge(6);
+ %vmah_form(9); % tale-ardha akshara
+ pivot_message(x9-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCBHA=
+ stest(ccbha); kanchar "consonant conjunct of bha";
+ begintchar(cc_bha_code,cb_ba_width#-3.5u#,top_height#,0,0,ul#,0);
+ cb_ba_form;
+ wedge(6);
+ cc_clear; transform_charb(((subpath(0,7) of cb_ba_p)..(x9,1.3y9)));
+ transform_charb(wedge_p);
+ cc_whd(1,1);
+ pivot_message(x12,x400);
+ endtchar; etest;
+enddef;
+
+
+def CBMA=
+ stest(cbma); kanchar "base of consonant ma";
+ begintchar(cb_ma_code,cb_pa_width#+vm_u_width#,x_height#,0,0,0,0);
+ cb_va_form;
+ sketch cb_va_p;
+ z65 = (cb_va_p) intersectionpoint ((x46,.8w_height)--(x46+cb_pa_width,.8w_height));
+ vm_u_form(65);
+
+ % to compute the joining point of "kombu for nya".
+ z500=z65b;
+ %vm_u_form(500);
+ z67=(x65d-.5u, y65d);
+ %vm_au_form(67,vm_au_width);
+ %vmfaa_form(67) ;
+ %vmah_form(301); % tale-ardha akshara
+
+ pivot_message(x301,x500, x67);
+
+ endtchar; etest;
+enddef ;
+
+def CCMA=
+ stest(ccma); kanchar "consonant conjunct of ma";
+ begintchar(cc_ma_code,4u#,x_height#,des_depth#,0,ul#,0);
+ path cc_ma_p;
+ numeric wid;
+ wid = 6u;
+ rt z1=(wid,-.8d+uh);bot z2=(wid/2,-d);
+ lft z3=(0,-.1d); z4=(.3wid,.15x_height); %z4=(2/3wid,x_height/5);
+ rt z5=(.6wid,0); z6=(.3wid,-.075d);
+ z7=(.15wid,.1x_height); z8=(.075wid,.25x_height);
+ z9=(.14wid,.55x_height);
+ cc_ma_p = z1..z2..z3..z4..z5..z6..z7..tension1.2..z8..tension 1.2..z9;
+ sketch cc_ma_p;
+ path ct;
+ ct = cc_ma_p scaled 1 shifted (0, 3.5u) ;
+ %cc_clear; cc_transform(cc_ma_p); cc_whd(0,0);
+ cc_clear; transform_charb(ct); cc_whd(0,0);
+ endtchar; etest;
+enddef ;
+
+
+def CBYA=
+ stest(cbya); kanchar "base of consonant ya";
+ begintchar(cb_ya_code,cb_ya_width#+vm_u_width#,x_height#,0,0,0,0);
+ cb_ya_form;
+ pivot_message(x7,x400, x10);
+ endtchar; etest;
+enddef;
+
+def CCYA=
+ stest(ccya); kanchar "consonant conjunct of ya";
+ %begintchar(cc_ya_code,6u#,x_height#,des_depth#,0,ul#,0);
+ begintchar(cc_ya_code,4.5u#,x_height#,des_depth#+2.5u#,0,0,0);
+ numeric y_width ;
+ y_width = 6u ;
+ lft z1 = (0,-1/3des_depth); z2 = (y_width/4,0); z3 = (1/4y_width,-1/2des_depth);
+ bot z4 = (1/3y_width,-des_depth); z5 = (2/3y_width,0); z6 = (.45y_width,.45j_height);
+ z7 = (.6y_width,.7j_height); z8=(.65y_width,.4j_height);
+
+ path cc_ya_p, ct ;
+ cc_ya_p = z1..z2..z3..z4..z5..{up}z6..z7..z8;
+ %ct = cc_ya_p scaled 1.3 shifted (0, -3.5u) ;
+ ct = cc_ya_p scaled 1.0 shifted (0, -2u) ;
+ sketch ct;
+ %cc_clear; cc_transform(ct); cc_whd(1,0);
+ pivot_message(0);
+ endtchar; etest
+enddef;
+
+def CBRA =
+ stest(cbra); kanchar "base of consonant ra";
+ begintchar(cb_ra_code,cb_ra_width#,x_height#,0,0,0,0);
+ cb_ra_form;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CBRRA =
+ stest(cbrra); kanchar "base of consonant rra";
+ begintchar(cb_rra_code,cb_rra_width#,x_height#,0,0,0,0);
+ cb_rra_form;
+ pivot_message(x7,x400);
+ endtchar; etest;
+enddef ;
+
+% For arkavattu;
+def CCRRA =
+ stest(ccara); kanchar "base of consonant ra(as arkavattu)";
+ begintchar(cc_ara_code,cb_ra_width#,x_height#,0,0,0,0);
+ arkavattu ;
+ sketch arka_pa reflectedabout((0,0),(w,0)) shifted (0,h);
+ sketch arka_pb reflectedabout((0,0),(w,0)) shifted (0,h);
+ endtchar; etest;
+enddef ;
+
+
+def CCRA =
+ stest(ccra); kanchar "consonant conjunct of ra";
+ begintchar(cc_ra_code,7u#,0,3.5uh#,0,0,0);
+ top lft z1=(0,-bot_accent); bot z2=(w/2,-d); top rt z3=(w,-bot_accent);
+ sketch z1..z2..z3;
+ pivot_message(w);
+ endtchar; etest;
+enddef ;
+
+
+def CBLA =
+ stest(cbla); kanchar "base of consonant la";
+ begintchar(cb_la_code,cb_la_width#,x_height#,0,0,0,0);
+ cb_la_form;
+ sketch cb_la_p;
+ pivot_message(x55-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCLA =
+ stest(ccla); kanchar "consonant conjunct of la";
+ begintchar(cc_la_code,7u#,0,4.5uh#,0,0,0);
+ path s,t;
+ bot z1=(w/4,-d); lft z2 =(0,-1/2d); top z3=(x1,-bot_accent);
+ top z4=(w/2,y2);
+ s= z1..z2..z3..z4;
+ t=s reflectedabout ((w/2,h),(w/2,-d));
+ sketch s;sketch t;
+ pivot_message(.8w);
+ endtchar; etest;
+enddef ;
+
+def CBVA=
+ stest(cbva); kanchar "base of consonant va";
+ begintchar(cb_va_code,cb_pa_width#,x_height#,0,0,0,0);
+ cb_va_form;
+ sketch cb_va_p ;
+ %pivot_message(x46,x400);
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCVA=
+ stest(ccva); kanchar "consonant conjunction of va";
+ begintchar(cc_va_code,cb_pa_width#,x_height#,0,0,0,0);
+ cb_va_form;
+ vmfa_form(301); % Following are test to see How vowel modifer looks.
+ cc_clear; cc_transform(cb_va_p);
+ cc_transform(bar_pa) ; cc_transform(bar_p) ;
+ cc_whd(1, 0);
+ endtchar; etest;
+enddef ;
+
+def CBCA=
+ stest(cbca); kanchar "base of consonant ca";
+ begintchar(cb_ca_code,cb_ca_width#,x_height#,0,0,0,0);
+ cb_ca_form;
+ draw cb_ca_p;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCCA=
+ stest(ccca); kanchar "consonant conjunct of ca";
+ begintchar(cc_ca_code,cb_ca_width#-2.5u#,asc_height#,0,0,ul#,0);
+ cb_ca_form;
+ cc_clear; transform_charb(((x5, .8asc_height)..cb_ca_p)); cc_whd(1,0);
+ endtchar; etest;
+enddef ;
+
+def CBSA =
+ stest(cbsa); kanchar "base of consonant sa";
+ begintchar(cb_sa_code,cb_na_width#,x_height#,0,0,0,0);
+ cb_sa_form;
+ sketch cb_sa_p;
+ pivot_message(x301+.2u,x400);
+ endtchar; etest;
+enddef ;
+
+def CCSA =
+ stest(ccsa); kanchar "consonant conjunct of sa";
+ begintchar(cc_sa_code,cb_na_width#-2.5u#,x_height#,0,0,ul#,0);
+ cb_sa_form;
+ %sketch cb_na_p;
+ cc_clear; transform_charb(cb_sa_p); cc_whd(1,0);
+ endtchar; etest;
+enddef ;
+
+def CBHA =
+ stest(cbha); kanchar "base of consonant ha";
+ begintchar(cb_ha_code,cb_ha_width#,x_height#,0,0,0,0);
+ cb_ha_form;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCHA =
+ stest(ccha); kanchar "consonant conjunct of ha";
+ begintchar(cc_ha_code,cb_ha_width#,x_height#,0,0,0,0);
+ cb_ha_form;
+ cc_clear; cc_transform(cb_ha_p);
+ cc_whd(0,0);
+ pivot_message(0) ;
+ endtchar; etest;
+enddef ;
+
+def CBLLA =
+ stest(cblla); kanchar "base of consonant lla";
+ begintchar(cb_lla_code,cb_lla_width#,x_height#,0,0,0,0);
+ cb_lla_form;
+ sketch cb_lla_p;
+ pivot_message(x12-u,x400);
+ endtchar; etest;
+enddef ;
+
+def CBLLAA =
+ stest(cbllaa); kanchar "base of consonant lla";
+ begintchar(cb_llaa_code,cb_rra_width#,x_height#,0,0,0,0);
+ cb_rra_form;
+ undraw cb_rra_pd ;
+ pivot_message(x7,x400);
+ endtchar; etest;
+enddef ;
+
+def CCLLA =
+ stest(cclla); kanchar "consonant conjunct of lla";
+ begintchar(cc_lla_code,cb_lla_width#,asc_height#,0,0,ul#,0);
+ cb_lla_form;
+ cc_clear; cc_transform(cb_lla_p);
+ cc_whd(1,0);
+ endtchar; etest;
+enddef ;
+
+def CBSHA=
+ stest(cbsha); kanchar "base of consonant sha";
+ begintchar(cb_sha_code,cb_pa_width#,x_height#,0,0,0,0);
+ cb_sha_form;
+ sketch cb_pa_p;
+ sketch cb_sha_pb;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CCSHA=
+ stest(ccsha); kanchar "consonant conjunct of sha";
+ begintchar(cc_sha_code,cb_pa_width#-2u#,x_height#,0,0,0,0);
+ cb_sha_form;
+ cc_clear; transform_charb(cb_pa_p);
+ transform_charb(cb_sha_pb); cc_whd(0,0);
+ endtchar; etest;
+enddef ;
+
+def CBKSHA =
+ stest(cbksha); kanchar "base of consonant ksha";
+ begintchar(cb_ksha_code,cb_ka_width#,x_height#,cb_ksha_depth#,0,0,0);
+ cb_ksha_form;
+ sketch cb_ka_pa;
+ sketch cb_ka_pb;
+ sketch cb_ka_pc;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+% ----------------End of Kannada Consonant and its conjunctions.----------
+
+% ----------------Begin of Kannada Vowel modifed Consonants(special)----------
+
+def CVKE =
+ stest(cvke); kanchar "consonant+vowel ka+e";
+ begintchar(cv_ke_code,cb_ka_width#,x_height#+vm_e_heightj#,0,0,0,0);
+ cb_ka_form;
+ undraw bar_pa; %cb_ka_pc;
+ vm_e_form_a(8,.1u, .3u); %sketch vm_e_p;
+ path vm_e_pa,vm_e_pb,vm_e_pc ;
+ vm_e_pa = cb_ka_pc softjoin vm_e_p;
+ sketch vm_e_pa;
+ endtchar; etest;
+enddef;
+
+def CVKHE =
+ stest(cvkhe); kanchar "consonant+vowel kha+e";
+ begintchar(cv_khe_code,cb_kha_width#,x_height#+vm_e_heightj#,0,0,0,0);
+ cb_kha_form;
+ sketch cb_kha_p;
+ vm_e_form_a(11,.6u, 1.u);
+ path vm_e_pa,vm_e_pb,vm_e_pc ;
+ vm_e_pa = vm_e_p reflectedabout(z11, z11+(.1u, .8u));
+ vm_e_pb = vm_e_pa reflectedabout(z11, z11+(-.45u, .8u));
+ %sketch cb_kha_p softjoin vm_e_pb ;
+ sketch vm_e_pb ;
+ pivot_message(1.99u);
+ endtchar; etest;
+enddef;
+
+def CVGE=
+ stest(cvge); kanchar "consonant+vowel e ga+e";
+ begintchar(cv_ge_code,cb_ga_width#,x_height#+2ascunit#,0,0,0,0);
+ cb_ga_form;
+ sketch cv_ge_p;
+ sketch cb_ga_p;
+ %vm_e_form;
+ endtchar; etest;
+enddef ;
+
+def CVGHE =
+ stest(cvghe); kanchar "base of consonant gha+ Vowel modifer e";
+ begintchar(cv_ghe_code,cb_pa_width#+1/2vm_u_width#,x_height#+.8u#,wedge_depth#,0,0,0);
+ cb_pa_form;
+ top lft z77=(1/2cb_pa_width-1/2c_height, top (x_height - c_height));
+ %place_lit_circ(77, 1);
+ path new_path ;
+
+ sketch cb_pa_p ;
+ top z10=1/2[z46,z46];
+ wedge(10);
+ vm_ghu_form(48);
+ vm_e_form;
+ undraw vm_e_p;
+ path ct;
+ ct = vm_e_p scaled .75 shifted (2u, -u) rotated 0 ;
+ sketch ct;
+
+ %pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CVCHE =
+ stest(cvche); kanchar "consonant+vowel e cha+e";
+ begintchar(cv_che_code,cb_ja_width#,x_height#,0,0,0,0);
+ cb_ch_form;
+ vm_e_form_a(9,.6u, 1.u);
+ undraw cb_cha_pc ;
+ path vm_e_pa,vm_e_pb,vm_e_pc ;
+ vm_e_pa = vm_e_p reflectedabout(z9, z9+(.1u, .8u));
+ vm_e_pb = vm_e_pa reflectedabout(z9, z9+(-.1u, .8u));
+ sketch vm_e_pb ;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVCCHE=
+ stest(cvcche); kanchar "consonant+vowel e ccha+e";
+ begintchar(cv_cche_code,cb_ja_width#,x_height#+2.6u#,0,0,0,0);
+ cb_cch_form;
+ wedge(8);
+ vm_e_form_a(11,.6u, 1.u);
+ path vm_e_pa,vm_e_pb,vm_e_pc ;
+ vm_e_pa = vm_e_p reflectedabout(z11, z11+(.1u, .8u));
+ vm_e_pb = vm_e_pa reflectedabout(z11, z11+(-.28u, .8u));
+ sketch vm_e_pb ;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVJE =
+ stest(cvje); kanchar "consonant+vowel e cbja+e";
+ begintchar(cv_je_code,cb_ja_width#,x_height#+1.5u#,0,0,0,0);
+ cb_ja_form;
+ sketch cb_ja_pe; % puts bowl to ja.
+ %pivot_message(x3c,x7);
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVJHE =
+ stest(cvjhe); kanchar "consonant+vowel e cbjha+e";
+ begintchar(cv_jhe_code,cb_ra_width#+2vm_u_width#,.9vm_e_heightx#,
+ wedge_depth#,0,0,0);
+ cb_ra_form;
+ % The next statement will identify the point on ra_form
+ % where the bowl will be attached.
+ z5 = (cb_ra_p) intersectionpoint ((x1,w_height)--(x1+w,w_height));
+ vm_u_form(5);
+ z6 = z5b;
+ wedge(6);
+ z7 = z6;
+ vm_u_form(7);
+ w:=rt x7b;
+ sketch cv_re_p;
+ undraw bar_pa;
+ endtchar; etest;
+enddef;
+
+def CVTTE=
+ stest(cvtte); kanchar "consonant+vowel e cbtta+e";
+ begintchar(cv_tte_code,cb_tta_width#,x_height#,0,0,0,0);
+ cb_tta_form;
+ undraw cb_tta_p ;
+ sketch cb_tta_pe ;
+ endtchar; etest;
+enddef ;
+
+def CVTTHE =
+ stest(cvtthe); kanchar "consonant+vowel e cbttha+e";
+ begintchar(cv_tthe_code,cb_ra_width#,.9vm_e_heightx#,0,0,0,0);
+ cb_ra_form;
+ undraw bar_pa;
+ z10 = (x1,1/2x_height);
+ fill_dot(10);
+ sketch cv_re_p;
+ %pivot_message(x1,x1);
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVDDE=
+ stest(cvdde); kanchar "consonant+vowel e cbdda+e";
+ begintchar(cv_dde_code,cb_da_width#,x_height#+1.7u#,0,0,0,0);
+ cb_dda_form;
+ undraw bar_pa ;
+ sketch cv_dde_p ;
+ %pivot_message(x1,x4);
+ endtchar; etest;
+enddef ;
+
+def CVDDHE=
+ stest(cvddhe); kanchar "consonant+vowel e cbddha+e";
+ begintchar(cv_ddhe_code,cb_da_width#,x_height#+1.7u#,0,0,0,0);
+ cb_dda_form;
+ sketch cv_dde_p ;
+ undraw bar_pa ;
+ wedge(3);
+ %pivot_message(x1,x4);
+ endtchar; etest;
+enddef ;
+
+def CVTE=
+ stest(cvte); kanchar "consonant+vowel e cbta+e";
+ begintchar(cv_te_code,cb_ta_width#,x_height#,0,0,0,0);
+ cb_ta_form;
+ sketch cb_te_p;
+ undraw bar_pa ;
+ %pivot_message(x10,x5);
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVTHE=
+ stest(cvthe); kanchar "consonant+vowel e cbtha+e";
+ begintchar(cv_the_code,cb_da_width#,x_height#+1.9u#,wedge_depth#,0,0,0);
+ cb_da_form;
+ undraw bar_pa ;
+ wedge(4);
+ z10 = (x1,2/3x_height-uh);
+ fill_dot(10);
+ %pivot_message(x1,x4);
+ pivot_message(.199u);
+ sketch cv_de_p;
+ endtchar; etest;
+enddef ;
+
+def CVDE=
+ stest(cvde); kanchar "consonant+vowel e cbda+e";
+ begintchar(cv_de_code,cb_da_width#,x_height#+1.9u#,0,0,0,0);
+ cb_da_form;
+ undraw bar_pa ;
+ sketch cv_de_p;
+ %pivot_message(x1,x4);
+ endtchar; etest;
+enddef ;
+
+def CVDHE=
+ stest(cvdhe); kanchar "consonant+vowel e cbda+e";
+ begintchar(cv_dhe_code,cb_da_width#,x_height#+1.9u#,0,0,0,0);
+ cb_da_form;
+ undraw bar_pa ;
+ sketch cv_de_p;
+ wedge(4);
+ %pivot_message(x1,x4);
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVNE=
+ stest(cvne);kanchar "consonant+vowel e cbna+e";
+ begintchar(cv_ne_code,cb_na_width#,x_height#,wedge_depth#,0,0,0);
+ cb_na_form;
+ sketch cb_ne_p;
+ undraw bar_pa ;
+ %pivot_message(x6,x6);
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVPE=
+ stest(cvpe); kanchar "consonant pa+ e";
+ begintchar(cv_pe_code,cb_pa_width#,x_height#+.8u#,0,0,0,0);
+ cb_pa_form;
+ top lft z77=(1/2cb_pa_width-1/2c_height, top (x_height - c_height));
+ sketch cb_pa_p;
+ vm_e_form;
+ undraw vm_e_p;
+ path ct;
+ ct = vm_e_p scaled .75 shifted (2u, -.5u) rotated 0 ;
+ sketch ct;
+ %pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CVPHE=
+ stest(cvphe); kanchar "consonant pha+ e";
+ begintchar(cv_phe_code,cb_pa_width#,x_height#+.8u#,0,0,0,0);
+ cb_pa_form;
+ top lft z77=(1/2cb_pa_width-1/2c_height, top (x_height - c_height));
+ sketch cb_pa_p;
+ top z10=1/2[z46,z46];
+ wedge(10);
+ vm_e_form;
+ undraw vm_e_p;
+ path ct;
+ ct = vm_e_p scaled .75 shifted (2u, -.5u) rotated 0 ;
+ sketch ct;
+ %pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CVBE=
+ stest(cvbe); kanchar "consonant+vowel e cbba+e";
+ begintchar(cv_be_code,cb_ba_width#,x_height#+1u#,0,0,0,0);
+ cb_ba_form;
+ undraw cb_ba_p;
+ sketch cb_be_p;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVBHE=
+ stest(cvbhe); kanchar "consonant+vowel e cbbha+e";
+ begintchar(cv_bhe_code,cb_ba_width#,x_height#+1u#,0,0,0,0);
+ cb_ba_form;
+ undraw cb_ba_p;
+ sketch cb_be_p;
+ wedge(6);
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVME=
+ stest(cvme); kanchar "consonant+vowel e cbma+e";
+ begintchar(cv_me_code,cb_pa_width#+vm_u_width#,x_height#,0,0,0,0);
+ cb_va_form;
+ sketch cb_ve_p;
+ z65 = (cb_va_p) intersectionpoint ((x46,.8w_height)--(x46+cb_pa_width,.8w_height));
+ vm_u_form(65);
+ undraw bar_pa ;
+ %w:=rt x3b;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVYE=
+ stest(cvye); kanchar "consonant+vowel e cbya+e";
+ begintchar(cv_ye_code,cb_ya_width#+vm_u_width#,x_height#+1.5u#,0,0,0,0);
+ cb_ya_form;
+ undraw cb_ya_pb ;
+ undraw bar_p ;
+ draw cb_ye_p ;
+ endtchar; etest;
+enddef;
+
+def CVRE =
+ stest(cvre); kanchar "consonant+vowel e cbra+e";
+ begintchar(cv_re_code,cb_ra_width#,x_height#,0,0,0,0);
+ cb_ra_form;
+ sketch cv_re_p;
+ undraw bar_pa ;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVLE =
+ stest(cvle); kanchar "consonant+vowel e cbla+e";
+ begintchar(cv_le_code,cb_la_width#,x_height#+1u#,0,0,0,0);
+ cb_la_form;
+ sketch cb_le_p;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVCE=
+ stest(cvce); kanchar "consonant+vowel e cbca+e";
+ begintchar(cv_ce_code,cb_ca_width#,x_height#,0,0,0,0);
+ cb_ca_form;
+ draw cb_ce_p;
+ undraw bar_pa ;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVLLE =
+ stest(cvlle); kanchar "consonant+vowel e cblla+e";
+ begintchar(cv_lle_code,cb_lla_width#,x_height#,0,0,0,0);
+ cb_lla_form;
+ sketch cb_lle_p;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVVE=
+ stest(cvve); kanchar "consonant+vowel e cbma+e";
+ begintchar(cv_ve_code,cb_pa_width#,x_height#,0,0,0,0);
+ cb_va_form;
+ sketch cb_ve_p;
+ z65 = (cb_va_p) intersectionpoint ((x46,.8w_height)--(x46+cb_pa_width,.8w_height));
+ undraw bar_pa ;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVVU=
+ stest(cvvu); kanchar "consonant va+u";
+ begintchar(cv_vu_code,cb_pa_width#+.6vm_u_width#,x_height#,.5des_depth#,0,0,0);
+ cb_va_form;
+ sketch cb_va_p ;
+ %pivot_message(x46,x400);
+ cv_vu_form(46);
+ pivot_message(x301);
+ endtchar; etest;
+enddef ;
+
+def CVVUU=
+ stest(cvvuu); kanchar "consonant va+uu";
+ begintchar(cv_vuu_code,cb_pa_width#+.8vm_uu_width#,x_height#,.5des_depth#,0,0,0);
+ cb_va_form;
+ sketch cb_va_p ;
+cv_vuu_form(46);
+ pivot_message(x301);
+ endtchar; etest;
+enddef ;
+
+def CVSHE=
+ stest(cvshe); kanchar "consonant sha+e";
+ begintchar(cv_she_code,cb_pa_width#,x_height#+.8u#,0,0,0,0);
+ cb_sha_form;
+ sketch cb_pa_p;
+ sketch cb_sha_pb;
+ undraw pl_lit_cir_p ;
+ undraw bar_pa; %cb_ka_pc;
+ vm_e_form;
+ undraw vm_e_p;
+ path ct;
+ ct = vm_e_p scaled .75 shifted (2u, -.5u) rotated 0 ;
+ sketch ct;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CVSE =
+ stest(cvse); kanchar "consonant sa+e";
+ begintchar(cv_se_code,cb_na_width#,x_height#+.8u#,0,0,0,0);
+ cb_sa_form;
+ sketch cb_sa_p;
+ undraw pl_lit_cir_p ;
+ undraw bar_pa; %cb_ka_pc;
+ vm_e_form;
+ undraw vm_e_p;
+ path ct;
+ ct = vm_e_p scaled .75 shifted (1.8u, -.5u) rotated 0 ;
+ sketch ct;
+ pivot_message(.199u);
+ endtchar; etest;
+enddef ;
+
+def CVHE =
+ stest(cvhe); kanchar "consonant ha+e";
+ begintchar(cv_he_code,cb_ha_width#,x_height#+1.8u#,0,0,0,0);
+ cb_ha_form;
+ vm_e_form;
+ undraw bar_pa; %cb_ka_pc;
+ undraw cb_ha_pa ;
+ undraw vm_e_p;
+ path ct;
+ ct = vm_e_p scaled .75 shifted (.26u, +.5u) rotated 0 ;
+ sketch ct;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+def CVKSHE =
+ stest(cvkshe); kanchar "base of consonant ksha+vowel modifer e";
+ begintchar(cv_kshe_code,cb_ka_width#,x_height#,cb_ksha_depth#,0,0,0);
+ cb_ksha_form;
+ %sketch cb_kha_p;
+ sketch cb_ka_pa;
+ sketch cb_ka_pb;
+ sketch cb_ka_pc;
+ undraw bar_pa; %cb_ka_pc;
+ vm_e_form_a(8,.1u, .3u); %sketch vm_e_p;
+ path vm_e_pa,vm_e_pb,vm_e_pc ;
+ vm_e_pa = cb_ka_pc softjoin vm_e_p;
+ sketch vm_e_pa;
+ pivot_message(x301,x400);
+ endtchar; etest;
+enddef ;
+
+% ----------------End of Kannada Vowel modifed Consonants(special)----------
+
+% ---------- start of ubayaksharas -----------
+
+
+%stest(uas); kanchar "accent ardhasunna";
+%begintchar(u_ardhasunna_code,x_height#/2,x_height#,0,0,0,ur#);
+%top rt z2=(w,h); bot rt z1=(w,0); lft z3=(0,h/2);
+%sketch z1..z3..z2;
+%endtchar; etest;
+
+ stest(uss); kanchar "accent s";
+ begintchar(u_uss_code,x_height#,x_height#,0,0,0,0);
+ cb_dollar_form ;
+ cc_clear; cc_transform(dol_p);
+ cc_whd(1,0);
+ endtchar; etest;
+
+ stest(us); kanchar "accent sunna";
+ begintchar(u_sunna_code,x_height#,x_height#,0,0,0,ur#);
+ top z2=(w/2,h); bot z1=(x2,0);
+ sketch z1..z2..cycle;
+ endtchar; etest;
+
+ stest(uvi); kanchar "accent visarga";
+ begintchar(u_visarga_code,2/5x_height#,x_height#,0,0,0,ur#);
+ top z2 = (w/2,h); bot z1 =(x2,3h/5);
+ path puvi;
+ puvi= z1..z2..cycle;
+ sketch puvi; sketch puvi shifted (0,-2h/3);
+ endtchar; etest;
+
+%stest(uav); kanchar "accent ardhavisarga";
+%begintchar(u_ardhavisarga_code,2/5x_height#,x_height#,0,0,0,ur#);
+%path puav;
+%top z2 = (w/2,h); bot z1 =(x2,3h/5);
+%puav = subpath (0.25,1.75) of (z1..z2..cycle);
+%sketch puav;sketch puav shifted (0,-2h/3);
+%endtchar; etest;
+
+%stest(ua); kanchar "accent avagraha";
+%begintchar(u_avagraha_code,kfig_width#,x_height#,0,0,0,ur#);
+%top lft z1=(0,h); lft z2=(0,h/4); z3=(w/2,(y1+y2)/2);
+%bot lft z4=(0,0); bot rt z5=(w,0);
+%sketch flex (z1,z3,z2,z4)& z4--z5;
+%endtchar; etest;
+
+% ----------- end of ubhayaksharas ----------
+
+%----------- Begin of bars used for transliteration of vedic hymns-------------
+
+ stest(buone); kanchar "b udatta(one bar)";
+ begintchar(b_udatta1_code,u#,top_accent#+3uh#,0,0,0,0);
+ bot z1=(w/2,top_accent); top z2=(x1,h);
+ sketch z1--z2;
+ pivot_message((w/2));
+ endtchar; etest;
+
+ stest(butwo); kanchar "b udatta (two bars)";
+ begintchar(b_udatta2_code,3.5u#,top_accent#+3uh#,0,0,0,0);
+ bot z1=(w/4,top_accent); top z2=(x1,h);
+ bot z3=(w/4+w/2,top_accent); z4=z2+(w/2,0);
+ sketch z1--z2; sketch z3-- z4;
+ pivot_message((w/2));
+ endtchar; etest;
+
+ stest(ba); kanchar "b anudatta";
+ begintchar(b_anudatta_code,4u#,0,0,0,0,0);
+ % d is set later
+ top lft z1=(0,-bot_accent);top rt z2=(w,-bot_accent);
+ sketch z1--z2;
+ d:=- (bot y1);
+ pivot_message((w/2));
+ endtchar; etest;
+
+%----------- end of fonts for vedic hymns---------------
+
+% kannada digits and punctuation symbols
+%
+% --------- start of roman digits ------------
+
+def DRZERO =
+ stest(drzero); kanchar "Roman digit zero";
+ begintchar(dr_zero_code,7u#,fig_height#,0,0,0,ur#);
+ top z1=(w/2,h); lft z2=(0,1/2h);
+ bot z3=(w/2,0); rt z4=(w,1/2h);
+ sketch superellipse(z4,z1,z2,z3,0.707);
+ endtchar; etest;
+enddef;
+
+def DRONE =
+ stest(drone); kanchar "Roman digit one";
+ begintchar(dr_one_code,4u#,fig_height#,0,0,0,ur#);
+ bot lft z1=(0,0); bot rt z2=(w,0); top z3=(x5,h);
+ lft z4=(x1,x_height+uh); bot z5=1/2[z1,z2];
+ sketch z1--z2; sketch z3--z5;
+ sketch z4..{up}z3;
+ endtchar; etest;
+enddef;
+
+def DRTWO =
+ stest(drtwo); kanchar "Roman digit two";
+ begintchar(dr_two_code,7u#,fig_height#,0,0,0,ur#);
+ bot lft z1=(0,0); bot rt z2=(w,0); lft z3=(0,x_height);
+ top z4=(w/2,h); rt z5=(w,y3);
+ sketch z1--z2; sketch z3..z4..z5..{-1,-1}z1;
+ endtchar; etest;
+enddef;
+
+def DRTHREE =
+ stest(drthree); kanchar "Roman digit three";
+ begintchar(dr_three_code,7u#,fig_height#,0,0,0,ur#);
+ path pa;
+ top lft z1=(0,3/4h); top z2=(w/2,h);
+ rt z3=(w,y1); z4=(w/2-u,1/2h);
+ pa= z1..z2..z3..{(-1,0)}z4;
+ sketch pa; sketch pa reflectedabout (z4,(w,y4));
+ endtchar; etest;
+enddef;
+
+def DRFOUR =
+ stest(drfour); kanchar "Roman digit four";
+ begintchar(dr_four_code,7u#,fig_height#,0,0,0,ur#);
+ bot z1=(w-1.5u,0); top z2=(x1,h);
+ lft z3=(0,w_height); rt z4=(w,y3);
+ bot z1a=(x1-(x4-x1),0); bot z1b=(x4,0);
+ sketch z1a--z1b; sketch z1--z2;
+ sketch z3--z2; sketch z3--z4;
+ penlabels(1a,1b);
+ endtchar; etest;
+enddef;
+
+def DRFIVE =
+ stest(drfive); kanchar "Roman digit five";
+ begintchar(dr_five_code,7u#,fig_height#,0,0,0,ur#);
+ top rt z1=(w,h); top lft z2=(0,h); lft z3=(0,6/10h);
+ z4=(1/2w,y3+uh); rt z5=(w,(y4+y6)/2); bot z6=(x4,0); lft z7=(0,1/4h);
+ sketch z1--z2; sketch z2--z3;
+ sketch z3..z4..z5..z6..z7;
+ endtchar; etest;
+enddef;
+
+def DRSIX =
+ stest(drsix); kanchar "Roman digit six";
+ begintchar(dr_six_code,6u#,fig_height#,0,0,0,ur#);
+ dr_sixnine_form;
+ sketch dr_sixnine_p;
+ endtchar; etest;
+enddef;
+
+def DRSEVEN =
+ stest(drseven); kanchar "Roman digit seven";
+ begintchar(dr_seven_code,7u#,fig_height#,0,0,0,ur#);
+ top lft z1=(0,h); top rt z3=(w,h);
+ bot z4=(1/4w,0);
+ sketch z1--z3{(-1,-1)}..{down}z4;
+ endtchar; etest;
+enddef;
+
+def DREIGHT =
+ stest(dreight); kanchar "Roman digit eight";
+ begintchar(dr_eight_code,7u#,fig_height#,0,0,0,ur#);
+ top z1=(w/2,h); z2=(x1,0.6h);
+ bot z3=(x1,0); lft z4=(0,y2/2); rt z5=(w,y4);
+ z6=(x4+u,1/2(y1+y2)); z7=(w-u,y6);
+ sketch superellipse(z7,z1,z6,z2,0.707);
+ sketch superellipse(z5,z2,z4,z3,0.707);
+ endtchar; etest;
+enddef;
+
+def DRNINE =
+ stest(drnine); kanchar "Roman digit nine";
+ begintchar(dr_nine_code,6u#,fig_height#,0,0,0,ur#);
+ dr_sixnine_form;
+ bot lft z10 = z1;
+ sketch dr_sixnine_p rotatedaround(z10,-180) shifted(-w,-h);
+ endtchar; etest;
+enddef;
+
+%---------------------end of roman digits------------------------
+
+% ------------- start of kannada digits ------------
+
+def DKZERO =
+ stest(dkzero); kanchar "kannada digit zero";
+ begintchar(dk_zero_code,kfig_width#,kfig_height#,0,0,0,ur#);
+ top z1=(w/2,h); lft z2=(0,h/2); bot z3=(x1,0); rt z4=(w,y2);
+ sketch superellipse(z4,z1,z2,z3,0.707);
+ endtchar; etest;
+enddef;
+
+def DKONE =
+ stest(dkone); kanchar "kannada digit one";
+ begintchar(dk_one_code,kfig_width#,kfig_height#,0,0,0,ur#);
+ bot z1=(w/4,0); lft z2=(0,h/2); top z3=(w/2,h);
+ rt z4=(w,h/2); bot z5=(w-(w/4),0);
+ sketch z1..tension 1.2..z2..z3..z4..tension 1.2..z5;
+ endtchar; etest;
+enddef;
+
+def DKTWO =
+ stest(dktwo); kanchar "kannada digit two";
+ begintchar(dk_two_code,kfig_width#,kfig_height#,0,0,0,ur#);
+ z1=(3w/5+.75u,5h/6); z2=(x1-.75u,4h/6); z3=(w/2,y1);
+ top z4=(x1,h); z5=((x8+x1)/2,y3); bot z6=(x1,0);
+ bot lft z7=(0+u,0);rt z8=(w,h/2);
+ sketch z1..z2..z3..z4..z8..{(-1,0)}z6--z7;
+ endtchar; etest;
+enddef;
+
+
+def DKTHREE =
+ stest(dkthree); kanchar "kannada digit three";
+ begintchar(dk_three_code,kfig_width#-2u#,kfig_height#,0,0,0,ur#);
+ path pa;
+ %lft z1=(0,4h/5); top z2=(w/2,h); top z3=(4w/5,h);
+ %rt z4=(w,3h/4); z5=(3w/4,h/2); z6=(w/3,h/2);
+ %pa= z1..z2..z3..z4..z5;
+ %sketch pa; sketch pa reflectedabout(z5,z6);
+ %sketch z5--z6;
+ cb_kha_form;
+ path dkg_three ;
+ dkg_three = z1..z2..z3..z4..z5..z6..z7..z8..z9;
+ sketch dkg_three ;
+ endtchar; etest;
+enddef;
+
+def DKFOUR =
+ stest(dkfour); kanchar "kannada digit four";
+ begintchar(dk_four_code,kfig_width#-2u#,kfig_height#,0,0,0,ur#);
+ %top z1=(w/5,h); lft z2=(0,2h/3); z4=(w/2,h/3);
+ %bot z5=(x4,0); z3=(w/3,1/2(y4+y5));
+ %forsuffixes s=6,7,8:
+ % z.s=z.[s-5] reflectedabout(z4,z5); endfor;
+ %sketch z1..z2..z4..z7..z6;
+ %sketch z4..z3..z5..z8..z4;
+ cb_lla_form;
+ sketch cb_lla_p ;
+ endtchar; etest;
+enddef;
+
+def DKFIVE =
+ stest(dkfive); kanchar "kannada digit five";
+ begintchar(dk_five_code,kfig_width#,kfig_height#,0,0,0,ur#);
+ %lft z1=(0,8h/10); lft z2=(0,3h/10); z3=(2w/3,(y1+y2)/2);
+ %top z11=(w/3,h); z12 = z11 reflectedabout ((0,y3),(w,y3));
+ %sketch z1..z11..z3..z12..z2;
+ %top z4=(x3+(w-x3)/2,h);
+ %rt z5=(w,(y3+y4)/2);
+ %bot z7=(x4,0); rt z8=(x9,y9-uh); rt z9=(w,y2);
+ %sketch z3..z5..z4..z3..z7..z8..z9;
+ dk_five_form ;
+
+ endtchar; etest;
+enddef;
+
+def DKSIX =
+ stest(dksix); kanchar "kannada digit six";
+ begintchar(dk_six_code,kfig_width#,kfig_height#,0,0,0,ur#);
+ dk_six_form;
+ endtchar; etest;
+enddef;
+
+def DKSEVEN =
+ stest(dkseven); kanchar "kannada digit seven";
+ begintchar(dk_seven_code,kfig_width#-2u#,kfig_height#,0,0,0,ur#);
+ %lft z1=(0,3h/4); top z2=(w/2,h); rt z3=(w,y1); z4=(w/2,h/2);
+ %forsuffixes i=6,7,8:
+ % z.i=z.[i-5] rotatedaround (z4,0);
+ %endfor;
+ z1 = (.5w, .75h) ; top z2 = (.3w, .95h) ;
+ top z3 = (x1+u, y1) ; lft z4 = (0, .2h) ;
+ bot z5 = (.1w, 0) ; bot z6 = (w, 0) ;
+ sketch z1..z2..z3..tension 1.1..z4...z5--z6 ;
+ endtchar; etest;
+enddef;
+
+
+def DKEIGHT =
+ stest(dkeight); kanchar "kannada digit eight";
+ begintchar(dk_eight_code,kfig_width#+u#,kfig_height#,0,0,0,ur#);
+ z1 =(.2w, .75h) ; top z2 = (.3w, h) ; z2a = (.075w, .75h) ;
+ lft z3 = (.0w, .5h) ; bot z4 = (.35w, .03h ) ;
+ rt z5 = (.9w, .45h) ; z6 = (.7w, .8h) ;
+ top z7 = (.75w, h) ; rt top z8 = (w, h) ;
+ sketch z1..z2..z2a..z3..z4...z5..z6...z7--z8 ;
+
+ sketch z1 ; sketch z2; sketch z3; sketch z4 ; ;sketch z5; sketch z6; sketch z7;
+ endtchar; etest;
+enddef;
+
+def DKNINE =
+ stest(dknine); kanchar "kannada digit nine";
+ begintchar(dk_nine_code,kfig_width#,kfig_height#,0,0,0,ur#);
+ rt top z1 = (w, h) ; top z2 = (.25w, h) ; z2a = (.05w, .9h) ;
+ lft z3 = (0, .75h) ; z4 = (.2w, .4h) ;
+ z6 = (x4, .6h) ; z5 = ( .35w, (y4+y6)/2) ;
+ lft z7 = (0, .25h) ; bot z8 = (.2w, 0) ;
+ bot z9 = (.3w, 0 ) ;
+ sketch z1---z2..z3..z4..z5..z6..z7...z8---z9 ;
+
+ endtchar; etest;
+enddef;
+
+% end of kannada digits
+
+% --------- start of punctuation ----------
+
+def PPERIOD =
+ stest(pperiod); kanchar "punctuation period";
+ begintchar(p_period_code,2*dot_radius#,2*dot_radius#,0,0,0,ur#);
+ z1=(dot_radius,dot_radius);
+ fill_dot(1);
+ endtchar; etest;
+enddef;
+
+def PCOMMA =
+ stest(pcomma); kanchar "punctuation comma";
+ begintchar(p_comma_code, p_comma_width#,2*dot_radius#,des_depth#,0,0,ur#);
+ p_comma_form;
+ endtchar; etest;
+enddef;
+
+def PEQUAL =
+ stest(pequal); kanchar "punctuation equal";
+ begintchar(p_equal_code,10u#,3/4x_height#,0,0,0,ur#);
+ top lft z1=(0,h); top rt z2=(w,h);
+ bot lft z3=(0,1/4x_height); bot rt z4=(w,1/4x_height);
+ sketch z1--z2; sketch z3--z4;
+ endtchar; etest;
+enddef;
+
+def PBAR =
+ stest(pbar); kanchar "punctuation vertical bar";
+ begintchar(p_bar_code,u#,x_height#,0,0,0,ur#);
+ p_bar_form;
+ sketch p_bar_p;
+ endtchar; etest;
+enddef;
+
+def PDBAR =
+ stest(pdbar); kanchar "punctuation double bar";
+ begintchar(p_dbar_code,2.5u#,x_height#,0,0,0,ur#);
+ p_bar_form;
+ sketch p_bar_p;sketch p_bar_p reflectedabout ((w/2,0),(w/2,h));
+ endtchar; etest;
+enddef;
+
+def PCOLON =
+ stest(pcolon); kanchar "punctuation colon";
+ begintchar(p_colon_code,2*dot_radius#,x_height#,0,0,0,ur#);
+ z1=(dot_radius,dot_radius);
+ fill_dot(1);
+ z2=(x1,x_height-dot_radius);
+ fill_dot(2);
+ endtchar; etest;
+enddef;
+
+def PSCOLON =
+ stest(pscolon); kanchar "punctuation semicolon";
+ begintchar(p_scolon_code,p_comma_width#,x_height#,des_depth#,0,0,ur#);
+ p_comma_form;
+ z5=(x1,x_height-dot_radius);
+ fill_dot(5);
+ endtchar; etest;
+enddef;
+
+def PCQUOTE =
+ stest(pcquote); kanchar "punctuation closing quote";
+ begintchar(p_cquote_code,p_comma_width#,asc_height#,0,0,0,ur#);
+ p_comma_form;
+ erase fill fill_dot_p; erase sketch p_comma_p;
+ fill fill_dot_p shifted (0,asc_height-2*dot_radius);
+ sketch p_comma_p shifted (0,asc_height-2*dot_radius);
+ endtchar; etest;
+enddef;
+
+def PCQUOTES =
+ stest(pcquotes); kanchar "punctuation closing quotes";
+ begintchar(p_cquotes_code,2*p_comma_width#+u#,asc_height#,0,0,0,ur#);
+ p_comma_form;
+ erase fill fill_dot_p; erase sketch p_comma_p;
+ fill fill_dot_p shifted (0,asc_height-2*dot_radius);
+ sketch p_comma_p shifted (0,asc_height-2*dot_radius);
+ fill fill_dot_p shifted (0,asc_height-2*dot_radius)
+ shifted (p_comma_width+u,0);
+ sketch p_comma_p shifted (0,asc_height-2*dot_radius)
+ shifted (p_comma_width+u,0);
+ endtchar; etest;
+enddef;
+
+def POQUOTE =
+ stest(poquote); kanchar "punctuation opening quote";
+ begintchar(p_oquote_code,p_comma_width#,asc_height#,0,0,0,ur#);
+ p_comma_form;
+ erase fill fill_dot_p; erase sketch p_comma_p;
+ lft z5 = z2;
+ top rt z6 =z3;
+ fill fill_dot_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+ sketch p_comma_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+ endtchar; etest;
+enddef;
+
+def POQUOTES =
+ stest(poquotes); kanchar "punctuation opening quotes";
+ begintchar(p_oquotes_code,2*p_comma_width#+u#,asc_height#,0,0,0,ur#);
+ p_comma_form;
+ erase fill fill_dot_p; erase sketch p_comma_p;
+ lft z5 = z2;
+ top rt z6 =z3;
+ fill fill_dot_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+ sketch p_comma_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+ fill fill_dot_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6))
+ shifted(p_comma_width+u,0);
+ sketch p_comma_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6))
+ shifted(p_comma_width+u,0);
+ endtchar; etest;
+enddef;
+
+def PDQUOTES =
+ stest(pdquotes);kanchar "punctuation double quotes";
+ begintchar(p_dquotes_code,4.5u#,asc_height#,0,0,0,ur#);
+ top lft z1=(1.5u,h); bot lft z2=(0,x_height);
+ top rt z3=(w,h); bot rt z4=(x1+1.5u,x_height);
+ sketch z1--z2; sketch z3--z4;
+ endtchar; etest;
+enddef;
+
+%stest(pdquotes);kanchar "punctuation double quotes";
+%begintchar(p_dquotes_code,2*dot_radius#+u#,asc_height#,0,0,0,ur#);
+%%begintchar(p_dquotes_code,4*dot_radius#+u#,asc_height#,0,0,0,ur#);
+%path pa;
+%%z1=(dot_radius,h-dot_radius);z1l=(0,y1);z1r=(2x1,y1);z1t=(x1,h);
+%z1=(dot_radius/2,h-dot_radius/2);z1l=(0,y1);z1r=(2x1,y1);z1t=(x1,h);
+%z2=(x1,x_height);
+%%z2=(x1,x_height);z2l=(dot_radius/2,y2);z2r=(x2+(x2-x2l),y2);
+%%pa= z2l--z1l & flex(z1l,z1t,z1r) & z1r--z2r--cycle; fill pa;
+%pa= z2--z1l & flex(z1l,z1t,z1r) & z1r--z2--cycle; filldraw pa;
+%filldraw pa shifted(dot_radius+u,0);
+%%fill pa shifted(2dot_radius+u,0);
+%endtchar; etest;
+
+def PSLASH =
+ stest(pslash); kanchar "punctuation virgule (slash)";
+ begintchar(p_slash_code,6u#,asc_height#,des_depth#,0,0,ur#);
+ p_slash_form;
+ sketch p_slash_p;
+ endtchar; etest;
+enddef;
+
+def PHASH =
+ stest(phash); kanchar "punctuation hash mark (number sign)";
+ begintchar(p_hash_code,12u#,asc_height#,des_depth#,0,0,ur#);
+ numeric midpoint;
+ midpoint = (-des_depth+asc_height)/2;
+ lft z1=(0,midpoint+2u); rt z2=(w,y1);
+ lft z3=(0,midpoint-2u); rt z4=(w,y3);
+ bot z5=(2u,-d); top z6=(x5+4u,h);
+ z7=(x5+4u,y5); z8=(x7+4u,y6);
+ sketch z1--z2; sketch z3--z4;
+ sketch z5--z6; sketch z7--z8;
+ endtchar; etest;
+enddef;
+
+%stest(pexcla); kanchar "punctuation exclamation point";
+%begintchar(p_excla_code,dot_radius#,asc_height#,0,0,0,ur#);
+%pickup pencircle;
+%z1=(dot_radius/2,dot_radius/2);
+%filldraw fullcircle scaled 2x1 shifted z1;
+%z2=(x1,5*y1); z3 =(x1,h-y1);
+%z2l=(x1-dot_radius/4,y2); z2r=(x1+dot_radius/4,y2);
+%z3l=(0,y3); z3r=(x1+dot_radius/2,y3); z3t=(x1,h);
+%filldraw z2l--z3l & flex(z3l,z3t,z3r) & z3r--z2r--cycle;
+%endtchar; etest;
+
+def PEXCLA =
+ stest(pexcla); kanchar "punctuation exclamation point";
+ begintchar(p_excla_code,dot_radius#,asc_height#,0,0,0,ur#);
+ z1=(dot_radius,dot_radius);
+ fill_dot(1);
+ fill fullcircle scaled 2x1 shifted z1;
+ top z2=(x1,h); bot z3 =(x1,4*y1);
+ sketch z2--z3;
+ endtchar; etest;
+enddef;
+
+def PASTERISK =
+ stest(pasterisk); kanchar "punctuation asterisk";
+ begintchar(p_asterisk_code,x_height#,x_height#,0,0,0,ur#);
+ z1=(1/2w,1/2h);
+ for d=30 step 60 until 330:
+ z[d]=z1+0.5 dir d xscaled w yscaled h;
+ sketch z1--z[d];
+ penlabels(z[d]);
+ endfor;
+ endtchar; etest;
+enddef;
+
+def PPLUS =
+ stest(pplus); kanchar "punctuation plus";
+ begintchar(p_plus_code,x_height#,x_height#,0,0,0,ur#);
+ lft z1=(0,h/2); rt z2=(w,y1); top z3=(w/2,h); bot z4=(x3,0);
+ sketch z1--z2; sketch z3--z4;
+ endtchar; etest;
+enddef;
+
+
+def PLBRACKET =
+ stest(plbracket); kanchar "punctuation left bracket";
+ begintchar(p_lbracket_code,3u#,top_height#,bot_depth#,0,0,ur#);
+ p_lbracket_form;
+ sketch p_lbracket_p;
+ endtchar; etest;
+enddef;
+
+def PRBRACKET =
+ stest(prbracket); kanchar "punctuation right bracket";
+ begintchar(p_rbracket_code,3u#,top_height#,bot_depth#,0,0,ur#);
+ p_lbracket_form;
+ sketch p_lbracket_p shifted (-w,0) reflectedabout ((0,0),(0,h));
+ endtchar; etest;
+enddef;
+
+def PLPAREN =
+ stest(plparen); kanchar "punctuation left parenthesis";
+ begintchar(p_lparen_code,3u#,top_height#,bot_depth#,0,0,ur#);
+ p_rparen_form;
+ sketch p_rparen_p shifted (-w,0) reflectedabout ((0,0),(0,h));
+ endtchar; etest;
+enddef;
+
+def PRPAREN =
+ stest(prparen); kanchar "punctuation right parenthesis";
+ begintchar(p_rparen_code,3u#,top_height#,bot_depth#,0,0,ur#);
+ p_rparen_form;
+ sketch p_rparen_p;
+ endtchar; etest;
+enddef;
+
+def PLBRACE =
+ stest(plbrace); kanchar "punctuation left brace";
+ begintchar(p_lbrace_code,4u#,top_height#,bot_depth#,0,0,ur#);
+ p_lbrace_form;
+ sketch p_lbrace_p;
+ endtchar; etest;
+enddef;
+
+def PRBRACE =
+ stest(prbrace); kanchar "punctuation right brace";
+ begintchar(p_rbrace_code,4u#,top_height#,bot_depth#,0,0,ur#);
+ p_lbrace_form;
+ sketch (p_lbrace_p shifted (-w,0) reflectedabout ((0,0),(0,h)) );
+ endtchar; etest;
+enddef;
+
+def PPERCENT =
+ stest(ppercent); kanchar "punctuation percent sign";
+ begintchar(p_percent_code,6u#,asc_height#,des_depth#,0,0,ur#);
+ p_slash_form;
+ sketch p_slash_p;
+ z3=(3(x1+x2)/8,-d+7/8(h+d));
+ z4=(w-x3,-d+(h-y3));
+ sketch fullcircle scaled (1.5u) shifted z3;
+ sketch fullcircle scaled (1.5u) shifted z4;
+ endtchar; etest;
+enddef;
+
+def PBSLASH =
+ stest(pbslash); kanchar "punctuation backslash";
+ begintchar(p_bslash_code,6u#,asc_height#,des_depth#,0,0,ur#);
+ p_slash_form;
+ sketch p_slash_p reflectedabout ((w/2,h),(w/2,0));
+ endtchar; etest;
+enddef;
+
+def PLBAR =
+ stest(plbar); kanchar "punctuation long bar";
+ begintchar(p_lbar_code,u#,asc_height#,des_depth#,0,0,ur#);
+ top z1=(w/2,h); bot z2=(x1,-d);
+ sketch z1--z2;
+ endtchar; etest;
+enddef;
+
+def PHYPHEN =
+ stest(phyphen); kanchar "punctuation hyphen";
+ begintchar(p_hyphen_code,6u#,1/2x_height#,0,0,0,ur#);
+ top lft z1=(0,h); top rt z2=(w,h);
+ sketch z1--z2;
+ endtchar; etest;
+enddef;
+
+def PLHYPHEN =
+ stest(plhyphen); kanchar "punctuation long hyphen";
+ begintchar(p_lhyphen_code,9u#,1/2x_height#,0,0,0,ur#);
+ top lft z1=(0,h); top rt z2=(w,h);
+ sketch z1--z2;
+ endtchar; etest;
+enddef;
+
+def PVLHYPHEN =
+ stest(pvlhyphen); kanchar "punctuation very long hyphen";
+ begintchar(p_vlhyphen_code,15u#,1/2x_height#,0,0,0,ur#);
+ top lft z1=(0,h); top rt z2=(w,h);
+ sketch z1--z2;
+ endtchar; etest;
+enddef;
+
+def PUBAR =
+ stest(pubar); kanchar "punctuation underbar";
+ begintchar(p_ubar_code,x_height#,0,uh#,0,0,ur#);
+ bot lft z1=(0,-d); bot rt z2=(w,-d);
+ sketch z1--z2;
+ endtchar; etest;
+enddef;
+
+def PQUESTION =
+ stest(pquestion); kanchar "punctuation question mark";
+ begintchar(p_question_code,6u#,asc_height#,0,0,0,ur#);
+ lft z1=(0,h-2dot_radius); top z2=(w/2,h);
+ rt z3=(w,y1); z4=(x2,1/2x_height);
+ z5=(x2,1/3(y2+y4)); z6=(x2,dot_radius);fill_dot(6);
+ sketch z1..z2..z3..z5..tension 1.5..z4;
+ endtchar; etest;
+enddef;
+
+def PDOLLAR =
+ stest(pdollar); kanchar "punctuation dollar sign";
+ begintchar(p_dollar_code,cb_ka_width#,x_height#+1.5uh#,1.5uh#,0,0,ur#);
+ cb_dollar_form;
+ sketch dol_p ;
+ top z11 = (w/2,h); bot z12 = (w/2,-d);
+ sketch z11--z12;
+ endtchar; etest;
+enddef;
+
+def PGREATER =
+ stest(pgreater); kanchar "punctuation greater than";
+ begintchar(p_greater_code,7u#,x_height#,0,0,0,ur#);
+ bot lft z1=(0,0); top lft z2=(0,x_height); rt z3=(w,1/2(y1+y2));
+ sketch z1--z3; sketch z2--z3;
+ endtchar; etest;
+enddef;
+
+def PLESS =
+ stest(pless); kanchar "punctuation less than";
+ begintchar(p_less_code,7u#,x_height#,0,0,0,ur#);
+ bot rt z1=(w,0); top rt z2=(w,x_height); lft z3=(0,1/2(y1+y2));
+ sketch z1--z3; sketch z2--z3;
+ endtchar; etest;
+enddef;
+
+def PAT =
+ stest(pat); kanchar "punctuation at sign";
+ begintchar(p_at_code,10u#,asc_height#,0,0,0,ur#);
+ z1=(w/2,3/4h); z2=(1/5w,1/2h);
+ z3=(x1,1/4h); z4=(4/5w,5/8h);
+ z5=(4/5w,3/8h); z6=(9/10w,y3);
+ rt z7=(w,y2); top z8=(x1,h);
+ lft z9=(0,y2); bot z10=(x1,0); rt z11=(x7,1/8h);
+ sketch z5..z3..z2..z1..z4&z4--z5& z5..z6..z7{up}..{left}z8..z9..z10..z11;
+ endtchar; etest;
+enddef;
+
+def PTILDE =
+ stest(ptilde); kanchar "punctuation tilde sign";
+ begintchar(p_tilde_code,9u#,asc_height#,0,0,0,ur#);
+ top lft z1=(0,asc_height2); top z2=(w/3,h);
+ z3=(2/3w,y1); top rt z4=(w,y2);
+ sketch z1..z2..z3..z4;
+ endtchar; etest;
+enddef;
+
+def PHAT =
+ stest(phat); kanchar "punctuation circumflex(hat)";
+ begintchar(p_hat_code,5u#,asc_height#,0,0,0,ur#);
+ lft z1=(0,asc_height1); rt z2=(w,y1); top z3=(1/2(x1+x2),h);
+ sketch z1--z3; sketch z3--z2;
+ endtchar; etest;
+enddef;
+
+def PAMPERSAND =
+ stest(pampersand); kanchar "punctuation ampersand";
+ begintchar(p_ampersand_code,11u#,asc_height#,0,0,0,ur#);
+ rt z11=(w,1/4x_height); bot z10=(3/4w,0);
+ z1=(x10+u,x_height); y1a=y1; x1-x1a=w-x1; rt z1b=(w,x_height);
+ bot z2=(w/4,0);lft z3=(0,y11); z4=(w/8,1/2x_height+uh);
+ z5=(x2,3/4x_height); z6=(w/2,asc_height1);
+ top z7=(5/12w,h); z8=(5/24w,y6); %z9=(x7,1/2x_height);
+ sketch z1a--z1b;
+ sketch z1..{left}z2..z3..z4..z5..z6..z7..z8..z5..z10..z11;
+ penlabels (1a,1b);
+ endtchar; etest;
+enddef;
+
+% ---------------- end of punctuation ------------
+
+%-------Begin of glyps to demonstrate conjunctions and vowel modifers-----
+def BOXA =
+ stest(cbbb); kanchar "consonant blackbox(bb)";
+ %This is not really a letter in Kannada. However this character
+ % is useful for demonstrating vowel modifiers, cons. conjuncts, accents etc.
+ begintchar(cb_bb_code,0.2em_width#,0.8x_height#,0.25x_height#,0,0,0);
+ fill (0,-d)--(w,-d)--(w,h)--(0,h)--cycle;
+ pivot_message((w/2),(w/2));
+ endtchar; etest;
+enddef ;
+
+def BOXB =
+ stest(cbbo); kanchar "consonant outlinebox(bo)";
+ %This is not really a letter in Kannada. However this character
+ % is useful for demonstrating vowel modifiers, cons. conjuncts, accents etc.
+ begintchar(cb_bo_code,0.2em_width#,x_height#,0,0,0,0);
+ bot lft z1=(0,-d);bot rt z2=(w,-d);top rt z3=(w,h); top lft z4=(0,h);
+ z1a=(0,y1);z2a=(w,y2);z3a=(w,y3);z4a=(0,y4);
+ sketch z1--z4; sketch z2--z3; sketch z1a--z2a; sketch z4a--z3a;
+ cutoff(z1a,180);cutoff(z2a,0);cutoff(z3a,0);cutoff(z4a,180);
+ pivot_message((w/2),(w/2));
+ endtchar; etest;
+enddef ;
+
+def BOXC =
+ stest(cbbe); kanchar "consonant emptybox(be)";
+ %This is not really a letter in Kannada. However this character
+ % is useful for demonstrating vowel modifiers, cons. conjuncts, accents etc.
+ begintchar(cb_be_code,0.2em_width#,x_height#,0,0,0,0);
+ pivot_message((w/2),(w/2));
+ endtchar; etest;
+enddef ;
+
+%-------End of glyps to demonstrate conjunctions and vowel modifers-----
+
+% ----------------Begin of Misc glyphs for emotional expression--------------
+
+def SMILE =
+ stest(grin); kanchar "Grin face";
+ begintchar(kn_spla_code,7u#,x_height#+u#,0,0,0,0);
+ top z1 = (w/2, h) ; rt z2 = (0, 1/2h) ;
+ bot z3 = (x1, 0) ; lft z4 = (w, 1/2h) ;
+ top z5 = (1/4w, 2/3h) ; top z6 = (3/4w, 2/3h) ;
+ fill_dotb(5) ;
+ fill_dotb(6) ;
+ sketch z1..z2..z3..z4..z1 ;
+ z7 = (x5+.15u, 1/3h); z8 = (w-x7, y7) ;
+ z9 = ((x7+x8)/2, .2h) ;
+ draw z7...z9...z8 ;
+ endtchar; etest;
+enddef ;
+
+def FROWN =
+ stest(weep); kanchar "Weep face";
+ begintchar(kn_splb_code,7u#,x_height#+u#,0,0,0,0);
+ top z1 = (w/2, h) ; rt z2 = (0, 1/2h) ;
+ bot z3 = (x1, 0) ; lft z4 = (w, 1/2h) ;
+ top z5 = (1/4w, 2/3h) ; top z6 = (3/4w, 2/3h) ;
+ fill_dotb(5) ;
+ fill_dotb(6) ;
+ sketch z1..z2..z3..z4..z1 ;
+ z7 = (x5+.15u, 1/3h); z8 = (w-x7, y7) ;
+ z9 = ((x7+x8)/2, .4h) ;
+ draw z7...z9...z8 ;
+ endtchar; etest;
+enddef ;
+
+% ----------------End of Misc glyphs for emotional expression--------------
+
+
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tamilORG.mf b/Master/texmf-dist/fonts/source/public/itrans/tamilORG.mf
new file mode 100644
index 00000000000..d2c30d53140
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tamilORG.mf
@@ -0,0 +1,2020 @@
+boolean dodraw;
+dodraw=true;
+boolean goleft;
+goleft=false;
+def tthinnest=max(hair,2) enddef;
+def tthinner=max(1.4hair,2) enddef;
+def tthin=max(1.8hair,2) enddef;
+def tmed=max(.75curve,2) enddef;
+def tthick=curve enddef;
+def tthicker=1.2curve enddef;
+def tthickest=1.4curve enddef;
+
+string callchar;
+numeric oldh; numeric oldw; numeric oldd;
+
+def charspec(expr c, w_sharp, h_sharp, d_sharp) =
+ oldh:=h; oldw:=w; oldd:=d;
+ w:=hround(w_sharp*hppp); h:=vround(h_sharp*hppp); d:=vround(d_sharp*hppp);
+enddef;
+
+input tamilmax;
+
+def cloney(suffix $,@) =
+ y$=y@; y$r=y@r; y$l=y@l;
+enddef;
+
+def clonex(suffix $,@) =
+ x$=x@; x$r=x@r; x$l=x@l;
+enddef;
+
+def small_iito (suffix @,$)(expr iheight) =
+x$99=x@; y$99=y@; pos$99(tthin,180);
+x$100=x$99-2.5u; y$100=.5[y$99,y$1]; pos$100(tthin,135);
+x$1=x@+.5u; top y$1r=iheight; pos$1(tthick,90);
+x$2=x$1+u; y$2=y$1-.5u; pos$2(.7tthick,60);
+x$3=x$2; y$3=y$2-2u; pos$3(tthin,-90);
+x$4=x$4l=x$4r=x$2; y$4=y$2; y$4r=y$4+1; y$4l=y$4-1;
+filldraw stroke z$99e{left}...{up}z$100e...{right}z$1e...z$2e...{left}z$3e...{right}z$4e;
+penlabels($1,$2,$3,$4);
+enddef;
+
+def help_uu =
+charspec("9",x_height#,.75x_height#,0);
+x181=x101=u; x106=x107=x108=x109=.55w; x111=x112=.8w; x110=w;
+x103=x105=.5[x101,x106]; x102=x104=.5[x101,x103];
+bot y104r=y106=y107=y111=0; top y105r=y108=top y109r=top y110r=y112=h;
+y101=y181=y103=.5y102; y102=.6h;
+pos101(.8tthinner,180); pos102(.8tthin,90); pos103(.8tmed,0);
+pos104(.8tthin,-90); pos181(.8tthinner,-180); pos105(.8tthick,-270);
+pos106(.8tthin,-360); pos107(.8tthin,0); pos108(.8tthin,0);
+pos109(.8tthin,90); pos110(.8tthin,90); pos111(.8tthick,0); pos112(.8tthick,0);
+if dodraw:
+filldraw stroke z101e...{right}z102e...{down}z103e...{left}z104e..z181e...{right}z105e...{down}z106e;
+filldraw stroke z107e---z108e; filldraw stroke z109e---z110e;
+filldraw stroke z111e---z112e;
+fi
+enddef;
+
+
+cmchar "Tamil vii";
+beginchar(115,1.5x_height#+u#,body_height#,0);
+adjust_fit(0,0);
+callchar:="v";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x21r=x10l; x21l=x10r; x21=x10; cloney(21,10); small_iito(21,s,h);
+endchar;
+
+cmchar "tamil a";
+beginchar(0,2x_height#,x_height#,.6desc_depth#);
+adjust_fit(0,0);
+x3=.5[x9,x11]; top y1r=h; y5=y12=h; y2=y4=y6=.5[y3,y1]; y3=.8bar_height; x1=x3;
+x4=x8=.4[x9,x11]; x2=.6[x9,x11]; x5=.6[x9,x11]; x6=.7[x9,x11]; x7=.8[x9,x11]; x11=x12=x13=w-u;
+x9=u; x10=.15[x9,x11]; y8=-.8d; y13=-d; y7=bar_height; y9=.2bar_height; y10=y11=.25bar_height;
+z20=z1;
+pos1(tthinnest,90); pos2(tthin,0); pos3(tthinnest,-90); pos4(tthinnest,-180);
+pos5(hair,90); pos6(curve,0); pos7(tthick,-360); pos8(tthinner,-450);
+pos9(tthinnest,-580); pos10(tthinnest,-630); pos11(tthinnest,-630); pos12(tthick,0);
+pos13(tthick,0);pos20(tthinner,-270);
+filldraw stroke z1e...z2e...z3e...z4e...z20e...{down}z7e...{left}z8e...{up}z9e...z10e---z11e;
+filldraw stroke z12e---z13e;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); endchar;
+
+cmchar "tamil aa";
+beginchar(1,2.5x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+x3=.5[x9,x11]; top y1r=h; y5=y12=h; y2=y4=y6=.5[y3,y1]; y3=.8bar_height; x1=x3;
+x4=x8=.4[x9,x11]; x2=.6[x9,x11]; x5=.6[x9,x11]; x6=.7[x9,x11]; x7=.8[x9,x11]; x11=x12=x13=2x_height-u;
+x9=u; x10=.15[x9,x11]; y8=-.48desc_depth; y13=-.6desc_depth; y7=bar_height; y9=.2bar_height; y10=y11=.25bar_height;
+z20=z1; x31=x31r=x31l=x11+u; cloney(31,11);
+x32r=x13r; y32=y13; pos32(tthinner,0); x34=w-u; y34=y32; pos34(tthinner,-720);
+x33=.5[x32,x34]; y33=0; pos33(tthin,-90); x35=.1[x13,x8]; y35=-1.2d; %bot y35l=-d;
+pos35(.8tthick,-810); x36=.2[x8,x13]; y36=-desc_depth; pos36(tthin,-900);
+x37=.5[x8,x13]; y37=y13; pos37(tthinner,-990);
+pos1(tthinnest,90); pos2(tthin,0); pos3(tthinnest,-90); pos4(tthinnest,-180);
+pos5(hair,90); pos6(curve,0); pos7(tthick,-360); pos8(tthinner,-450);
+pos9(tthinnest,-580); pos10(tthinnest,-630); pos11(tthinnest,-630); pos12(tthick,0);
+pos13(tthick,0);pos20(tthinner,-270);
+filldraw stroke z1e...z2e...z3e...z4e...z20e...{down}z7e...{left}z8e...{up}z9e...z10e---z31e{right}
+ ...{down}z34e...{left}z35e...{up}z36e...{right}z37e;
+filldraw stroke z12e---z13e;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,31,32,33,34,35,36,37);
+endchar;
+
+cmchar "tamil i";
+beginchar(2,2x_height#,asc_height#,desc_depth#);
+adjust_fit(0,0);
+pickup crisp.nib;
+x6=.6w; x11=x13=x15=.5w; x16=x17=.9w; x12=.75w;
+x5=x7=.55w; x4=.3w; x3=.4w; x2=.5w; x1=.35w;
+x8=x10=x14=.15w; x9=.1w;
+y15=h; y5=x_height; y14=y11=.1h; y10=0; y16=.8x_height;
+y7=-.1d; y8=y13=y17=-d; y9=y12=-.6d;
+y2=y4=y6=.6x_height; y1=.8x_height; y3=.4x_height;
+z20=z1; pos20(tthinnest,-200);
+z65=.5[z6,z7]; pos65(tthicker,-370);
+pos1(tmed,45); pos2(tmed,0); pos3(tthin,-90); pos4(tthinnest,-180);
+pos5(tmed,-270); pos6(tthick,-360); pos7(tthicker,-380); pos8(tmed,-450);
+pos9(tthinner,-540); pos10(tthinnest,-585); pos11(tthin,-630);
+pos12(tthick,-720); pos13(tthin,-810); pos14(tthinner,-880);
+pos15(tthick,-990); pos16(tthin,-1060); pos17(tthin,-1060);
+filldraw stroke z1e..z2e..z3e..z4e..z20e..z5e..z65e..z8e..z9e..z10e..z11e..z12e..z13e..z14e..z15e...{down}z16e---z17e;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17); endchar;
+
+cmchar "Tamil ii";
+beginchar(3,1.125x_height#+2u#,x_height#,0);
+adjust_fit(0,0);
+callchar:="r";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=.5[x1,x6]; x8=x4-.5dot_size;
+top y77r=top y88r=bar_height+.375dot_size;
+y7=y8=.5[y77r,y77l];
+x77=x7; x88=x8; pos7(.75dot_size,0); pos77(.75dot_size,90);
+pos8(.75dot_size,0); pos88(.75dot_size,90);
+dot(7,77); dot(8,88);
+penlabels(7,8); endchar;
+
+cmchar "tamil u";
+beginchar(4,2x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="u";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+
+cmchar "tamil uu";
+beginchar(5,2.8x_height#,x_height#,0);
+adjust_fit(0,0);
+help_uu;
+picture V; transform t;
+t=identity shifted(1.4x_height,.25x_height);
+V=currentpicture transformed t; currentpicture:=V;
+h:=oldh; w:=oldw; d:=oldd;
+callchar:="u";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x12=w-u; y12=y11; pos12(tthin,-290);
+filldraw stroke z11e--z12e;
+endchar;
+
+cmchar "tamil e";
+beginchar(6,1.6x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "tamil ai";
+beginchar(7,1.75x_height#,x_height#,.8x_height#);
+adjust_fit(0,0);
+pickup crisp.nib;
+y7=y10=h; y4=y8=y9=.2h; y15=y19=-d; y12=.9bar_height;
+y21=.25h; y13=-.2d; y14=-.6d; y16=-.8d; y17=y18=-.3d; y20=-.2d;
+y1=y3=.4h; y2=.7h; y11=.75h; y85=0;
+%
+x14=x1=u; x11=x12=w-u; x8=x9=x17=x18=.55[x1,x11]; x85=x8;
+x7=.6[x1,x8]; x10=.5[x9,x11]; x3=.6[x1,x8]; x2=x4=.5[x1,x3];
+x13=x2; x15=x7-.7u; x16=x17; x19=.5[x18,x11]; x20=.95x11; x21=.9x11;
+%
+x77=x8; y77=.6h; z99=z77;
+pos77(tthick,-360); pos99(tthick,0);
+pos1(tthinner,180); pos2(tmed,90); pos3(tthick,0); pos4(tmed,-90);
+z55=z1; pos55(tthinner,-180);
+%pos6 ?
+pos7(tthick,-270); pos8(tthick,-405);
+pos9(tthick,-45); pos10(tthin,-90); pos11(tthick,-180); pos12(tthick,-200);
+pos21(tthin,-240); pos13(tthin,-240); pos14(tmed,-180);
+pos15(tthick,-90); pos16(tthick,-45); pos17(tthick,-45);
+pos18(tthick,-45); pos19(tthick,90); pos20(tmed,225);
+pos85(tthin,-270);
+%pickup pencircle scaled .2pt
+filldraw stroke z1e..z2e{right}..z3e{down}..z4e{left}..z55e...{right}z7e...{down}z77e---z8e;
+%pickup crisp.nib
+%filldraw stroke z9e---z99e{up}...z10e{right}...{down}z12e..z21e---z13e..z14e{down}...z15e{right}...z16e...{up}z17e;
+filldraw stroke z9e---z99e{up}...z10e{right}...{down}z12e...{left}z85e{left}..z14e{down}...z15e{right}...z16e...{up}z17e;
+filldraw stroke z18e{down}...z19e{right}...z20e;
+%pickup pencircle scaled .2pt
+%draw stroke z18e{down}...z19e{right}...z20e;
+penlabels(1,2,3,4,55,7,8,9,10,11,12,21,13,14,15,16,17,19,20); endchar;
+
+cmchar "Tamil k";
+beginchar(8,1.5x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="k";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil o";
+beginchar(9,1.6x_height#,x_height#,.8x_height#);
+adjust_fit(0,0);
+x1=x5=x16=u; x7=rt x12r=rt x13r=w-u;
+x6=.5[x1,x7]; x15=.5[x16,x12]; x17=.1[x16,x12]; x14=.85[x16,x12];
+x11=x9; x8=.4[x9,x7]; x9=x10=.7[x1,x7];
+x3=.3[x1,x7]; x2=x4=.5[x1,x3];
+top y6r=h; bot y15r=-d;
+y2=.5h; y1=y5=y3=.5y2;
+bot y4r=bot y8r=0;
+y9=y10=y2; y7=.3h; y11=-.1d; y12=y13=-.3d;
+y14=-.6d; y16=-.5d; y17=-.2d;
+pos1(tthin,180); pos2(tthin,90); pos3(tthick,0); pos4(tthin,-90);
+pos5(tthin,-180); pos6(tmed,-270); pos7(tthick,-360); pos8(tmed,-450);
+pos9(tthin,-540); pos10(tthin,0); pos11(tmed,5); pos12(tthin,10);
+pos13(tthick,10); pos14(tthick,0); pos15(tmed,-90); pos16(tthinner,-180);
+pos17(tmed,-250);
+filldraw stroke z1e...{right}z2e...{down}z3e...{left}z4e...z5e...{right}z6e
+ ...{down}z7e...{left}z8e...z9e;
+% pickup pencircle scaled .2pt;
+filldraw stroke z10e..z11e...{right}z12e;
+filldraw stroke z13e...z14e...{left}z15e...{up}z16e...z17e;
+penlabels(1,2,3,4,6,7,8,9,11,12,14,15,16,17);
+endchar;
+
+
+cmchar "Tamil ki";
+beginchar(10,1.8x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="k";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+z45=z21; x46=x3; top y46r=h; x47=x48=w-u; y47=y4; y48=0;
+pos45(tthinnest,270); pos46(tthick,90); pos47(tthinner,0);
+x48l=x48-.5; x48r=x48+.5; y48l=y48r=0;
+filldraw stroke z45e{left}...{right}z46e...z47e{down}---z48e;
+penlabels(46,47,48);
+endchar;
+
+cmchar "Tamil kii";
+beginchar(11,1.5x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="k";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+z45=z21; x46=x3; top y46r=h;
+pos45(tthinnest,270); pos46(tmed,90);
+x47=.6[x3,x4]; y47=.9[y3,y46]; x48=x4; y48=.5[y3,y46];
+y49=.3[y3,y46]; x49=x47; x50=.2[x3,x4]; y50=y48; z51=z47;
+pos47(.7tmed,45); pos48(tthinner,0); pos49(tthinnest,-90);
+pos50(tthinnest,-180); pos51(tthinnest,-225);
+filldraw stroke z45e{left}...{right}z46e...z47e...{down}z48e...{left}z49e...{up}z50e...z51e;
+penlabels(46,47,48,49,50);
+endchar;
+
+cmchar "Tamil ku";
+beginchar(12,2x_height#,asc_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x45=x5; bot y45r=-d; pos45(tthick,-450);
+x46=x46r=x46l=x2; y46=y2; y46r=y46+1; y46l=y46-1;
+y26=y25; y26l=y25l; y26r=y25r; x26=x26l=x26r=.7[x3,x4];
+x47=-.25x_height; y47=y8; pos47(tthin,-540);
+filldraw stroke z25e---z26e{right}...z45e...{up}z47e...{right}z46e;
+picture V; transform t; t=identity shifted(.4x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+penlabels(26,45,46,47);
+endchar;
+
+cmchar "Tamil kuu";
+beginchar(13,2.1x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+cloney(26,25); x26=x26l=x26r=.6[x3,x4];
+x28=x4; y28=0; x30=x28+(x4-x3); y30=0; top y29l=bar_height; x29=.5[x28,x30];
+x31=x30; bot y31l=0; pos31(tthin,90); x32=w-u; bot y32l=0; pos32(tthin,90);
+pos28(tthin,0); pos29(tthinner,-90); pos30(tthin,-180);
+filldraw stroke z25e--z26e{right}...{down}z28e;
+filldraw stroke z28e{up}...{right}z29e...{down}z30e;
+filldraw stroke z31e--z32e;
+penlabels(26,28,29,30,31); endchar;
+
+cmchar "Tamil long o";
+beginchar(14,1.6x_height#,x_height#,.8x_height#);
+adjust_fit(0,0);
+x1=x5=x16=u; x7=rt x12r=rt x13r=w-u;
+x6=.5[x1,x7]; x15=.5[x16,x12]; x17=.25[x16,x12]; x14=.85[x16,x12];
+x11=x9; x8=.4[x9,x7]; x9=x10=.7[x1,x7];
+x3=.3[x1,x7]; x2=x4=.5[x1,x3];
+top y6r=h; bot y15r=-d;
+y2=.5h; y1=y5=y3=.5y2;
+bot y4r=bot y8r=0;
+y9=y10=y2; y7=.3h; y11=-.1d; y12=y13=-.3d;
+y14=-.6d; y16=-.5d; y17=-.2d;
+x18=.4[x16,x12]; y18=-.5d; pos18(tthinner,-360);
+pos1(tthin,180); pos2(tthin,90); pos3(tthick,0); pos4(tthin,-90);
+pos5(tthin,-180); pos6(tmed,-270); pos7(tthick,-360); pos8(tmed,-450);
+pos9(tthin,-540); pos10(tthin,0); pos11(tmed,5); pos12(tthin,10);
+pos13(tthick,10); pos14(tthick,0); pos15(tmed,-90); pos16(tthinner,-180);
+pos17(tmed,-250);
+filldraw stroke z1e...{right}z2e...{down}z3e...{left}z4e...z5e...{right}z6e
+ ...{down}z7e...{left}z8e...z9e;
+% pickup pencircle scaled .2pt;
+filldraw stroke z10e..z11e...{right}z12e;
+filldraw stroke z13e...z14e...{left}z15e...{up}z16e...{right}z17e...{down}z18e;
+penlabels(1,2,3,4,6,7,8,9,11,12,14,15,16,17,18);
+endchar;
+
+cmchar "tamil long e";
+beginchar(15,1.6x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x10=x4; bot y10r=-d; pos10(tthick,-90);
+x11=x9; bot y11r=0; pos11(tthick,-90);
+filldraw stroke z11e--z10e;
+penlabels(10);
+endchar;
+
+cmchar "tamil ng";
+beginchar(16,1.5x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="g";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil ai matra";
+beginchar(17,2x_height#,x_height#,0);
+adjust_fit(0,0);
+w:=3x_height;
+x1=x81=u; x6=.6x10; x8=.6[x1,x6]; x7=.5[x8,x6];
+x5=.5[x1,x6]; x3=.5[x1,x8]; x4=x2=.5[x1,x3];
+x9=.5[x8,x10]; x10=.7w; x12=.6[x8,x10]; x11=.5[x12,x10];
+top y5r=top y9r=h;
+bot y4r=bot y7r=bot y11r=0;
+y2=y8=y6=y12=y10=.5h;
+y81=y1=y3=.5y2;
+pos1(tthinner,180); pos2(tthin,90); pos3(tthick,0); pos4(tthin,-90);
+pos81(tthinner,-180); pos5(tmed,-270); pos6(tthicker,-360);
+pos7(tmed,-450); pos8(tthin,-540); pos9(tmed,-630); pos10(tthicker,-720);
+pos11(tmed,-810); pos12(tthin,-900);
+x30=x11; y30=y10; x31=x12; bot y31r=0; pos30(tthick,-720); pos31(tmed,-790);
+filldraw stroke z1e...{right}z2e...{down}z3e...{left}z4e..z81e...{right}z5e
+ ...{down}z6e...{left}z7e...{up}z8e...{right}z9e...{down}z30e...z31e;
+penlabels(1,2,3,4,5,6,7,8,9,30,31);
+endchar;
+
+cmchar "tamil ngi";
+beginchar(18,1.85x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="g";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x40=x13; y40=y13; pos40(tthin,0); x41=x40; top y41l=h; pos41(tthick,-90);
+x50=x40-2u; y50=.5[y40,y41]; pos50(tmed,-30);
+x42=w-u; y42=x_height; x43=x42; y43=y43l=y43r=0; pos42(tthin,-180);
+x43r=x43-.6; x43l=x43+.6;
+filldraw stroke z40e{left}...{right}z41e...{down}z42e--z43e;
+penlabels(41,42,43,44);
+endchar;
+
+
+
+cmchar "tamil ngii";
+beginchar(19,1.75x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="g";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+small_iito(13,s,h);
+endchar;
+
+cmchar "tamil ngu";
+beginchar(20,1.5x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="g";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(40,12); y40=y40l=y40r=-d;
+filldraw stroke z12e--z40e;
+endchar;
+
+cmchar "tamil nguu";
+beginchar(21,1.85x_height#,x_height#,1.5desc_depth#);
+adjust_fit(0,0);
+callchar:="g";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(40,12); y40=y40l=y40r=-.5d;
+filldraw stroke z12e--z40e;
+x22=w-u; y22=.5y40; x21=.6[x12,x22]; y21=.25d;
+pos21(tthinner,-90); pos22(tthin,-180);
+x23=.7[x1,x12]; bot y23l=-d; pos23(tthick,-270);
+x24=x2; y24=-.5d; pos24(tthin,-360); x25=x7; y25=-.25d; pos25(tthinner,-450);
+x26=.5[x1,x12]; y26=-.5d; pos26(tthinnest,-540);
+filldraw stroke z40e{up}...{right}z21e...{down}z22e...{left}z23e...{up}z24e
+ ...{right}z25e...{down}z26e;
+penlabels(40,21,22,23,24,25,26);
+endchar;
+
+cmchar "tamil e matra";
+beginchar(22,1.4x_height#,body_height#,0);
+adjust_fit(0,0);
+x1=x3=x5=.6w; x2=x1-1.5u; x4=x1+1.5u; top y3l=bar_height;
+pos3(1.2tthin,-90); y2=y4=.5[y1,y3]; bot y1l=.25u; pos1(tthin,90);
+pos2(tthin,0); pos4(tmed,-180); y5=y1; pos5(tthin,-270);
+x6=u; y6=.5h; pos6(tthinner,-360); top y7l=h; x7=.5w; pos7(1.2tmed,-450);
+x8=w-u; y8=x_height; pos8(tthin,-540); x9=x8; y9=0; x9r=x9-.6; x9l=x9+.6;
+y9r=y9l=y9; x75=x7; bot y75l=0; pos75(tthin,-280);
+filldraw stroke z1e...{up}z2e...{right}z3e...{down}z4e...z5e...{left}z75e
+ ...{up}z6e...{right}z7e...z8e--z9e;
+penlabels(1,2,3,4,5,75,6,7,8,9);
+endchar;
+
+cmchar "tamil long e matra";
+beginchar(23,1.4x_height#,body_height#,0);
+adjust_fit(0,0);
+x1=x3=x5=x10=x8=x12=w-2.5u; x2=x11=x1-1.5u; x4=x9=x1+1.5u; top y3l=bar_height;
+pos3(1.2tthin,-90); y2=y4=.5[y1,y3]; bot y1l=.25u; pos1(tthin,90);
+pos2(tthin,0); pos4(tmed,-180); y5=y1; pos5(tthin,-270);
+x6=u; y6=.5h; pos6(tthinner,-360); top y7l=h; x7=.55w; pos7(1.2tmed,-450);
+x75=x7; bot y75l=0; pos75(tthin,-280);
+top y8l=h-.25u; pos8(.8tmed,-460); y9=y11=.5[y8,y10]; y10=y8-y3+y1;
+y12=y8; pos9(tthin,-540); pos10(tthin,-630); pos11(tthinner,-720);
+pos12(tthinnest,-810);
+filldraw stroke z1e...{up}z2e...{right}z3e...{down}z4e...z5e...{left}z75e
+ ...{up}z6e...{right}z7e...z8e...{down}z9e...{left}z10e...{up}z11e...z12e;
+penlabels(1,2,3,4,5,75,6,7,8,9,10,11,12);
+endchar;
+
+cmchar "Tamil c";
+beginchar(24,1.5x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y26=y25; y26l=y25l; y26r=y25r; x26=x26l=x26r=w-u;
+filldraw stroke z25e---z26e;
+penlabels(26);
+endchar;
+
+cmchar "Tamil ci";
+beginchar(26,1.7x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y26=y25; y26l=y25l; y26r=y25r; x26=x26l=x26r=w-u-.2x_height;
+filldraw stroke z25e---z26e;
+z45=z21; x46=x3; top y46r=h; x47=x48=w-u; y47=y4; y48=0;
+pos45(tthinnest,270); pos46(tthick,90); pos47(tthinner,0);
+x48l=x48-.5; x48r=x48+.5; y48l=y48r=0;
+filldraw stroke z45e{left}...{right}z46e...z47e{down}---z48e;
+penlabels(26,46,47,48);
+endchar;
+
+cmchar "Tamil cii";
+beginchar(27,1.6x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y26=y25; y26l=y25l; y26r=y25r; x26=x26l=x26r=w-u-.1x_height;
+filldraw stroke z25e---z26e;
+z45=z21; x46=x3; top y46r=h;
+pos45(tthinnest,270); pos46(tmed,90);
+x47=.6[x3,x4]; y47=.9[y3,y46]; x48=x4; y48=.5[y3,y46];
+y49=.3[y3,y46]; x49=x47; x50=.2[x3,x4]; y50=y48; z51=z47;
+pos47(.7tmed,45); pos48(tthinner,0); pos49(tthinnest,-90);
+pos50(tthinnest,-180); pos51(tthinnest,-225);
+filldraw stroke z45e{left}...{right}z46e...z47e...{down}z48e...{left}z49e...{up}z50e...z51e;
+penlabels(26,46,47,48,49,50);
+endchar;
+
+cmchar "Tamil cu";
+beginchar(28,1.65x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y26=y25; y26l=y25l; y26r=y25r; x26=x26l=x26r=w-u;
+filldraw stroke z25e---z26e;
+x27=x28=.5[x25,x26]; y27=y26; y28=0; pos27(tmed,0); pos28(tmed,0);
+filldraw stroke z27e--z28e;
+penlabels(26,27,28);
+endchar;
+
+cmchar "Tamil cuu";
+beginchar(29,2x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+w:=1.65x_height;
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y26=y25; y26l=y25l; y26r=y25r; x26=x26l=x26r=w-u;
+filldraw stroke z25e---z26e;
+x27=x28=.5[x25,x26]; y27=y26; y28=0; pos27(tmed,0); pos28(tmed,0);
+filldraw stroke z27e--z28e;
+x40=x6; bot y40r=-d; pos40(tthick,-90);
+x41=-.25x_height; y41=y8; x42=x42l=x42r=x2; y42=y2; y42r=y42+.6; y42l=y42-.6;
+pos41(tthinner,-180);
+x48=x28; y48=0; pos48(tthinner,180); x49=w-u; y49=0; pos49(tthin,0);
+filldraw stroke z48e{up}...{down}z49e...{left}z40e...{up}z41e...{right}z42e;
+picture V; transform t; t=identity shifted(.35x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+penlabels(26,27,28,40,41);
+endchar;
+
+cmchar "tamil ny";
+beginchar(32,2x_height#+2u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=1.7x_height;
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; x99=x9; y99=0; pos99(tthin,0);
+x11=x9+4u; x10=.5[x9,x11]; top y10l=bar_height; pos10(tmed,-90);
+y11=.2bar_height; pos11(tthin,-180); x12=.5[x4,x9]; bot y12l=-d; pos12(tthick,-270);
+x13=-.2x_height; y13=.3bar_height; pos13(tthin,-360); x14=x5-.75u; y14=y5; pos14(tthinner,-400);
+filldraw stroke z99e{up}...{right}z10e...{down}z11e...{left}z12e...{up}z13e...z14e;
+picture V; transform t; t=identity shifted(.3x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "tamil nyi";
+beginchar(34,2.2x_height#+2u#,asc_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=1.7x_height;
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; x99=x9; y99=0; pos99(tthin,0);
+x11=x9+4u; x10=.5[x9,x11]; top y10l=bar_height; pos10(tmed,-90);
+y11=.2bar_height; pos11(tthin,-180); x12=.5[x4,x9]; bot y12l=-d; pos12(tthick,-270);
+x13=-.2x_height; y13=.3bar_height; pos13(tthin,-360); x14=x5-.75u; y14=y5; pos14(tthinner,-400);
+filldraw stroke z99e{up}...{right}z10e...{down}z11e...{left}z12e...{up}z13e...z14e;
+x30=x8; y30=x_height; pos30(tthin,0); x31=x30; top y31l=h; pos31(tthick,-90);
+x33=x32=x11+2u; y32=x_height; y33=y33l=y33r=0; pos32(tthin,-180); x33l=x33+.6;
+x33r=x33-.6; filldraw stroke z30e{left}...{right}z31e...{down}z32e--z33e;
+picture V; transform t; t=identity shifted(.3x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "tamil nyii";
+beginchar(35,2x_height#+2u#,body_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=1.7x_height;
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; x99=x9; y99=0; pos99(tthin,0);
+x11=x9+4u; x10=.5[x9,x11]; top y10l=bar_height; pos10(tmed,-90);
+y11=.2bar_height; pos11(tthin,-180); x12=.5[x4,x9]; bot y12l=-d; pos12(tthick,-270);
+x13=-.2x_height; y13=.3bar_height; pos13(tthin,-360); x14=x5-.75u; y14=y5; pos14(tthinner,-400);
+filldraw stroke z99e{up}...{right}z10e...{down}z11e...{left}z12e...{up}z13e...z14e;
+small_iito(8,s,h);
+picture V; transform t; t=identity shifted(.3x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "tamil nyu";
+beginchar(36,2x_height#+u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=1.7x_height;
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; x99=x9; y99=0; pos99(tthin,0);
+x11=x9+4u; x10=.5[x9,x11]; top y10l=bar_height; pos10(tmed,-90);
+y11=.2bar_height; pos11(tthin,-180); x12=.5[x4,x9]; y12=-d; pos12(tthick,-270);
+x13=0; y13=-.3d; pos13(tthin,-360); x14=x13+.2u; y14=y13+.2u; pos14(tthin,-450);
+x15=x11+1.5u; y15=y14; pos15(tthin,-450);
+x16=x15; y16=y15r; pos16(tthick,0); x17=x16; y17=x_height; pos17(tthick,0);
+filldraw stroke z99e{up}...{right}z10e...{down}z11e...{left}z12e...{up}z13e...{right}z14e--z15e;
+filldraw stroke z16e--z17e;
+penlabels(10,11,12,13,14,15,16,17);
+endchar;
+
+
+cmchar "tamil nyuu";
+beginchar(37,2.4x_height#+2u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=1.7x_height;
+callchar:="e";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; x99=x9; y99=0; pos99(tthin,0);
+x11=x9+4u; x10=.5[x9,x11]; top y10l=bar_height; pos10(tmed,-90);
+y11=.2bar_height; pos11(tthin,-180); x12=.5[x4,x9]; y12=-d; pos12(tthick,-270);
+x13=0; y13=-.3d; pos13(tthin,-360); x14=x13+.2u; y14=y13+.2u; pos14(tthin,-450);
+x15=x11+2u; y15=y14; pos15(tthin,-450);
+x16=x15; y16=y15r; pos16(tthin,0); x17=x16; y17=x_height; pos17(tthin,0);
+filldraw stroke z99e{up}...{right}z10e...{down}z11e...{left}z12e...{up}z13e...{right}z14e--z15e;
+filldraw stroke z16e--z17e;
+w:=2.4x_height+2u;
+top y18r=y17; x18=x17l; pos18(tmed,90); y19=y18; x19=w-u; x40r=x19-u;
+y40=y17; x21=x40; y21=0; pos19(tmed,90); pos40(tmed,0); pos21(tmed,0);
+filldraw stroke z18e--z19e; filldraw stroke z40e--z21e;
+penlabels(10,11,12,13,14,15,16,17,18,19,40,21);
+endchar;
+
+cmchar "Tamil t dot";
+beginchar(40,1.75x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="T";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil t dot i";
+beginchar(42,1.75x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="T";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x5=.7[x3,x4]; bot y5r=0; pos5(tthin,270); x6=x5-1.5u; top y6r=h; pos6(tthick,90);
+x7=x5; y7=bar_height; pos7(tthin,0); x8=x7; y8=-d; pos8(tthinnest,0);
+x40=x1; y40=.6[y1,y2];
+filldraw stroke z5e{z40-z5}...{right}z6e...{down}z7e--z8e;
+penlabels(5,6,7,8); endchar;
+
+cmchar "Tamil t dot ii";
+beginchar(43,1.75x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="T";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x5=.7[x3,x4]; y5=0; pos5(tmed,180);
+small_iito(5,s,x_height);
+penlabels(5,6,7,8); endchar;
+
+cmchar "tamil t dot u";
+beginchar(44,1.6x_height#,body_height#,desc_depth#);
+adjust_fit(0,0);
+x1=x2=.45w; y1=x_height; y2=0; pos1(tmed,0); pos2(tmed,0);
+x3r=x2r; y3=y2; pos3(tthinner,0); x5l=w-2.5u; y5=.5[y4,y6]; pos5(tthinner,-180);
+x4=.5[x3,x5]; y4=bar_height; pos4(tthin,-90);
+x6=x3; bot y6l=-d; pos6(tthick,-270); x7=u; y7=.5[y6,y8]; pos7(tthinner,-360);
+x8=x1+u; top y8l=h; pos8(tmed,-450); x9=x10=w-u; y9=y1; pos9(tthin,-540);
+y10=y10r=y10l=0; x10l=x10+.6; x10r=x10-.6;
+filldraw stroke z1e--z2e;
+filldraw stroke z3e{up}...{right}z4e...{down}z5e...{left}z6e...{up}z7e...{right}z8e...{down}z9e--z10e;
+penlabels(1,2,4,5,6,7,8,9,10);
+endchar;
+
+cmchar "tamil t dot uu";
+beginchar(45,1.6x_height#,body_height#,desc_depth#);
+adjust_fit(0,0);
+x1=x2=.45w; y1=x_height; y2=0; pos1(tmed,0); pos2(tmed,0);
+x3r=x2r; y3=y2; pos3(tthinner,0); x5l=w-2.5u; y5=.5[y4,y6]; pos5(tthinner,-180);
+x4=.5[x3,x5]; y4=bar_height; pos4(tthin,-90);
+x6=x3; bot y6l=-d; pos6(tthick,-270); x7=u; y7=.5[y6,y8]; pos7(tthinner,-360);
+x8=x1+u; top y8l=h; pos8(tmed,-450); x9=w-3.5u; y9=asc_height-.25u;
+x10=x9+1.5u; y10=.5[y9,y11]; x11=x9; y11=y9-4u; x12=x9-1.5u; y12=y10;
+x13=x9; y13=y9; pos9(tthin,-470); pos10(tthin,-540); pos11(tthinner,-630);
+pos12(tthinnest,-720); x13l=x13r=x13; y13l=y13+.6; y13r=y13-.6;
+filldraw stroke z1e--z2e;
+filldraw stroke z3e{up}...{right}z4e...{down}z5e...{left}z6e...{up}z7e...{right}z8e
+ ...z9e...{down}z10e...{left}z11e...{up}z12e...{right}z13e;
+penlabels(1,2,4,5,6,7,8,9,10,11,12,13);
+endchar;
+
+cmchar "Tamil n dot";
+beginchar(48,2.8x_height#+u#,x_height#,0);
+adjust_fit(0,0);
+callchar:="1";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z13e---z14e;
+filldraw stroke z15e---z16e;
+endchar;
+
+cmchar "Tamil n.aa";
+beginchar(49,2.8x_height#+3u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="1";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x21=x16; y21=y6;
+y22=-d; x22=.4[x1,x21];
+x23=x1; y23=.8x_height;
+pos21(tthick,-1080); pos22(tthin,-1170);
+y23l+.5=y23r-.5=y23; x23l=x23; x23r=x23-1;
+filldraw stroke z13e{right}...{down}z21e...{left}z22e...{right}z23e;
+picture V; transform t; t=identity shifted(3u,0);
+V=currentpicture transformed t; currentpicture:=V;
+%penlabels(21,22,23);
+endchar;
+
+cmchar "Tamil n.i";
+beginchar(50,3x_height#+u#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="1";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z13e---z14e;
+filldraw stroke z15e---z16e;
+x17=.5[x13,x14]; top y17l=x_height; x18=x17; top y18r=h;
+pos17(tthin,270); pos18(tthick,90);
+x20=x19=x14+u; y19=x_height; y20=y20r=y20l=0;
+pos19(tthin,0); x20l=x20-.6; x20r=x20+.6;
+filldraw stroke z17e{left}...{right}z18e...{down}z19e--z20e;
+penlabels(17,18,19,20);
+endchar;
+
+cmchar "Tamil n.ii";
+beginchar(51,3x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="1";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z13e---z14e;
+filldraw stroke z15e---z16e;
+x17=.5[x13,x14]; top y17l=x_height; pos17(tthin,270);
+small_iito(17,s,h);
+penlabels(17);
+endchar;
+
+cmchar "Tamil n.u";
+beginchar(52,2.8x_height#+3u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="1";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x21=x16+u; y21=y6;
+y22=-d; x22=.6[x1,x21];
+x23=x1; y23=-.3d; x24=x23+.2u; y24=y23+.2u; x25=w-u; y25=y24;
+x27r=x26r=x25; y27=x_height; y26=y25r;
+pos21(tthin,-1080); pos22(tthick,-1170);
+pos23(tthin,-1260); pos24(tthin,-1350); pos25(tthin,-1350);
+filldraw stroke z13e{right}...{down}z21e...{left}z22e...{up}z23e...{right}z24e--z25e;
+pos26(tmed,0); pos27(tmed,0); filldraw stroke z26e--z27e;
+penlabels(21,22,23,24,25,27);
+endchar;
+
+cmchar "Tamil n.uu";
+beginchar(53,3.6x_height#+u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=3x_height+u;
+callchar:="1";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x21=x16+u; y21=y6;
+y22=-d; x22=.6[x1,x21];
+x23=x1; y23=-.3d; x24=x23+.2u; y24=y23+.2u; x25=w-u; y25=y24;
+x27r=x26r=x25; y27=x_height; y26=y25r;
+pos21(tthin,-1080); pos22(tthick,-1170);
+pos23(tthin,-1260); pos24(tthin,-1350); pos25(tthin,-1350);
+filldraw stroke z13e{right}...{down}z21e...{left}z22e...{up}z23e...{right}z24e--z25e;
+pos26(tmed,0); pos27(tmed,0); filldraw stroke z26e--z27e;
+w:=3.6x_height+u; x28=x27l; top y28r=y27; y29=y28; y30=y27; x29=w-u; x30=x29-2u;
+x31=x30; y31=0;
+pos28(tthin,90); pos29(tthin,90); pos30(tthin,0); pos31(tthin,0);
+filldraw stroke z28e--z29e; filldraw stroke z30e--z31e;
+penlabels(21,22,23,24,25,27,28,29,30,31);
+endchar;
+
+
+
+cmchar "Tamil n dot ai";
+beginchar(54,3.8x_height#+u#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="1";
+dodraw:=false;
+tspecs;
+dodraw:=true;
+h:=oldh; w:=oldw; d:=oldd;
+aipoints;
+z211=.5[z210,z2]; pos211(tthin,135);
+filldraw stroke z201e...{down}z202e...{left}z203e...{up}z204e...z205e...{right}z206e
+ ...{down}z207e...z208e...{down}z209e...{right}z210e...z211e
+ ...{right}z2e...{down}z3e...{left}z4e..z81e...{right}z5e
+ ...{down}z6e...{left}z7e...{up}z8e...{right}z9e...{down}z10e
+ ...{left}z11e...{up}z12e...{right}z13e---z14e;
+filldraw stroke z15e---z16e;
+picture V; transform t; t=identity shifted(x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "Tamil t";
+beginchar(56,1.7x_height#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+%
+% finish with tail for t shape
+cloney(61,25); x61r=x61l=x61=.5[x3,x4];
+rt x62r=w-u; y62=.5y61; pos62(tthick,0);
+y63=y64=-.3d; lft y66l=-d; y65=.4[y64,y66];
+x63=x61; x64=x2; x65=u; x66=.7[x65,x64];
+pos63(tthin,-90); pos64(tthin,-90); pos65(tthinner,0);
+pos66(tthick,45);
+%filldraw stroke z25e--z61e{right}...{down}z62e...{left}z63e---z64e{left}...{down}z65e..z66e;
+filldraw stroke z66e...{up}z65e...{right}z64e---z63e{right}...{up}z62e...{left}z61e---z25e;
+penlabels(45,47,48,61,62,63,64,65,66);
+endchar;
+
+
+cmchar "Tamil ti";
+beginchar(58,1.85x_height#,asc_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+%
+% draw the i loop
+z45=z21; x46=x3; top y46r=h; x47=x48=w-u; y47=y4; y48=0;
+pos45(tthinnest,270); pos46(tthick,90); pos47(tthinner,0);
+x48l=x48-.5; x48r=x48+.5; y48l=y48r=0;
+filldraw stroke z45e{left}...{right}z46e...z47e{down}---z48e;
+%
+% finish with tail for t shape
+cloney(61,25); x61r=x61l=x61=.5[x3,x4];
+rt x62r=.5[x4,x48]; % note this is based on position of i-loop
+y62=.5y61; pos62(tthick,0);
+y63=y64=-.3d; lft y66l=-d; y65=.4[y64,y66];
+x63=x61; x64=x2; x65=u; x66=.7[x65,x64];
+pos63(tthinner,-90); pos64(tthinner,-90); pos65(tthinner,0);
+pos66(tthick,45);
+%filldraw stroke z25e--z61e{right}...{down}z62e...{left}z63e---z64e{left}...{down}z65e..z66e;
+filldraw stroke z66e...{up}z65e...{right}z64e---z63e{right}...{up}z62e...{left}z61e---z25e;
+penlabels(45,47,48,61,62,63,64,65,66);
+endchar;
+
+cmchar "Tamil tii";
+beginchar(59,1.65x_height#,asc_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+%
+% do the upper loop for ii
+z45=z21; x46=x3; top y46r=h;
+pos45(tthinnest,270); pos46(tmed,90);
+x47=.6[x3,x4]; y47=.9[y3,y46]; x48=x4; y48=.5[y3,y46];
+y49=.3[y3,y46]; x49=x47; x50=.2[x3,x4]; y50=y48; z51=z47;
+pos47(.7tmed,45); pos48(tthinner,0); pos49(tthinnest,-90);
+pos50(tthinnest,-180); pos51(tthinnest,-225);
+filldraw stroke z45e{left}...{right}z46e...z47e...{down}z48e...{left}z49e...{up}z50e...z51e;
+%
+% finish with tail for t shape
+cloney(61,25); x61r=x61l=x61=.5[x3,x4];
+rt x62r=w-u; y62=.5y61; pos62(tthick,0);
+y63=y64=-.3d; lft y66l=-d; y65=.4[y64,y66];
+x63=x61; x64=x2; x65=u; x66=.7[x65,x64];
+pos63(tthin,-90); pos64(tthin,-90); pos65(tthinner,0);
+pos66(tthick,45);
+%filldraw stroke z25e--z61e{right}...{down}z62e...{left}z63e---z64e{left}...{down}z65e..z66e;
+filldraw stroke z66e...{up}z65e...{right}z64e---z63e{right}...{up}z62e...{left}z61e---z25e;
+penlabels(45,47,48,49,50,61,62,63,64,65,66);
+endchar;
+
+cmchar "Tamil tu";
+beginchar(60,2.2x_height#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=w-2u;
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+%
+% finish with tail for t shape
+cloney(61,25); x61r=x61l=x61=.5[x3,x4];
+rt x62r=.35[x4,x90]; y62=.5y61; pos62(tthick,0);
+x63=x7; y63=-d; x64=x8-2u; y64=.85[y63,y65]; y66=y65=-.3d;
+x65=.25[x64,x8]; x66=w-u;rt x67r=x66; y67=bot y66l; x90=x67; y90=x_height;
+pos63(tthin,-90); pos64(tthinner,-180); pos65(tthinner,-270);
+pos66(tthinner,-270); pos67(.8tthick,0); pos90(.8tthick,0);
+filldraw stroke z25e--z61e{right}...{down}z62e...{left}z63e...{up}z64e
+ ...{right}z65e---z66e;
+filldraw stroke z67e---z90e;
+picture V; transform t; t= identity shifted(2u,0);
+V=currentpicture transformed t; currentpicture:=V;
+penlabels(61,62,63,64,65,66,90);
+endchar;
+
+cmchar "Tamil tuu";
+beginchar(61,2.6x_height#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+w:=2.2x_height-2u;
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+%
+% finish with tail for t shape
+cloney(61,25); x61r=x61l=x61=.5[x3,x4];
+rt x62r=.35[x4,x90]; y62=.5y61; pos62(tthick,0);
+x63=x7; y63=-d; x64=x8-2u; y64=.85[y63,y65]; y66=y65=-.3d;
+x65=.25[x64,x8]; x66=w-u;rt x67r=x66; y67=bot y66l; x90=x67; y90=x_height;
+pos63(tthin,-90); pos64(tthinner,-180); pos65(tthinner,-270);
+pos66(tthinner,-270); pos67(tthin,0); pos90(tthin,0);
+filldraw stroke z25e--z61e{right}...{down}z62e...{left}z63e...{up}z64e
+ ...{right}z65e---z66e;
+filldraw stroke z67e---z90e;
+w:=2.6x_height-2u;
+x201=x90l; top y201r=x_height; y202=y201; x202=w-u; pos201(tthin,90);
+pos202(tthin,90); x203=.6[x201,x202]; y203=x_height; x204=x203;
+y204=0; pos203(tmed,0); pos204(tmed,0);
+filldraw stroke z201e--z202e; filldraw stroke z203e--z204e;
+picture V; transform t; t= identity shifted(2u,0);
+V=currentpicture transformed t; currentpicture:=V;
+penlabels(61,62,63,64,65,66,90);
+endchar;
+
+cmchar "Tamil n";
+beginchar(64,1.5x_height#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="n";
+tspecs; h:= oldh; w:=oldw; d:=oldd;
+%draw the end loop
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z10e...{left}z11e...{down}z12e..z13e;
+endchar;
+
+cmchar "Tamil ni";
+beginchar(66,1.75x_height#,asc_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="n";
+tspecs; h:= oldh; w:=oldw; d:=oldd;
+%draw the end loop
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z10e...{left}z11e...{down}z12e..z13e;
+% draw the i loop
+x45=.8[x5,x4]; top y45r=x_height; x46=x45; top y46l=h; x47=x48=w-u; y47=y4; y48=0;
+pos45(tthinnest,90); pos46(tthick,-90); pos47(tthinner,-180);
+x48l=x48+.65; x48r=x48-.65; y48l=y48r=0;
+filldraw stroke z45e{left}...{right}z46e...z47e{down}---z48e;
+penlabels(45,46,47,48);
+endchar;
+
+cmchar "Tamil nii";
+beginchar(67,1.65x_height#,body_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="n";
+tspecs; h:= oldh; w:=oldw; d:=oldd;
+%draw the end loop
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z10e...{left}z11e...{down}z12e..z13e;
+x31=x9l; y31=x_height; small_iito(31,s,h);
+endchar;
+
+cmchar "Tamil nu";
+beginchar(68,1.8x_height#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="n";
+tspecs; h:= oldh; w:=oldw; d:=oldd;
+%draw the end loop
+x70=.5[x1,x6]; y70=-d; x72=w-u; y72=y82; rt x73r=x72;
+y73=y72; x74=x73; y74=x_height;
+z81=z12; z82=z11; pos70(tthinner,-90); pos81(tthinner,-180);
+pos82(tthinner,-270); pos72(tthinner,-270);
+pos73(.8tthick,0); pos74(.8tthick,0);
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z70e...{up}z81e
+ ...{right}z82e---z72e;
+filldraw stroke z73e--z74e;
+penlabels(70,72,73,74,81,82);
+endchar;
+
+cmchar "Tamil nuu";
+beginchar(69,2.1x_height#,x_height#,.5x_height#);
+adjust_fit(0,0);
+callchar:="n";
+tspecs; h:= oldh; w:=oldw; d:=oldd;
+%draw the end loop
+x70=.5[x1,x6]; y70=-d; x72=w-3u; y72=y82; rt x73r=x72;
+y73=y72; x74=x73; y74=x_height;
+z81=z12; z82=z11; pos70(tthinner,-90); pos81(tthinner,-180);
+pos82(tthinner,-270); pos72(tthinner,-270);
+pos73(tthinner,0); pos74(tthinner,0);
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z70e...{up}z81e
+ ...{right}z82e---z72e;
+filldraw stroke z73e--z74e;
+top y90r=x_height; x90=lft x73l; x91=w-u; y91=y90;
+pos90(tthinner,90); pos91(tthinner,90); filldraw stroke z90e--z91e;
+rt x92r=x91; y92=x_height; y93=0; x93=x92;
+pos92(.8tthick,0); pos93(.8tthick,0); filldraw stroke z92e--z93e;
+penlabels(70,72,73,74,81,82,90,91,92,93);
+endchar;
+
+cmchar "Tamil p";
+beginchar(72,1.4x_height#+u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="p";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil pi";
+beginchar(74,1.5x_height#+2u#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="p";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=x6; top y7l=h; pos7(tthick,-90); x8=x9=w-u; y8=x_height; y9=y9r=y9l=0;
+x9r=x9-.6; x9l=x9+.6; pos8(tthin,-180);
+filldraw stroke z6e{left}...{right}z7e...{down}z8e--z9e;
+penlabels(7,8,9); endchar;
+
+cmchar "Tamil pii";
+beginchar(75,1.4x_height#+u#,body_height#,0);
+adjust_fit(0,0);
+callchar:="p";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=x6; x7r=x6l; x7l=x6r; cloney(7,6);
+small_iito(7,s,h);
+endchar;
+
+cmchar "Tamil pu";
+beginchar(76,1.4x_height#+u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="p";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(7,5); y7r=y7l=y7=-d; filldraw stroke z5e--z7e;
+endchar;
+
+cmchar "Tamil puu";
+beginchar(77,1.4x_height#+4u#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="p";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(7,5); y7r=y7l=y7=-.5d; filldraw stroke z5e--z7e;
+x8=x7; y8=y7; pos8(tthin,0); x10=w-u; y10=.5[y9,y11]; pos10(tthin,-180);
+x9=.5[x8,x10]; top y9l=0; pos9(tthin,-90); x11=.5[x1,x10]; y11=-d;
+x12=x1; y12=-.4d; x13=.25[x1,x4]; y13=-.2d; x14=.5[x1,x4]; y14=-.45d;
+pos11(tthick,-270); pos12(tthin,-360); pos13(tthin,-450); pos14(tthinner,-540);
+filldraw stroke z8e{up}...{right}z9e...{down}z10e...{left}z11e...{up}z12e
+ ...{right}z13e...{down}z14e;
+endchar;
+
+cmchar "Tamil m";
+beginchar(80,1.6x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil mi";
+beginchar(82,1.85x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x10=x6; top y10l=h; y11=x_height; x12=x11=w-u; y12=0;
+pos10(tthick,-90); pos11(tthin,-180); y12r=y12l=y12;
+x12r=x12-.6; x12l=x12+.6;
+filldraw stroke z6e{left}...{right}z10e...{down}z11e--z12e;
+penlabels(10,11,12); endchar;
+
+cmchar "Tamil mii";
+beginchar(83,1.6x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x10=x6; y10l=x_height; x10r=x10-.6; x10l=x10+.6; y10=y10l-.6; y10r=y10-.6;
+small_iito(10,s,h);
+endchar;
+
+cmchar "Tamil mu";
+beginchar(84,2.2x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+w:=1.6x_height;
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x9=x8; y9=0; pos9(tthick,-180);
+x10=.25[x2,x8]; bot y10l=-d; pos10(tmed,-270);
+x11=-.6x_height+u; y11=.5bar_height; x12=x1-.5u; y12l=h;
+pos11(tthin,-360); x12l=x12r=x12; y12=y12l-.6; y12r=y12-.6;
+filldraw stroke z9e{down}...{left}z10e...{up}z11e...{right}z12e;
+picture V; transform t; t=identity shifted(.6x_height,0);
+V=currentpicture transformed t; currentpicture:= V;
+endchar;
+
+
+cmchar "Tamil muu";
+beginchar(85,2.2x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+w:=1.6x_height;
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x9=x8; y9=0; pos9(tthick,-180);
+x10=.25[x2,x8]; bot y10l=-d; pos10(tmed,-270);
+x11=-.6x_height+u; y11=.5bar_height; x12=x1-2.5u; y12l=h;
+pos11(tthin,-360); pos12(tthinnest,-450);
+x13=x12+u; y14=y12-u; x14=x13-2u; y14=y13;
+pos13(tthinnest,-540); x14l=x14-.6; x14r=x14+.6; y14r=y14l=y14;
+filldraw stroke z9e{down}...{left}z10e...{up}z11e...{right}z12e...{down}z13e...{z14-z2}z14e;
+picture V; transform t; t=identity shifted(.6x_height,0);
+V=currentpicture transformed t; currentpicture:= V;
+endchar;
+
+cmchar "Tamil y";
+beginchar(88,1.5x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="y";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil yi";
+beginchar(90,1.9x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="y";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x20=x9; y20l=h; pos20(tthick,-90); x21=w-u; y21=x_height; pos21(tthin,-180);
+x22=x21; y22=y22l=y22r=0; x22r=x22-.6; x22l=x22+.6;
+filldraw stroke z9e{left}...{right}z20e...{down}z21e--z22e;
+penlabels(20,21,22); endchar;
+
+cmchar "Tamil yii";
+beginchar(91,1.65x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="y";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x20=x9; y20=y9; pos20(tthin,180);
+small_iito(20,s,h);
+endchar;
+
+cmchar "Tamil yu";
+beginchar(92,1.5x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="y";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(20,10); y20=y20l=y20r=-d;
+filldraw stroke z10e--z20e;
+penlabels(20); endchar;
+
+cmchar "Tamil yuu";
+beginchar(93,1.75x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="y";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(20,10); y20=y20l=y20r=-.5d;
+filldraw stroke z10e--z20e;
+x22=w-u; y22=0; x21=.6[x10,x22]; y21=.25d;
+pos21(tthinner,-90); pos22(tthin,-180);
+x23=.7[x7,x8]; y23=-1.2d; pos23(tthick,-270);
+x24=x2; y24=-.5d; pos24(tthin,-360); x25=x7; y25=-.25d; pos25(tthinner,-450);
+x26=.5[x7,x8]; y26=-.5d; pos26(tthinnest,-540);
+filldraw stroke z20e{up}...{right}z21e...{down}z22e...{left}z23e...{up}z24e
+ ...{right}z25e...{down}z26e;
+penlabels(20,21,22,23,24,25,26); endchar;
+
+cmchar "Tamil r";
+beginchar(96,.9x_height#+2u#,x_height#,.75desc_depth#);
+adjust_fit(0,0);
+callchar:="r2";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=x6; bot y7l=y6; x8=x1; bot y8l=-d;
+pos7(tthin,90); pos8(tthin,90);
+filldraw stroke z7e--z8e;
+penlabels(7,8); endchar;
+
+cmchar "Tamil aa matra";
+beginchar(97,.9x_height#+2u#,x_height#,0);
+adjust_fit(0,0);
+callchar:="r2";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil ri";
+beginchar(98,.9x_height#+3.5u#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="r2";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=.5[x5,x4]; y7=y5; x8=x7; top y8r=h; x9=x10=w-u; y9=x_height; y10=0;
+pos7(tthinner,-90); pos8(tthick,90); pos9(tthin,0);
+x10l=x10-.6; x10r=x10+.6; y10r=y10l=0;
+filldraw stroke z7e{left}...{right}z8e...{down}z9e--z10e;
+penlabels(7,8,9,10); endchar;
+
+cmchar "Tamil rii";
+beginchar(99,.9x_height#+2.5u#,body_height#,0);
+adjust_fit(0,0);
+callchar:="r2";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=.5[x5,x4]; y7=x_height; pos7(tthinner,-90);
+small_iito(7,s,body_height);
+penlabels(7,8,9,10); endchar;
+
+cmchar "Tamil ru";
+beginchar(100,.9x_height#+7u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="r2";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=x6; y7=y6; x8=.7[x5,x4]; top y8l=bar_height; pos8(tthick,-90);
+pos7(tthin,0); x9=1.4[x5,x4]; y9=0; pos9(tthin,-180);
+x10=.7[x1,x6]; bot y10l=-d; pos10(tthinner,-270); x11=x1-4u; y11=.5bar_height;
+pos11(tthinner,-360); x12=x2-u; top y12l=x_height; pos12(tthinnest,-450);
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z10e...{up}z11e...{right}z12e;
+picture V; transform t; t=identity shifted(3.75u,0);
+V=currentpicture transformed t; currentpicture:= V;
+penlabels(7,8,9,10,11,12); endchar;
+
+
+cmchar "Tamil ruu";
+beginchar(101,.9x_height#+9u#,x_height#,1.2desc_depth#);
+adjust_fit(0,0);
+callchar:="r2";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x7=x6; y7=y6; x8=.7[x5,x4]; top y8l=bar_height; pos8(tthick,-90);
+pos7(tthin,0); x9=1.4[x5,x4]; y9=0; pos9(tthin,-180);
+x10=.7[x1,x6]; bot y10l=-d; pos10(tthinner,-270); x11=x1-6u; y11=.5bar_height;
+pos11(tthinner,-360); x12=.5[x11,x2]; top y12l=x_height; pos12(tthin,-450);
+x13=.8[x11,x2]; y13=y12-1.5u; x14=.3[x11,x2]; y14=y12-3u;
+pos13(tthin,-540); pos14(tthinner,-600);
+filldraw stroke z7e{up}...{right}z8e...{down}z9e...{left}z10e...{up}z11e...{right}z12e
+ ...{down}z13e...z14e;
+picture V; transform t; t=identity shifted(5.75u,0);
+V=currentpicture transformed t; currentpicture:= V;
+penlabels(7,8,9,10,11,12); endchar;
+
+
+cmchar "Tamil l";
+beginchar(104,1.4x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="l";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x11=x9; top y11r=h; x12=x11+.5u; y12=y11-.25u; pos11(tthick,90); pos12(.7tthick,60);
+x13=x12; y13=x12-2u; pos13(tthin,-90); x14r=x14l=x14=x12; y14=y12; y14r=y14+1; y14l=y14-1;
+filldraw stroke z4e...z1e..z2e..z3e..z4e...{up}z81e..z5e...{down}z6e--z7e{down}...{right}z8e...{up}z9e
+ ...{left}z10e;
+endchar;
+
+cmchar "Tamil li";
+beginchar(106,1.6x_height#+2u#,body_height#,0);
+adjust_fit(0,0);
+callchar:="l";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x11=x10; top y11r=h; pos11(tthick,90); x13=x12=w-u; y12=x_height;
+y13r=y13l=y13=0; x13l=x13-.6; x13r=x13+.6; pos12(tthin,0);
+filldraw stroke z4e...z1e..z2e..z3e..z4e...{up}z81e..z5e...{down}z6e--z7e{down}...{right}z8e...{up}z9e
+ ...{left}z10e...{right}z11e...{down}z12e--z13e;
+%filldraw stroke z10e...{right}z11e...{down}z12e--z13e;
+penlabels(11,12,13);
+endchar;
+
+cmchar "Tamil lii";
+beginchar(107,1.5x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="l";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x11=x9; top y11r=h; x12=x11+.5u; y12=y11-.25u; pos11(tthick,90); pos12(.7tthick,60);
+x13=x12; y13=x12-2u; pos13(tthin,-90); x14r=x14l=x14=x12; y14=y12; y14r=y14+1; y14l=y14-1;
+filldraw stroke z4e...z1e..z2e..z3e..z4e...{up}z81e..z5e...{down}z6e--z7e{down}...{right}z8e...{up}z9e
+ ...{left}z10e...{right}z11e..z12e...{left}z13e...{right}z14e;
+%small_iito(10,s,h);
+endchar;
+
+cmchar "Tamil lu";
+beginchar(108,2x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="l";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z4e...z1e..z2e..z3e..z4e...{up}z81e..z5e...{down}z6e--z7e{down}...{right}z8e...{up}z9e
+ ...{left}z10e;
+z21=z8; pos21(tthin,0); x22=.15[x5,x21]; bot y22r=-d; pos22(tthick,-90);
+x23=x81-u; y23=-.4d; x24=x23+.5u; y24=y23+.5u; pos23(tthin,-180); pos24(tthin,-270);
+x25=w-u; y25=y24; pos25(tthin,-270); x26r=x25; x27=x26; pos26(tmed,0);
+y26=y25l; y27=x_height; pos27(tmed,0);
+filldraw stroke z21e{down}...{left}z22e...{up}z23e...{right}z24e--z25e;
+filldraw stroke z26e--z27e;
+penlabels(21,22,23,24,25,26,27);
+endchar;
+
+cmchar "Tamil luu";
+beginchar(109,2.4x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+w:=1.9x_height;
+callchar:="l";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z4e...z1e..z2e..z3e..z4e...{up}z81e..z5e...{down}z6e--z7e{down}...{right}z8e...{up}z9e
+ ...{left}z10e;
+z21=z8; pos21(tthin,0); x22=.15[x5,x21]; bot y22r=-d; pos22(tthick,-90);
+x23=x81-u; y23=-.4d; x24=x23+.5u; y24=y23+.5u; pos23(tthin,-180); pos24(tthin,-270);
+x25=w-u; y25=y24; pos25(tthin,-270); x26r=x25; x27=x26; pos26(tthin,0);
+y26=y25l; y27=x_height; pos27(tthin,0);
+filldraw stroke z21e{down}...{left}z22e...{up}z23e...{right}z24e--z25e;
+filldraw stroke z26e--z27e;
+w:=2.4x_height;
+x28=x27l; y28r=y27; y29=y28; x29=w-u; pos28(tthin,90); pos29(tthin,90);
+filldraw stroke z28e--z29e;
+x31=x30=.65[x28,x29]; y30=y27; y31=0; pos30(tmed,0); pos31(tmed,0);
+filldraw stroke z30e--z31e;
+penlabels(21,22,23,24,25,26,27,28,29,30);
+endchar;
+
+cmchar "Tamil lai";
+beginchar(110,2.8x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="l";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; aipoints;
+z211=.5[z210,z2]; pos211(tthin,135);
+filldraw stroke z201e...{down}z202e...{left}z203e...{up}z204e...z205e...{right}z206e
+ ...{down}z207e...z208e...{down}z209e...{right}z210e...z211e
+ ...{right}z2e...{down}z3e...{left}z4e...{up}z81e...{right}z5e...{down}z6e--z7e{down}...{right}z8e...{up}z9e...{left}z10e;
+picture V; transform t; t=identity shifted(x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+
+
+cmchar "Tamil v";
+beginchar(112,1.4x_height#+2u#,x_height#,0);
+adjust_fit(0,0);
+callchar:="v";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil vi";
+beginchar(114,1.65x_height#+2u#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="v";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd; x21r=x10l; x21l=x10r; x21=x10; cloney(21,10);
+x11=x10; top y11r=h; pos11(tthick,90); x13=x12=w-u; y12=x_height;
+y13r=y13l=y13=0; x13l=x13-.6; x13r=x13+.6; pos12(tthin,0);
+filldraw stroke z21e{left}...{right}z11e...{down}z12e--z13e;
+penlabels(11,12,13);
+endchar;
+
+cmchar "Tamil vii";
+beginchar(115,1.5x_height#+u#,body_height#,0);
+adjust_fit(0,0);
+callchar:="v";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x21r=x10l; x21l=x10r; x21=x10; cloney(21,10); small_iito(21,s,h);
+endchar;
+
+cmchar "Tamil vu";
+beginchar(116,1.5x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="v";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(11,9); y11r=y11l=y11=-d; filldraw stroke z9e--z11e;
+penlabels(11); endchar;
+
+cmchar "Tamil vuu";
+beginchar(117,1.5x_height#+3u#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="v";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(11,9); y11r=y11l=y11=-.5d; filldraw stroke z9e--z11e;
+x18=x11; y18=y11; pos18(tthin,0); x20=w-u; y20=.5[y19,y21]; pos20(tthin,-180);
+x19=.5[x18,x20]; top y19l=0; pos19(tthin,-90); x21=.5[x1,x20]; y21=-d;
+x22=x1; y22=-.4d; x23=.25[x1,x9]; y23=-.2d; x24=.5[x1,x9]; y24=-.45d;
+pos21(tthick,-270); pos22(tthin,-360); pos23(tthin,-450); pos24(tthinner,-540);
+filldraw stroke z18e{up}...{right}z19e...{down}z20e...{left}z21e...{up}z22e
+ ...{right}z23e...{down}z24e;
+penlabels(11); endchar;
+
+cmchar "Tamil z";
+beginchar(120,1.6x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x9=x9r=x9l=x5; y9=-.3d; y9l=y9+.6;y9r=y9-.6; filldraw stroke z8e{down}...{right}z9e;
+x90l=x9l; y90l=y9l; pos90(tthin,-170);
+x10=.4[x1,x5]; bot y10r=-d; x11=x1; y11=.3[y9,y10]; pos10(tthick,-90); pos11(tthin,-180);
+x12=.25[x2,x5]; y12=.5[y2,y11]; pos12(tthinner,40);
+filldraw stroke z9e{left}...{left}z10e...{up}z11e...z12e;
+penlabels(9,10,11,12);
+endchar;
+
+cmchar "Tamil zi";
+beginchar(122,1.9x_height#,asc_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x9=x9r=x9l=x5; y9=-.3d; y9l=y9+.6;y9r=y9-.6; filldraw stroke z8e{down}...{right}z9e;
+x90l=x9l; y90l=y9l; pos90(tthin,-170);
+x10=.4[x1,x5]; bot y10r=-d; x11=x1; y11=.3[y9,y10]; pos10(tthick,-90); pos11(tthin,-180);
+x12=.25[x2,x5]; y12=.5[y2,y11]; pos12(tthinner,40);
+filldraw stroke z9e{left}...{left}z10e...{up}z11e...z12e;
+x30=x6; top y30l=h; y31=x_height; x32=x31=w-u; y32=0;
+pos30(tthick,-90); pos31(tthin,-180); y32r=y32l=y32;
+x32r=x32-.6; x32l=x32+.6;
+filldraw stroke z6e{left}...{right}z30e...{down}z31e--z32e;
+penlabels(9,10,11,12,30,31,32);
+endchar;
+
+cmchar "Tamil zii";
+beginchar(123,1.6x_height#,body_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x9=x9r=x9l=x5; y9=-.3d; y9l=y9+.6;y9r=y9-.6; filldraw stroke z8e{down}...{right}z9e;
+x90l=x9l; y90l=y9l; pos90(tthin,-170);
+x10=.4[x1,x5]; bot y10r=-d; x11=x1; y11=.3[y9,y10]; pos10(tthick,-90); pos11(tthin,-180);
+x12=.25[x2,x5]; y12=.5[y2,y11]; pos12(tthinner,40);
+filldraw stroke z9e{left}...{left}z10e...{up}z11e...z12e;
+small_iito(6,s,h);
+penlabels(9,10,11,12);
+endchar;
+
+cmchar "Tamil zu";
+beginchar(124,2.2x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(88,8); y88r=y88l=y88=-.5d; filldraw stroke z8e--z88e;
+x9=x88; y9=y88; pos9(tthin,-360); x99=x4; y99=y9; pos99(tthin,-180);
+x10=.25[x2,x8]; bot y10l=-d; pos10(tmed,-270);
+x11=-.6x_height+u; y11=.5bar_height; x12=x1-.5u; y12l=h;
+pos11(tthin,-360); x12l=x12r=x12; y12=y12l-.6; y12r=y12-.6;
+filldraw stroke z9e{up}...{down}z99e...{left}z10e...{up}z11e...{right}z12e;
+picture V; transform t; t=identity shifted(.6x_height,0);
+V=currentpicture transformed t; currentpicture:= V;
+endchar;
+
+cmchar "Tamil zuu";
+beginchar(125,2.2x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="m";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+clonex(88,8); y88r=y88l=y88=-.5d; filldraw stroke z8e--z88e;
+x9=x88; y9=y88; pos9(tthin,-360); x99=x4; y99=y9; pos99(tthin,-180);
+x10=.25[x2,x8]; bot y10l=-d; pos10(tmed,-270);
+x11=-.6x_height+u; y11=.5bar_height; x12=.5[x11,x1]; top y12l=h;
+pos11(tthin,-360); pos12(tthin,-450); x13=.8[x11,x1]; y13=y12-1.5u;
+pos13(tthin,-540); x14=.3[x11,x1]; y14=y13-1.5u; pos14(tthinner,-600);
+filldraw stroke z9e{up}...{down}z99e...{left}z10e...{up}z11e...{right}z12e
+ ...{down}z13e...z14e;
+picture V; transform t; t=identity shifted(.6x_height,0);
+V=currentpicture transformed t; currentpicture:= V;
+endchar;
+
+
+
+cmchar "Tamil l dot";
+beginchar(128,1.75x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="L";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "Tamil l dot i";
+beginchar(130,1.75x_height#+2u#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="L";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y13=y12; x13=x12r; x14=x13; top y14r=h; x15=x16=w-u; y15=y12; y16l=y16r=y16=0;
+x16l=x16-.6; x16r=x16+.6; pos13(tthin,180); pos14(tthick,90); pos15(tthin,0);
+filldraw stroke z13e{left}...{right}z14e...{down}z15e--z16e;
+penlabels(14,15,16); endchar;
+
+cmchar "Tamil l dot ii";
+beginchar(131,1.75x_height#+u#,body_height#,0);
+adjust_fit(0,0);
+callchar:="L";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y13=y12; x13=x12r;
+pos13(tthin,0);
+small_iito(13,s,h);
+endchar;
+
+cmchar "Tamil l dot u";
+beginchar(132,2.05x_height#+3u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="L";
+tspecs;
+h:=oldh; w:=2.05x_height; d:=oldd;
+x31=x11; y31=0; pos31(tthin,0); x33=w-u; y33=.5[y32,y34]; pos33(tthin,-180);
+x32=.5[x31,x33]; y32=bar_height; pos32(tthin,-90);
+x35=x1-3u; y35=.5[y1,y2]; pos35(tthin,-360); x34=.5[x35,x33]; bot y34l=-d;
+pos34(tthick,-270); x36=x1; y36=y5; x36r=x36+.6; x36l=x36-.6;
+y36r=y36-.6; y36l=y36+.6;
+filldraw stroke z31e{up}...{right}z32e...{down}z33e...{left}z34e...{up}z35e..{right}z36e;
+picture V; transform t; t=identity shifted(3u,0); V=currentpicture transformed t;
+currentpicture:=V;
+endchar;
+
+cmchar "Tamil l dot uu";
+beginchar(133,2.05x_height#+3u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="L";
+tspecs;
+h:=oldh; w:=2.05x_height; d:=oldd;
+x31=x11; y31=0; pos31(tthin,0); x33=w-u; y33=.5[y32,y34]; pos33(tthin,-180);
+x32=.5[x31,x33]; y32=bar_height; pos32(tthin,-90);
+x35=x1-3u; y35=.5[y1,y2]; pos35(tthin,-360); x34=.5[x35,x33]; bot y34l=-d;
+pos34(tthick,-270); x36=.5[x35,x1]; top y36l=h; pos36(tthin,-450);
+x37=.9[x35,x1]; y37=y36-u; pos37(tthin,-540); x38=.3[x35,x1]; y38=y37-u;
+pos38(tthinner,-600);
+filldraw stroke z31e{up}...{right}z32e...{down}z33e...{left}z34e...{up}z35e..{right}z36e
+ ...{down}z37e...z38e;
+picture V; transform t; t=identity shifted(3u,0); V=currentpicture transformed t;
+currentpicture:=V;
+endchar;
+
+cmchar "Tamil l dot ai";
+beginchar(134,2.75x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="L";
+dodraw:=false;
+tspecs;
+dodraw:=true;
+h:=oldh; w:=oldw; d:=oldd;
+aipoints;
+z211=.5[z210,z2]; pos211(tthin,135);
+filldraw stroke z201e...{down}z202e...{left}z203e...{up}z204e...z205e...{right}z206e
+ ...{down}z207e...z208e...{down}z209e...{right}z210e...z211e
+ ...{right}z2e...{down}z3e...{left}z4e...{up}z1e...{right}z5e...{down}z6e;
+filldraw stroke z7e---z8e; filldraw stroke z9e---z10e;
+filldraw stroke z11e---z12e;
+picture V; transform t; t=identity shifted(x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "Tamil alv. r";
+beginchar(136,1.3x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="R";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z4e{up}...{right}z6e...{down}z7e..z8e..z9e...{down}z12e..z10e;
+endchar;
+
+cmchar "Tamil alv. raa";
+beginchar(137,1.3x_height#+3u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="R";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x77=x7; y77=.4[y6,y7]; pos77(tthin,-180);
+x7:=x7-u; x7r:=x7r-u; x7l:=x7l-u;
+x88=x77; y88=0; pos88(tthin,-180);
+x31=x5; bot y31l=-d; x32=-2u; y32=.3bar_height;
+pos31(tthick,-270); pos32(tthin,-360);
+x33=x33r=x33l=x11-.5u; y33=y11; y33l=y33+.6; y33r=y33-.6;
+filldraw stroke z4e{up}...{right}z6e...{down}z77e...{down}z7e...{down}z88e...{left}z31e...{up}z32e...z33e;
+picture V; transform t; t=identity shifted(3u,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "Tamil alv. ri";
+beginchar(138,1.7x_height#,asc_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="R";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z4e{up}...{right}z6e...{down}z7e..z8e..z9e...{down}z12e..z10e;
+x77=x6; top y77r=h; pos77(tthick,-270);
+x78=w-u; y78=x_height; x79=x78; y79=y79r=y79l=0;
+x79r=x79+.6; x79l=x79-.6; pos78(tthin,-360);
+filldraw stroke z6e{left}...{right}z77e...{down}z78e--z79e;
+endchar;
+
+cmchar "Tamil alv. rii";
+beginchar(139,1.3x_height#,body_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="R";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z4e{up}...{right}z6e...{down}z7e..z8e..z9e...{down}z12e..z10e;
+small_iito(6,s,h);
+endchar;
+
+cmchar "Tamil alv. ru";
+beginchar(140,1.75x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="R";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x77=x7; y77=y7; pos77(tthin,-180);
+x31=x5; bot y31l=-d; x32=x1; y32=-.5d; y33=y32+.5u; x33=x32+.5u; x34=w-u; y34=y33;
+pos31(tthick,-270); pos32(tthin,-360); pos33(tthin,-450); pos34(tthin,-450);
+filldraw stroke z4e{up}...{right}z6e...{down}z77e...{left}z31e...{up}z32e...{right}z33e--z34e;
+x35r=x34; y35=y34r; x36=x35; y36=x_height; pos35(tthick,0); pos36(tthick,0);
+filldraw stroke z35e--z36e;
+endchar;
+
+cmchar "Tamil alv. ruu";
+beginchar(141,2x_height#,x_height#,1.4desc_depth#);
+adjust_fit(0,0);
+callchar:="R";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x77=x7; y77=y7; pos77(tthin,-180);
+x31=x5; bot y31l=-d; x32=x1; y32=-.5d; y33=y32+.5u; x33=x32+.5u; x34=w-3.3u; y34=y33;
+pos31(tthick,-270); pos32(tthin,-360); pos33(tthin,-450); pos34(tthin,-450);
+filldraw stroke z4e{up}...{right}z6e...{down}z77e...{left}z31e...{up}z32e...{right}z33e--z34e;
+x35r=x34; y35=y34r; x36=x35; y36=x_height; pos35(tthin,0); pos36(tthin,0);
+filldraw stroke z35e--z36e;
+x37=x36l; top y37r=x_height; x38=w-.3u; y38=y37; pos37(tthin,90); pos38(tthin,90);
+filldraw stroke z37e--z38e;
+x39r=x38-.7u; y39=x_height; x40=x39; y40=0; pos39(tthick,0); pos40(tthick,0);
+filldraw stroke z39e--z40e;
+endchar;
+
+
+cmchar "Tamil 2loop n";
+beginchar(144,2x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="N";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z13e---z14e;
+filldraw stroke z15e---z16e;
+endchar;
+
+cmchar "Tamil 2loop naa";
+beginchar(145,2x_height#+3u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+w:=2x_height;
+callchar:="N";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x21=x16+u; y21=y6;
+y22=-d; x22=.4[x1,x21];
+x23=x1; y23=.8x_height;
+pos21(tthick,-1080); pos22(tthin,-1170);
+y23l+.5=y23r-.5=y23; x23l=x23; x23r=x23-1;
+filldraw stroke z13e{right}...{down}z21e...{left}z22e...{right}z23e;
+picture V; transform t; t=identity shifted(3u,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+
+
+cmchar "Tamil 2loop ni";
+beginchar(146,2.25x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="N";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z13e---z14e;
+filldraw stroke z15e---z16e;
+x21=x16; y21=x_height; pos21(tthin,0); x22=x21; top y22l=h; pos22(tthick,-90);
+x23=w-u; y23=x_height; x24=x23; y24=y24l=y24r=0; x24r=x24-.6; x24l=x24+.6;
+pos23(tthin,-180);
+filldraw stroke z21e{left}...{right}z22e...{down}z23e--z24e;
+penlabels(22,23,24);
+endchar;
+
+cmchar "Tamil 2loop nii";
+beginchar(147,2x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="N";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+filldraw stroke z13e---z14e;
+filldraw stroke z15e---z16e;
+small_iito(16,s,h);
+endchar;
+
+cmchar "Tamil 2loop nu";
+beginchar(148,2.5x_height#+3u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+w:=2x_height;
+callchar:="N";
+tspecs;
+h:=oldh; w:=2.5x_height; d:=oldd;
+x21=x16+u; y21=y6;
+y22=-d; x22=.4[x1,x21];
+x23=x1-3u; y23=-.43d; x24=x23+u; y24=-.25d;
+pos21(tthick,-1080); pos22(tthin,-1170);
+pos23(tthin,-1260); pos24(tthin,-1350);
+y25=y24; x25=w-2u; pos25(tthin,-1350);
+rt x26r=x25; y26=y25; pos26(tthick,0); x27=x26; y27=h; pos27(tthick,0);
+filldraw stroke z13e{right}...{down}z21e...{left}z22e...{up}z23e{up}...{right}z24e--z25e;
+filldraw stroke z26e--z27e;
+picture V; transform t; t=identity shifted(3u,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "Tamil 2loop nuu";
+beginchar(149,2.8x_height#+3u#,x_height#,desc_depth#);
+adjust_fit(0,0);
+w:=2x_height;
+callchar:="N";
+tspecs;
+h:=oldh; w:=2.5x_height; d:=oldd;
+x21=x16+u; y21=y6;
+y22=-d; x22=.4[x1,x21];
+x23=x1-3u; y23=-.43d; x24=x23+u; y24=-.25d;
+pos21(tthick,-1080); pos22(tthin,-1170);
+pos23(tthin,-1260); pos24(tthin,-1350);
+y25=y24; x25=w-3u; pos25(tthin,-1350);
+rt x26r=x25; y26=y25; pos26(tthin,0); x27=x26; y27=h; pos27(tthin,0);
+filldraw stroke z13e{right}...{down}z21e...{left}z22e...{up}z23e{up}...{right}z24e--z25e;
+filldraw stroke z26e--z27e;
+w:=2.8x_height;
+x28=lft x27l; top y28r=h; x29=w-u; y29=y28; pos28(tthin,90); pos29(tthin,90);
+rt x30r=x29-.7u; y30=h; x31=x30; y31=0; pos30(tthick,0); pos31(tthick,0);
+filldraw stroke z28e--z29e; filldraw stroke z30e--z31e;
+picture V; transform t; t=identity shifted(3u,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "Tamil 2loop n ai";
+beginchar(150,3x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="N";
+dodraw:=false;
+tspecs;
+dodraw:=true;
+h:=oldh; w:=oldw; d:=oldd;
+aipoints;
+z211=.5[z210,z2]; pos211(tthin,135);
+filldraw stroke z201e...{down}z202e...{left}z203e...{up}z204e...z205e...{right}z206e
+ ...{down}z207e...z208e...{down}z209e...{right}z210e...z211e
+ ...{right}z2e...{down}z3e...{left}z4e..z81e...{right}z5e
+ ...{down}z6e...{left}z7e...{up}z8e...{right}z13e---z14e;
+filldraw stroke z15e---z16e;
+picture V; transform t; t=identity shifted(x_height,0);
+V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "grantha s dot";
+beginchar(176,2.2x_height#,asc_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="S";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "grantha s dot i";
+beginchar(178,2.5x_height#,body_height#+2u#,desc_depth#);
+adjust_fit(0,0);
+callchar:="S";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x50=x44; y50=y44; pos50(tthin,90);
+x51=x50; top y51l=h; pos51(tthick,-90);
+x52=x53=w-u; y52=x_height; y53=y53r=y53l=0; pos52(tthin,-180);
+x53r=x53-.6; x53l=x53+.6;
+filldraw stroke z50e{left}...{right}z51e...{down}z52e--z53e;
+penlabels(50,51,52,53);
+endchar;
+
+cmchar "grantha s dot ii";
+beginchar(179,2.4x_height#,body_height#+4u#,desc_depth#);
+adjust_fit(0,0);
+callchar:="S";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x50=x44; y50=y44; pos50(tthin,0);
+small_iito(50,s,h);
+endchar;
+
+cmchar "grantha s";
+beginchar(184,2.4x_height#,x_height#,0);
+adjust_fit(0,0);
+callchar:="s";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+cmchar "grantha si";
+beginchar(186,2.6x_height#,asc_height#,0);
+adjust_fit(0,0);
+callchar:="s";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+z82=z16; x83=x16; top y83l=h; pos82(tthin,45); pos83(tthick,-90);
+x85=x84=w-u; y84=x_height; y85=y85r=y85l=0; x85r=x85-.6; x85l=x85+.6;
+pos84(tthin,-180);
+filldraw stroke z82e{left}...{right}z83e...{down}z84e--z85e;
+penlabels(83,84,85);
+endchar;
+
+cmchar "grantha sii";
+beginchar(187,2.4x_height#,body_height#,0);
+adjust_fit(0,0);
+callchar:="s";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+x100=x16-2.5u; x101=x16+.5u; top y101l=h; pos101(tthick,-90);
+y100=.5[y16,y101]; pos100(tthin,0);
+x102=x101+u; y102=y101-.5u; pos102(.7tthick,-135); x103=x102;
+y103=y102-2u; pos103(tthin,-270); x104=x104r=x104l=x102;
+y104=y101; y104r=y104-.6; y104l=y104+.6;
+filldraw stroke z16e{left}...{up}z100e...{right}z101e...z102e...{left}z103e...{right}z104e;
+endchar;
+
+cmchar "grantha j";
+beginchar(192,1.75x_height#,x_height#,.8x_height#);
+adjust_fit(0,0);
+callchar:="j";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+
+cmchar "grantha ji";
+beginchar(194,2.05x_height#,asc_height#,.8x_height#);
+adjust_fit(0,0);
+callchar:="j";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+z182=z10; x183=x10; top y183l=h; pos182(tthin,90); pos183(tthick,-90);
+x185=x184=w-u; y184=x_height; y185=y185r=y185l=0; x185r=x185-.6; x185l=x185+.6;
+pos184(tthin,-180);
+filldraw stroke z182e{left}...{right}z183e...{down}z184e--z185e;
+penlabels(183,184,185);
+endchar;
+
+cmchar "grantha jii";
+beginchar(195,1.75x_height#,body_height#,.8x_height#);
+adjust_fit(0,0);
+callchar:="j";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+z82=z10; pos82(tthinner,0); small_iito(82,s,h);
+endchar;
+
+
+
+
+
+cmchar "grantha h";
+beginchar(200,3x_height#,x_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="h";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+endchar;
+
+
+cmchar "grantha hi";
+beginchar(202,3.2x_height#,asc_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="h";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+z180=z106; pos180(tthin,90); x181=x180; top y181l=h; pos181(tthick,-90);
+x182=x183=w-u; y182=x_height; y183=y183r=y183l=0; pos182(tthin,-180);
+x183r=x183-.6; x183l=x183+.6;
+filldraw stroke z180e{left}...{right}z181e...{down}z182e--z183e;
+penlabels(180,181,182,183);
+endchar;
+
+cmchar "grantha hii";
+beginchar(203,3x_height#,body_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="h";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+small_iito(106,s,h);
+endchar;
+
+cmchar "grantha ksh";
+beginchar(208,3.6x_height#,asc_height#,desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y202=y25; x202=x4+2.5u; pos202(tthin,90); x241r=w-u;
+x206=.4[x202,x241]; x207=.3[x202,x241]; x205=.2[x202,x241];
+top y205r=x_height; pos205(tthin,-270); y206=.5[y205,y207]; pos206(tthick,-360);
+bot y207r=0; pos207(tmed,-450); x240=.8[x207,x241]; bot y240r=0;
+pos240(tmed,-450); y241=.5bar_height; pos241(tthick,-360);
+x243=.5[x207,x240]; y243=h-y241; z242=.5[z241,z243];
+pos242(.5(tthick+tthin),-315); pos243(tthin,-360);
+x244=.5[x243,x245]; top y244l=h; pos244(tmed,-450); x245=x243+4u; y245=y243;
+pos245(tthin,-540); x246=.5[x207,x243]; bot y246l=-d; pos246(tthinner,-585);
+x203=.4[x202,x207]; y203=.5[y202,y204]; pos203(tthick,0); x204=x202;
+bot y204r=0; pos204(tthin,-90); x201=2x202-x203; y201=y203; pos201(tthin,-180);
+filldraw stroke z25e--z202e{right}...{down}z203e...{left}z204e...z201e...{right}z205e
+ ...{down}z206e...{left}z207e;
+filldraw stroke z207e--z240e{right}...{up}z241e...{z243-z241}z242e...{up}z243e
+ ...{right}z244e...z245e--z246e;
+endchar;
+
+cmchar "grantha kshi";
+beginchar(210,3.6x_height#+2.6u#,body_height#+2u#,desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=3.6x_height; d:=oldd;
+y202=y25; x202=x4+2.5u; pos202(tthin,90); x241r=w-u;
+x206=.4[x202,x241]; x207=.3[x202,x241]; x205=.2[x202,x241];
+top y205r=x_height; pos205(tthin,-270); y206=.5[y205,y207]; pos206(tthick,-360);
+bot y207r=0; pos207(tmed,-450); x240=.8[x207,x241]; bot y240r=0;
+pos240(tmed,-450); y241=.5bar_height; pos241(tthick,-360);
+x243=.5[x207,x240]; y243=asc_height-y241; z242=.5[z241,z243];
+pos242(.5(tthick+tthin),-315); pos243(tthin,-360);
+x244=.5[x243,x245]; top y244l=asc_height; pos244(tmed,-450); x245=x243+4u; y245=y243;
+pos245(tthin,-540); x246=.5[x207,x243]; bot y246l=-d; pos246(tthinner,-585);
+x203=.4[x202,x207]; y203=.5[y202,y204]; pos203(tthick,0); x204=x202;
+bot y204r=0; pos204(tthin,-90); x201=2x202-x203; y201=y203; pos201(tthin,-180);
+filldraw stroke z25e--z202e{right}...{down}z203e...{left}z204e...z201e...{right}z205e
+ ...{down}z206e...{left}z207e;
+filldraw stroke z207e--z240e{right}...{up}z241e...{z243-z241}z242e...{up}z243e
+ ...{right}z244e...z245e--z246e;
+w:=oldw;
+x250=x244; top y250l=asc_height; pos250(tthin,-90); x251=x245; top y251=h;
+pos251(tthick,90); x252=w-u; y252=x_height; pos252(tthin,0); x253=x252;
+y253=y253r=y253l=0; x253l=x253-.6; x253r=x253+.6;
+filldraw stroke z250e{left}...{right}z251e...{down}z252e--z253e;
+endchar;
+
+cmchar "grantha kshii";
+beginchar(211,3.6x_height#,body_height#+4u#,desc_depth#);
+adjust_fit(0,0);
+callchar:="c";
+tspecs;
+h:=oldh; w:=oldw; d:=oldd;
+y202=y25; x202=x4+2.5u; pos202(tthin,90); x241r=w-u;
+x206=.4[x202,x241]; x207=.3[x202,x241]; x205=.2[x202,x241];
+top y205r=x_height; pos205(tthin,-270); y206=.5[y205,y207]; pos206(tthick,-360);
+bot y207r=0; pos207(tmed,-450); x240=.8[x207,x241]; bot y240r=0;
+pos240(tmed,-450); y241=.5bar_height; pos241(tthick,-360);
+x243=.5[x207,x240]; y243=asc_height-y241; z242=.5[z241,z243];
+pos242(.5(tthick+tthin),-315); pos243(tthin,-360);
+x244=.5[x243,x245]; top y244l=asc_height; pos244(tmed,-450); x245=x243+4u; y245=y243;
+pos245(tthin,-540); x246=.5[x207,x243]; bot y246l=-d; pos246(tthinner,-585);
+x203=.4[x202,x207]; y203=.5[y202,y204]; pos203(tthick,0); x204=x202;
+bot y204r=0; pos204(tthin,-90); x201=2x202-x203; y201=y203; pos201(tthin,-180);
+filldraw stroke z25e--z202e{right}...{down}z203e...{left}z204e...z201e...{right}z205e
+ ...{down}z206e...{left}z207e;
+filldraw stroke z207e--z240e{right}...{up}z241e...{z243-z241}z242e...{up}z243e
+ ...{right}z244e...z245e--z246e;
+small_iito(244,s,h)
+endchar;
+
+cmchar "Tamil ayyatham";
+beginchar(240,asc_height#+2u#,asc_height#,0);
+adjust_fit(0,0); pickup light_rule.nib; autorounded;
+lft x6=hround u; x2=5u-x6; bot y4=0; y2=2u; circle_points; draw_circle;
+transform ta; ta=identity shifted(w-5u,0); transform tb; tb=identity shifted(.5w-2.5u,h-6u);
+picture VA; VA=currentpicture transformed ta;
+picture VB; VB=currentpicture transformed tb;
+addto currentpicture also VA; addto currentpicture also VB;
+endchar;
+
+% following taken directly from cmr's accent.mf
+cmchar "Dot accent";
+numeric dot_diam#; dot_diam#=max(dot_size#,cap_curve#);
+beginchar(241,5u#,min(asc_height#,10/7x_height#+.5dot_diam#),0);
+define_whole_blacker_pixels(dot_diam);
+italcorr h#*slant+.5dot_diam#-2u#;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(dot_diam,0); pos2(dot_diam,90);
+x1=x2=.5w; top y2r=h+1;
+if bot y2l<x_height+o+slab: y2l:=min(y2r-eps,x_height+o+slab+.5tiny); fi
+y1=.5[y2l,y2r]; dot(1,2); % dot
+penlabels(1,2); endchar;
+
+cmchar "grantha u";
+beginchar(242,x_height#,asc_height#,0);
+adjust_fit(0,0);
+x1=u; x2=w-u; top y1r=h; y2=y1; pos1(tthinner,90); pos2(tthinner,90);
+rt x3r=x2; x4=x3; y3=h; y4=h-3u; pos3(tthinner,0); pos4(tthinner,0);
+x5=x2; bot y5l=y4; x6=x5-3u; y6=y5; pos5(tthinner,90); pos6(tthinner,90);
+lft x7l=x6; y7=y4; y8=y3; x8=x7; pos7(tthinner,0); pos8(tthinner,0);
+filldraw stroke z1e--z2e;
+filldraw stroke z3e--z4e;
+filldraw stroke z5e--z6e;
+filldraw stroke z7e--z8e;
+%picture V; transform t; t=identity shifted(-x_height,0);
+%V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+cmchar "grantha uu";
+beginchar(243,1.2x_height#,asc_height#+3u#,0);
+adjust_fit(0,0);
+w:=x_height; h:=asc_height;
+x1=u; x2=w-u; top y1r=h; y2=y1; pos1(tthinner,90); pos2(tthinner,90);
+rt x3r=x2; x4=x3; y3=h; y4=h-3u; pos3(tthinner,0); pos4(tthinner,0);
+x5=x2; bot y5l=y4; x6=x5-3u; y6=y5; pos5(tthinner,90); pos6(tthinner,90);
+lft x7l=x6; y7=y4; y8=y3; x8=x7; pos7(tthinner,0); pos8(tthinner,0);
+filldraw stroke z1e--z2e;
+filldraw stroke z3e--z4e;
+filldraw stroke z5e--z6e;
+filldraw stroke z7e--z8e;
+w:=1.2x_height; h:=asc_height+3u;
+x10=w-u; x11=.5[x10,x12]; y11=y4-3u; y10=.5[y9,y11]; top y9l=h; x9=.5[x8,x10];
+pos9(tthinner,-90); pos10(tthinner,-180); pos11(tthinner,-270);
+y12=y4; x12=x6-2u; pos12(tthinner,-360);
+filldraw stroke z8e{up}...{right}z9e...{down}z10e...{left}z11e...{up}z12e;
+%picture V; transform t; t=identity shifted(-x_height,0);
+%V=currentpicture transformed t; currentpicture:=V;
+endchar;
+
+
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tel12.mf b/Master/texmf-dist/fonts/source/public/itrans/tel12.mf
new file mode 100644
index 00000000000..c33adccf1cf
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tel12.mf
@@ -0,0 +1,7 @@
+%tel12%
+input telmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.5pt#;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tel12b.mf b/Master/texmf-dist/fonts/source/public/itrans/tel12b.mf
new file mode 100644
index 00000000000..b54210f2ee9
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tel12b.mf
@@ -0,0 +1,7 @@
+%tel12b%
+input telmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.68pt#;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tel12nx.mf b/Master/texmf-dist/fonts/source/public/itrans/tel12nx.mf
new file mode 100644
index 00000000000..b012a6547a3
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tel12nx.mf
@@ -0,0 +1,10 @@
+%tel12nx% non-uniform pen(x-axis)
+input telmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.74pt#;
+vardef special_telpen =
+ pickup pencircle xscaled (pen_width/2) yscaled (pen_width);
+enddef;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tel12ny.mf b/Master/texmf-dist/fonts/source/public/itrans/tel12ny.mf
new file mode 100644
index 00000000000..ea0f796e09a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tel12ny.mf
@@ -0,0 +1,10 @@
+%tel12ny% non-uniform pen(y-axis)
+input telmode;
+font_size 12pt#;
+slant:=0;
+pen_width#:=0.65pt#;
+vardef special_telpen =
+ pickup pencircle xscaled pen_width yscaled (pen_width/2);
+enddef;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tel12s.mf b/Master/texmf-dist/fonts/source/public/itrans/tel12s.mf
new file mode 100644
index 00000000000..6816c2d6d56
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tel12s.mf
@@ -0,0 +1,7 @@
+%tel12s%
+input telmode;
+font_size 12pt#;
+slant:=1/4;
+pen_width#:=0.61pt#;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/tel18.mf b/Master/texmf-dist/fonts/source/public/itrans/tel18.mf
new file mode 100644
index 00000000000..a54da7079ec
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/tel18.mf
@@ -0,0 +1,7 @@
+%tel18%
+input telmode;
+font_size 18pt#;
+slant:=0;
+pen_width#:=0.86pt#;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telbase.mf b/Master/texmf-dist/fonts/source/public/itrans/telbase.mf
new file mode 100644
index 00000000000..9234fcdc269
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telbase.mf
@@ -0,0 +1,871 @@
+% 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.
+%%%%%
+% This file contains several macros. These are used for setting
+% up the environment and character generation. Before you change
+% anything in this file you should be very clear about the impact
+% of the change.
+%
+ % when testing is false all symbols in the font are
+ % generated automatically else when testing is true
+ % only selected symbols will be generated.
+if unknown testing:boolean testing; testing:=false; fi
+showstopping := 1; % for debugging only
+let telchar=\;
+let generate=input;
+let sketch=draw;
+let pos=penpos;
+let stop=bye;
+string tl_symname,tl_stra,tl_strb,tl_strc,tl_strw,tl_strx,tl_stry;
+ % contains the name of the symbol being created
+tl_symname:=""; % used for creating substitute commands on log file
+tl_stra:="OFFSETA{"; tl_strb:="OFFSETB{"; tl_strc:="OFFSETC{";
+tl_strw:="CODE{";
+tl_strx:="\def\";tl_stry:="}%";
+
+
+if testing:
+ %To test different characters use following definitions of
+ % stest and etest.
+ def stest (text s) =
+ quote def s =
+ enddef;
+ let etest=enddef;
+else:
+ %To generate all the characters use following definitions of
+ % stest and etest.
+ def stest (text s) =
+ tl_symname := str s;% symbol name - used in various messages
+ enddef;
+ let etest=;;
+fi;
+
+% We should be very careful about implications of currenttransform
+% (particularly 'slanted' transform). When a path is drawn/filled
+% currenttransform is applied. When a transform is applied to
+% currentpicture, the transform is really applied to slanted (or
+% whatever currenttransform is) path.
+def font_setup =
+ let adjust_fit = normal_adjust_fit;
+ currenttransform := currenttransform slanted slant;
+ define_pixels(u,v,uh,asc_height,des_depth,x_height);
+ define_pixels(pen_width,ul,ur,em_width);
+ define_pixels(bot_depth,top_height);
+ define_pixels(fig_height,tfig_height,tfig_width);
+ define_pixels(ascunit,vmwidth);
+ define_pixels(top_accent,bot_accent);
+ define_pixels(bot_cc_ceiling,bot_cc_floor,bot_cc_width,ccwidth);
+ define_pixels(c_height,w_height,j_height);
+ define_pixels(asc_height1,asc_height2);
+ define_pixels(dot_radius,wedge_height,wedge_depth);
+ define_pixels(half_plus_width,sc_height);
+
+ define_pixels(v_a_width,v_e_width,v_u_width);
+ define_pixels(v_lo_width,v_ea_width,v_i_width);
+
+ define_pixels(vm_a_width,vm_e_width,vm_e_height1);
+ define_pixels(vm_e_height2,vm_e_height3,vm_u_width);
+ define_pixels(vm_ro_width,vm_ao_width,vm_aoo_width);
+
+ define_pixels(cb_ka_width,cb_kha_width,cb_ga_width,cb_cha_width);
+ define_pixels(cb_ja_width,cb_tta_width,cb_nna_width);
+ define_pixels(cb_ta_width,cb_da_width,cb_na_width);
+ define_pixels(cb_ba_width,cb_ya_width,cb_ra_width);
+ define_pixels(cb_la_width,cb_lla_width,cb_va_width,cb_ca_width);
+ define_pixels(cb_sha_width,cb_ksha_width);
+ define_pixels(cb_ksha_depth);
+ define_pixels(cb_np_width,cb_vg_width);
+
+ define_pixels(cv_pu_width,cv_pu_depth);
+
+ define_pixels(p_comma_width);
+
+ %define pen
+ if unknown special_telpen:
+ pickup pencircle scaled pen_width;
+ telpen:=savepen;
+ else:
+ special_telpen;
+ telpen:=savepen;
+ fi;
+
+ %print titles if generating font
+ if unknown offsets_only:
+ tracingtitles:=1;
+ fi;
+enddef;
+
+newinternal l,r; %adjustment to spacing
+
+def normal_adjust_fit(expr left_adjustment,right_adjustment) =
+ l := -hround(left_adjustment*hppp);
+ interim xoffset := -l;
+ charwd := charwd + left_adjustment + right_adjustment;
+ r := l+hround(charwd*hppp) ;
+ w := r - hround(right_adjustment*hppp) ;
+enddef;
+
+def makebox(text rule) =
+ for y=0,asc_height,-des_depth,x_height,-bot_depth,
+ top_height,w_height,c_height,
+ j_height: rule((l,y)t_,(r,y)t_); % horizontal rules
+ endfor;
+ rule((0,h),(r+pen_width,h)); rule((0,-d),(r+pen_width,-d));%height,depth markers
+ for x=l,r:rule((x,-bot_depth)t_,(x,top_height)t_); % vertical
+ endfor;
+ for x=u*(1+floor(l/u)) step u until r-1:
+ rule((x,-bot_depth)t_,(x,top_height)t_);
+ endfor; % vertical lines at each u
+ if charic <> 0:
+ rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_));
+ fi % italic correction
+enddef;
+
+def maketicks(text rule) =
+ for y=0,h.o_,-d.o_;
+ rule((l,y),(l+10,y));rule((r-10,y),(r,y)); % horizontals
+ endfor
+ for x=l,r:
+ rule((x,10-d.o_),(x,-d.o_));
+ rule((x,h.o_-10),(x,h.o_)); % verticals
+ endfor
+ if charic <> 0:
+ rule((r+charic*pt,h.o_-10),(r+charic*pt,h.o_)); % italic corr
+ fi
+enddef;
+
+rulepen := pensquare;
+
+def begintchar(expr a,b,c,d,e,f,g) =
+ beginchar(a,b,c,d);
+ italcorr e;
+ if known offsets_only:
+ message tl_strx&tl_symname&tl_strw&decimal(a)&tl_stry;
+ fi;
+ numeric left_space,right_space,l_s,r_s;
+ l_s:=f; r_s:=g;
+ left_space:=hround(hppp*f); right_space:=hround(hppp*g);
+ pickup telpen;
+ enddef;
+
+extra_endchar := extra_endchar&"w:=r-l;";
+
+def endtchar =
+ charwd:=w/hppp; charht:= h/vppp; chardp:= d/vppp;
+ adjust_fit(l_s,r_s);
+ penlabels(range 1 thru 20);
+ message "";
+ % If any special effects are needed then those should be
+ % defined as special_effects macro.
+ if known special_effects: special_effects; fi;
+ endchar;
+ enddef;
+
+% pivot_message macro is used to print offsets to certain points
+% in the symbol being generated. These offsets are used by syllable
+% building macros to allign vowel modifiers/consonant conjuncts.
+% Unlike in english where all symbols stand alone, in Telugu
+% various symbols in the font combine to form text.
+% For consonant bases two/three offsets are identified. One is used to place
+% vowel modifiers and the other is used to place consonant conjuncts(excluding
+% those that appear on side). Third offset is used in attaching vowel modifiers
+% in some special cases. Offsets have suffixes A,B and C.
+% Vowel modifiers, accents and consonant
+% conjuncts that appear above/below base consonant indicate one offset value.
+% Same macro works in all cases.
+% The messages are in the form of TeX macros.
+% The log file contains TeX macros mixed with other messages. Use
+% some pattern matching program like grep to eliminate all lines containing
+% not begining with a \ sign. Name this file tloffsets.
+% grep '^\\' xxxxx.log>tloffsets.tex
+% The offsets are in em units. So the offsets would be same for any designsize
+% and pen width combination.
+% Print the offsets only when offsets are being generated.
+if unknown offsets_only: % do not print offsets
+ def pivot_message (text t) =
+ enddef;
+else: %print offsets
+ def pivot_message (text t) =
+ numeric count,piv[],index;
+ % count indicates the number of arguments
+ count:=0;
+ for index=t: count:=count+1; piv[count]:=index; endfor;
+ if count=1:
+ message tl_strx&tl_symname&tl_stra&decimal((piv[1]+left_space)/em_width)&tl_stry;
+ elseif count=2:
+ message tl_strx&tl_symname&tl_stra&decimal((piv[1]+left_space)/em_width)&tl_stry;
+ message tl_strx&tl_symname&tl_strb&decimal((piv[2]+left_space)/em_width)&tl_stry;
+ else:
+ message tl_strx&tl_symname&tl_stra&decimal((piv[1]+left_space)/em_width)&tl_stry;
+ message tl_strx&tl_symname&tl_strb&decimal((piv[2]+left_space)/em_width)&tl_stry;
+ message tl_strx&tl_symname&tl_strc&decimal((piv[3]+left_space)/em_width)&tl_stry;
+
+ fi;
+ enddef;
+fi;%end of if unknown offsets
+
+def fill_dot(suffix $) =
+ z$t = (x$,y$+dot_radius);
+ z$l = (x$-dot_radius,y$);
+ z$b = (x$,y$-dot_radius);
+ z$r = (x$+dot_radius,y$);
+ path fill_dot_p;
+ fill_dot_p = z$t..z$l..z$b..z$r..cycle;
+ fill fill_dot_p;
+ penlabels($t,$l,$b,$r);
+ enddef;
+
+def lit_cir_form =
+ lft z1l = (0,c_height/2); top z1t = (c_height/2,c_height);
+ rt z1 = (c_height,c_height/2); bot z1b = (c_height/2,0);
+ path lit_cir_p;
+ lit_cir_p = z1..z1t..z1l..z1b..cycle;
+ sketch lit_cir_p;
+ penlabels(1t,1l,1b);
+ enddef;
+
+def half_plus_form(suffix $) =
+ z$a=(x$+1/2half_plus_width,y$); rt z$b=(x$+half_plus_width,y$);
+ top z$c=(x$+1/2half_plus_width,x_height);
+ lft z$d = z$;
+ path half_plus_pa,half_plus_pb;
+ half_plus_pa = z$d--z$a--z$b;
+ half_plus_pb = z$a--z$c;
+ sketch half_plus_pa; sketch half_plus_pb;
+ penlabels($a,$b,$c,$d);
+enddef;
+
+def barandhook_form (suffix $)(expr bar_width,t) =
+ z$a=(x$+bar_width-u,y$); rt z$b=(x$a+u,y$-uh);
+ bot z$c =(x$b-u,y$-2uh); lft z$d=(x$b-2u,y$b);
+ top z$e=(x$a-u,y$); rt z$f=(x$b,y$+1.5uh);
+ top z$g=(x$a,y$f+uh); z$h=(x$d,y$f);
+path barandhook_p;
+barandhook_p= subpath(0,t) of (rt z$--z$a..z$b..z$c..z$d..z$e..z$f..z$g..z$h);
+sketch barandhook_p;
+penlabels($a,$b,$c,$d);
+enddef;
+
+def barandhook_forma (suffix $)(expr bar_width,t) =
+barandhook_form($,bar_width,t);
+erase sketch barandhook_p;
+barandhook_p:= subpath(0,t) of (z$--z$a..z$b..z$c..z$d..z$e..z$f..z$g..z$h);
+sketch barandhook_p;
+enddef;
+
+def wedge(suffix $) =
+bot z$w=(x$,-wedge_depth);
+ path wedge_p;
+ wedge_p = z$--z$w;
+ sketch wedge_p;
+ penlabels($u,$v,$w,$x,$y);
+ enddef;
+
+def vwedge(suffix $) =
+ z$a=(x$,y$+wedge_height);
+ path vwedge_p;
+ vwedge_p =z$--z$a;
+ sketch vwedge_p;
+ penlabels($a);
+ enddef;
+
+
+def vm_hook_form (suffix $)(expr t) =
+ z$a = (x$,y$+1.5ascunit);
+ z$b = (x$+u,y$+3ascunit);
+ z$c = (x$+2u,y$+1.5ascunit);
+ sketch subpath (0,t) of (z$..z$a..z$b..z$c);
+ penlabels ($a,$b,$c);
+ h:=top y$b;
+enddef;
+
+ def v_a_form =
+ top z1=(1/4v_a_width,x_height);
+ z10=(x1-u,y1-uh); z11=(x1,y1-2(y1-y10));
+ lft z3=(0,2/3x_height); bot z4=(1/2v_a_width,0);
+ rt z5=(v_a_width,2/3x_height); top z6=(v_a_width-1.5u,x_height);
+ z7=(3.5/5x5,1/2x_height); z8=(1/4w,1/2x_height);
+ z12=(.65v_a_width,5/6x_height); rt z2=(v_a_width,1/2x_height);
+ enddef;
+
+def v_e_form =
+ lft z1=(0,j_height); top z2=(1/5v_e_width,x_height);
+ z3=(2/5v_e_width,j_height); top z4=(3/5v_e_width,x_height);
+ rt z5=(v_e_width,1/2x_height); z6=(4/5v_e_width,1/5x_height);
+ bot z7=(1/2v_e_width,0); z8=(1/5v_e_width,1/4x_height);
+ z9=(1/2v_e_width,1/2x_height); rt z10=(v_e_width,-1/5des_depth);
+ path v_e_p;
+ v_e_p = z1..z2..tension 1.2..z3&z3..tension 1.2..z4..z5..z6..z7..z8..z9..z10;
+ sketch v_e_p;
+ enddef;
+
+def v_u_form =
+ z1=(v_u_width-1/2w_height,1/2w_height); z2=(v_u_width-u,w_height);
+ rt z3=(v_u_width,1/6x_height); bot z4=(3/4v_u_width,0);
+ z5=(1/2v_u_width,w_height); bot z6=(1/3v_u_width,0);
+ lft z7=(0,1/2x_height); top z8=(1/2v_u_width,x_height);
+ top z9=(v_u_width-w_height,x_height);
+path v_u_p;
+v_u_p=z1..z2..z3..z4..tension 1.2..z5&z5..tension 1.2..z6..z7..z8..z9;
+sketch v_u_p;
+ enddef;
+
+def v_lo_form =
+ lft z1=(0,j_height); top z2=(v_lo_width/5,x_height);
+ z3=(2/5v_lo_width,j_height); top z4=(3/5v_lo_width,x_height);
+ z5=(4/5v_lo_width,j_height); z6=(3/5v_lo_width,w_height);
+ bot z7=(4/5v_lo_width,0); rt z8=(v_lo_width,1/2x_height);
+ top z9=(9/10v_lo_width,x_height);
+ path v_lo_p;
+v_lo_p= z1..z2..z3&z3..z4..z5..z6..z7..z8..z9;
+sketch v_lo_p;
+ enddef;
+
+def v_ea_form =
+ lit_cir_form;
+ bot z2=(2/3v_ea_width,0); rt z3=(v_ea_width,1/3x_height);
+ z4=(2/3v_ea_width,4/5x_height);top z5=(1/3v_ea_width,x_height);
+sketch z1..z2..z3..z4..z5;
+ enddef;
+
+ def vm_a_form (suffix $) =
+ top lft z$a=(x$-2/5vm_a_width,asc_height1);
+ top rt z$b=(x$+3/5vm_a_width,asc_height);
+ z$c = z$;
+ sketch z$a..tension 6..z$c..tension 16..z$b;
+ penlabels($a,$b,$c);
+ enddef;
+
+def vm_e_form =
+ lft z1 = (0,x_height+1.2ascunit);
+ top z2 = (1/2vm_e_width,x_height);
+ rt z3 = (vm_e_width,x_height+2ascunit);
+ lft z5 = (0,x_height+3ascunit);
+ z6 = (1/2vm_e_width,y5);
+ top z7=(1/2vm_e_width,vm_e_height1+ascunit);
+ sketch subpath (0.4,1) of z1{down}..{right}z2..z3..z7..z5..z6;
+ % hook can be attached at z7
+enddef;
+
+def vm_e_form_a (expr xcoord) =
+% used for vowel modifier e for some consonants (eg. khe, che, ne etc)
+% 999 was chosen arbitrarily. we needed something not used elsewhere!
+% same suffix should be used by vm_ee_form_a.
+ top z999=(xcoord,vm_e_height1); rt z999i=((lft x999)-1.8u,(y999+y999j)/2);
+ top z999j=(x999,asc_height1);
+ path vm_e_pa;
+ vm_e_pa=z999..z999i..z999j..cycle; h:= (top y999)+pen_width;
+ penlabels(z999,z999i,z999j);
+enddef;
+
+def vm_ee_form_a (expr xcoord) =
+% used for vowel modifier ee for some consonants (eg. khee, chee, nee etc)
+% 999 was chosen arbitrarily. we needed something not used elsewhere!
+% same suffix should be used by vm_e_form_a.
+ vm_e_form_a(xcoord); vm_hook_form(999,3);
+enddef;
+
+def vm_u_form (suffix $) =
+ bot z$a = (x$+vm_u_width/2,0);
+ rt z$b = (x$+vm_u_width,y$);
+ z$c = (x$+3/4vm_u_width,3/4x_height);
+ top z$d = (x$+vm_u_width/2,x_height);
+path vm_u_p;
+ vm_u_p=z$..z$a..z$b..z$c..z$d;
+ sketch vm_u_p;
+ penlabels($a,$b,$c,$d);
+ enddef;
+
+def vm_ro_form =
+ z1 = (1/3vm_ro_width,-1/2des_depth);
+ z2 = (1/2vm_ro_width,-1/2des_depth);
+ z3 = (1/3vm_ro_width,0);
+ lft z4 = (0,-1/2des_depth);
+ bot z5 = (1/2vm_ro_width,-des_depth);
+ rt z6 = (vm_ro_width,(y5+y7)/2);
+ top z7 = (1/2vm_ro_width,x_height);
+sketch z1..z2..z3..z4..z5..z6..z7;
+enddef;
+
+def vm_ea_form(suffix $) (expr bar_width) =
+ z$a=(5/7bar_width,y$);
+ z$b=(x$a,asc_height2);
+ lft z$c=(0,y$b);
+ rt z$d=(bar_width,(y$+y$b)/2);
+penlabels ($a,$b,$c,$d);
+ sketch z$c--z$b..z$d..z$a--z$;
+enddef;
+
+def vm_ao_form(suffix $)(expr x_offset) =
+ z$a = (1/6vm_ao_width+x_offset,x_height);
+ lft z$b = (0+x_offset,asc_height1);
+ z$c = (1/6vm_ao_width+x_offset,asc_height2);
+ z$d = (2/6vm_ao_width+x_offset,asc_height1);
+ z$e = (3/6vm_ao_width+x_offset,asc_height2);
+ z$f = (5/6vm_ao_width+x_offset,asc_height2);
+ rt z$g = (vm_ao_width+x_offset,1/2(asc_height1+asc_height2));
+ top z$h = (5/6vm_ao_width+x_offset,asc_height1);
+ z$i = (4/6vm_ao_width+x_offset,asc_height2);
+ top z$j = (5/6vm_ao_width+x_offset,asc_height);
+ top z$k = (vm_aoo_width+x_offset-1.5u,asc_height);
+ rt z$l = (vm_aoo_width+x_offset,asc_height2);
+ %rt z$l = (vm_aoo_width+x_offset,1/2(asc_height+asc_height2));
+ %rt z$k = (vm_ao_width+x_offset,1/2(asc_height+asc_height2));
+ path vm_ao_pa,vm_ao_pb;
+ vm_ao_pa = z$a..z$b..z$c..tension1.2..z$d;
+ vm_ao_pb= z$d..tension1.2..z$e..tension 1.8..z$f..z$g..z$h..z$i..z$j..tension 1.8..z$k..z$l;
+ w:= rt x$g; h:= top y$c;
+ penlabels ($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l);
+enddef;
+
+% b---------c--------------d
+% | |_|
+% $------a
+def vm_au_form (suffix $)(expr bar_width) = % see the above diagram
+ numeric na;
+ top z$e=z$;
+ z$a = (x$e+2/10(bar_width-u),y$e);
+ z1000 = (x$-u,asc_height2);
+ % 1000 was chosen arbitrarily
+ % we needed some suffix not used by any user of
+ % this macro
+ barandhook_form(1000,bar_width,5);
+ z$d=z1000a;
+ %next two statements solve for c
+ x$c = x$a;
+ z$c = whatever[z1000,z$d];
+ na:=x$c+(x1000a-x$c)/3; % used for alligning pa,pha,sha..
+ sketch z$e--z$a{right}..{left}z$c;
+ penlabels($a,$b,$c,$d,$e,1000);
+enddef;
+
+def cb_ka_form =
+rt x1=rt x5=cb_ka_width; y1=8/10x_height; y5=1/4x_height;
+x2=x4=x6=1/2cb_ka_width; top y2=x_height; y4=1/2x_height; bot y6=0;
+lft x3=lft x7=0; y3=3/4x_height; y7=x_height-y1;
+path cb_ka_p;
+cb_ka_p=z7..z6..z5..z4..z3..z2..z1;
+enddef;
+
+def cb_kha_form =
+z1=(4/15cb_kha_width,5/6x_height);z2=(2/15cb_kha_width,y1-uh);
+lft z3=(0,y1); top z4=(x6,x_height);
+z5=(5/12cb_kha_width,1/8x_height); bot z6=(1/4cb_kha_width,0);
+lft z7=(0,1/4x_height); z8=(1/4cb_kha_width,1/3x_height);
+bot z9=(3/4cb_kha_width,0); rt z10=(cb_kha_width,1/3x_height);
+top z11=(x9,x_height);
+path cb_kha_p;
+cb_kha_p=z1..z2..z3..z4..z5..z6..z7..z8..z9..z10..z11;
+sketch cb_kha_p;
+numeric a,b;
+(a,b)=(subpath (3,5) of cb_kha_p) intersectiontimes
+ subpath (6,9) of cb_kha_p;
+z15 = point a of (subpath (3,5) of cb_kha_p); wedge(15);
+enddef;
+
+def cb_ga_form =
+bot z1=(u,0); x5=cb_ga_width-x1; bot y5=0;
+y2=y4=1/3x_height; lft x2=0; rt x4=cb_ga_width;
+top z3=(1/2cb_ga_width,x_height);
+path cb_ga_p,cv_ge_p;
+ cb_ga_p=z1..z2..z3..z4..z5;
+ sketch cb_ga_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_ga_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_ga_width,vm_e_height2));
+ z30= point na of cb_ga_p;
+ (nc,nd)= cb_ga_p intersectiontimes
+ ((1/2cb_ga_width,vm_e_height2)--(cb_ga_width,vm_e_height2));
+ z32= point nc of cb_ga_p;
+ top z31=(1/2cb_ga_width,vm_e_height3);
+ cv_ge_p=z30..z31..z32;
+enddef;
+
+def cb_cha_form =
+ lft z1=(0,x_height/2); z2=(cb_cha_width/3,x_height/2);
+ z3=(cb_cha_width/6,w_height); bot z4=(cb_cha_width/4,0);
+z5=(cb_cha_width/2,w_height); bot z6=(3/4cb_cha_width,0);
+ rt z7=(cb_cha_width,w_height); top z8=(cb_cha_width/2,x_height);
+ path cb_cha_p;
+ cb_cha_p=z1--z2..z3..z4..tension1.2..z5&z5..tension1.2..z6..z7..z8;
+ sketch cb_cha_p;
+ enddef;
+
+def cb_ja_form =
+ lft z1 = (0,j_height); top z2 = (cb_ja_width/4,x_height);
+ z3 = (cb_ja_width/2,j_height); z4 = (cb_ja_width/4,x_height/2);
+ lft z5 = (0,w_height); bot z6 = (cb_ja_width/4,0);
+ z7 = (cb_ja_width/2,w_height); bot z8 = (3/4cb_ja_width,0);
+ rt z9 = (cb_ja_width,w_height);
+ %following are useful for defining a bowl at the top
+ bot lft z3w=top z3; z3x=(x8,y1); rt z3y=(w,5/6x_height);
+ top z3z=(4/5w,x_height);
+ path cb_ja_pa,cb_ja_pb;
+ cb_ja_pa=z1..z2..z3..z4..z5..z6..tension1.2..z7&z7..tension1.2..z8..z9;
+ cb_ja_pb=z3w..z3x..z3y..z3z;
+ sketch cb_ja_pa;
+ penlabels(3w,3x,3y,3z);
+ enddef;
+
+def cb_tta_form =
+ top z1=(1/4cb_tta_width,x_height);
+ y2=y6=1/2x_height;
+ lft x2=0; rt x6=cb_tta_width;
+ x3=x1; x5=cb_tta_width-x3;
+ bot y3=bot y5=0;
+ top z4=(1/2cb_tta_width,w_height);
+ top z7=(cb_tta_width-x1,x_height);
+ z11=(x1+1.5u,y1-1.45uh);
+ path cb_tta_p,cb_tta_pa,cb_tta_pb;
+ cb_tta_pb=z1..z2..z3..tension1.2..z4&z4..tension1.2..z5..z6..z7;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_tta_pb intersectiontimes
+ ((0,5/6x_height)--(1/2cb_tta_width,5/6x_height));
+ z8=point na of cb_tta_pb;
+ (nc,nd)= cb_tta_pb intersectiontimes
+ ((0.6cb_tta_width,w_height)--(cb_tta_width,w_height));
+ z20=point nc of cb_tta_pb;
+ z19=rt z20;
+ cb_tta_pa=bot z8..z11..z1;
+ cb_tta_p=cb_tta_pa..cb_tta_pb;
+ bot lft z18= z1;% used for placing a vertical line
+ enddef;
+
+def cb_nna_form =
+z1a=(1/3cb_nna_width,1/2sc_height);
+bot z1=(1/4cb_nna_width,0); lft z2=(0,1/4x_height);
+z3=(1/6cb_nna_width,1/2x_height); lft z4=(0,3/4x_height);
+top z5=(1/4cb_nna_width,x_height); z6=(1/2cb_nna_width,j_height);
+top z7=(5/8cb_nna_width,x_height); rt z8=(cb_nna_width,1/2x_height);
+bot z9=(2/3cb_nna_width,0); z10=(x9-1/2sc_height,sc_height);
+z11=(x9,3/2sc_height); z12=(x9+1/2sc_height,sc_height);
+ path cb_nna_p;
+cb_nna_p= z1a..z1..z2..z3&z3..z4..z5..z6&z6..z7..z8..z9..z10..z11..z12;
+sketch cb_nna_p;
+ penlabels(1a);
+enddef;
+
+def cb_ta_form =
+lft z1=(0,1/2x_height);
+z2=(x1+u,y1-uh); z3=(x1+2u,y1); z4=(x2,y1+uh);
+bot z5=(1/2cb_ta_width,0); rt z6=(cb_ta_width,1/2x_height);
+z7=(x6-u,y6+uh); z8=(x6-2u,y6); z9=(x7,y6-uh);
+top z10=(1/2cb_ta_width,x_height);
+ path cb_ta_p;
+ cb_ta_p = z1..z2..z3..z4..z1..z5..z6..z7..z8..z9..z6..{left}z10;
+enddef;
+
+def cb_da_form =
+ top z1=(1/2cb_da_width,x_height); lft z2=(0,w_height);
+ bot z3=(1/3cb_da_width,0);z4=(1/2cb_da_width,w_height);
+ bot z5=(2/3cb_da_width,0);rt z6=(cb_da_width,1/2x_height);
+ path cb_da_p,cv_de_p;
+ cb_da_p= z4..tension 1.2..z5..z6..z1..z2..z3..tension 1.2..z4;
+ sketch cb_da_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_da_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_da_width,vm_e_height2));
+ z30= point na of cb_da_p;
+ (nc,nd)= cb_da_p intersectiontimes
+ ((1/2cb_da_width,vm_e_height2)--(cb_da_width,vm_e_height2));
+ z32= point nc of cb_da_p;
+ top z31=(1/2cb_da_width,vm_e_height3);
+ cv_de_p=z30..z31..z32;
+ enddef;
+
+def cb_na_form =
+ bot lft z1=(0,0); lft z2=(0,1/2w_height);
+ z3=(1/3cb_na_width,w_height); bot z4=(2/3cb_na_width,0);
+ rt z5=(cb_na_width,1/3x_height); top z6=(1/2cb_na_width,x_height);
+ path cb_na_p;
+ cb_na_p=z1..z2..z3..z4..z5..z6;
+ enddef;
+
+def cb_ba_form =
+ lft z1 = (u/2,j_height); top z2 = (cb_ba_width/5,x_height);
+ z3 = (cb_ba_width/3,j_height); lft z4 = (0,w_height);
+ bot z5 = (cb_ba_width/4,0); bot z6 = (cb_ba_width/2,w_height);
+ bot z7 = (3/4cb_ba_width,0);
+ rt z8 = (cb_ba_width,w_height); %z8 contact point
+ top z9 = (2/3cb_ba_width,x_height); % z9 another contact point
+ path cb_ba_p;
+ cb_ba_p = z1..z2..z3..z4..z5..tension 1.2..z6&z6..tension 1.2..z7..z8..z9;
+ sketch cb_ba_p;
+ enddef;
+
+def cb_ya_form =
+ lft z1 = (0,2/5x_height);
+ top z2 = (3/10cb_ya_width,8/10x_height);
+ rt z3 = (3/5cb_ya_width,y1);
+ bot z4 = (x2,0);
+ bot z5 = (4/5cb_ya_width,0);
+ rt z6 = (cb_ya_width,w_height);
+ z7 = ((x5+x6)/2,7.3/10x_height);
+ top z8 = (9/20cb_ya_width,x_height);
+enddef;
+
+def cb_ra_form =
+ top z1=(cb_ra_width/2,x_height);
+ lft z2 = (0,w_height);
+ bot z3 = (cb_ra_width/2,0);
+ rt z4 = (cb_ra_width,y2);
+ path cb_ra_p,cv_re_p;
+ cb_ra_p = z1..z2..z3..z4..cycle;
+ sketch cb_ra_p;
+ numeric na,nb,nc,nd;
+ (na,nb)= cb_ra_p intersectiontimes
+ ((0,vm_e_height2)--(1/2cb_ra_width,vm_e_height2));
+ z30= point na of cb_ra_p;
+ (nc,nd)= cb_ra_p intersectiontimes
+ ((1/2cb_ra_width,vm_e_height2)--(cb_ra_width,vm_e_height2));
+ z32= point nc of cb_ra_p;
+ top z31=(1/2cb_ra_width,vm_e_height3);
+ cv_re_p=z30..z31..z32;
+ enddef;
+
+def cb_rra_form =
+cb_tta_form;
+z14=(cb_tta_width-1.5x1,x_height-sc_height);
+z15=(x7,1/2x_height);z16=(x1,y15);
+ path cb_rra_p;
+ cb_rra_p= cb_tta_p..z14..z15--z16;
+ sketch cb_rra_p;
+enddef;
+
+def cb_la_form =
+top z1=(1/4cb_la_width,x_height);
+lft z2=(0,x_height/2); bot z3=(1/2cb_la_width,0);
+rt z4=(cb_la_width,y2); top z5=(cb_la_width-x1,x_height);
+z7=(x1+1.5u,2/3x_height);
+ path cb_la_pa,cb_la_pb,cb_la_p;
+ cb_la_pb=z1..z2..z3..z4..z5;
+z6=point 0.35 of cb_la_pb;
+ cb_la_pa= bot rt z6..z7..z1;
+ cb_la_p=cb_la_pa..cb_la_pb;
+% z8 is useful for la+u and la+uu
+numeric na,nb;
+(na,nb)=cb_la_pb intersectiontimes
+ ((cb_la_width/2,w_height)..(cb_la_width,w_height));
+z9=point na of cb_la_pb;
+z8=rt z9;
+enddef;
+
+def cb_lla_form =
+top z1=(cb_lla_width/2,w_height);
+bot z2 =(x1,0);
+z6=(1/3cb_lla_width,x_height-2uh); z3=(x6+u/2,y6-uh);
+z4=(x6,.6x_height); z5=(x6+u/2,y3); lft z7=(0,2/3x_height);
+bot z8=top z1; rt z9=(cb_lla_width,y7); top z10=(1/2cb_lla_width,x_height);
+path cb_lla_pa,cb_lla_pb;
+cb_lla_pa=z3..z4..z5..z6..z7..z8..z9..z10;
+cb_lla_pb=z1..z2..cycle;
+sketch cb_lla_pa;
+sketch cb_lla_pb;
+% z12 is useful for lla+u and lla+uu
+numeric na,nb;
+(na,nb)=cb_lla_pa intersectiontimes
+ ((cb_lla_width/2,x_height/2)..(cb_lla_width,x_height/2));
+z13=point na of cb_lla_pa;
+z12=rt z13;
+enddef;
+
+def cb_va_form =
+ lit_cir_form;
+ bot z2 = (3/5cb_va_width,0); rt z3 = (cb_va_width,w_height);
+ z4 = (7/8cb_va_width,j_height); top lft z5 = (x1,x_height);
+path cb_va_p,cv_paa_p;
+cb_va_p=z1..z2..z3..z4..z5;
+top z20=(cb_va_width/2,h);
+cv_paa_p=subpath(0,2) of cb_va_p{up}..z20;
+% z22 is useful for alligning au modifier
+numeric na,nb;
+(na,nb)=cv_paa_p intersectiontimes
+ ((cb_va_width/2,asc_height2)..(cb_va_width,asc_height2));
+z22=point na of cv_paa_p;
+ enddef;
+
+def cb_ca_form =
+lft z1=(0,1/2x_height); z2=(1/3cb_ca_width,6/8x_height);
+bot z3=(1/3cb_ca_width,0); z4=(3/4cb_ca_width,1/3x_height);
+rt z5=(cb_ca_width,2/3x_height); top z6=(1/2cb_ca_width,x_height);
+lft z7=(0,1/6x_height);
+path cb_ca_p,cb_ca_pa;
+cb_ca_p=z1..z2{right}..z4..z3..z7..z4..z5..z6;
+sketch cb_ca_p;
+% z10 is useful for ca+u and ca+uu
+cb_ca_pa=subpath(1,3) of cb_ca_p;
+numeric na,nb;
+(na,nb)=cb_ca_pa intersectiontimes
+ ((0,w_height)..(cb_ca_width,w_height));
+z11=point na of cb_ca_pa;
+z10=rt z11;
+enddef;
+
+def cb_ksha_form =
+ cb_ka_form;
+ top z11 = (1/5cb_ka_width,0);
+ lft z12 = (0,-1/2cb_ksha_depth);
+ bot z13 = (x11,-cb_ksha_depth);
+ z14 = (2/5cb_ka_width,-2/3cb_ksha_depth);
+ bot z15 = (3/5cb_ka_width,-cb_ksha_depth);
+ z16 = (4/5cb_ka_width,-1/2cb_ksha_depth);
+ top z17 = (x15,0);
+ bot rt z18 = (cb_ka_width,-cb_ksha_depth);
+ sketch z11..z12..z13..z14; sketch z14..z15..z16..z17;
+ sketch z16..z18;
+ enddef;
+
+
+def cc_clear =
+%erase all that is drawn so far.
+ clearit;
+ lft z99=(0,100);
+ left_spill := xpart(lft (z99 scaled cc_scale)) - xpart(lft z99);
+ bot z98=(100,0);
+ bot_spill := ypart(bot (z98 scaled cc_scale)) - ypart(bot z98);
+ top((z97 scaled cc_scale)
+ shifted (0,-bot_accent-(x_height*cc_scale))
+ shifted (-left_spill,-bot_spill))=
+ (w*cc_scale/2,x_height);
+enddef;
+
+def cc_transform(text t) =
+% used to obtain consonant conjuncts for some consonants and vowels lo&loo
+path cc_transformed_path;
+cc_transformed_path = t scaled cc_scale
+ shifted (0,-bot_accent-(x_height*cc_scale));
+sketch cc_transformed_path;
+enddef;
+
+def cc_f_transform(text t) =
+% used to obtain consonant conjuncts for some consonants and vowels lo&loo
+fill t scaled cc_scale
+ shifted (0,-bot_accent-(x_height*cc_scale));
+enddef;
+
+def cc_whd (expr hh,dd) =
+%this macro sets w, h and d for accents that appear below baseline.
+% for some consonant conjuncts that result from transforming
+% consonant bases the height is not zero (eg. cha, ba ,pa etc)
+% for such symbols hh should be 1 and for others hh should be 0.
+% Some consonant bases have wedges that hang below base line (eg. bha, pha
+% ddha etc. ). For these dd should be 1 and for others dd should be 0.
+%
+%When a picture is scaled, what really happens is the componant paths
+% are scaled and the picture is redrawn. Hence we need to adjust w,h and d.
+% Still consonant conjunct for nya needs special care( for d).
+w:=w*cc_scale-pen_width*cc_scale+pen_width;;
+h:=hh*x_height;
+d:=bot_accent+((x_height+(dd*wedge_depth))*cc_scale)+dd*bot_spill;
+% (x,y) slanted s shifted (a,b) is (x+sy+a,y+b) whereas
+% (x,y) shifted (a,b) slanted s is (x+sy+a+ bs,y+b). Hence we
+% need to add the correction 'bs'. 'bs' is -bot_spill*slant
+currentpicture:=currentpicture shifted
+ (-left_spill+((-bot_spill)*slant),-bot_spill);
+enddef;
+
+def cv_ngu_form =
+ z1=(0,j_height); z2=(cb_ja_width/4,j_height-uh#);
+ rt z3=(cb_ja_width/2,5/6x_height); top z4=(4/10cb_ja_width,x_height);
+ sketch z1..z2..z3..z4;
+enddef;
+
+def cv_ju_form =
+ z1=(0,5/6x_height); z2=(cb_ja_width/4,j_height);
+ rt z3=(cb_ja_width/2,y1); top z4=(4/10cb_ja_width,x_height);
+ sketch z1..z2..z3..z4;
+enddef;
+
+def cv_pu_form =
+ top lft z1=(0,c_height/2); bot z2=(cv_pu_width/2,-cv_pu_depth);
+ rt z3=(cv_pu_width,h/2); top z4=(cv_pu_width-2u,x_height);
+ sketch z1..z2..z3..z4;
+enddef;
+
+def dr_sixnine_form =
+ path dr_sixnine_p;
+ top rt z1 = (w,fig_height);
+ z2 = (w/2+u,y1-uh);
+ bot z4 = (w/2,0);
+ rt z5 = (w,x4);
+ z6 = (x4,x5-x7);
+ lft z7 = (0,y5);
+ dr_sixnine_p = z1..z2..z7..z4..z5..z6..z7;
+enddef;
+
+def dt_six_form=
+path dt_six_pa,dt_six_pb;
+ top z1=(w/5,h); lft z2=(0,3h/4); z3=(x1,h/2);
+ z4=(w/3,h/2); lft z5=(0,h/4); bot z6=(x1,0);
+ bot rt z7=(w,0);
+dt_six_pa= flex(z1,z2,z3)& z3--z4;
+dt_six_pb=flex(z3,z5,z6)& z6--z7;
+enddef;
+
+
+def p_comma_form =
+path p_comma_p;
+ z1 = (dot_radius,dot_radius);
+ rt z2 = (p_comma_width,0);
+ bot lft z3 = (x1-1/2dot_radius,-des_depth);
+fill_dot(1); p_comma_p= flex(z1,z2,z3);
+sketch p_comma_p;
+enddef;
+
+def p_bar_form =
+path p_bar_p;
+ bot lft z1 = (0,0);
+ top lft z2 = (0,x_height);
+p_bar_p= z1--z2;
+enddef;
+
+def p_slash_form =
+path p_slash_p;
+ bot lft z1 = (0,-des_depth);
+ top rt z2 = (6u,asc_height);
+p_slash_p= z1--z2;
+enddef;
+
+def p_lbracket_form = % square bracket
+path p_lbracket_p;
+ top lft z1 = (0,top_height);
+ bot lft z2 = (0,-bot_depth);
+ rt z3 = (w,y1);
+ rt z4 = (w,y2);
+p_lbracket_p=z3--z1--z2--z4;
+enddef;
+
+
+def p_rparen_form =
+path p_rparen_p;
+ top lft z1 = (0,top_height); bot lft z2 = (0,-bot_depth);
+ rt z3 = (w,(-d+h)/2);
+p_rparen_p= flex(z1,z3,z2);
+enddef;
+
+
+def p_lbrace_form =
+path p_lbrace_p;
+ top rt z1 = (w,h); lft z4 = (0,(h-d)/2);
+ z2 = (w/2,-d+7/8(h+d));
+ z3 = (x2,-d+5/8(h+d));
+p_lbrace_p= z1..z2..z3..z4;
+p_lbrace_p:=(p_lbrace_p reflectedabout (z4,z4+(w,0)) )..reverse(p_lbrace_p);
+enddef;
+
+
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telchrs1.mf b/Master/texmf-dist/fonts/source/public/itrans/telchrs1.mf
new file mode 100644
index 00000000000..b811a075515
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telchrs1.mf
@@ -0,0 +1,1061 @@
+% 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.
+%%%%%
+% This file contains code to generate vowels, vowel modifiers,
+% consonant bases, consonant conjuncts and accents
+
+stest(va); telchar "vowel a";
+begintchar(v_a_code,v_a_width#,x_height#,0,0,0,0);
+v_a_form;
+sketch z10..z11..z1..z3..z4..z5..z6..z7--z8;
+endtchar; etest;
+
+stest(vaa); telchar "vowel aa";
+begintchar(v_aa_code,v_a_width#,x_height#,0,0,0,0);
+v_a_form;
+sketch z10..z11..z1..z3..z4..z2 &z2{(0,1)}..{up}z12..z6..z5..{left}z7--z8;
+endtchar; etest;
+
+stest(ve); telchar "vowel e";
+begintchar(v_e_code,v_e_width#,x_height#,des_depth#,0,0,0);
+v_e_form;
+d:=abs(bot y10);
+endtchar; etest;
+
+stest(vee); telchar "vowel ee";
+begintchar(v_ee_code,cb_ra_width#+4u#,asc_height#,0,0,0,0);
+cb_ra_form;
+z10=top z1;
+vm_a_form(1);
+currentpicture := currentpicture shifted (u,0);
+z6 = (0,1/2x_height);
+barandhook_form(6,w,8);
+endtchar; etest;
+
+stest(vu); telchar "vowel u";
+begintchar(v_u_code,v_u_width#,asc_height#,0,0,0,0);
+v_u_form;
+barandhook_form(7,v_u_width,1); z20=0.5[z8,z9];
+vwedge(20);
+h:=top y20a;
+endtchar; etest;
+
+stest(vuu); telchar "vowel uu";
+begintchar(v_uu_code,v_u_width#+2.5u#,asc_height#,0,0,0,0);
+v_u_form;
+barandhook_form(7,w-x7,8); vwedge(8); vwedge(9);
+h:=top y8a;
+endtchar; etest;
+
+stest(vro); telchar "vowel ro";
+begintchar(v_ro_code,cb_ba_width#+2vm_u_width#,x_height#,0,0,0,0);
+cb_ba_form;
+vm_u_form(8);
+vm_u_form(8b);
+w:=rt x8b.b;
+endtchar; etest;
+
+stest(vroo); telchar "vowel roo";
+begintchar(v_roo_code,cb_ba_width#+2vm_u_width#+vmwidth#,x_height#,0,0,0,0);
+cb_ba_form;
+vm_u_form(8);
+z10=z8b;
+vm_u_form(10);
+z11=z10d;
+barandhook_forma(11,vmwidth,5);
+w:=rt x11b;
+endtchar; etest;
+
+stest(vlo); telchar "vowel lo";
+begintchar(v_lo_code,v_lo_width#,x_height#,0,0,0,0);
+v_lo_form;
+endtchar; etest;
+
+stest(vloo); telchar "vowel loo";
+begintchar(v_loo_code,v_lo_width#+vmwidth#,x_height#,0,0,0,0);
+v_lo_form;
+barandhook_forma(9,vmwidth,5);
+w:=rt x9b;
+endtchar; etest;
+
+stest(vea); telchar "vowel ea";
+begintchar(v_ea_code,v_ea_width#,x_height#,0,0,0,0);
+v_ea_form;
+endtchar; etest;
+
+stest(veae); telchar "vowel eae";
+begintchar(v_eae_code,v_ea_width#,asc_height1#,0,0,0,0);
+v_ea_form;
+lft z10 = (0,5/6x_height);
+z11 = (1/2v_ea_width,asc_height1);
+sketch z10{up}..{right}z11;
+h:=top y11;
+endtchar; etest;
+
+stest(vi); telchar "vowel i";
+begintchar(v_i_code,v_i_width#,x_height#,0,0,0,0);
+lit_cir_form;
+bot z2=(x1+2u,0); rt z3=(v_i_width,1/2x_height);
+top z4=(x2,x_height); z5=(x1,x_height-y1); top z6=(1/2x1,x_height);
+lft z7=(0,y5);
+ sketch rt z1..z2..z3..z4..z5;
+ sketch z5..z6..z7;
+endtchar; etest;
+
+stest(vao); telchar "vowel ao";
+begintchar(v_ao_code,cb_ja_width#,x_height#,0,0,0,0);
+cb_ja_form;
+endtchar; etest;
+
+
+stest(vaoo); telchar "vowel aoo";
+begintchar(v_aoo_code,cb_ja_width#,x_height#,0,0,0,0);
+cb_ja_form;
+vm_hook_form(2,2);
+endtchar; etest;
+
+
+stest(vau); telchar "vowel au";
+begintchar(v_au_code,5/4cb_ja_width#,asc_height#,0,0,0,0);
+cb_ja_form;
+z12=top z2;
+vm_au_form(12,w);
+h:=top y12c; w:=rt x1000b;
+endtchar; etest;
+
+%--------------------end of vowels-------------------
+stest(vma); telchar "vowel modifier of a";
+begintchar(vm_a_code,vm_a_width#,asc_height#,0,0,0,0);
+top z1=(2/5vm_a_width,x_height); vm_a_form(1);
+pivot_message(x1);
+endtchar; etest;
+
+stest(vmaa); telchar "vowel modifier of aa";
+begintchar(vm_aa_code,11u#,asc_height#,0,0,0,0);
+top z1 = (0,x_height);
+barandhook_form(1,w,5);
+pivot_message((w/3));
+h:=top y1;
+endtchar; etest;
+
+stest(vmaaa); telchar "vowel modifier of aa";
+% used for kha,nga,ja,nya etc.
+begintchar(vm_aaa_code,8.3u#,asc_height#,0,0,0,0);
+top z1 = (0,x_height);
+barandhook_form(1,w,5);
+pivot_message((1.6u),rt x1);
+h:=top y1;
+endtchar; etest;
+
+stest(vme); telchar "vowel modifier of e";
+begintchar(vm_e_code,vm_e_width#,asc_height#,0,0,0,0);
+vm_e_form;
+pivot_message(x2);
+h:=top y7;
+endtchar; etest;
+
+stest(vmee); telchar "vowel modifier of ee";
+begintchar(vm_ee_code,vm_e_width#,asc_height#,0,0,0,0);
+vm_e_form;
+vm_hook_form(7,3);
+pivot_message(x2);
+endtchar; etest;
+
+stest(vmeea); telchar "vowel modifier of ee";
+% Used with kha,cha,ccha,ja,ta,na,ba,bha,ma,la,lla,va etc.
+begintchar(vm_eea_code,vm_e_width#,asc_height#,0,0,0,0);
+% w and h are revised
+top z1=(0,vm_e_height1);
+vm_hook_form(1,3); w:=rt x1c;
+pivot_message(x1);
+endtchar; etest;
+
+stest(vmeeb); telchar "vowel modifier of ee";
+% Used with ra,ga and da(and its variations)
+begintchar(vm_eeb_code,vm_e_width#,asc_height#,0,0,0,0);
+% w and h are revised
+top z1=(0,vm_e_height3);
+vm_hook_form(1,3); w:=rt x1c;
+pivot_message(x1);
+endtchar; etest;
+
+stest(vmu); telchar "vowel modifier of u";
+begintchar(vm_u_code,vm_u_width#,x_height#,0,0,0,0);
+rt z1 = (0,w_height);
+vm_u_form(1);
+w:=rt x1b;
+pivot_message(x1d);
+endtchar; etest;
+
+stest(vmuu); telchar "vowel modifier of uu";
+begintchar(vm_uu_code,vm_u_width#+vmwidth#-2.5u#,x_height#,0,0,0,0);
+rt z1 = (0,w_height);
+vm_u_form(1);
+barandhook_forma(1d,vmwidth,5);
+w:=rt x1d.b;
+endtchar; etest;
+
+stest(vmro); telchar "vowel modifier of ro";
+begintchar(vm_ro_code,vm_ro_width#,x_height#,des_depth#,0,ul#,0);
+vm_ro_form;
+endtchar; etest;
+
+stest(vmroo); telchar "vowel modifier of roo";
+begintchar(vm_roo_code,vm_ro_width#+vmwidth#,x_height#,des_depth#,0,ul#,0);
+vm_ro_form;
+barandhook_forma(7,vmwidth,5);
+w:=rt x7b;
+endtchar; etest;
+
+stest(vmlo); telchar "vowel modifier of lo";
+begintchar(vm_lo_code,v_lo_width#,x_height#,0,0,0,0);
+%w,h and d are revised later
+v_lo_form;
+cc_clear;cc_transform(v_lo_p);cc_whd(0,0);
+pivot_message((x3*cc_scale));
+endtchar; etest;
+
+stest(vmloo); telchar "vowel modifier of loo";
+begintchar(vm_loo_code,v_lo_width#+vmwidth#,x_height#,0,0,0,0);
+%w,h and d are revised later
+v_lo_form;
+barandhook_forma(9,vmwidth,5);
+w:=rt x9b;
+cc_clear;cc_transform(v_lo_p);cc_transform(barandhook_p);cc_whd(0,0);
+pivot_message((x3*cc_scale));
+endtchar; etest;
+
+stest(vmea); telchar "vowel modifier of ea";
+begintchar(vm_ea_code,vmwidth#,asc_height#,0,0,0,0);
+top z1 = (4/7w,x_height);
+vm_ea_form(1,w);
+pivot_message(x1a);
+h:=top y1c;
+endtchar; etest;
+
+stest(vmeae); telchar "vowel modifier of eae";
+begintchar(vm_eae_code,vmwidth#,asc_height#,0,0,0,0);
+top z1 = (4/7w,x_height);
+vm_ea_form(1,w);
+z2 = z1b;
+vm_hook_form(2,3);
+pivot_message(x1a);
+w:=rt x2c;
+endtchar; etest;
+
+stest(vmib); telchar "vowel modifier of i(bottom)";
+%top of vm_i is same as vm_ea
+begintchar(vm_i2_code,vmwidth#,0,des_depth#,0,0,0);
+top z1=(0,0);
+barandhook_form(1,w,5); erase sketch barandhook_p;
+transform t;
+t:= identity rotated 180 shifted (vmwidth,-(bot_accent+(top y1a - bot y1c)));
+sketch barandhook_p transformed t;
+pivot_message((w/2));
+d:=abs(ypart (top z1 transformed t));
+endtchar; etest;
+
+stest(vmao); telchar "vowel modifier of ao";
+begintchar(vm_ao_code,vm_ao_width#,asc_height#,0,0,0,0);
+vm_ao_form(1,0);sketch vm_ao_pa;
+sketch subpath(0,5) of vm_ao_pb;
+pivot_message(x1a);
+endtchar; etest;
+
+stest(vmaoo); telchar "vowel modifier of aoo";
+begintchar(vm_aoo_code,vm_aoo_width#,asc_height#,0,0,0,0);
+vm_ao_form(1,0);sketch vm_ao_pa; % place the hook
+sketch vm_ao_pb;
+pivot_message(x1a);
+w:=rt x1l; h:=top y1j;
+endtchar; etest;
+
+stest(vmaooa); telchar "vowel modifier of aoo(alternate)";
+% This is basically a hook to be attached on top of ao modifier
+begintchar(vm_aoo_code_a,0#,asc_height#,0,0,0,0);
+vm_ao_form(1,0); % place the hook
+sketch vm_ao_pb; erase sketch subpath (0,5) of vm_ao_pb;
+numeric left_shift;left_shift:=x1i;
+currentpicture := currentpicture shifted (-left_shift,0);
+h:=top y1j;w:=(rt x1l)-left_shift;
+pivot_message(x1i-left_shift);
+endtchar; etest;
+
+stest(vmau); telchar "vowel modifier of au";
+begintchar(vm_au_code,vmwidth#+4u#,asc_height#,0,0,0,0);
+z1 = (0,x_height);
+vm_au_form(1,w);
+pivot_message(x1,na);
+w:=rt x1000b; h:=top y1c;
+endtchar; etest;
+
+
+stest(vmp); telchar "absence of vowel modifier(pollu)";
+begintchar(vm_p_code,cb_vg_width#,asc_height#,0,0,0,0);
+top z1=(1/3w,x_height); top z2 = (1/5w,x_height);
+z3=(x2,(x_height+asc_height)/2); z4=(w/2,y3);
+top z5=(x2,h); top rt z6=(w,h);
+sketch z1--z2{left}..{right}z3--z4;
+sketch z3{left}..{right}z5--z6;
+pivot_message(x1);
+endtchar; etest;
+%------------End of Vowel Modifiers-------------------
+
+stest(cbka); telchar "base of consonant ka";
+begintchar(cb_ka_code,cb_ka_width#,x_height#,0,0,0,0);
+cb_ka_form;
+sketch cb_ka_p;
+pivot_message(x2,x2);
+endtchar; etest;
+
+stest(cbkha); telchar "base of consonant kha";
+begintchar(cb_kha_code,cb_kha_width#,x_height#,wedge_depth#,0,0,0);
+cb_kha_form;
+pivot_message(x11,x5);
+endtchar; etest;
+
+stest(cbga); telchar "base of consonant ga";
+begintchar(cb_ga_code,cb_ga_width#,x_height#,0,0,0,0);
+cb_ga_form;
+pivot_message(x3,x3);
+endtchar; etest;
+
+stest(cbgha); telchar "base of consonant gha";
+begintchar(cb_gha_code,cb_va_width#+vm_u_width#,x_height#,wedge_depth#,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z10=1/2[rt z1,z1];
+wedge(10);
+vm_u_form(3);
+w:=rt x3b;
+pivot_message(x1,x1,x3d);
+endtchar; etest;
+
+stest(cbnga); telchar "base of consonant nga";
+begintchar(cb_nga_code,cb_ja_width#,x_height#,0,0,0,0);
+cb_ja_form;
+half_plus_form(3);
+pivot_message(x3c,x7);
+endtchar; etest;
+
+stest(cbcha); telchar "base of consonant cha";
+begintchar(cb_cha_code,cb_cha_width#,x_height#,0,0,0,0);
+cb_cha_form;
+pivot_message(x8,x5);
+endtchar; etest;
+
+stest(cbccha); telchar "base of consonant ccha";
+begintchar(cb_ccha_code,cb_cha_width#,x_height#,wedge_depth#,0,0,0);
+cb_cha_form;
+z10 = 1/2[rt z5,z5];
+wedge(10);
+pivot_message(x8,x5);
+endtchar; etest;
+
+stest(cbja); telchar "base of consonant ja";
+begintchar(cb_ja_code,cb_ja_width#,x_height#,0,0,0,0);
+cb_ja_form;
+sketch cb_ja_pb;
+pivot_message(x3z,x7);
+endtchar; etest;
+
+stest(cbjha); telchar "base of consonant jha";
+begintchar(cb_jha_code,cb_ra_width#+2vm_u_width#,x_height#,wedge_depth#,0,0,0);
+cb_ra_form;
+% The next statement will identify the point on ra_form
+% where the bowl will be attached.
+z5 = (cb_ra_p) intersectionpoint ((x1,w_height)--(x1+w,w_height));
+vm_u_form(5);
+z6 = z5b;
+wedge(6);
+z7 = z6;
+vm_u_form(7);
+w:=rt x7b;
+pivot_message(x1,x5,lft x7d);
+endtchar; etest;
+
+stest(cbnya); telchar "base of consonant nya";
+begintchar(cb_nya_code,v_e_width#+half_plus_width#,x_height#,0,0,0,0);
+v_e_form;
+z14= v_e_p intersectionpoint ((x4,j_height)--(w,j_height));
+z15=z14;
+half_plus_form(15);
+pivot_message(x15c,x7);
+w:=rt x15b;d:=abs(bot y10);
+endtchar; etest;
+
+stest(cbtta); telchar "base of consonant tta";
+begintchar(cb_tta_code,cb_tta_width#,x_height#,0,0,0,0);
+cb_tta_form;
+vwedge(18);
+sketch cb_tta_p;
+pivot_message(x7,x4,x19);
+h:=top y18a;
+endtchar; etest;
+
+stest(cbttha); telchar "base of consonant ttha";
+begintchar(cb_ttha_code,cb_ra_width#,x_height#,0,0,0,0);
+cb_ra_form;
+z10 = (x1,1/2x_height);
+fill_dot(10);
+pivot_message(x1,x1);
+endtchar; etest;
+
+stest(cbdda); telchar "base of consonant dda";
+begintchar(cb_dda_code,v_u_width#,x_height#,0,0,0,0);
+v_u_form;
+pivot_message((x8+x9)/2,x5);
+endtchar; etest;
+
+stest(cbddha); telchar "base of consonant ddha";
+begintchar(cb_ddha_code,v_u_width#,x_height#,wedge_depth#,0,0,0);
+v_u_form;
+z12=3/4[rt z5,z5];
+wedge(12);
+pivot_message((x8+x9)/2,x5);
+endtchar; etest;
+
+stest(cbnna); telchar "base of consonant nna";
+begintchar(cb_nna_code,cb_nna_width#,x_height#,0,0,0,0);
+cb_nna_form;
+pivot_message(x7,x6);
+endtchar; etest;
+
+stest(cbta); telchar "base of consonant ta";
+begintchar(cb_ta_code,cb_ta_width#,x_height#,0,0,0,0);
+cb_ta_form;
+ sketch cb_ta_p;
+pivot_message(x10,x5);
+endtchar; etest;
+
+stest(cbtha); telchar "base of consonant tha";
+begintchar(cb_tha_code,cb_da_width#,x_height#,wedge_depth#,0,0,0);
+cb_da_form;
+wedge(4);
+z10 = (x1,2/3x_height-uh);
+fill_dot(10);
+pivot_message(x1,x4);
+endtchar; etest;
+
+stest(cbda); telchar "base of consonant da";
+begintchar(cb_da_code,cb_da_width#,x_height#,0,0,0,0);
+cb_da_form;
+pivot_message(x1,x4);
+endtchar; etest;
+
+stest(cbdha); telchar "base of consonant dha";
+begintchar(cb_dha_code,cb_da_width#,x_height#,wedge_depth#,0,0,0);
+cb_da_form;
+wedge(4);
+pivot_message(x1,x4);
+endtchar; etest;
+
+stest(cbna);telchar "base of consonant na";
+begintchar(cb_na_code,cb_na_width#,x_height#,0,0,0,0);
+cb_na_form;
+sketch cb_na_p;
+pivot_message(x6,x6);
+endtchar; etest;
+
+stest(cbpa); telchar "base of consonant pa";
+begintchar(cb_pa_code,cb_va_width#,x_height#,0,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+pivot_message(x1,x1);
+endtchar; etest;
+
+stest(cbpha); telchar "base of consonant pha";
+begintchar(cb_pha_code,cb_va_width#,x_height#,wedge_depth#,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z10 = 1/2[rt z1,z1];
+wedge(10);
+pivot_message(x1,x1);
+endtchar; etest;
+
+stest(cbba); telchar "base of consonant ba";
+begintchar(cb_ba_code,cb_ba_width#,x_height#,0,0,0,0);
+cb_ba_form;
+pivot_message(x9,x6);
+endtchar; etest;
+
+stest(cbbha); telchar "base of consonant bha";
+begintchar(cb_bha_code,cb_ba_width#,x_height#,wedge_depth#,0,0,0);
+cb_ba_form;
+wedge(6);
+pivot_message(x9,x6);
+endtchar; etest;
+
+stest(cbma); telchar "base of consonant ma";
+begintchar(cb_ma_code,cb_va_width#+vm_u_width#,x_height#,0,0,0,0);
+cb_va_form;
+sketch cb_va_p;
+vm_u_form(3);
+w:=rt x3b;
+pivot_message(x5,x1,x3d);
+endtchar; etest;
+
+stest(cbya); telchar "base of consonant ya";
+begintchar(cb_ya_code,cb_ya_width#+vm_u_width#,x_height#,0,0,0,0);
+cb_ya_form;
+ sketch z1..z2..z3..z4..cycle;
+ sketch z3{down}..{right}z5..z6..z7..z8;
+vm_u_form(6);
+w:=rt x6b;
+pivot_message(x8,x3,x6d);
+endtchar; etest;
+
+stest(cbra); telchar "base of consonant ra";
+begintchar(cb_ra_code,cb_ra_width#,x_height#,0,0,0,0);
+cb_ra_form;
+pivot_message(x1,x3);
+endtchar; etest;
+
+stest(cbrra); telchar "base of consonant rra";
+begintchar(cb_rra_code,cb_tta_width#,x_height#,0,0,0,0);
+cb_rra_form;
+pivot_message(x7,x4,x19);
+endtchar; etest;
+
+stest(cbla); telchar "base of consonant la";
+begintchar(cb_la_code,cb_la_width#,x_height#,0,0,0,0);
+cb_la_form;
+ sketch cb_la_p;
+pivot_message(x5,x3,x8);
+endtchar; etest;
+
+stest(cblla); telchar "base of consonant lla";
+begintchar(cb_lla_code,cb_lla_width#,x_height#,0,0,0,0);
+ cb_lla_form;
+pivot_message(x10,x1);
+endtchar; etest;
+
+stest(cbva); telchar "base of consonant va";
+begintchar(cb_va_code,cb_va_width#,x_height#,0,0,0,0);
+cb_va_form;
+sketch cb_va_p;
+pivot_message(x5,x1);
+endtchar; etest;
+
+stest(cbca); telchar "base of consonant ca";
+begintchar(cb_ca_code,cb_ca_width#,x_height#,0,0,0,0);
+ cb_ca_form;
+pivot_message(x6,x3,x10);
+endtchar; etest;
+
+stest(cbsha); telchar "base of consonant sha";
+begintchar(cb_sha_code,cb_sha_width#,x_height#,wedge_depth#,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+bot rt z25 = (cb_sha_width,-d);
+sketch bot z3{down}..{right}z25;
+pivot_message(x1,x1);
+endtchar; etest;
+
+stest(cbsa); telchar "base of consonant sa";
+begintchar(cb_sa_code,cb_na_width#,x_height#,0,0,0,0);
+cb_na_form;
+sketch subpath (0,4.7) of cb_na_p;
+pivot_message(x3,x6);
+endtchar; etest;
+
+stest(cbha); telchar "base of consonant ha";
+begintchar(cb_ha_code,cb_va_width#+vmwidth#,x_height#,0,0,0,0);
+cb_va_form;
+z10 = point 3.6 of cb_va_p;
+top z11 = (x10,x_height);
+sketch subpath(0,3) of cb_va_p..z11;
+barandhook_forma(11,vmwidth,5);
+pivot_message(x5,x2,x11a);
+w:=rt x11b;
+endtchar; etest;
+
+stest(cbksha); telchar "base of consonant ksha";
+begintchar(cb_ksha_code,cb_ka_width#,x_height#,cb_ksha_depth#,0,0,0);
+cb_ksha_form;
+sketch cb_ka_p;
+pivot_message(x2,x6);
+endtchar; etest;
+
+stest(cbdt); telchar "dantyam accent(sits at top)";
+begintchar(cb_dt_code,vmwidth#,0,0,0,0,0);
+% h is set later
+top z1=(0,top_accent);
+barandhook_form(1,w,5);erase sketch barandhook_p;
+transform t;
+t:=identity reflectedabout (top z1, top z1 + (w,0));
+sketch barandhook_p transformed t;
+h:=ypart((bot z1c) transformed t);
+pivot_message((w/2));
+endtchar; etest;
+
+stest(cbnp); telchar "consonant nakaarapollu(np)";
+begintchar(cb_np_code,cb_np_width#,x_height#,0,0,0,ur#);
+bot z1 = (1/2w,0);
+bot z2 = (1/5w,0);
+z3 = (x2,1/3x_height);
+z4 = (x1,y3);
+z5 = (x3,2/3x_height);
+z6 = (x1,y5);
+top z7 = (x2,x_height);
+top rt z8 = (w,x_height);
+sketch z1--z2{left}..{right}z3--z4;
+sketch z3{left}..{right}z5--z6;
+sketch z5{left}..{right}z7--z8;
+endtchar; etest;
+
+stest(cbvg); telchar "consonant valapalagilaka(vg)";
+begintchar(cb_vg_code,cb_vg_width#,x_height#,0,0,0,ur#);
+bot z1 = (1/2w,0);
+bot z2 = (1/5w,0);
+z3 = (x2,1/3x_height);
+z4 = (x1,y3);
+top z5 = (x2,2/3x_height);
+top rt z6 = (w,2/3x_height);
+sketch z1--z2{left}..{right}z3--z4;
+sketch z3{left}..{right}z5--z6;
+h:=top y5;
+endtchar; etest;
+
+stest(cbbb); telchar "consonant blackbox(bb)";
+%This is not really a letter in Telugu. However this character
+% is useful for demonstrating vowel modifiers, cons. conjuncts, accents etc.
+begintchar(cb_bb_code,0.2em_width#,0.8x_height#,0.25x_height#,0,0,0);
+fill (0,-d)--(w,-d)--(w,h)--(0,h)--cycle;
+pivot_message((w/2),(w/2));
+endtchar; etest;
+
+stest(cbbo); telchar "consonant outlinebox(bo)";
+%This is not really a letter in Telugu. However this character
+% is useful for demonstrating vowel modifiers, cons. conjuncts, accents etc.
+begintchar(cb_bo_code,0.2em_width#,x_height#,0,0,0,0);
+bot lft z1=(0,-d);bot rt z2=(w,-d);top rt z3=(w,h); top lft z4=(0,h);
+z1a=(0,y1);z2a=(w,y2);z3a=(w,y3);z4a=(0,y4);
+sketch z1--z4; sketch z2--z3; sketch z1a--z2a; sketch z4a--z3a;
+cutoff(z1a,180);cutoff(z2a,0);cutoff(z3a,0);cutoff(z4a,180);
+pivot_message((w/2),(w/2));
+endtchar; etest;
+
+stest(cbbe); telchar "consonant emptybox(be)";
+%This is not really a letter in Telugu. However this character
+% is useful for demonstrating vowel modifiers, cons. conjuncts, accents etc.
+begintchar(cb_be_code,0.2em_width#,x_height#,0,0,0,0);
+pivot_message((w/2),(w/2));
+endtchar; etest;
+%----------------End of Consonants(Base)----------
+
+stest(ccka); telchar "consonant conjunct of ka";
+begintchar(cc_ka_code,6u#,x_height#,des_depth#,0,ul#,0);
+top lft z1 = (0,h);
+z2 = (w/4,(-d+h)/2);
+lft z3 = (0,-1/3d);
+bot z4 = (1/3w,-d);
+z5 = (w/2,0);
+rt z6 = (w,0);
+sketch z1..z2..z3..z4{right}..{up}z5--z6;
+endtchar; etest;
+
+stest(cckha); telchar "consonant conjunct of kha";
+begintchar(cc_kha_code,cb_kha_width#,x_height#,0,0,0,0);
+cb_kha_form;
+cc_clear; cc_transform(cb_kha_p);
+cc_transform(wedge_p);cc_whd(0,1);
+pivot_message(x5*cc_scale);
+endtchar; etest;
+
+stest(ccga); telchar "consonant conjunct of ga";
+begintchar(cc_ga_code,cb_ga_width#,x_height#,0,0,0,0);
+cb_ga_form;
+cc_clear; cc_transform(cb_ga_p);cc_whd(0,0);
+pivot_message(x3*cc_scale);
+endtchar; etest;
+
+stest(ccgha); telchar "consonant conjunct of gha";
+begintchar(cc_gha_code,cb_va_width#+vm_u_width#,x_height#,0,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z10=1/2[rt z1,z1];
+wedge(10);
+vm_u_form(3);
+cc_clear; cc_transform(subpath(0,3.4) of cb_va_p);
+cc_transform(lit_cir_p);
+cc_transform(wedge_p);cc_transform(vm_u_p);cc_whd(0,1);
+pivot_message(x1*cc_scale);
+endtchar; etest;
+
+stest(ccnga); telchar "consonant conjunct of nga";
+begintchar(cc_nga_code,cb_ja_width#,x_height#,0,0,0,0);
+cb_ja_form;
+half_plus_form(3);
+cc_clear; cc_transform(cb_ja_pa);
+cc_transform(half_plus_pa);
+cc_transform(half_plus_pb);cc_whd(0,0);
+pivot_message(x7*cc_scale);
+endtchar; etest;
+
+stest(cccha); telchar "consonant conjunct of cha";
+begintchar(cc_cha_code,cb_cha_width#,x_height#,0,0,ul#,0);
+cb_cha_form;
+cc_clear; cc_transform(((subpath (0,6) of cb_cha_p) .. z97));
+cc_whd(1,0);
+endtchar; etest;
+
+stest(ccccha); telchar "consonant conjunct of ccha";
+begintchar(cc_ccha_code,cb_cha_width#,x_height#,0,0,ul#,0);
+cb_cha_form;
+z10 = 1/2[rt z5,z5];
+wedge(10);
+cc_clear; cc_transform(((subpath (0,6) of cb_cha_p) .. z97));
+cc_transform(wedge_p);cc_whd(1,1);
+endtchar; etest;
+
+stest(ccja); telchar "consonant conjunct of ja";
+begintchar(cc_ja_code,cb_ja_width#,x_height#,0,0,0,0);
+cb_ja_form;
+cc_clear; cc_transform(cb_ja_pa);
+cc_transform(cb_ja_pb); cc_whd(0,0);
+pivot_message(x7*cc_scale);
+endtchar; etest;
+
+stest(ccjha); telchar "consonant conjunct of jha";
+begintchar(cc_jha_code,cb_ra_width#+2vm_u_width#,x_height#,0,0,0,0);
+cb_ra_form;
+% The next statement will identify the point on ra_form
+% where the bowl will be attached.
+z5=z4;
+vm_u_form(5);
+path p; p:=vm_u_p;
+z6 = z5b;
+wedge(6);
+z7 = z6;
+vm_u_form(7);
+w:=rt x7b;
+cc_clear; cc_transform(cb_ra_p);
+cc_transform(p); cc_transform(vm_u_p);
+cc_transform(wedge_p);cc_whd(0,1);
+penlabels(5,6);
+pivot_message(x5*cc_scale);
+endtchar; etest;
+
+stest(ccnya); telchar "consonant conjunct of nya";
+begintchar(cc_nya_code,v_e_width#+half_plus_width#,x_height#,0,0,0,0);
+v_e_form;
+z14= v_e_p intersectionpoint ((x4,j_height)--(w,j_height));
+z15=rt z14;
+half_plus_form(15);
+w:=rt x15b;d:=abs(bot y10);
+cc_clear; cc_transform(v_e_p);
+cc_transform(half_plus_pa);
+cc_transform(half_plus_pb);cc_whd(0,0);
+d:=d+(abs(bot y10) - pen_width/2)*cc_scale + pen_width/2+bot_spill;
+pivot_message(x7*cc_scale);
+endtchar; etest;
+
+stest(cctta); telchar "consonant conjunct of tta";
+begintchar(cc_tta_code,cb_tta_width#,top_height#,0,0,0,0);
+cb_tta_form;
+vwedge(18);
+cc_clear; cc_transform(cb_tta_p); cc_whd(0,0);
+pivot_message(x4*cc_scale);
+endtchar; etest;
+
+stest(ccttha); telchar "consonant conjunct of ttha";
+begintchar(cc_ttha_code,cb_ra_width#,x_height#,0,0,0,0);
+cb_ra_form;
+z10 = (x1,1/2x_height);
+fill_dot(10);
+cc_clear; cc_transform(cb_ra_p);
+cc_f_transform(fill_dot_p);cc_whd(0,0);
+pivot_message(x1*cc_scale);
+endtchar; etest;
+
+stest(ccdda); telchar "consonant conjunct of dda";
+begintchar(cc_dda_code,v_u_width#,top_height#,0,0,0,0);
+v_u_form;
+cc_clear; cc_transform(v_u_p); cc_whd(0,0);
+pivot_message(x5*cc_scale);
+endtchar; etest;
+
+stest(ccddha); telchar "consonant conjunct of ddha";
+begintchar(cc_ddha_code,v_u_width#,x_height#,0,0,0,0);
+v_u_form;
+z12=3/4[rt z5,z5];
+wedge(12);
+cc_clear; cc_transform(v_u_p);
+cc_transform(wedge_p);cc_whd(0,1);
+pivot_message(x5*cc_scale);
+endtchar; etest;
+
+stest(ccnna); telchar "consonant conjunct of nna";
+begintchar(cc_nna_code,cb_nna_width#,x_height#,0,0,0,0);
+cb_nna_form;
+cc_clear; cc_transform(cb_nna_p);cc_whd(0,0);
+pivot_message(x6*cc_scale);
+endtchar; etest;
+
+stest(ccta); telchar "consonant conjunct of ta";
+begintchar(cc_ta_code,vmwidth#,0,0,0,0,0);
+% d is set later
+top z1=(0,0); barandhook_form(1,w,5); erase sketch barandhook_p;
+sketch barandhook_p reflectedabout ( top z1, top z1+(w,0))
+ shifted (0, (-bot_accent+ (bot y1c)));
+d:=bot_accent- (bot y1c);
+pivot_message((w/2));
+endtchar; etest;
+
+stest(cctha); telchar "consonant conjunct of tha";
+begintchar(cc_tha_code,cb_da_width#,x_height#,0,0,0,0);
+cb_da_form;
+wedge(4);
+z10 = (x1,2/3x_height-uh);
+fill_dot(10);
+cc_clear; cc_transform(cb_da_p);
+cc_transform(wedge_p); cc_f_transform(fill_dot_p);
+cc_whd(0,1);
+pivot_message(x4*cc_scale);
+endtchar; etest;
+
+stest(ccda); telchar "consonant conjunct of da";
+begintchar(cc_da_code,cb_da_width#,x_height#,0,0,0,0);
+cb_da_form;
+cc_clear; cc_transform(cb_da_p);
+cc_whd(0,0);
+pivot_message(x4*cc_scale);
+endtchar; etest;
+
+stest(ccdha); telchar "consonant conjunct of dha";
+begintchar(cc_dha_code,cb_da_width#,x_height#,0,0,0,0);
+cb_da_form;
+wedge(4);
+cc_clear; cc_transform(cb_da_p);
+cc_transform(wedge_p);
+cc_whd(0,1);
+pivot_message(x4*cc_scale);
+endtchar; etest;
+
+stest(ccna); telchar "consonant conjunct of na";
+begintchar(cc_na_code,7u#,x_height#,des_depth#,0,ul#,0);
+top lft z1 = (0,h);
+z2 = (1/2w,(h-d)/2);
+bot z3 = (1/4w,-d);
+lft z4 = (0,-d+1/2sc_height);
+z5 = (x3,y3+sc_height);
+bot z6 = (3/4w,-d);
+rt z7 = (w,y4);
+sketch z1..z2..z3..z4..z5..z6..z7;
+endtchar; etest;
+
+stest(ccpa); telchar "consonant conjunct of pa";
+begintchar(cc_pa_code,cb_va_width#,top_height#,0,0,ul#,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+cc_clear; cc_transform(((subpath(0,2) of cb_va_p)..z97));
+cc_transform(lit_cir_p);
+cc_whd(1,0);
+endtchar; etest;
+
+stest(ccpha); telchar "consonant conjunct of pha";
+begintchar(cc_pha_code,cb_va_width#,x_height#,0,0,ul#,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z10 = 1/2[rt z1,z1];
+wedge(10);
+cc_clear; cc_transform(((subpath(0,2) of cb_va_p)..z97));
+cc_transform(lit_cir_p);cc_transform(wedge_p); cc_whd(1,1);
+endtchar; etest;
+
+stest(ccba); telchar "consonant conjunct of ba";
+begintchar(cc_ba_code,cb_ba_width#,top_height#,0,0,ul#,0);
+cb_ba_form;
+cc_clear; cc_transform(((subpath(0,7) of cb_ba_p)..z97));
+cc_whd(1,0);
+endtchar; etest;
+
+stest(ccbha); telchar "consonant conjunct of bha";
+begintchar(cc_bha_code,cb_ba_width#,x_height#,0,0,ul#,0);
+cb_ba_form;
+wedge(6);
+cc_clear; cc_transform(((subpath(0,7) of cb_ba_p)..z97));
+cc_transform(wedge_p); cc_whd(1,1);
+endtchar; etest;
+
+stest(ccma); telchar "consonant conjunct of ma";
+begintchar(cc_ma_code,6u#,x_height#,des_depth#,0,ul#,0);
+rt z1=(w,-d+uh);bot z2=(w/2,-d);
+lft z3=(0,-d/3); z4=(2/3w,x_height/5);
+rt z5=(w,0); z6=(x4,-5/10d);
+z7=(w/2,y5); z8=(2/3w,x_height/2);
+top lft z9=(0,h);
+sketch z1..z2..z3..z4..z5..z6..z7..z8..z9;
+endtchar; etest;
+
+stest(ccya); telchar "consonant conjunct of ya";
+begintchar(cc_ya_code,6u#,x_height#,des_depth#,0,ul#,0);
+lft z1 = (0,-1/3d); z2 = (w/4,0); z3 = (1/4w,-1/2d);
+bot z4 = (1/3w,-d); z5 = (2/3w,0); z6 = (1/3w,j_height);
+top z7 = (2/3w,h); rt z8=(w,y6);
+sketch z1..z2..z3..z4..z5..z6..z7..z8;
+endtchar; etest;
+
+stest(ccra); telchar "consonant conjunct of ra";
+begintchar(cc_ra_code,7u#,0,3.5uh#,0,0,0);
+top lft z1=(0,-bot_accent); bot z2=(w/2,-d); top rt z3=(w,-bot_accent);
+sketch z1..z2..z3;
+pivot_message(x2);
+endtchar; etest;
+
+stest(ccrra); telchar "consonant conjunct of rra";
+begintchar(cc_rra_code,cb_tta_width#,x_height#,0,0,0,0);
+cb_rra_form;
+cc_clear; cc_transform(cb_rra_p); cc_whd(0,0);
+pivot_message(x4*cc_scale);
+endtchar; etest;
+
+stest(ccla); telchar "consonant conjunct of la";
+begintchar(cc_la_code,7u#,0,4.5uh#,0,0,0);
+path s,t;
+bot z1=(w/4,-d); lft z2 =(0,-1/2d); top z3=(x1,-bot_accent);
+top z4=(w/2,y2);
+s= z1..z2..z3..z4;
+t=s reflectedabout ((w/2,h),(w/2,-d));
+sketch s;sketch t;
+pivot_message(x4);
+endtchar; etest;
+
+stest(cclla); telchar "consonant conjunct of lla";
+begintchar(cc_lla_code,cb_lla_width#,asc_height#,0,0,ul#,0);
+ cb_lla_form;
+cc_clear; cc_transform(((subpath (0,6) of cb_lla_pa)..z97));
+cc_transform(cb_lla_pb); cc_whd(1,0);
+endtchar; etest;
+
+stest(ccva); telchar "consonant conjunct of va";
+begintchar(cc_va_code,6u#,x_height#,des_depth#,0,ul#,0);
+lit_cir_form; erase sketch lit_cir_p;
+transform t;
+t= identity shifted (0,-d);
+sketch lit_cir_p transformed t;
+z10=z1 transformed t;
+z2 = (0,y1); bot z3 = (2/3w,-d); rt z4 = (w,-1/2d);
+z5 = (1/3w,w_height); top z6 = (2/3w,h); rt z7 = (w,j_height);
+sketch z10..z3..z4..z5..z6..z7;
+endtchar; etest;
+
+stest(ccca); telchar "consonant conjunct of ca";
+begintchar(cc_ca_code,cb_ca_width#,asc_height#,0,0,ul#,0);
+ cb_ca_form;
+cc_clear; cc_transform(((subpath (0,6) of cb_ca_p){up}..z97)); cc_whd(1,0);
+endtchar; etest;
+
+stest(ccsha); telchar "consonant conjunct of sha";
+begintchar(cc_sha_code,cb_sha_width#,x_height#,0,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+bot rt z10 = (cb_sha_width,0);
+sketch z3..z10;
+cc_clear; cc_transform(subpath(0,3.4) of cb_va_p);
+cc_transform(lit_cir_p);
+cc_transform((z3..z10)); cc_whd(0,0);
+pivot_message(x2*cc_scale);
+endtchar; etest;
+
+stest(ccsa); telchar "consonant conjunct of sa";
+begintchar(cc_sa_code,cb_na_width#,x_height#,0,0,ul#,0);
+cb_na_form;
+sketch subpath (0,4.7) of cb_na_p;
+cc_clear; cc_transform(((subpath (0,4) of cb_na_p)..z97)); cc_whd(1,0);
+endtchar; etest;
+
+stest(ccha); telchar "consonant conjunct of ha";
+begintchar(cc_ha_code,cb_va_width#+vmwidth#-3.5u#,x_height#,0,0,0,0);
+cb_va_form;
+z10 = point 3.6 of cb_va_p;
+top z11 = (x10,x_height);
+sketch subpath(0,3) of cb_va_p..z11;
+barandhook_forma(11,vmwidth,5);
+cc_clear; cc_transform((subpath(0,3) of cb_va_p..z11));
+cc_transform(lit_cir_p);
+cc_transform(barandhook_p); cc_whd(0,0);
+pivot_message(x2*cc_scale);
+endtchar; etest;
+
+% ---------- start of ubayaksharas -----------
+
+stest(uas); telchar "accent ardhasunna";
+begintchar(u_ardhasunna_code,x_height#/2,x_height#,0,0,0,ur#);
+top rt z2=(w,h); bot rt z1=(w,0); lft z3=(0,h/2);
+sketch z1..z3..z2;
+endtchar; etest;
+
+stest(us); telchar "accent sunna";
+begintchar(u_sunna_code,x_height#,x_height#,0,0,0,ur#);
+top z2=(w/2,h); bot z1=(x2,0);
+sketch z1..z2..cycle;
+endtchar; etest;
+
+stest(uvi); telchar "accent visarga";
+begintchar(u_visarga_code,2/5x_height#,x_height#,0,0,0,ur#);
+top z2 = (w/2,h); bot z1 =(x2,3h/5);
+path puvi;
+puvi= z1..z2..cycle;
+sketch puvi; sketch puvi shifted (0,-2h/3);
+endtchar; etest;
+
+stest(uav); telchar "accent ardhavisarga";
+begintchar(u_ardhavisarga_code,2/5x_height#,x_height#,0,0,0,ur#);
+path puav;
+top z2 = (w/2,h); bot z1 =(x2,3h/5);
+puav = subpath (0.25,1.75) of (z1..z2..cycle);
+sketch puav;sketch puav shifted (0,-2h/3);
+endtchar; etest;
+
+stest(ua); telchar "accent avagraha";
+begintchar(u_avagraha_code,tfig_width#,x_height#,0,0,0,ur#);
+top lft z1=(0,h); lft z2=(0,h/4); z3=(w/2,(y1+y2)/2);
+bot lft z4=(0,0); bot rt z5=(w,0);
+sketch flex (z1,z3,z2,z4)& z4--z5;
+endtchar; etest;
+
+% ----------- end of ubhayaksharas ----------
+
+% bars used for transliteration of vedic hymns
+
+stest(buone); telchar "b udatta(one bar)";
+begintchar(b_udatta1_code,u#,top_accent#+3uh#,0,0,0,0);
+bot z1=(w/2,top_accent); top z2=(x1,h);
+sketch z1--z2;
+pivot_message((w/2));
+endtchar; etest;
+
+stest(butwo); telchar "b udatta (two bars)";
+begintchar(b_udatta2_code,3.5u#,top_accent#+3uh#,0,0,0,0);
+bot z1=(w/4,top_accent); top z2=(x1,h);
+bot z3=(w/4+w/2,top_accent); z4=z2+(w/2,0);
+sketch z1--z2; sketch z3-- z4;
+pivot_message((w/2));
+endtchar; etest;
+
+stest(ba); telchar "b anudatta";
+begintchar(b_anudatta_code,4u#,0,0,0,0,0);
+% d is set later
+top lft z1=(0,-bot_accent);top rt z2=(w,-bot_accent);
+sketch z1--z2;
+d:=- (bot y1);
+pivot_message((w/2));
+endtchar; etest;
+
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telchrs2.mf b/Master/texmf-dist/fonts/source/public/itrans/telchrs2.mf
new file mode 100644
index 00000000000..595ad923c86
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telchrs2.mf
@@ -0,0 +1,506 @@
+% 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.
+%%%%%
+% This file contains code to generate
+% symbols for Consonant + Vowel's that need special handling
+
+stest(cvku); telchar "consonant+vowel ka+u";
+begintchar(cv_ku_code,cb_ka_width#,asc_height#,0,0,0,0);
+cb_ka_form;
+vm_a_form(2);
+z20=(cb_ka_width+u,w_height);
+vm_u_form(20); erase sketch vm_u_p;
+sketch cb_ka_p..vm_u_p;w:=rt x20b;
+pivot_message(x20d);
+endtchar; etest;
+
+stest(cvkhe); telchar "consonant+vowel kha+e";
+begintchar(cv_khe_code,cb_kha_width#,vm_e_height1#,wedge_depth#,0,0,0);
+cb_kha_form;erase sketch cb_kha_p;
+vm_e_form_a(cb_kha_width/2); sketch (subpath (0,9) of cb_kha_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvkhao); telchar "consonant+vowel kha+ao";
+begintchar(cv_khao_code,cb_kha_width#,vm_e_height1#,wedge_depth#,0,0,0);
+cb_kha_form;erase sketch cb_kha_p;
+vm_ao_form(17,cb_kha_width/2);
+sketch (subpath (0,9) of cb_kha_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x17i);
+endtchar; etest;
+
+stest(cvge); telchar "consonant+vowel ga+e";
+begintchar(cv_ge_code,cb_ga_width#,vm_e_height3#,0,0,0,0);
+cb_ga_form;
+sketch cv_ge_p;
+pivot_message(x31);
+endtchar; etest;
+
+stest(cvngu); telchar "consonant+vowel nga+u";
+begintchar(cv_ngu_code,cb_ja_width#/2,x_height#,0,0,0,0);
+cv_ngu_form;
+endtchar; etest;
+
+stest(cvnguu); telchar "consonant+vowel nga+uu";
+begintchar(cv_nguu_code,cb_ja_width#/2,x_height#,0,0,0,0);
+cv_ngu_form;
+barandhook_forma(4,3/4vmwidth,5);
+w:=rt x4b;
+endtchar; etest;
+
+stest(cvche); telchar "consonant+vowel cha+e";
+begintchar(cv_che_code,cb_cha_width#,vm_e_height1#,0,0,0,0);
+cb_cha_form; erase sketch cb_cha_p;
+vm_e_form_a(cb_cha_width/2);
+sketch (subpath(0,6) of cb_cha_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvchao); telchar "consonant+vowel cha+ao";
+begintchar(cv_chao_code,cb_cha_width#,vm_e_height1#,0,0,0,0);
+cb_cha_form; erase sketch cb_cha_p;
+vm_ao_form(11,cb_cha_width/2);
+sketch (subpath (0,6) of cb_cha_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvcche); telchar "consonant+vowel ccha+e";
+begintchar(cv_cche_code,cb_cha_width#,vm_e_height1#,wedge_depth#,0,0,0);
+cb_cha_form; erase sketch cb_cha_p;
+vm_e_form_a(cb_cha_width/2);
+sketch (subpath(0,6) of cb_cha_p)..vm_e_pa;
+z10 = 1/2[rt z5,z5];
+wedge(10);
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvcchao); telchar "consonant+vowel ccha+ao";
+begintchar(cv_cchao_code,cb_cha_width#,vm_e_height1#,wedge_depth#,0,0,0);
+cb_cha_form; erase sketch cb_cha_p;
+vm_ao_form(11,cb_cha_width/2);
+sketch (subpath (0,6) of cb_cha_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+z10 = 1/2[rt z5,z5];
+wedge(10);
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvje); telchar "consonant+vowel ja+e";
+begintchar(cv_je_code,cb_ja_width#,vm_e_height1#,0,0,0,0);
+cb_ja_form;vm_e_form_a(0.8cb_ja_width);
+sketch (subpath (0,1) of cb_ja_pb)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvju); telchar "consonant+vowel ja+u";
+begintchar(cv_ju_code,cb_ja_width#/2,x_height#,0,0,0,0);
+cv_ju_form;
+endtchar; etest;
+
+stest(cvjuu); telchar "consonant+vowel ja+uu";
+begintchar(cv_juu_code,cb_ja_width#/2,x_height#,0,0,0,0);
+cv_ju_form;
+barandhook_forma(4,3/4vmwidth,5);
+w:=rt x4b;
+endtchar; etest;
+
+stest(cvjao); telchar "consonant+vowel ja+ao";
+begintchar(cv_jao_code,cb_ja_width#,vm_e_height1#,0,0,0,0);
+cb_ja_form;
+vm_ao_form(11,0.65cb_ja_width);
+sketch (subpath (0,2) of cb_ja_pb)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvttao); telchar "consonant+vowel tta+ao";
+begintchar(cv_ttao_code,cb_tta_width#,x_height#,0,0,0,0);
+cb_tta_form;
+vwedge(18);
+vm_ao_form(16,cb_tta_width/2);
+sketch cb_tta_p..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+h:=max(top y18a,h);
+pivot_message(x16i);
+endtchar; etest;
+
+stest(cvtthe); telchar "consonant+vowel ttha+e";
+begintchar(cv_tthe_code,cb_ra_width#,vm_e_height3#,0,0,0,0);
+cb_ra_form;
+sketch cv_re_p;
+z10 = (x1,1/2x_height);
+fill_dot(10);
+pivot_message(x31);
+endtchar; etest;
+
+stest(cvddu); telchar "consonant+vowel dda+u";
+begintchar(cv_ddu_code,v_u_width#,asc_height#,0,0,0,0);
+v_u_form;z14=((x8+x9)/2,y8);vm_a_form(14);
+vm_u_form(3); w:=rt x3b+4u/10;
+pivot_message(x3d);
+endtchar; etest;
+
+stest(cvddhu); telchar "consonant+vowel ddha+u";
+begintchar(cv_ddhu_code,v_u_width#,asc_height#,wedge_depth#,0,0,0);
+v_u_form;z14=((x8+x9)/2,y8);vm_a_form(14);
+z12=3/4[rt z5,z5];
+wedge(12);
+vm_u_form(3); w:=rt x3b;
+pivot_message(x3d);
+endtchar; etest;
+
+stest(cvte); telchar "consonant+vowel ta+e";
+begintchar(cv_te_code,cb_ta_width#,vm_e_height1#,0,0,0,0);
+cb_ta_form;
+vm_e_form_a(3/5cb_ta_width);
+ sketch (subpath (0,10) of cb_ta_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvtao); telchar "consonant+vowel ta+ao";
+begintchar(cv_tao_code,cb_ta_width#,vm_e_height1#,0,0,0,0);
+cb_ta_form;
+vm_ao_form(11,2.2/5cb_ta_width);
+sketch (subpath (0,10) of cb_ta_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvthe); telchar "consonant+vowel tha+e";
+begintchar(cv_the_code,cb_da_width#,vm_e_height3#,wedge_depth#,0,0,0);
+cb_da_form;
+sketch cv_de_p;
+wedge(4);
+z10 = (x1,2/3x_height-uh);
+fill_dot(10);
+pivot_message(x31);
+endtchar; etest;
+
+stest(cvde); telchar "consonant+vowel da+e";
+begintchar(cv_de_code,cb_da_width#,vm_e_height3#,0,0,0,0);
+cb_da_form;
+sketch cv_de_p;
+pivot_message(x31);
+endtchar; etest;
+
+stest(cvdhe); telchar "consonant+vowel dha+e";
+begintchar(cv_dhe_code,cb_da_width#,vm_e_height3#,wedge_depth#,0,0,0);
+cb_da_form;
+sketch cv_de_p;
+wedge(4);
+pivot_message(x31);
+endtchar; etest;
+
+stest(cvne);telchar "consonant+vowel na+e";
+begintchar(cv_ne_code,cb_na_width#,vm_e_height1#,0,0,0,0);
+cb_na_form;
+vm_e_form_a(cb_na_width/2);
+sketch (subpath (0,4) of cb_na_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvnao);telchar "consonant+vowel na+ao";
+begintchar(cv_nao_code,cb_na_width#,vm_e_height1#,0,0,0,0);
+cb_na_form;
+vm_ao_form(11,0.4cb_na_width);
+sketch (subpath (0,4) of cb_na_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvpaa); telchar "consonant+vowel pa+aa";
+begintchar(cv_paa_code,cb_va_width#,asc_height#,0,0,0,0);
+cb_va_form;
+sketch cv_paa_p;
+pivot_message(x2,x22);% x22 is used for alligning au modifier
+endtchar; etest;
+
+stest(cvpu); telchar "consonant+vowel pa+u";
+begintchar(cv_pu_code,cv_pu_width#,x_height#,cv_pu_depth#,0,0,0);
+cv_pu_form;
+pivot_message(x1);
+endtchar; etest;
+
+stest(ccvpu); telchar "consonant conjunct of pa + vowel u";
+begintchar(ccv_pu_code,cb_va_width#,top_height#,0,0,ul#,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+cc_clear; cc_transform(((subpath(0,2) of cb_va_p)..z97));
+numeric na,nb;
+(na,nb)=cc_transformed_path intersectiontimes
+ ((0,w_height)..(cb_va_width,w_height));
+z10=point na of cc_transformed_path;
+vm_u_form(10);
+cc_transform(lit_cir_p);
+cc_whd(1,0);
+w:=rt x10b;
+endtchar; etest;
+
+stest(cvpuu); telchar "consonant+vowel pa+uu";
+begintchar(cv_puu_code,cv_pu_width#,x_height#,cv_pu_depth#,0,0,0);
+cv_pu_form;barandhook_forma(4,3/4vmwidth,5);
+w:=rt x4b;
+pivot_message(x1);
+endtchar; etest;
+
+stest(ccvpuu); telchar "consonant conjunct of pa + vowel uu";
+begintchar(ccv_puu_code,cb_va_width#,top_height#,0,0,ul#,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+cc_clear; cc_transform(((subpath(0,2) of cb_va_p)..z97));
+numeric na,nb;
+(na,nb)=cc_transformed_path intersectiontimes
+ ((0,w_height)..(cb_va_width,w_height));
+z10=point na of cc_transformed_path;
+vm_u_form(10);barandhook_forma(10d,vmwidth,5);
+cc_transform(lit_cir_p);
+cc_whd(1,0);
+w:= rt x10d.b;
+endtchar; etest;
+
+stest(cvphaa); telchar "consonant+vowel pha+aa";
+begintchar(cv_phaa_code,cb_va_width#,asc_height#,wedge_depth#,0,0,0);
+cb_va_form;
+sketch cv_paa_p;
+top z13 = 1/2[rt z1,z1];
+wedge(13);
+pivot_message(x2,x22); %x22 is used for alligning au modifier
+endtchar; etest;
+
+stest(ccvphu); telchar "consonant conjunct of pha + vowel u";
+begintchar(ccv_phu_code,cb_va_width#,x_height#,0,0,ul#,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z10 = 1/2[rt z1,z1];
+wedge(10);
+cc_clear; cc_transform(((subpath(0,2) of cb_va_p)..z97));
+numeric na,nb;
+(na,nb)=cc_transformed_path intersectiontimes
+ ((0,w_height)..(cb_va_width,w_height));
+z11=point na of cc_transformed_path;
+vm_u_form(11);
+cc_transform(lit_cir_p);cc_transform(wedge_p); cc_whd(1,1);
+w:=rt x11b;
+endtchar; etest;
+
+stest(ccvphuu); telchar "consonant conjunct of pha + vowel uu";
+begintchar(ccv_phuu_code,cb_va_width#,x_height#,0,0,ul#,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z10 = 1/2[rt z1,z1];
+wedge(10);
+cc_clear; cc_transform(((subpath(0,2) of cb_va_p)..z97));
+numeric na,nb;
+(na,nb)=cc_transformed_path intersectiontimes
+ ((0,w_height)..(cb_va_width,w_height));
+z11=point na of cc_transformed_path;
+vm_u_form(11);barandhook_forma(11d,vmwidth,5);
+cc_transform(lit_cir_p);cc_transform(wedge_p); cc_whd(1,1);
+w:=rt x11d.b;
+endtchar; etest;
+
+stest(cvbe); telchar "consonant+vowel ba+e";
+begintchar(cv_be_code,cb_ba_width#,vm_e_height1#,0,0,0,0);
+cb_ba_form;erase sketch cb_ba_p;
+vm_e_form_a(cb_ba_width/2);
+sketch (subpath(0,7) of cb_ba_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvbao); telchar "consonant+vowel ba+ao";
+begintchar(cv_bao_code,cb_ba_width#,vm_e_height1#,0,0,0,0);
+cb_ba_form;erase sketch cb_ba_p;
+vm_ao_form(11,cb_ba_width/2);
+sketch (subpath (0,7) of cb_ba_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvbhe); telchar "consonant+vowel bha+e";
+begintchar(cv_bhe_code,cb_ba_width#,vm_e_height1#,wedge_depth#,0,0,0);
+cb_ba_form;erase sketch cb_ba_p;
+vm_e_form_a(cb_ba_width/2);
+sketch (subpath(0,7) of cb_ba_p)..vm_e_pa;
+wedge(6);
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvbhao); telchar "consonant+vowel bha+ao";
+begintchar(cv_bhao_code,cb_ba_width#,vm_e_height1#,wedge_depth#,0,0,0);
+cb_ba_form;erase sketch cb_ba_p;
+vm_ao_form(11,cb_ba_width/2);
+sketch (subpath (0,7) of cb_ba_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+wedge(6);
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvre); telchar "consonant+vowel ra+e";
+begintchar(cv_re_code,cb_ra_width#,vm_e_height3#,0,0,0,0);
+cb_ra_form;
+sketch cv_re_p;
+pivot_message(x31);
+endtchar; etest;
+
+stest(cvle); telchar "consonant+vowel la+e";
+begintchar(cv_le_code,cb_la_width#,vm_e_height1#,0,0,0,0);
+cb_la_form;
+vm_e_form_a(0.6cb_la_width);
+sketch (subpath(0,6) of cb_la_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvlao); telchar "consonant+vowel la+ao";
+begintchar(cv_lao_code,cb_la_width#,vm_e_height1#,0,0,0,0);
+cb_la_form;
+vm_ao_form(11,0.6cb_la_width);
+sketch (subpath (0,6) of cb_la_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvlle); telchar "consonant+vowel lla+e";
+begintchar(cv_lle_code,cb_lla_width#,vm_e_height1#,0,0,0,0);
+ cb_lla_form; erase sketch cb_lla_pa;
+vm_e_form_a(cb_lla_width/2);
+sketch (subpath(0,6) of cb_lla_pa)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvllu); telchar "consonant+vowel lla+u";
+begintchar(cv_llu_code,cb_lla_width#,asc_height#,0,0,0,0);
+ cb_lla_form;vm_a_form(10);
+vm_u_form(12); w:=rt x12b;
+pivot_message(lft x12d);
+endtchar; etest;
+
+stest(cvllao); telchar "consonant+vowel lla+ao";
+begintchar(cv_llao_code,cb_lla_width#,vm_e_height1#,0,0,0,0);
+ cb_lla_form; erase sketch cb_lla_pa;
+vm_ao_form(11,cb_lla_width/2);
+sketch (subpath (0,6) of cb_lla_pa)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvve); telchar "consonant+vowel va+e";
+begintchar(cv_ve_code,cb_va_width#,vm_e_height1#,0,0,0,0);
+cb_va_form;
+vm_e_form_a(cb_va_width/2);
+sketch (subpath(0,2) of cb_va_p)..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvvao); telchar "consonant+vowel va+ao";
+begintchar(cv_vao_code,cb_va_width#,vm_e_height1#,0,0,0,0);
+cb_va_form;
+vm_ao_form(11,0.4cb_va_width);
+sketch (subpath (0,2) of cb_va_p)..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvce); telchar "consonant+vowel ca+e";
+begintchar(cv_ce_code,cb_ca_width#,vm_e_height1#,0,0,0,0);
+ cb_ca_form; erase sketch cb_ca_p;
+vm_e_form_a(cb_ca_width/3);
+sketch (subpath(0,6) of cb_ca_p){up}..vm_e_pa;
+pivot_message(x999);
+endtchar; etest;
+
+stest(cvcao); telchar "consonant+vowel ca+ao";
+begintchar(cv_cao_code,cb_ca_width#,vm_e_height1#,0,0,0,0);
+ cb_ca_form; erase sketch cb_ca_p;
+vm_ao_form(11,cb_ca_width/3);
+sketch (subpath (0,6) of cb_ca_p){up}..subpath (1,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+pivot_message(x11i);
+endtchar; etest;
+
+stest(cvshaa); telchar "consonant+vowel sha+aa";
+begintchar(cv_shaa_code,cb_sha_width#,asc_height#,wedge_depth#,0,0,0);
+cb_va_form;
+sketch cv_paa_p;
+bot rt z25 = (cb_sha_width,-d);
+sketch bot z3{down}..{right}z25;
+pivot_message(x2,x22); %x22 used for alligning au modifier
+endtchar; etest;
+
+stest(cvshu); telchar "consonant+vowel sha+u";
+begintchar(cv_shu_code,cb_va_width#,asc_height#,1.25wedge_depth#,0,0,0);
+cb_va_form;
+sketch subpath(0,3.4) of cb_va_p;
+top z30=(x1,x_height);vm_a_form(30);
+bot rt z25 = (cb_sha_width,-d);
+sketch bot z3{down}..{right}z25;
+ vm_u_form(3);w:=rt x3b;
+pivot_message(lft x3d);
+endtchar; etest;
+
+stest(cvsaa); telchar "consonant+vowel sa+aa";
+begintchar(cv_saa_code,cb_na_width#,asc_height#,0,0,0,0);
+cb_na_form;top z20=(w/2,h);
+path cv_saa_p;
+cv_saa_p=subpath (0,4) of cb_na_p..z20;
+sketch cv_saa_p;
+numeric aa; aa= (x3+x4)/2;
+numeric na,nb;
+(na,nb)=cv_saa_p intersectiontimes
+ ((0,asc_height2)..(cb_na_width,asc_height2));
+z21=point na of cv_saa_p;
+pivot_message(aa,x21); %x21 is used for alligning au modifier
+endtchar; etest;
+
+stest(cvhaa); telchar "consonant+vowel ha+aa";
+begintchar(cv_haa_code,cb_va_width#+vmwidth#,asc_height#,0,0,0,0);
+cb_va_form;
+z10 = point 3.6 of cb_va_p;
+top z11 = (x10,x_height);
+sketch subpath(0,3) of cb_va_p..z11;
+barandhook_forma(11,vmwidth,5);
+vm_a_form(5);vm_hook_form(11e,3);
+w:=max(rt x11e.c,rt x11b);
+endtchar; etest;
+
+stest(cvhao); telchar "consonant+vowel ha+ao";
+begintchar(cv_hao_code,cb_va_width#+vmwidth#,asc_height#,0,0,0,0);
+cb_va_form;
+z10 = point 3.6 of cb_va_p;
+top z11 = (x10,x_height);
+sketch subpath(0,3) of cb_va_p..z11;
+barandhook_forma(11,vmwidth,4);
+numeric oldh;
+vm_a_form(5);erase sketch barandhook_p;oldh:=h;
+vm_ao_form(12,0.63w); sketch barandhook_p..subpath (2,3) of vm_ao_pa;
+sketch subpath (0,5) of vm_ao_pb;
+h:=max(h,oldh);
+pivot_message(x12i);
+endtchar; etest;
+
+stest(cvkshu); telchar "consonant+vowel ksha+u";
+begintchar(cv_kshu_code,cb_ka_width#,asc_height#,cb_ksha_depth#,0,0,0);
+cb_ksha_form;
+vm_a_form(2);
+z20=(cb_ka_width+u,w_height);
+vm_u_form(20); erase sketch vm_u_p;
+sketch cb_ka_p..vm_u_p; w := rt x20b;
+pivot_message(x20d);
+endtchar; etest;
+
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telchrs3.mf b/Master/texmf-dist/fonts/source/public/itrans/telchrs3.mf
new file mode 100644
index 00000000000..9cff20d6994
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telchrs3.mf
@@ -0,0 +1,502 @@
+% 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.
+%%%%%
+% This file contains code to generate roman digits,
+% telugu digits and punctuation symbols
+% --------- start of roman digits ------------
+stest(drzero); telchar "Roman digit zero";
+begintchar(dr_zero_code,7u#,fig_height#,0,0,0,ur#);
+top z1=(w/2,h); lft z2=(0,1/2h);
+bot z3=(w/2,0); rt z4=(w,1/2h);
+sketch superellipse(z4,z1,z2,z3,0.707);
+endtchar; etest;
+
+stest(drone); telchar "Roman digit one";
+begintchar(dr_one_code,4u#,fig_height#,0,0,0,ur#);
+bot lft z1=(0,0); bot rt z2=(w,0); top z3=(x5,h);
+lft z4=(x1,x_height+uh); bot z5=1/2[z1,z2];
+sketch z1--z2; sketch z3--z5;
+sketch z4..{up}z3;
+endtchar; etest;
+
+stest(drtwo); telchar "Roman digit two";
+begintchar(dr_two_code,7u#,fig_height#,0,0,0,ur#);
+bot lft z1=(0,0); bot rt z2=(w,0); lft z3=(0,x_height);
+top z4=(w/2,h); rt z5=(w,y3);
+sketch z1--z2; sketch z3..z4..z5..{-1,-1}z1;
+endtchar; etest;
+
+stest(drthree); telchar "Roman digit three";
+begintchar(dr_three_code,7u#,fig_height#,0,0,0,ur#);
+path pa;
+top lft z1=(0,3/4h); top z2=(w/2,h);
+rt z3=(w,y1); z4=(w/2-u,1/2h);
+pa= z1..z2..z3..{(-1,0)}z4;
+sketch pa; sketch pa reflectedabout (z4,(w,y4));
+endtchar; etest;
+
+stest(drfour); telchar "Roman digit four";
+begintchar(dr_four_code,7u#,fig_height#,0,0,0,ur#);
+bot z1=(w-1.5u,0); top z2=(x1,h);
+lft z3=(0,w_height); rt z4=(w,y3);
+bot z1a=(x1-(x4-x1),0); bot z1b=(x4,0);
+sketch z1a--z1b; sketch z1--z2;
+sketch z3--z2; sketch z3--z4;
+penlabels(1a,1b);
+endtchar; etest;
+
+stest(drfive); telchar "Roman digit five";
+begintchar(dr_five_code,7u#,fig_height#,0,0,0,ur#);
+top rt z1=(w,h); top lft z2=(0,h); lft z3=(0,6/10h);
+z4=(1/2w,y3+uh); rt z5=(w,(y4+y6)/2); bot z6=(x4,0); lft z7=(0,1/4h);
+sketch z1--z2; sketch z2--z3;
+sketch z3..z4..z5..z6..z7;
+endtchar; etest;
+
+stest(drsix); telchar "Roman digit six";
+begintchar(dr_six_code,6u#,fig_height#,0,0,0,ur#);
+dr_sixnine_form;
+sketch dr_sixnine_p;
+endtchar; etest;
+
+stest(drseven); telchar "Roman digit seven";
+begintchar(dr_seven_code,7u#,fig_height#,0,0,0,ur#);
+top lft z1=(0,h); top rt z3=(w,h);
+bot z4=(1/4w,0);
+sketch z1--z3{(-1,-1)}..{down}z4;
+endtchar; etest;
+
+stest(dreight); telchar "Roman digit eight";
+begintchar(dr_eight_code,7u#,fig_height#,0,0,0,ur#);
+top z1=(w/2,h); z2=(x1,0.6h);
+bot z3=(x1,0); lft z4=(0,y2/2); rt z5=(w,y4);
+z6=(x4+u,1/2(y1+y2)); z7=(w-u,y6);
+sketch superellipse(z7,z1,z6,z2,0.707);
+sketch superellipse(z5,z2,z4,z3,0.707);
+endtchar; etest;
+
+stest(drnine); telchar "Roman digit nine";
+begintchar(dr_nine_code,6u#,fig_height#,0,0,0,ur#);
+dr_sixnine_form;
+bot lft z10 = z1;
+sketch dr_sixnine_p rotatedaround(z10,-180) shifted(-w,-h);
+endtchar; etest;
+
+%---------------------end of roman digits------------------------
+
+% ------------- start of telugu digits ------------
+
+stest(dtzero); telchar "telugu digit zero";
+begintchar(dt_zero_code,tfig_width#,tfig_height#,0,0,0,ur#);
+top z1=(w/2,h); lft z2=(0,h/2); bot z3=(x1,0); rt z4=(w,y2);
+sketch superellipse(z4,z1,z2,z3,0.707);
+endtchar; etest;
+
+stest(dtone); telchar "telugu digit one";
+begintchar(dt_one_code,tfig_width#+u#,tfig_height#,0,0,0,ur#);
+bot z1=(w/5,0); lft z2=(0,h/2); top z3=(w/2,h);
+rt z4=(w,h/2); bot z5=(w-(w/5),0);
+sketch z1..z2..z3..z4..z5;
+endtchar; etest;
+
+stest(dttwo); telchar "telugu digit two";
+begintchar(dt_two_code,tfig_width#,tfig_height#,0,0,0,ur#);
+z1=(3w/5,5h/6); z2=(x1,4h/6); z3=(w/2,y1);
+top z4=(x1,h); z5=((x8+x1)/2,y3); bot z6=(x1,0);
+bot lft z7=(0,0);rt z8=(w,h/2);
+sketch z1..z2..z3..z4..z8..{(-1,0)}z6--z7;
+endtchar; etest;
+
+
+stest(dtthree); telchar "telugu digit three";
+begintchar(dt_three_code,tfig_width#-2u#,tfig_height#,0,0,0,ur#);
+path pa;
+lft z1=(0,4h/5); top z2=(w/2,h); top z3=(4w/5,h);
+rt z4=(w,3h/4); z5=(3w/4,h/2); z6=(w/3,h/2);
+pa= z1..z2..z3..z4..z5;
+sketch pa; sketch pa reflectedabout(z5,z6);
+sketch z5--z6;
+endtchar; etest;
+
+stest(dtfour); telchar "telugu digit four";
+begintchar(dt_four_code,tfig_width#-u#,tfig_height#,0,0,0,ur#);
+top z1=(w/5,h); lft z2=(0,2h/3); z4=(w/2,h/3);
+bot z5=(x4,0); z3=(w/3,1/2(y4+y5));
+forsuffixes s=6,7,8:
+ z.s=z.[s-5] reflectedabout(z4,z5); endfor;
+sketch z1..z2..z4..z7..z6;
+sketch z4..z3..z5..z8..z4;
+endtchar; etest;
+
+stest(dtfive); telchar "telugu digit five";
+begintchar(dt_five_code,tfig_width#+u#,tfig_height#,0,0,0,ur#);
+lft z1=(0,8h/10); lft z2=(0,3h/10); z3=(2w/3,(y1+y2)/2);
+top z11=(w/3,h); z12 = z11 reflectedabout ((0,y3),(w,y3));
+sketch z1..z11..z3..z12..z2;
+top z4=(x3+(w-x3)/2,h);
+rt z5=(w,(y3+y4)/2);
+bot z7=(x4,0); rt z8=(x9,y9-uh); rt z9=(w,y2);
+sketch z3..z5..z4..z3..z7..z8..z9;
+endtchar; etest;
+
+stest(dtsix); telchar "telugu digit six";
+begintchar(dt_six_code,tfig_width#,tfig_height#,0,0,0,ur#);
+dt_six_form;
+sketch dt_six_pa; sketch dt_six_pb;
+endtchar; etest;
+
+stest(dtseven); telchar "telugu digit seven";
+begintchar(dt_seven_code,tfig_width#-2u#,tfig_height#,0,0,0,ur#);
+lft z1=(0,3h/4); top z2=(w/2,h); rt z3=(w,y1); z4=(w/2,h/2);
+forsuffixes i=6,7,8:
+ z.i=z.[i-5] rotatedaround (z4,180);
+endfor;
+sketch z1..z2..z3..z4..z8..z7..z6;
+endtchar; etest;
+
+
+stest(dteight); telchar "telugu digit eight";
+begintchar(dt_eight_code,tfig_width#+u#,tfig_height#,0,0,0,ur#);
+z2=(1.5u,w/2); lft z7=(0,(y2+y3)/2);
+bot z3=(w/4,0); z4=z2+(3(x3-x2),0);
+top z5=(x3,h); top rt z6=(w,h);
+sketch z2..z7..z3..z4..z5 & z5--z6;
+endtchar; etest;
+
+stest(dtnine); telchar "telugu digit nine";
+begintchar(dt_nine_code,tfig_width#,tfig_height#,0,0,0,ur#);
+dt_six_form;
+sketch dt_six_pa reflectedabout((0,0),(w,0)) shifted (0,h);
+sketch dt_six_pb reflectedabout((0,0),(w,0)) shifted (0,h);
+endtchar; etest;
+
+% end of telugu digits
+
+% --------- start of punctuation ----------
+
+stest(pperiod); telchar "punctuation period";
+begintchar(p_period_code,2*dot_radius#,2*dot_radius#,0,0,0,ur#);
+z1=(dot_radius,dot_radius);
+fill_dot(1);
+endtchar; etest;
+
+stest(pcomma); telchar "punctuation comma";
+begintchar(p_comma_code, p_comma_width#,2*dot_radius#,des_depth#,0,0,ur#);
+p_comma_form;
+endtchar; etest;
+
+stest(pequal); telchar "punctuation equal";
+begintchar(p_equal_code,10u#,3/4x_height#,0,0,0,ur#);
+top lft z1=(0,h); top rt z2=(w,h);
+bot lft z3=(0,1/4x_height); bot rt z4=(w,1/4x_height);
+sketch z1--z2; sketch z3--z4;
+endtchar; etest;
+
+stest(pbar); telchar "punctuation vertical bar";
+begintchar(p_bar_code,u#,x_height#,0,0,0,ur#);
+p_bar_form;
+sketch p_bar_p;
+endtchar; etest;
+
+stest(pdbar); telchar "punctuation double bar";
+begintchar(p_dbar_code,2.5u#,x_height#,0,0,0,ur#);
+p_bar_form;
+sketch p_bar_p;sketch p_bar_p reflectedabout ((w/2,0),(w/2,h));
+endtchar; etest;
+
+stest(pcolon); telchar "punctuation colon";
+begintchar(p_colon_code,2*dot_radius#,x_height#,0,0,0,ur#);
+z1=(dot_radius,dot_radius);
+fill_dot(1);
+z2=(x1,x_height-dot_radius);
+fill_dot(2);
+endtchar; etest;
+
+stest(pscolon); telchar "punctuation semicolon";
+begintchar(p_scolon_code,p_comma_width#,x_height#,des_depth#,0,0,ur#);
+p_comma_form;
+z5=(x1,x_height-dot_radius);
+fill_dot(5);
+endtchar; etest;
+
+stest(pcquote); telchar "punctuation closing quote";
+begintchar(p_cquote_code,p_comma_width#,asc_height#,0,0,0,ur#);
+p_comma_form;
+erase fill fill_dot_p; erase sketch p_comma_p;
+fill fill_dot_p shifted (0,asc_height-2*dot_radius);
+sketch p_comma_p shifted (0,asc_height-2*dot_radius);
+endtchar; etest;
+
+stest(pcquotes); telchar "punctuation closing quotes";
+begintchar(p_cquotes_code,2*p_comma_width#+u#,asc_height#,0,0,0,ur#);
+p_comma_form;
+erase fill fill_dot_p; erase sketch p_comma_p;
+fill fill_dot_p shifted (0,asc_height-2*dot_radius);
+sketch p_comma_p shifted (0,asc_height-2*dot_radius);
+fill fill_dot_p shifted (0,asc_height-2*dot_radius)
+ shifted (p_comma_width+u,0);
+sketch p_comma_p shifted (0,asc_height-2*dot_radius)
+ shifted (p_comma_width+u,0);
+endtchar; etest;
+
+stest(poquote); telchar "punctuation opening quote";
+begintchar(p_oquote_code,p_comma_width#,asc_height#,0,0,0,ur#);
+p_comma_form;
+erase fill fill_dot_p; erase sketch p_comma_p;
+lft z5 = z2;
+top rt z6 =z3;
+fill fill_dot_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+sketch p_comma_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+endtchar; etest;
+
+stest(poquotes); telchar "punctuation opening quotes";
+begintchar(p_oquotes_code,2*p_comma_width#+u#,asc_height#,0,0,0,ur#);
+p_comma_form;
+erase fill fill_dot_p; erase sketch p_comma_p;
+lft z5 = z2;
+top rt z6 =z3;
+fill fill_dot_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+sketch p_comma_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6));
+fill fill_dot_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6))
+ shifted(p_comma_width+u,0);
+sketch p_comma_p rotatedaround (z5,-180) shifted(-x5,asc_height-abs(y6))
+ shifted(p_comma_width+u,0);
+endtchar; etest;
+
+stest(pdquotes);telchar "punctuation double quotes";
+begintchar(p_dquotes_code,4.5u#,asc_height#,0,0,0,ur#);
+top lft z1=(1.5u,h); bot lft z2=(0,x_height);
+top rt z3=(w,h); bot rt z4=(x1+1.5u,x_height);
+sketch z1--z2; sketch z3--z4;
+endtchar; etest;
+
+%stest(pdquotes);telchar "punctuation double quotes";
+%begintchar(p_dquotes_code,2*dot_radius#+u#,asc_height#,0,0,0,ur#);
+%%begintchar(p_dquotes_code,4*dot_radius#+u#,asc_height#,0,0,0,ur#);
+%path pa;
+%%z1=(dot_radius,h-dot_radius);z1l=(0,y1);z1r=(2x1,y1);z1t=(x1,h);
+%z1=(dot_radius/2,h-dot_radius/2);z1l=(0,y1);z1r=(2x1,y1);z1t=(x1,h);
+%z2=(x1,x_height);
+%%z2=(x1,x_height);z2l=(dot_radius/2,y2);z2r=(x2+(x2-x2l),y2);
+%%pa= z2l--z1l & flex(z1l,z1t,z1r) & z1r--z2r--cycle; fill pa;
+%pa= z2--z1l & flex(z1l,z1t,z1r) & z1r--z2--cycle; filldraw pa;
+%filldraw pa shifted(dot_radius+u,0);
+%%fill pa shifted(2dot_radius+u,0);
+%endtchar; etest;
+
+stest(pslash); telchar "punctuation virgule (slash)";
+begintchar(p_slash_code,6u#,asc_height#,des_depth#,0,0,ur#);
+p_slash_form;
+sketch p_slash_p;
+endtchar; etest;
+
+stest(phash); telchar "punctuation hash mark (number sign)";
+begintchar(p_hash_code,12u#,asc_height#,des_depth#,0,0,ur#);
+numeric midpoint;
+midpoint = (-des_depth+asc_height)/2;
+lft z1=(0,midpoint+2u); rt z2=(w,y1);
+lft z3=(0,midpoint-2u); rt z4=(w,y3);
+bot z5=(2u,-d); top z6=(x5+4u,h);
+z7=(x5+4u,y5); z8=(x7+4u,y6);
+sketch z1--z2; sketch z3--z4;
+sketch z5--z6; sketch z7--z8;
+endtchar; etest;
+
+%stest(pexcla); telchar "punctuation exclamation point";
+%begintchar(p_excla_code,dot_radius#,asc_height#,0,0,0,ur#);
+%pickup pencircle;
+%z1=(dot_radius/2,dot_radius/2);
+%filldraw fullcircle scaled 2x1 shifted z1;
+%z2=(x1,5*y1); z3 =(x1,h-y1);
+%z2l=(x1-dot_radius/4,y2); z2r=(x1+dot_radius/4,y2);
+%z3l=(0,y3); z3r=(x1+dot_radius/2,y3); z3t=(x1,h);
+%filldraw z2l--z3l & flex(z3l,z3t,z3r) & z3r--z2r--cycle;
+%endtchar; etest;
+
+stest(pexcla); telchar "punctuation exclamation point";
+begintchar(p_excla_code,dot_radius#,asc_height#,0,0,0,ur#);
+z1=(dot_radius,dot_radius);
+fill_dot(1);
+fill fullcircle scaled 2x1 shifted z1;
+top z2=(x1,h); bot z3 =(x1,4*y1);
+sketch z2--z3;
+endtchar; etest;
+
+stest(pasterisk); telchar "punctuation asterisk";
+begintchar(p_asterisk_code,x_height#,x_height#,0,0,0,ur#);
+z1=(1/2w,1/2h);
+ for d=30 step 60 until 330:
+ z[d]=z1+0.5 dir d xscaled w yscaled h;
+ sketch z1--z[d];
+ penlabels(z[d]);
+ endfor;
+endtchar; etest;
+
+stest(pplus); telchar "punctuation plus";
+begintchar(p_plus_code,x_height#,x_height#,0,0,0,ur#);
+lft z1=(0,h/2); rt z2=(w,y1); top z3=(w/2,h); bot z4=(x3,0);
+sketch z1--z2; sketch z3--z4;
+endtchar; etest;
+
+
+stest(plbracket); telchar "punctuation left bracket";
+begintchar(p_lbracket_code,3u#,top_height#,bot_depth#,0,0,ur#);
+p_lbracket_form;
+sketch p_lbracket_p;
+endtchar; etest;
+
+stest(prbracket); telchar "punctuation right bracket";
+begintchar(p_rbracket_code,3u#,top_height#,bot_depth#,0,0,ur#);
+p_lbracket_form;
+sketch p_lbracket_p shifted (-w,0) reflectedabout ((0,0),(0,h));
+endtchar; etest;
+
+stest(plparen); telchar "punctuation left parenthesis";
+begintchar(p_lparen_code,3u#,top_height#,bot_depth#,0,0,ur#);
+p_rparen_form;
+sketch p_rparen_p shifted (-w,0) reflectedabout ((0,0),(0,h));
+endtchar; etest;
+
+stest(prparen); telchar "punctuation right parenthesis";
+begintchar(p_rparen_code,3u#,top_height#,bot_depth#,0,0,ur#);
+p_rparen_form;
+sketch p_rparen_p;
+endtchar; etest;
+
+stest(plbrace); telchar "punctuation left brace";
+begintchar(p_lbrace_code,4u#,top_height#,bot_depth#,0,0,ur#);
+p_lbrace_form;
+sketch p_lbrace_p;
+endtchar; etest;
+
+stest(prbrace); telchar "punctuation right brace";
+begintchar(p_rbrace_code,4u#,top_height#,bot_depth#,0,0,ur#);
+p_lbrace_form;
+ sketch (p_lbrace_p shifted (-w,0) reflectedabout ((0,0),(0,h)) );
+endtchar; etest;
+
+stest(ppercent); telchar "punctuation percent sign";
+begintchar(p_percent_code,6u#,asc_height#,des_depth#,0,0,ur#);
+p_slash_form;
+sketch p_slash_p;
+z3=(3(x1+x2)/8,-d+7/8(h+d));
+z4=(w-x3,-d+(h-y3));
+sketch fullcircle scaled (1.5u) shifted z3;
+sketch fullcircle scaled (1.5u) shifted z4;
+endtchar; etest;
+
+stest(pbslash); telchar "punctuation backslash";
+begintchar(p_bslash_code,6u#,asc_height#,des_depth#,0,0,ur#);
+p_slash_form;
+sketch p_slash_p reflectedabout ((w/2,h),(w/2,0));
+endtchar; etest;
+
+stest(plbar); telchar "punctuation long bar";
+begintchar(p_lbar_code,u#,asc_height#,des_depth#,0,0,ur#);
+top z1=(w/2,h); bot z2=(x1,-d);
+sketch z1--z2;
+endtchar; etest;
+
+stest(phyphen); telchar "punctuation hyphen";
+begintchar(p_hyphen_code,6u#,1/2x_height#,0,0,0,ur#);
+top lft z1=(0,h); top rt z2=(w,h);
+sketch z1--z2;
+endtchar; etest;
+
+stest(plhyphen); telchar "punctuation long hyphen";
+begintchar(p_lhyphen_code,9u#,1/2x_height#,0,0,0,ur#);
+top lft z1=(0,h); top rt z2=(w,h);
+sketch z1--z2;
+endtchar; etest;
+
+stest(pvlhyphen); telchar "punctuation very long hyphen";
+begintchar(p_vlhyphen_code,15u#,1/2x_height#,0,0,0,ur#);
+top lft z1=(0,h); top rt z2=(w,h);
+sketch z1--z2;
+endtchar; etest;
+
+stest(pubar); telchar "punctuation underbar";
+begintchar(p_ubar_code,x_height#,0,uh#,0,0,ur#);
+bot lft z1=(0,-d); bot rt z2=(w,-d);
+sketch z1--z2;
+endtchar; etest;
+
+stest(pquestion); telchar "punctuation question mark";
+begintchar(p_question_code,6u#,asc_height#,0,0,0,ur#);
+lft z1=(0,h-2dot_radius); top z2=(w/2,h);
+rt z3=(w,y1); z4=(x2,1/2x_height);
+z5=(x2,1/3(y2+y4)); z6=(x2,dot_radius);fill_dot(6);
+sketch z1..z2..z3..z5..tension 1.5..z4;
+endtchar; etest;
+
+stest(pdollar); telchar "punctuation dollar sign";
+begintchar(p_dollar_code,cb_ka_width#,x_height#+1.5uh#,1.5uh#,0,0,ur#);
+cb_ka_form;
+sketch z1..z2..z3..z4..z5..z6..z7;
+top z11 = (w/2,h); bot z12 = (w/2,-d);
+sketch z11--z12;
+endtchar; etest;
+
+stest(pgreater); telchar "punctuation greater than";
+begintchar(p_greater_code,7u#,x_height#,0,0,0,ur#);
+bot lft z1=(0,0); top lft z2=(0,x_height); rt z3=(w,1/2(y1+y2));
+sketch z1--z3; sketch z2--z3;
+endtchar; etest;
+
+stest(pless); telchar "punctuation less than";
+begintchar(p_less_code,7u#,x_height#,0,0,0,ur#);
+bot rt z1=(w,0); top rt z2=(w,x_height); lft z3=(0,1/2(y1+y2));
+sketch z1--z3; sketch z2--z3;
+endtchar; etest;
+
+stest(pat); telchar "punctuation at sign";
+begintchar(p_at_code,10u#,asc_height#,0,0,0,ur#);
+z1=(w/2,3/4h); z2=(1/5w,1/2h);
+z3=(x1,1/4h); z4=(4/5w,5/8h);
+z5=(4/5w,3/8h); z6=(9/10w,y3);
+rt z7=(w,y2); top z8=(x1,h);
+lft z9=(0,y2); bot z10=(x1,0); rt z11=(x7,1/8h);
+sketch z5..z3..z2..z1..z4&z4--z5& z5..z6..z7{up}..{left}z8..z9..z10..z11;
+endtchar; etest;
+
+stest(ptilde); telchar "punctuation tilde sign";
+begintchar(p_tilde_code,9u#,asc_height#,0,0,0,ur#);
+top lft z1=(0,asc_height2); top z2=(w/3,h);
+z3=(2/3w,y1); top rt z4=(w,y2);
+sketch z1..z2..z3..z4;
+endtchar; etest;
+
+stest(phat); telchar "punctuation circumflex(hat)";
+begintchar(p_hat_code,5u#,asc_height#,0,0,0,ur#);
+lft z1=(0,asc_height1); rt z2=(w,y1); top z3=(1/2(x1+x2),h);
+sketch z1--z3; sketch z3--z2;
+endtchar; etest;
+
+stest(pampersand); telchar "punctuation ampersand";
+begintchar(p_ampersand_code,11u#,asc_height#,0,0,0,ur#);
+rt z11=(w,1/4x_height); bot z10=(3/4w,0);
+z1=(x10+u,x_height); y1a=y1; x1-x1a=w-x1; rt z1b=(w,x_height);
+bot z2=(w/4,0);lft z3=(0,y11); z4=(w/8,1/2x_height+uh);
+z5=(x2,3/4x_height); z6=(w/2,asc_height1);
+top z7=(5/12w,h); z8=(5/24w,y6); %z9=(x7,1/2x_height);
+sketch z1a--z1b;
+sketch z1..{left}z2..z3..z4..z5..z6..z7..z8..z5..z10..z11;
+penlabels (1a,1b);
+endtchar; etest;
+
+% ---------------- end of punctuation ------------
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telcodes.mf b/Master/texmf-dist/fonts/source/public/itrans/telcodes.mf
new file mode 100644
index 00000000000..98f94481881
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telcodes.mf
@@ -0,0 +1,282 @@
+% 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.
+%%%%%%%
+% This file contains codes to determine where various symbols
+% are placed in the font. The symbols that are also part of ASCII
+% character set are placed at the same location as in ASCII code.
+% Any revision of this file MUST maintain this assignment.
+% All telugu digits are given contiguous codes in the order
+% 0,1,2,3,4,5,6,7,8,9. Any revision of this file MUST maintain
+% this property.
+%
+% vowels
+v_a_code := oct"027";
+v_aa_code := v_a_code +1;
+v_e_code := v_aa_code +1;
+v_ee_code := v_e_code +1;
+v_u_code := v_ee_code +1;
+v_uu_code := v_u_code +1;
+v_ro_code := v_uu_code +1;
+v_roo_code := v_ro_code +1;
+v_lo_code := v_roo_code +1;
+v_loo_code := v_lo_code +1;
+v_ea_code := oct"101";
+v_eae_code := v_ea_code +1;
+v_i_code := v_eae_code +1;
+v_ao_code := v_i_code +1;
+v_aoo_code := v_ao_code +1;
+v_au_code := v_aoo_code +1;
+
+% vowel modifiers
+vm_a_code := oct"200";
+vm_aa_code := vm_a_code +1;
+vm_aaa_code := vm_aa_code +1;
+vm_e_code := vm_aaa_code +1;
+vm_ee_code := vm_e_code +1;
+vm_eea_code := vm_ee_code +1;
+vm_eeb_code := vm_eea_code +1;
+vm_u_code := vm_eeb_code +1;
+vm_uu_code := vm_u_code +1;
+vm_ro_code := vm_uu_code +1;
+vm_roo_code := vm_ro_code +1;
+vm_lo_code := vm_roo_code +1;
+vm_loo_code := vm_lo_code +1;
+vm_ea_code := vm_loo_code +1;
+vm_eae_code := vm_ea_code +1;
+vm_i1_code := vm_ea_code;
+vm_i2_code := vm_eae_code +1;
+vm_ao_code := vm_i2_code +1;
+vm_aoo_code := vm_ao_code +1;
+vm_aoo_code_a := vm_aoo_code +1;
+vm_au_code := vm_aoo_code_a+1;
+vm_p_code := vm_au_code +1;
+
+% Consonant bases
+cb_ka_code := v_au_code +1;
+cb_kha_code := cb_ka_code +1;
+cb_ga_code := cb_kha_code +1;
+cb_gha_code := cb_ga_code +1;
+cb_nga_code := cb_gha_code +1;
+cb_cha_code := cb_nga_code +1;
+cb_ccha_code := cb_cha_code +1;
+cb_ja_code := cb_ccha_code +1;
+cb_jha_code := cb_ja_code +1;
+cb_nya_code := cb_jha_code +1;
+cb_tta_code := cb_nya_code +1;
+cb_ttha_code := cb_tta_code +1;
+cb_dda_code := cb_ttha_code +1;
+cb_ddha_code := cb_dda_code +1;
+cb_nna_code := cb_ddha_code +1;
+cb_ta_code := cb_nna_code +1;
+cb_tha_code := cb_ta_code +1;
+cb_da_code := cb_tha_code +1;
+cb_dha_code := cb_da_code +1;
+cb_na_code := cb_dha_code +1;
+cb_pa_code := oct"141";
+cb_pha_code := cb_pa_code +1;
+cb_ba_code := cb_pha_code +1;
+cb_bha_code := cb_ba_code +1;
+cb_ma_code := cb_bha_code +1;
+cb_ya_code := cb_ma_code +1;
+cb_ra_code := cb_ya_code +1;
+cb_rra_code := cb_ra_code +1;
+cb_la_code := cb_rra_code +1;
+cb_lla_code := cb_la_code +1;
+cb_va_code := cb_lla_code +1;
+cb_ca_code := cb_va_code +1;
+cb_sha_code := cb_ca_code +1;
+cb_sa_code := cb_sha_code +1;
+cb_ha_code := cb_sa_code +1;
+cb_ksha_code := cb_ha_code +1;
+cb_dt_code := cb_ksha_code +1;
+cb_np_code := cb_dt_code +1;
+cb_vg_code := cb_np_code +1;
+cb_bb_code := cb_vg_code +1; % boxes(bb,bo,be)(used for demonstrating
+% vowel modifiers, cons. conjuncts)
+cb_bo_code := cb_bb_code +1;
+cb_be_code := cb_bo_code +1;
+
+% Consonant conjuncts
+cc_ka_code := vm_p_code +1;
+cc_kha_code := cc_ka_code +1;
+cc_ga_code := cc_kha_code +1;
+cc_gha_code := cc_ga_code +1;
+cc_nga_code := cc_gha_code +1;
+cc_cha_code := cc_nga_code +1;
+cc_ccha_code := cc_cha_code +1;
+cc_ja_code := cc_ccha_code +1;
+cc_jha_code := cc_ja_code +1;
+cc_nya_code := cc_jha_code +1;
+cc_tta_code := cc_nya_code +1;
+cc_ttha_code := cc_tta_code +1;
+cc_dda_code := cc_ttha_code +1;
+cc_ddha_code := cc_dda_code +1;
+cc_nna_code := cc_ddha_code +1;
+cc_ta_code := cc_nna_code +1;
+cc_tha_code := cc_ta_code +1;
+cc_da_code := cc_tha_code +1;
+cc_dha_code := cc_da_code +1;
+cc_na_code := cc_dha_code +1;
+cc_pa_code := cc_na_code +1;
+cc_pha_code := cc_pa_code +1;
+cc_ba_code := cc_pha_code +1;
+cc_bha_code := cc_ba_code +1;
+cc_ma_code := cc_bha_code +1;
+cc_ya_code := cc_ma_code +1;
+cc_ra_code := cc_ya_code +1;
+cc_rra_code := cc_ra_code +1;
+cc_la_code := cc_rra_code +1;
+cc_lla_code := cc_la_code +1;
+cc_va_code := cc_lla_code +1;
+cc_ca_code := cc_va_code +1;
+cc_sha_code := cc_ca_code +1;
+cc_sa_code := cc_sha_code +1;
+cc_ha_code := cc_sa_code +1;
+
+% bars used for transliteration of vedic hymns
+% and other symbols used for singing
+b_udatta1_code := oct"005";
+b_udatta2_code := b_udatta1_code +1;
+b_anudatta_code := b_udatta2_code +1;
+
+% Roman digits
+dr_zero_code := ASCII"0";
+dr_one_code := dr_zero_code +1;
+dr_two_code := dr_one_code +1;
+dr_three_code := dr_two_code +1;
+dr_four_code := dr_three_code +1;
+dr_five_code := dr_four_code +1;
+dr_six_code := dr_five_code +1;
+dr_seven_code := dr_six_code +1;
+dr_eight_code := dr_seven_code +1;
+dr_nine_code := dr_eight_code +1;
+
+% Telugu digits
+dt_zero_code := oct"015";
+dt_one_code := dt_zero_code +1;
+dt_two_code := dt_one_code +1;
+dt_three_code := dt_two_code +1;
+dt_four_code := dt_three_code +1;
+dt_five_code := dt_four_code +1;
+dt_six_code := dt_five_code +1;
+dt_seven_code := dt_six_code +1;
+dt_eight_code := dt_seven_code +1;
+dt_nine_code := dt_eight_code +1;
+
+% Punctuations
+p_period_code := ASCII".";
+p_comma_code := ASCII",";
+p_equal_code := ASCII"=";
+p_bar_code := oct"177";
+p_dbar_code := oct"000";
+p_colon_code := ASCII":";
+p_scolon_code := ASCII";";
+p_cquote_code := ASCII"'";
+p_cquotes_code := oct"001";
+p_oquote_code := ASCII"`";
+p_oquotes_code := oct"002";
+p_dquotes_code := ASCII ditto; %ASCII "
+p_slash_code := ASCII"/";
+p_hash_code := ASCII"#";
+p_excla_code := ASCII"!";
+p_asterisk_code := ASCII"*";
+p_plus_code := ASCII"+";
+p_lbracket_code := ASCII"[";
+p_rbracket_code := ASCII"]";
+p_lparen_code := ASCII"(";
+p_rparen_code := ASCII")";
+p_lbrace_code := ASCII"{";
+p_rbrace_code := ASCII"}";
+p_percent_code := ASCII"%";
+p_bslash_code := ASCII"\";
+p_lbar_code := ASCII"|";
+p_hyphen_code := ASCII"-";
+p_lhyphen_code := oct"003";
+p_vlhyphen_code := oct"004";
+p_ubar_code := ASCII"_";
+p_question_code := ASCII"?";
+p_dollar_code := ASCII"$";
+p_greater_code := ASCII">";
+p_less_code := ASCII"<";
+p_at_code := ASCII"@";
+p_tilde_code := ASCII"~";
+p_hat_code := ASCII"^";
+p_ampersand_code := ASCII"&";
+
+% Ubayaksharas
+u_ardhasunna_code := oct"010";
+u_sunna_code := u_ardhasunna_code +1;
+u_visarga_code := u_sunna_code +1;
+u_ardhavisarga_code := u_visarga_code +1;
+u_avagraha_code := u_ardhavisarga_code +1;
+
+%some consonant+vowel's need special symbols. Next we will
+%define codes for these symbols.
+cv_ku_code := cc_ha_code+1;
+cv_khe_code := cv_ku_code+1;
+cv_khao_code := cv_khe_code+1;
+cv_ge_code := cv_khao_code+1;
+cv_ngu_code := cv_ge_code+1;
+cv_nguu_code := cv_ngu_code+1;
+cv_che_code := cv_nguu_code+1;
+cv_chao_code := cv_che_code+1;
+cv_cche_code := cv_chao_code+1;
+cv_cchao_code := cv_cche_code+1;
+cv_je_code := cv_cchao_code+1;
+cv_ju_code := cv_je_code+1;
+cv_juu_code := cv_ju_code+1;
+cv_jao_code := cv_juu_code+1;
+cv_ttao_code := cv_jao_code+1;
+cv_tthe_code := cv_ttao_code+1;
+cv_ddu_code := cv_tthe_code+1;
+cv_ddhu_code := cv_ddu_code+1;
+cv_te_code := cv_ddhu_code+1;
+cv_tao_code := cv_te_code+1;
+cv_the_code := cv_tao_code+1;
+cv_de_code := cv_the_code+1;
+cv_dhe_code := cv_de_code+1;
+cv_ne_code := cv_dhe_code+1;
+cv_nao_code := cv_ne_code+1;
+cv_paa_code := cv_nao_code+1;
+cv_pu_code := cv_paa_code+1;
+ccv_pu_code := cv_pu_code+1; %con. conjunct for pa + vowel u
+cv_puu_code := ccv_pu_code+1;
+ccv_puu_code := cv_puu_code+1; %con. conjunct for pa + vowel uu
+cv_phaa_code := ccv_puu_code+1;
+ccv_phu_code := cv_phaa_code+1; %con. conjunct for pha + vowel u
+ccv_phuu_code := ccv_phu_code+1; %con. conjunct for pha + vowel uu
+cv_be_code := ccv_phuu_code+1;
+cv_bao_code := cv_be_code+1;
+cv_bhe_code := cv_bao_code+1;
+cv_bhao_code := cv_bhe_code+1;
+cv_re_code := cv_bhao_code+1;
+cv_le_code := cv_re_code+1;
+cv_lao_code := cv_le_code+1;
+cv_lle_code := cv_lao_code+1;
+cv_llu_code := cv_lle_code+1;
+cv_llao_code := cv_llu_code+1;
+cv_ve_code := cv_llao_code+1;
+cv_vao_code := cv_ve_code+1;
+cv_ce_code := cv_vao_code+1;
+cv_cao_code := cv_ce_code+1;
+cv_shaa_code := cv_cao_code+1;
+cv_shu_code := cv_shaa_code+1;
+cv_saa_code := cv_shu_code+1;
+cv_haa_code := cv_saa_code+1;
+cv_hao_code := cv_haa_code+1;
+cv_kshu_code := cv_hao_code+1;
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telmode.mf b/Master/texmf-dist/fonts/source/public/itrans/telmode.mf
new file mode 100644
index 00000000000..63760d2a2bc
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telmode.mf
@@ -0,0 +1,21 @@
+% 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.
+
+% avinash: comment out the mode line, since MakeTeXPK or MakeTeXTFM will
+% pass the correct mode to mf anyway, no need to hardcode it here.
+% mode=localfont;
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telparam.mf b/Master/texmf-dist/fonts/source/public/itrans/telparam.mf
new file mode 100644
index 00000000000..74cb3f0efe0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telparam.mf
@@ -0,0 +1,135 @@
+% 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.
+%%%%%%%%
+% This file contains various parameters used in making a font
+% for telugu. Many of the parameters are used in several places.
+% Before changing anything here you should be very clear about
+% the possible impact.
+%
+input telbase % read basefile
+
+font_identifier :="TELUGU";
+
+% parameters
+
+u#:=designsize/18; % unit width
+v#:=designsize; % total height
+uh#:=v#/18; % unit height
+top_shoulder:=2/36; % top shoulder proportion
+bot_shoulder:=2/36; % bottom shoulder proportion
+xheight:=15/36; % x height proportion
+ascheight:=10/36; % ascender height proportion
+desdepth:=7/36; % descender depth proportion
+figheight:=6/36; % height of roman digits
+
+em_width#:=18u#; % same as font_quad
+
+asc_height#:=(ascheight+xheight)*v#;
+des_depth#:=desdepth*v#;
+x_height#:=xheight*v#;
+bot_depth#:=(bot_shoulder+desdepth)*v#;
+top_height#:=(top_shoulder+ascheight+xheight)*v#;
+fig_height#:=(figheight+xheight)*v#; % height of roman digits
+tfig_width#:=7.5u#; % width of telugu digits
+tfig_height#:=x_height#; % height of telugu digits
+
+asc_height1#:=(1/3ascheight+xheight)*v#;
+asc_height2#:=(2/3ascheight+xheight)*v#;
+
+j_height#:=2/3x_height#; % height of bowls in ja,ta etc
+c_height#:=1/3x_height#; % height of circle in ma, va etc
+% c_height is used to draw small circles. If we use a wide pen then the circle
+% may not be clearly visible. Hence the following statement.
+if c_height# < (3.2*pen_width#):c_height#:=3.2pen_width#; fi;
+w_height#:=1/3x_height#; % height of wedge in da,ta etc
+ascunit#:=1/6(asc_height#-x_height#); % a unit for acsender area
+vmwidth#:=7u#; % width of vowel modifiers
+top_accent#:=1.5uh#; % base for accents that appear at top
+bot_accent#:=1.5uh#; % base for accents that appear below
+cc_scale:=0.7; % scale factor for consonant conjuncts
+ccwidth#:=vmwidth#; % width of co.conjuncts that appear on % the side
+dot_radius#:=u#; % radius of dot
+wedge_height#:=x_height#/4; % height of wedge (in dha, uu etc)
+wedge_depth#:=4/9des_depth#; % depth of wedge(in dha,uu etc)
+sc_height#:=1/6x_height#; % misc. usage
+
+v_a_width#:=10u#; % width of vowel a
+v_e_width#:=7.5u#; % width of vowel e
+v_u_width#:=8u#; % width of vowel u (like dda no hat
+v_lo_width#:=11u#; % width of vowel lo(inverted ja)
+v_ea_width#:=6u#; % width of vowel ea(like va without
+v_i_width#:=7u#; % width of vowel i
+
+vm_a_width#:=5u#; % width of vowel modifier a
+vm_e_width#:=4u#; % width of vowel modifier e
+vm_e_height1#:=asc_height2#; % height of vowelmodifier e (used
+ % with certain consonants kha,cha,
+ % ccha,ja,ta,na,ba,bha,ma,la,va etc)
+vm_e_height2#:=5/6x_height#; % vowel mod. e for ra,ga.da sits
+vm_e_height3#:=(1/2ascheight+xheight)*v#; % between vm_e_height2 and 3
+vm_u_width#:=5u#; % width of ubowl (attached to letter
+vm_ro_width#:=6u#; % width of vowel modifier ro
+vm_ao_width#:=8u#; % width of vowel modifier ao
+vm_aoo_width#:=vm_ao_width#+1.5u#; % width of vowel modifier aoo
+
+cb_ka_width#:=6u#; % width of ka
+cb_kha_width#:=7.5u#; % width of kha
+cb_ga_width#:=6u#; % width of ga
+cb_cha_width#:=9u#; % width of cha
+cb_ja_width#:=7.5u#; % width of ja
+cb_tta_width#:=10.5u#; % width of tta
+cb_nna_width#:=10u#; % width of nna
+cb_ta_width#:=8u#; % width of ta
+cb_da_width#:=9.0u#; % width of da
+cb_na_width#:=7.5u#; % width of na
+cb_ba_width#:=7.5u#; % width of ba
+cb_ya_width#:=10u#; % width of ya (without bowl)
+cb_ra_width#:=6u#; % width of ra
+cb_la_width#:=9u#; % width of la
+cb_lla_width#:=6u#; % width of lla
+cb_va_width#:=7.5u#; % width of va
+cb_ca_width#:=5u#; % width of ca
+cb_sha_width#:=cb_va_width#+1.5u#; % width of sha
+cb_ksha_width#:=cb_ka_width#; % width of ksha
+cb_ksha_depth#:=des_depth#; % floor of ksha
+cb_np_width#:=ccwidth#; % width of nakarapollu
+cb_vg_width#:=ccwidth#; % width of valapalagilaka
+
+cv_pu_width#:=cb_va_width#+2u#; % width of u modifier for pa
+cv_pu_depth#:=1.5uh#; % depth of u modifier for pa
+
+p_comma_width#:=2dot_radius#+u#; % width of comma
+half_plus_width#:=cb_ja_width#/2; % width of symbol like truncated +
+
+% ul#, ur# indicate the amount of white space that is added
+% to a symbol. Following are the criteria used to add space
+% consonant base, vowels - none
+% punctuation,digits - on right
+% consonant conjuncts that appear below,vowel modifiers that appear
+% above/below - none
+% accents that appear below/above - none
+% consonant conjuncts that appear on the side - on left
+% vowel modifiers for u, uu - none
+% vowel modifiers for ro, roo - on left
+% While composing Telugu text using TeX, space is added after a syllable
+% by the macros that build a syllable.
+ul#:=2u#; % white space (on left)
+ur#:=2u#; % white space (on right)
+
+
+generate telugu; % switch to driver files
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telspc.mf b/Master/texmf-dist/fonts/source/public/itrans/telspc.mf
new file mode 100644
index 00000000000..c2ae45d132e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telspc.mf
@@ -0,0 +1,52 @@
+%telspc%
+% generates striped characters with shading
+input telmode;
+font_size 72pt#;
+slant:=0;
+pen_width#:=2.5pt#;
+% Following code(with minor modifications) is taken from the article,
+% The ABC's of Special Effects by Georgia K. M. Tobin,
+% that appeared in TUGboat, Volume 9(1988), No. 1
+vardef special_effects=
+% creates characters filled with stripes and followed by a shadow.
+ cullit;
+ picture Normalchar;
+ Normalchar:=currentpicture;
+ clearit;
+% Depending on the output device, pen size(0.1pt) may need to be
+% changed.
+ pickup pencircle scaled 0.1pt;
+ filldraw (0,-d)--(w,-d)--
+ (w,h)--(0,h)--cycle;
+ picture Blackbox;
+ Blackbox:=currentpicture;
+ picture Reversevideo;
+ Reversevideo:=Blackbox-Normalchar;
+ clearit;
+% Depending on the output device,stepsize(uh/3) may need to be
+% changed.
+ for f=-d step uh/3 until h:
+ draw(0,f)--(w,f);
+ endfor;
+ currentpicture:=
+ currentpicture-Reversevideo;
+ cullit;
+ picture Stripedchar;
+ Stripedchar:=currentpicture;
+ clearit;
+% Depending on the output device,offset(1.5pt) may need to be
+% changed.
+ currentpicture:=Normalchar shifted(1.5pt,-1.5pt);
+ picture Shadow;
+ Shadow:=currentpicture;
+ clearit;
+ currentpicture:=Shadow-Normalchar;
+ cullit;
+ picture Shadowonly;
+ Shadowonly:=currentpicture;
+ clearit;
+
+ currentpicture:=Shadowonly+Stripedchar;
+enddef;
+input telparam;
+%%
diff --git a/Master/texmf-dist/fonts/source/public/itrans/telugu.mf b/Master/texmf-dist/fonts/source/public/itrans/telugu.mf
new file mode 100644
index 00000000000..f442599c9f2
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/telugu.mf
@@ -0,0 +1,48 @@
+% 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.
+%%%%%%%
+% This file contains font dimensions, ligature definitions etc.
+%
+font_coding_scheme := "TeX text";
+
+mode_setup; font_setup;
+
+input telcodes; % codes for telugu symbols
+input telchrs1; % vowels,vowel modifiers, consonant bases,
+% % consonant conjuncts, accents, c+v's
+input telchrs2; % consonant + vowel that need special care
+input telchrs3; % digits(roman&Telugu), punctuation
+
+% Font Dimensions
+
+font_slant slant;
+font_x_height x_height#;
+font_normal_space 6u#;
+font_normal_stretch 3u#;
+font_normal_shrink 2u#;
+font_quad em_width#;
+font_extra_space 2u#;
+
+%ligature and kern information
+
+ligtable "'": "'" =: p_cquotes_code; % close quotes
+ligtable "`": "`" =: p_oquotes_code; % open quotes
+ligtable "-": "-" =: p_lhyphen_code; % en dash
+ligtable p_lhyphen_code: "-" =: p_vlhyphen_code; % em dash
+
+if not testing: expandafter stop fi;
diff --git a/Master/texmf-dist/fonts/source/public/itrans/wntml12.mf b/Master/texmf-dist/fonts/source/public/itrans/wntml12.mf
new file mode 100644
index 00000000000..46d97df59aa
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/wntml12.mf
@@ -0,0 +1,77 @@
+% This is WNTML12.MF (Washington Tamil 12pt)
+% based on CMR12.MF
+% Created by Avinash Chopde, from the existing U of Wash definition
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WNTML"; font_size 12pt#;
+
+u#:=23.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=324/36pt#; % height of tallest characters
+asc_height#:=300/36pt#; % height of lowercase ascenders
+cap_height#:=295.2/36pt#; % height of caps
+fig_height#:=278.4/36pt#; % height of numerals
+x_height#:=186/36pt#; % height of lowercase without ascenders
+math_axis#:=108/36pt#; % axis of symmetry for math symbols
+bar_height#:=104.4/36pt#; % height of crossbar in lowercase e
+comma_depth#:=84/36pt#; % depth of comma below baseline
+desc_depth#:=84/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7.5/36pt#; % width of extrafine details
+hair#:=9.5/36pt#; % lowercase hairline breadth
+stem#:=28/36pt#; % lowercase stem breadth
+curve#:=33/36pt#; % lowercase curve breadth
+ess#:=30/36pt#; % breadth in middle of lowercase s
+flare#:=36/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=42/36pt#; % diameter of dots
+cap_hair#:=11.5/36pt#; % uppercase hairline breadth
+cap_stem#:=35/36pt#; % uppercase stem breadth
+cap_curve#:=40/36pt#; % uppercase curve breadth
+cap_ess#:=38/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.44pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=24/36pt#; % vertical distance from serif base to tangent
+jut#:=33/36pt#; % protrusion of lowercase serifs
+cap_jut#:=41/36pt#; % protrusion of uppercase serifs
+beak_jut#:=11.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=84/36pt#; % vertical protrusion of beak serifs
+vair#:=8.5/36pt#; % vertical diameter of hairlines
+notch_cut#:=12pt#; % maximum breadth above or below notches
+bar#:=12.5/36pt#; % lowercase bar thickness
+slab#:=12.5/36pt#; % serif and arm thickness
+cap_bar#:=12.5/36pt#; % uppercase bar thickness
+cap_band#:=12.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=12pt#; % max breadth above/below uppercase notches
+serif_drop#:=4.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=9/36pt#; % amount of overshoot for curves
+apex_o#:=9/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=-0.2; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate wntamil % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/itrans/wntml17.mf b/Master/texmf-dist/fonts/source/public/itrans/wntml17.mf
new file mode 100644
index 00000000000..57fc94db469
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/itrans/wntml17.mf
@@ -0,0 +1,77 @@
+% This is WNTML12.MF (Washington Tamil 12pt)
+% based on CMR12.MF
+% Created by Avinash Chopde, from the existing U of Wash definition
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WNTML"; font_size 17.28pt#;
+
+u#:=32.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=-0.1pt#; % extra space added to all sidebars
+
+body_height#:=466/36pt#; % height of tallest characters
+asc_height#:=432/36pt#; % height of lowercase ascenders
+cap_height#:=425/36pt#; % height of caps
+fig_height#:=401/36pt#; % height of numerals
+x_height#:=267.8/36pt#; % height of lowercase without ascenders
+math_axis#:=155.5/36pt#; % axis of symmetry for math symbols
+bar_height#:=150/36pt#; % height of crossbar in lowercase e
+comma_depth#:=121/36pt#; % depth of comma below baseline
+desc_depth#:=121/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=9/36pt#; % width of extrafine details
+hair#:=11/36pt#; % lowercase hairline breadth
+stem#:=33/36pt#; % lowercase stem breadth
+curve#:=40/36pt#; % lowercase curve breadth
+ess#:=35/36pt#; % breadth in middle of lowercase s
+flare#:=45/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=51/36pt#; % diameter of dots
+cap_hair#:=13/36pt#; % uppercase hairline breadth
+cap_stem#:=41/36pt#; % uppercase stem breadth
+cap_curve#:=47/36pt#; % uppercase curve breadth
+cap_ess#:=43/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.6pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=34/36pt#; % vertical distance from serif base to tangent
+jut#:=42/36pt#; % protrusion of lowercase serifs
+cap_jut#:=50/36pt#; % protrusion of uppercase serifs
+beak_jut#:=15/36pt#; % horizontal protrusion of beak serifs
+beak#:=121/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+notch_cut#:=17pt#; % maximum breadth above or below notches
+bar#:=16/36pt#; % lowercase bar thickness
+slab#:=16/36pt#; % serif and arm thickness
+cap_bar#:=16/36pt#; % uppercase bar thickness
+cap_band#:=16/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=17pt#; % max breadth above/below uppercase notches
+serif_drop#:=7/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=10/36pt#; % amount of overshoot for curves
+apex_o#:=10/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=-0.4; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate wntamil % switch to the driver file