u# := 7/9pt#; em# := 8u#; ex# := 10u#; define_pixels(u, em, ex); fontdimen 2: u; % interword spacing fontdimen 5: ex, em; % size of ex and em fontdimen 7: 0.5u; % intersentence extra spacing pickup pencircle scaled 0.075em; mainPen := savepen; pickup pencircle scaled 0.15em; dotPen := savepen; def LHS = 180 enddef; def RHS = 0 enddef; def beginSingle(expr code, whichHandSide) = beginchar(code, em#, ex#, 0.5ex#); pickup mainPen; side := whichHandSide; double := 0; single; enddef; def beginDouble(expr code, whichHandSide) = beginchar(code, 2em#, ex#, 0.5ex#); pickup mainPen; side := whichHandSide; double := em; doubleTop; doubleBottom; enddef; def single = draw halfcircle scaled em rotated side shifted (w/2, h/2); enddef; def doubleTop = draw halfcircle scaled em rotated side shifted (w/4, h/2); enddef; def doubleBottom = draw halfcircle scaled em rotated side shifted (3/4w, h/2); enddef; def tail = z1 = (w, h/2); x2 = 5/8w; x3 = 3/8w; if side = RHS: y2 = 1/8h; y3 = 2/8h; draw z1{down}..z2..z3; else: y2 = 9/10h; y3 = 8/10h; draw z1{up}..z2..z3; fi labels(range 1 thru 3); enddef; def caret = x6 = 0; x7 = em/2; x8 = em; if side = RHS: y6 = y8 = 9/10h; y7 = 13/10h; else: y6 = y8 = 1/10h; y7 = -3/10h; fi draw z6..z7; draw z7..z8; labels(range 6 thru 8); enddef; def dot = oldPen := savepen; pickup dotPen; if side = RHS: drawdot(1/8w, 1/10h); else: drawdot(1/8w, 9/10h); fi pickup oldPen; enddef; def bar = if side = RHS: draw (w/2, 11/10h)..(w/2, 3/10h); else: draw (w/2, -1/10h)..(w/2, 7/10h); fi enddef; def shortBar = if side = RHS: draw (w/2, 9/10h)..(w/2, 3/10h); else: draw (w/2, 1/10h)..(w/2, 7/10h); fi enddef; def hook = z1 = (w, h/2); x2 = 7.5/8w; z3 = (3/4w, h/2); if side = RHS: y2 = 6.5/10h; else: y2 = 3.5/10h; fi draw z1..z2..z3; enddef; def loop = z1 = (w, h/2); x2 = x4 = 5/8em + double; x3 = em/2 + double; x5 = 9/8em + double; if side = RHS: y2 = 1/10h; y3 = 2/10h; y4 = 3/10h; y5 = 0/10h; draw z1{down}..z2..z3..z4..z5 else: y2 = 9/10h; y3 = 8/10h; y4 = 7/10h; y5 = 10/10h; draw z1{up}..z2..z3..z4..z5 fi enddef; def barCaret = caret; shortBar; enddef; def barDot = bar; oldPen := savepen; pickup dotPen; if side = RHS: drawdot(w/2, 1/10h); else: drawdot(w/2, 9/10h); fi pickup oldPen; enddef; def longTail = z1 = (w, h/2); x2 = w; x3 = 5.5/8w; x4 = 3.5/8w; if side = RHS: y2 = 4/10h; y3 = y4 = 2/10h; draw z1{down}..z2..z3..z4; else: y2 = 6/10h; y3 = y4 = 8/10h; draw z1{up}..z2..z3..z4; fi enddef; def strong = if double = 0: z[10] = (0, 1/10h); z[11] = (w, 1/10h); draw z[10]..z[11]; else: z[10] = (4/16w, h/2); z[11] = (11/16w, h/2); draw z[10]..z[11]; fi enddef; def strongBar = strong; shortBar; enddef; def strongCaret = caret; z[10] = (2/8w, 1/10h); z[11] = (6/8w, 1/10h); draw z[10]..z[11]; enddef; beginSingle("k", RHS); "Katei (k)"; endchar; beginSingle("a", LHS); "Ajo (a)"; endchar; beginDouble("t", RHS); "Teinu (t)"; endchar; beginDouble("e", LHS); "Eichai (e)"; endchar; beginSingle("n", RHS); "Nuyi (n)"; tail; endchar; beginSingle("u", LHS); "Udhi (u)"; tail; endchar; beginSingle("y", RHS); "Yire (y)"; caret; endchar; beginSingle("I", LHS); "Ithe (I)"; caret; endchar; beginDouble("r", RHS); "Raebis (r)"; caret; endchar; beginDouble("E", LHS); "Eshi (E)"; caret; endchar; beginSingle("b", RHS); "Bigh (b)"; tail; dot; endchar; beginSingle("s", LHS); "Sami (s)"; tail; dot; endchar; beginSingle("m", RHS); "Meiz (m)"; bar; endchar; beginSingle("i", LHS); "Ivun (i)"; bar; endchar; beginDouble("x", RHS); "Ghal (x)"; hook; endchar; beginDouble("z", LHS); "Zajhai (z)"; hook; endchar; beginSingle("l", RHS); "Lud (l)"; loop; endchar; beginSingle("o", LHS); "Ogei (o)"; loop; endchar; beginSingle("Z", RHS); "Jheiln (Z)"; barCaret; endchar; beginSingle("A", LHS); "Aida (A)"; barCaret; endchar; beginDouble("v", RHS); "Veife (v)"; loop; endchar; beginDouble("L", LHS); "Lni (L)"; loop; endchar; beginSingle("d", RHS); "Dapi (d)"; loop; dot; endchar; beginSingle("f", LHS); "Faigo (f)"; loop; dot; endchar; beginSingle("p", RHS); "Pash (p)"; barDot; endchar; beginSingle("g", LHS); "Geith (g)"; barDot; endchar; beginDouble("S", RHS); "Shudh (S)"; longTail; endchar; beginDouble("T", LHS); "Thi'och (T)"; longTail; endchar; beginSingle("D", RHS); "Dhaje (D)"; loop; caret; endchar; beginSingle("O", LHS); "Olne (O)"; loop; caret; endchar; beginchar("'", 3/8em#, ex#, 0); "E'o (')"; pickup mainPen; draw (w/2, 3/10h)..(w/2, 7/10h); endchar; beginchar("M", 4/8em#, ex#, 0); "Mlokml (M)"; pickup mainPen; draw (1/3w, 3/10h)..(1/3w, 7/10h); draw (2/3w, 3/10h)..(2/3w, 7/10h); endchar; beginDouble("C", RHS); "Cheinu (C)"; longTail; caret; endchar; beginDouble("j", RHS); "Jimigh (j)"; loop; caret; endchar; beginSingle("á", LHS); "Aejirith Ajo (a-acute)"; strong; endchar; beginDouble("é", LHS); "Aejirith Eichai (e-acute)"; strong; endchar; beginSingle("ú", LHS); "Aejirith Udhi (u-acute)"; tail; strong; endchar; beginSingle("Í", LHS); "Aejirith Ithe (I-acute)"; strongCaret; endchar; beginDouble("É", LHS); "Aejirith Eshi (E-acute)"; caret; strong; endchar; beginSingle("í", LHS); "Aejirith Ivun (i-acute)"; strongBar; endchar; beginSingle("ó", LHS); "Aejirith Ogei (o-acute)"; loop; strong; endchar; beginSingle("Ó", LHS); "Aejirith Olne (O-acute)"; loop; strongCaret; endchar; beginchar(" ", em#, ex#, 0); "( )"; endchar; beginchar(",", 9/8em#, ex#, 0); "(,)"; pickup mainPen; z1 = (3/8em, 8/10h); z2 = (7/8em, h/2); z3 = (3/8em, 2/10h); draw z1..z2; draw z2..z3; labels(range 1 thru 3); endchar; beginchar(".", 9/8em#, ex#, 0); "(.)"; pickup mainPen; z1 = (7/8em, 8/10h); z2 = (3/8em, h/2); z3 = (7/8em, 2/10h); draw z1..z2; draw z2..z3; labels(range 1 thru 3); endchar; beginchar("!", 12/8em#, ex#, 0); "(!)"; pickup mainPen; z1 = (7/8em, 8/10h); z2 = (3/8em, h/2); z3 = (7/8em, 2/10h); z4 = (10/8em, 8/10h); z5 = (6/8em, h/2); z6 = (10/8em, 2/10h); draw z1..z2; draw z2..z3; draw z4..z5; draw z5..z6; labels(range 1 thru 6); endchar; end