summaryrefslogtreecommitdiff
path: root/language/vispeech/vismods.mf
blob: c232eeb36a04db2ec9ee89225b10beaa9d1bc623 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
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;