diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/itrans/telbase.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/itrans/telbase.mf | 871 |
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; + + |