summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/itrans/telbase.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/itrans/telbase.mf')
-rw-r--r--Master/texmf-dist/fonts/source/public/itrans/telbase.mf871
1 files changed, 871 insertions, 0 deletions
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;
+
+