% -*- Fundamental -*- fet_begingroup ("accordion") accreg_dot_size# := .5 staff_space#; accreg_linethickness# := 1.3 stafflinethickness#; % % This dimension is the same for all register symbols. % The different symbols should calculate their other % dimensions from this and accreg_dot_size. % accreg_lh# := 1.0 staff_space#; define_pixels (accreg_dot_size, accreg_linethickness, accreg_lh); fet_beginchar ("accDiscant", "accDiscant") save r, p; path p; r# = 3/2 accreg_lh#; define_pixels (r); set_char_box (r#, r#, 0, 2 r#); penpos1 (accreg_linethickness, 0); penpos2 (0.7 accreg_linethickness, 90); penpos3 (accreg_linethickness, 180); penpos4 (0.7 accreg_linethickness, 270); z1 = (r, r); z2 = (0, 2 r); z3 = (-r, r); z4 = (0, 0); penlabels (1, 2, 3, 4); penstroke z1e .. z2e .. z3e .. z4e .. cycle; p := z4{right} .. z1{up} .. {left}z2; z5 = p intersectionpoint ((0, 4/3 r) -- (r, 4/3 r)); z6 = z5 xscaled -1; z7 = p intersectionpoint ((0, 2/3 r) -- (r, 2/3 r)); z8 = z7 xscaled -1; labels (5, 6, 7, 8); pickup penrazor scaled 0.7 accreg_linethickness rotated 90; draw z5 -- z6; draw z7 -- z8; fet_endchar; fet_beginchar ("accDot", "accDot") set_char_box (accreg_dot_size#, accreg_dot_size#, 0, 0); pickup pencircle scaled accreg_dot_size; drawdot (0, 0); fet_endchar; fet_beginchar ("accFreebase", "accFreebase") save r, p; path p; r# = accreg_lh#; define_pixels (r); set_char_box (r#, r#, 0, 2 r#); penpos1 (accreg_linethickness, 0); penpos2 (0.7 accreg_linethickness, 90); penpos3 (accreg_linethickness, 180); penpos4 (0.7 accreg_linethickness, 270); z1 = (r, r); z2 = (0, 2 r); z3 = (-r, r); z4 = (0, 0); penlabels (1, 2, 3, 4); penstroke z1e .. z2e .. z3e .. z4e .. cycle; pickup penrazor scaled 0.7 accreg_linethickness rotated 90; draw z1 -- z3; fet_endchar; fet_beginchar ("accStdbase", "accStdbase") save r, p; path p; r# = 2 accreg_lh#; define_pixels (r); set_char_box (r#, r#, 0, 2 r#); penpos1 (accreg_linethickness, 0); penpos2 (0.7 accreg_linethickness, 90); penpos3 (accreg_linethickness, 180); penpos4 (0.7 accreg_linethickness, 270); z1 = (r, r); z2 = (0, 2 r); z3 = (-r, r); z4 = (0, 0); penlabels (1, 2, 3, 4); penstroke z1e .. z2e .. z3e .. z4e .. cycle; p := z4{right} .. z1{up} .. {left}z2; z5 = p intersectionpoint ((0, 3/2 r) -- (r, 3/2 r)); z6 = z5 xscaled -1; z7 = p intersectionpoint ((0, 1/2 r) -- (r, 1/2 r)); z8 = z7 xscaled -1; labels (5, 6, 7, 8); pickup penrazor scaled 0.7 accreg_linethickness rotated 90; draw z1 -- z3; draw z5 -- z6; draw z7 -- z8; fet_endchar; fet_beginchar ("accBayanbase", "accBayanbase") save lh; lh = accreg_lh; set_char_box (accreg_lh#, accreg_lh#, 0, 3 accreg_lh#); draw_gridline ((-w, 0), (w, 0), accreg_linethickness); draw_gridline ((-w, lh),(w, lh), accreg_linethickness); draw_gridline ((-w, 2 lh), (w, 2 lh), accreg_linethickness); draw_gridline ((-w, 3 lh), (w, 3 lh), accreg_linethickness); draw_gridline ((-w, 0), (-w, 3 lh), accreg_linethickness); draw_gridline ((w, 0), (w, 3 lh), accreg_linethickness); fet_endchar; def def_B (expr w, h) = pickup pencircle scaled 0.15 linethickness; penpos10 (thin, -90); penpos11 (thin, -90); penpos12 (thick, 0); penpos13 (thin, 90); penpos14 (thin, 90); penpos15 (thick, 180); penpos16 (thin, -90); penpos17 (thin, -90); penpos18 (thick, 0); penpos19 (thick, 0); z10 = (0, 0); z11 = (cOne * w, 0); z12 = (w, .5 mb * h); z13 = (cTwo * w, mb * h); z14 = (2 thick, mb * h); z15 = (.94 w, h - .5 mt * h); z16 = z13 + (0, mt * h); z17 = (0, h); z18 = (1.5 thick, 0); z19 = (1.5 thick, h); enddef; def def_S (expr w, h) = pickup pencircle scaled 0.03 linethickness; penpos1 (thin, 180); penpos2 (thin, -90); penpos3 (thick, 0); penpos4 (.5 thick, 90); penpos5 (thick, 0); penpos6 (thin, -90); penpos7 (thin, 180); penpos8 (thin, 180); penpos9 (thin, 0); z1 = (0, hs); z2 = (w / 2, 0); z3 = (w - .5 thick, .5 mb * h); z4 = (w / 2, mb * h); z5 = (.5 thick, h - .5 mt * h); z6 = (w / 2, h); z7 = (w, h - hs); z8 = (0, y2r); z9 = (w, y6l); path bue, bueoverst; bue := z2{left} .. z1{up}; t := xpart (bue intersectiontimes (z8l -- z7l)); bueoverst := z6{right} .. z7{down}; enddef; def def_some_vars = save hs, mb, mt, thin, thick, height, width, cOne, cTwo; save bx, hx; width = .8 (4 staff_space); height = 2.4 staff_space; % URG. smaller sizes should be wider and fatter % thin = 0.05 staff_space; % thick = 0.2 staff_space; 4 hx + bx = 1.15; 10 hx + bx = 1; fatten := designsize * hx + bx * 1.2; thick := 0.2 staff_space * fatten; % urg: mustn't ever go thinner than blot! thin# := blot_diameter#; define_pixels (thin); hs = 0.4 staff_space; mb = .53; mt = .47; cOne = 0.65; cTwo = 0.60; enddef; fet_beginchar ("accOldEE", "accOldEE") save pp; set_char_box (staff_space#, staff_space#, 0, 2 staff_space#); r = staff_space; lr = .4 staff_space - linethickness; ir = .6 staff_space; z1 = (0, 0); z2 = (0, ir); penpos1 (blot_diameter, 0); penpos2 (.05 staff_space + .5 linethickness + blot_diameter, 0); pickup pencircle scaled (lr + blot_diameter); for pp := 0 step 45 until 360: drawdot (0, 0) shifted (ir * (dir pp)); penstroke (z1e -- z2e) rotated pp; endfor; penpos3 (accreg_linethickness, 0); penpos4 (0.7 accreg_linethickness, 90); penpos5 (accreg_linethickness, 180); penpos6 (0.7 accreg_linethickness, 270); z3 = (r, 0); z4 = (0, r); z5 = (-r, 0); z6 = (0, -r); % penlabels (1, 2, 3, 4, 5, 6); penstroke z3e .. z4e .. z5e .. z6e .. cycle; pickup pencircle scaled lr; drawdot (0, 0); currentpicture := currentpicture shifted (0, r); fet_endchar; fet_endgroup ("accordion")