From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- language/vispeech/vismods.mf | 230 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 language/vispeech/vismods.mf (limited to 'language/vispeech/vismods.mf') diff --git a/language/vispeech/vismods.mf b/language/vispeech/vismods.mf new file mode 100644 index 0000000000..c232eeb36a --- /dev/null +++ b/language/vispeech/vismods.mf @@ -0,0 +1,230 @@ +% Visible Speech Modifiers +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Inner +beginchar(incr ccode,curve#+lmodside#+rmodside#,mod_height#,0); +pickup finepen; +top rt z1=(rrside,h); +bot z3=(x1,0); +lft z2=(llside,1/2[0,h]); +draw z1--z2..{down}z3; +endchar; + +% Outer +beginchar(incr ccode,curve#+lmodside#+rmodside#,mod_height#,0); +pickup finepen; +bot lft z1=(llside,0); +top z3=(x1,h); +rt z2=(rrside,1/2[0,h]); +draw z1--z2..{up}z3; +endchar; + +% Close, Open +for ud=-1,1: +beginchar(incr ccode,3/2curve#+lmodside#+rmodside#,mod_height#,0); +fix_width; +pickup finepen; +lft z1=(llside,if ud>0: h else: 0 fi); +rt z2=(rrside,y1); +if ud>0: bot else: top fi z3=(1/2[llside,rrside],if ud>0: 0 else: h fi); +draw z1--z3--z2; +cutoff(z1,90*ud); cutoff(z2,90*ud); +endchar; +endfor; + +% Trill +beginchar(incr ccode,5/4curve#+lmodside#+rmodside#,loop_h#,0); +pickup pencircle xscaled thin yscaled 2/3fine rotated 55; +top y1=h; +x1=1/2[llside,rrside]; +lft x2=llside; +rt x3=rrside; +z3-z4=whatever*(dir 55); +x4=1/3[llside,rrside]; +y1-y3=y4-y6; +bot z6=(1/2[llside,rrside],0); +showdependencies; +vardef leftwards(expr it)= + xpart direction 1 of (z1..(x2,it)..{right}z3) < 0 enddef; +y2=solve leftwards(y1,y3); +draw z1..z2..{right}z3; +draw z3--z4; +rt x5=rrside; +vardef rightwards(expr it)= + xpart direction 1 of (z4..(x5,it)..z6) > 0 enddef; +y5=solve rightwards(y4,y6); +draw z4..z5..z6; +endchar; + +% Nasal +beginchar(incr ccode,3/2curve#+lmodside#+rmodside#,loop_h#,0); +pickup pencircle xscaled thick yscaled fine rotated 30; +top z1=(1/2[llside,rrside],h); +bot z4=(x1,0); +lft x2=llside; +rt x3=rrside; +y1-y2=y3-y4; +pair d[]; +d1=d4=dir (180+30); +vardef leftwards(expr it)= + xpart direction 1 of (z1{d1}..(x2,h-it).. + (x3,it)..{d4}z4) < 0 enddef; +y3=solve leftwards(y4,y1); +draw z1{d1}..z2..z3..{d4}z4; +labels(1,2,3,4); +endchar; + +% Side open (1) +beginchar(incr ccode,3/2curve#+lmodside#+rmodside#,mod_height#,0); +pickup penrazor scaled fine; +top lft z1=(llside,h); +bot lft z2=(llside,0); +top rt z3=(rrside,h); +bot rt z4=(rrside,0); +draw z1--z2; +draw z3--z4; +fill z4--(z4+(0,curve))--(z2+(0,curve))--z2--cycle; +endchar; + +% Side open (2) +beginchar(incr ccode,3/2curve#+lmodside#+rmodside#, + mod_height#+thin#,curve#); +pickup penrazor scaled fine; +top lft z1=(llside,h); +bot lft z2=(llside,-d); +top rt z3=(rrside,h); +bot rt z4=(rrside,-d); +draw z1--z2; +draw z3--z4; +pickup penrazor scaled 3/2curve rotated 90; +y5=1/2[-d,h]; +draw (x1,y5)--(x3,y5); +endchar; + +% Inverted/Protruded +for ud=1,-1: +beginchar(incr ccode,2/3loop_w#+lmodside#+rmodside#, + 2/3loop_h#+thick#,0); +pickup pencircle xscaled thin yscaled slab rotated (-20*ud); +x1=x5; +if ud=1: rt else: lft fi x1=if ud=1: rrside else: llside fi; +y1-y5=3/8loop_h; +h-y1=y5-thick; +x2=x4=wide_spot[if ud=1: llside,rrside else: rrside,llside fi]; +top y2=h+curve_overshoot; +bot y4=thick-curve_overshoot; +if ud=1: lft else: rt fi z3=(if ud=1: llside else: rrside fi,1/2[thick,h]); +draw z1..{ud*left}z2..{down}z3..{ud*right}z4..z5; +endchar; +endfor; + +% Stop +beginchar(incr ccode,thick#+lmodside#+rmodside#, + 1/2mod_height#,0); +pickup thickpen; +drawdot(1/2[llside,rrside],h); +endchar; + +% Emission, and breath glide/Suction +for ud=1,-1: +% ...stopped/not stopped +for st=0,1: +beginchar(incr ccode,3/4loop_w#+lmodside#+rmodside#,2/3loop_h#,0); +pickup thinpen; +x1=x3; +x1=if ud=1: llside else: rrside fi; +if ud=1: rt else: lft fi x2=if ud=1: rrside else: llside fi; +bot y3=0u; +top y1=h; +fix_height; +y3-y2=y2-y1; +draw z1--z2--z3; +cutoff (z1,90+ud*90); +cutoff (z3,90+ud*90); +if st=1: + pickup thickpen; + if ud=1: lft else: rt fi x4=if ud=1: llside else: rrside fi; + y4=1/2[y1,y3]; + drawdot z4; +fi +endchar; +endfor; endfor; + +% Hiatus/Abrupt +for ud=1,-1: +beginchar(incr ccode,curve#+lmodside#+rmodside#,loop_h#,0); +pickup finepen; +if ud=1: + top lft z1=(llside,h); + z2=(1/2[llside,rrside],2/3h); + rt z3=z2+(1/2curve,0); +else: + bot rt z1=(rrside,2/3h-1/2curve); + z2=(1/2[llside,rrside],h-1/2curve); + lft z3=z2-(1/2curve,0); +fi +fill fullcircle scaled curve shifted z2; +draw z1..{ud*down}z3; +endchar; +endfor; + +% Holder +beginchar(incr ccode,curve#+lmodside#+rmodside#,mod_height#,thick#); +pickup finepen; +top z1=(1/2[llside,rrside],h); +bot z2=(1/2[llside,rrside],-d); +z3=1/2[z1,z2]; +draw z1--z2; +pickup curvepen; +drawdot z3; +endchar; + +% Accent +beginchar(incr ccode,fine#+lmodside#+rmodside#,loop_h#+thick#,0); +pickup finepen; +top z1=(1/2[llside,rrside],h); +bot z2=(x1,h-2curve); +draw z1--z2; +endchar; + +% Emphasis +beginchar(incr ccode,fine#+lmodside#+rmodside#,curve#,curve#); +pickup finepen; +top z1=(1/2[llside,rrside],h); +bot z2=(x1,-d); +draw z1--z2; +endchar; + +% Whistle/voiced whistle +% Code similar to closed throat consonant +for u=1,2: +beginchar(incr ccode,loop_w#+2sidebar#,3/4loop_h#+thick#,0); +y1=y3=y.i1=y.i3=.5[thick,h]; +x1=rside+apex_overshoot; +x3=lside-apex_overshoot; +x.i3-x3=x1-x.i1=3/4fine; +x2=x4=x.i2=x.i4=1/2[lside,rside]; +y4=h+curve_overshoot; +y2=thick-curve_overshoot; +y4-y.i4=y.i2-y2=curve; +fill superellipse(z1,z4,z3,z2,.655); +cullit; +unfill superellipse(z.i1,z.i4,z.i3,z.i2,.66); +if u=2: pickup thickpen; draw z.i2--z.i4; fi +labels(1,2,3,4); +endchar; +endfor; + +% Plus: simultaneous pronunciation +beginchar(incr ccode,1/2loop_w#+2sidebar#,3/4loop_h#,0); +pickup penrazor scaled fine; +fix_height; +fix_width; +z1=(1/2[lside,rside],h); +z2=(x1,1/4loop_h); +z3=(lside,1/2[1/4loop_h,h]); +z4=(rside,y3); +draw z1--z2; +pickup penrazor scaled fine rotated 90; +draw z3--z4; +endchar; + -- cgit v1.2.3