summaryrefslogtreecommitdiff
path: root/language/vispeech/vismods.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/vispeech/vismods.mf
Initial commit
Diffstat (limited to 'language/vispeech/vismods.mf')
-rw-r--r--language/vispeech/vismods.mf230
1 files changed, 230 insertions, 0 deletions
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;
+