diff options
author | Karl Berry <karl@freefriends.org> | 2012-01-08 23:44:27 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-01-08 23:44:27 +0000 |
commit | d487196d52642a2836e18354e8af3041c22087d2 (patch) | |
tree | 13bd36563f1fe5c014544f3818f47a031d3c05f6 /Master/texmf-dist/fonts/source/public/mdsymbol/mddelims.mf | |
parent | 98f7514790cc7e98bbd3f58e62557f72daa435b5 (diff) |
new font package mdsymbol (8jan12)
git-svn-id: svn://tug.org/texlive/trunk@25049 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/mdsymbol/mddelims.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/mdsymbol/mddelims.mf | 600 |
1 files changed, 600 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/mdsymbol/mddelims.mf b/Master/texmf-dist/fonts/source/public/mdsymbol/mddelims.mf new file mode 100644 index 00000000000..1038ca0b110 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/mdsymbol/mddelims.mf @@ -0,0 +1,600 @@ +% +% Copyright (c) 2011, Sebastian Schubert <schubert.seb@googlemail.com> +% +% This Font Software is licensed under the SIL Open Font License, +% Version 1.1. This license is in the accompanying file OFL.txt, and +% is also available with a FAQ at: http://scripts.sil.org/OFL +% + +% thickness factor for delimiters +def dthick(expr scale) = +%option 1: make symbols thicker with scale +% sqrt sqrt scale +%option 2: keep same thickness + 1 +enddef; + +% parenthesis + +lparen_char = current_char + 1; +rparen_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 2.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "parenthesis"; + draw_paren(sign, dthick(scale) * line_thickness); + endchar; + endfor; +endfor; + +for sign = 1, -1: + beginsymbol((6 + 4.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(3delim_height#)); "parenthesis -- top"; + thick := dthick(3) * line_thickness; + + penpos1(thick, -90 + sign * 90); + penpos2(1.1thick, 90 - sign * 90); + penpos2'(1.1thick, 90 - sign * 90); + + if sign = 1: + x2l = side_bearing; + x1r = w - side_bearing; + else: + x1r = side_bearing; + x2l = w - side_bearing; + fi + x2 = x2'; + y1 = h; + y2 = -d + 1/2line_thickness; + y2' = -d - 1/2line_thickness; + + fill stroke z2'.e -- z2e{up} ... z1e; + + penlabels(1,2,2'); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol((6 + 4.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(3delim_height#)); "parenthesis -- bot"; + thick := dthick(3) * line_thickness; + + penpos0(thick, 90 - sign * 90); + penpos2(1.1thick, 90 - sign * 90); + penpos2'(1.1thick, 90 - sign * 90); + + if sign = 1: + x2l = side_bearing; + x0r = w - side_bearing; + else: + x0r = side_bearing; + x2l = w - side_bearing; + fi + x2 = x2'; + y2 = h - 1/2line_thickness; + y2' = h + 1/2line_thickness; + y0 = -d; + + fill stroke z0e ... {up}z2e -- z2'.e; + + penlabels(1,2,2'); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol((6 + 4.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "parenthesis -- module"; + thick := dthick(3) * line_thickness; + + penpos2(1.1thick, 90 - sign * 90); + penpos3(1.1thick, 90 - sign * 90); + + if sign = 1: + x2l = x3l = side_bearing; + else: + x2l = x3l = w - side_bearing; + fi + y2 = h + 1/2line_thickness; + y3 = -d - 1/2line_thickness; + + fill stroke z2e -- z3e; + endchar; +endfor; + +extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left parenthesis +extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right parenthesis + +charlist lparen_char: lparen_char + 1: lparen_char + 2: lparen_char + 3: lparen_char + 4: lparen_char + 5: current_char - 1; +charlist rparen_char: rparen_char + 1: rparen_char + 2: rparen_char + 3: rparen_char + 4: rparen_char + 5: current_char; + +% brackets + +lsquare_char = current_char + 1; +rsquare_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "square bracket"; + draw_bracket(sign, dthick(scale) * line_thickness, true, true, true, false); + endchar; + endfor; +endfor; + +lfloor_char = current_char + 1; +rfloor_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "floor"; + draw_bracket(sign, dthick(scale) * line_thickness, false, true, true, false); + endchar; + endfor; +endfor; + +lceil_char = current_char + 1; +rceil_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "ceiling"; + draw_bracket(sign, dthick(scale) * line_thickness, true, true, false, false); + endchar; + endfor; +endfor; + +ulcorner_char = current_char + 1; +urcorner_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "upper corner"; + draw_bracket(sign, dthick(scale) * line_thickness, true, false, false, false); + endchar; + endfor; +endfor; + +charlist ulcorner_char: ulcorner_char + 1: ulcorner_char + 2: ulcorner_char + 3: ulcorner_char + 4: ulcorner_char + 5; +charlist urcorner_char: urcorner_char + 1: urcorner_char + 2: urcorner_char + 3: urcorner_char + 4: urcorner_char + 5; + +llcorner_char = current_char + 1; +lrcorner_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "lower corner"; + draw_bracket(sign, dthick(scale) * line_thickness, false, false, true, false); + endchar; + endfor; +endfor; + +charlist llcorner_char: llcorner_char + 1: llcorner_char + 2: llcorner_char + 3: llcorner_char + 4: llcorner_char + 5; +charlist lrcorner_char: lrcorner_char + 1: lrcorner_char + 2: lrcorner_char + 3: lrcorner_char + 4: lrcorner_char + 5; + +ullcorner_char = current_char + 1; +ulrcorner_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "upper/lower corner"; + draw_bracket(sign, dthick(scale) * line_thickness, true, false, true, false); + endchar; + endfor; +endfor; + +charlist ullcorner_char: ullcorner_char + 1: ullcorner_char + 2: ullcorner_char + 3: ullcorner_char + 4: ullcorner_char + 5; +charlist ulrcorner_char: ulrcorner_char + 1: ulrcorner_char + 2: ulrcorner_char + 3: ulrcorner_char + 4: ulrcorner_char + 5; + +for sign = 1, -1: + beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "square bracket -- top"; + draw_bracket(sign, dthick(3) * line_thickness, true, true, false, false); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "square bracket -- bot"; + draw_bracket(sign, dthick(3) * line_thickness, false, true, true, false); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "square bracket -- module"; + draw_bracket(sign, dthick(3) * line_thickness, false, true, false, false); + endchar; +endfor; + +extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left square bracket +extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right square bracket +extensible current_char - 3: 0, 0, current_char - 3, current_char - 1; %left floor +extensible current_char - 2: 0, 0, current_char - 2, current_char; %right floor +extensible current_char - 5: current_char - 5, 0, 0, current_char - 1; %left ceiling +extensible current_char - 4: current_char - 4, 0, 0, current_char; %right ceiling + +charlist lsquare_char: lsquare_char + 1: lsquare_char + 2: lsquare_char + 3: lsquare_char + 4: lsquare_char + 5: current_char - 1; +charlist rsquare_char: rsquare_char + 1: rsquare_char + 2: rsquare_char + 3: rsquare_char + 4: rsquare_char + 5: current_char; +charlist lfloor_char: lfloor_char + 1: lfloor_char + 2: lfloor_char + 3: lfloor_char + 4: lfloor_char + 5: current_char - 3; +charlist rfloor_char: rfloor_char + 1: rfloor_char + 2: rfloor_char + 3: rfloor_char + 4: rfloor_char + 5: current_char - 2; +charlist lceil_char: lceil_char + 1: lceil_char + 2: lceil_char + 3: lceil_char + 4: lceil_char + 5: current_char - 5; +charlist rceil_char: rceil_char + 1: rceil_char + 2: rceil_char + 3: rceil_char + 4: rceil_char + 5: current_char - 4; + +% semantic brackets + +lsem_char = current_char + 1; +rsem_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + 2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "semantic bracket"; + draw_bracket(sign, dthick(scale) * line_thickness, true, true, true, true); + endchar; + endfor; +endfor; + +for sign = 1, -1: + beginsymbol(5u# + 2line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "semantic bracket -- top"; + draw_bracket(sign, dthick(3) * line_thickness, true, true, false, true); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol(5u# + 2line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "semantic bracket -- bot"; + draw_bracket(sign, dthick(3) * line_thickness, false, true, true, true); + endchar; +endfor; + +for sign = 1, -1: + beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "semantic bracket -- module"; + draw_bracket(sign, dthick(3) * line_thickness, false, true, false, true); + endchar; +endfor; + +extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left semantic bracket +extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right semantic bracket + +charlist lsem_char: lsem_char + 1: lsem_char + 2: lsem_char + 3: lsem_char + 4: lsem_char + 5: current_char - 1; +charlist rsem_char: rsem_char + 1: rsem_char + 2: rsem_char + 3: rsem_char + 4: rsem_char + 5: current_char; + +% curly braces + +lcurly_char = current_char + 1; +rcurly_char = current_char + 7; +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "curly brace"; + thick := dthick(scale) * line_thickness; + + draw_brace((w/2, (h-d)/2), h + d, w - 2side_bearing, 90 + sign * 90, thick, 0, 0, 0) + endchar; + endfor; +endfor; + +beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- top"; + thick := dthick(3) * line_thickness; + + draw_brace((w/2, h - 3delim_height), 6delim_height, w - 2side_bearing, 180, thick, 0, 0, h + d); +endchar; + +beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- top"; + thick := dthick(3) * line_thickness; + + draw_brace((w/2, h - 3delim_height), 6delim_height, w - 2side_bearing, 0, thick, h + d, 0, 0); +endchar; + +beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- bot"; + thick := dthick(3) * line_thickness; + + draw_brace((w/2, 3delim_height - d), 6delim_height, w - 2side_bearing, 180, thick, h + d, 0, 0) +endchar; + +beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- bot"; + thick := dthick(3) * line_thickness; + + draw_brace((w/2, 3delim_height - d), 6delim_height, w - 2side_bearing, 0, thick, 0, 0, h + d) +endchar; + +for sign = 1, -1: + beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- middle"; + thick := dthick(3) * line_thickness; + + draw_brace((w/2, (h-d)/2), 6delim_height, w - 2side_bearing, 90 + sign * 90, thick, 0, h + d, 0); + endchar; +endfor; + +beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "curly brace -- module"; + thick := dthick(3) * line_thickness; + + x2 = x3 = w/2; + y2 = h + 1/2line_thickness; + y3 = -d - 1/2line_thickness; + + draw_straight(z2, z3, thick, false); +endchar; + +extensible current_char - 6: current_char - 6, 0, current_char - 4, current_char; %sharp left parenthesis +extensible current_char - 5: current_char - 5, 0, current_char - 3, current_char; %sharp right parenthesis +extensible current_char - 3: current_char - 6, 0, current_char - 3, current_char; %left moustache +extensible current_char - 4: current_char - 5, 0, current_char - 4, current_char; %right moustache +extensible current_char - 2: current_char - 6, current_char - 2, current_char - 4, current_char; %left curly brace +extensible current_char - 1: current_char - 5, current_char - 1, current_char - 3, current_char; %right curly brace +extensible current_char: 0, 0, 0, current_char; %vertical line + +charlist lcurly_char: lcurly_char + 1: lcurly_char + 2: lcurly_char + 3: lcurly_char + 4: lcurly_char + 5: current_char - 2; +charlist rcurly_char: rcurly_char + 1: rcurly_char + 2: rcurly_char + 3: rcurly_char + 4: rcurly_char + 5: current_char - 1; + +% angle brackets + +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "angle bracket"; + draw_angle(a, 0, sign, dthick(scale) * line_thickness); + endchar; + endfor; + charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char; +endfor; + +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 8)/2 * u# + 2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "double angle bracket"; + thick := dthick(scale) * line_thickness; + + draw_angle(a, -5/4thick, sign, thick); + draw_angle(b, 5/4thick, sign, thick); + endchar; + endfor; + charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char; +endfor; + +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "angle bracket with dot"; + thick := dthick(scale) * line_thickness; + + draw_angle(a, 0, sign, thick); + + if sign > 0: + x3 = w - side_bearing - 3/4dot_size; + else: + x3 = side_bearing + 3/4dot_size; + fi + y3 = 1/2(h - d); + + fill dot(z3, 3/4dot_size); + endchar; + endfor; + charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char; +endfor; + +% slash + +for sign = 1, -1: + for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol(6scale * u# + line_thickness# + side_bearing#, vcentre(2scale * delim_height#)); "slash"; + x1 - x0 = sign * (w - 2side_bearing - line_thickness); + y1 = h; + y0 = -d; + 1/2[x0,x1] = w/2; + + draw_line_cut(0, 1); + endchar; + endfor; + charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char; +endfor; + +% vertical bars + +for negated = false, true: + for scale = 0.5, 1, 1.2: + beginsymbol(2u# + if negated: 2u# + floor scale * u# else: 0u# fi + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "vertical bar"; + x0 = x1 = w/2; + y0 = h; + y1 = -d; + + draw_line(z0, z1, false); + + if negated: + if scale < 1: theta := 30; else: theta := 45; fi + len := 1/2(4u + floor scale * u) / cosd theta; + + draw_straight(1/2[z0,z1] + len * dir theta, 1/2[z0,z1] - len * dir theta, stroke_through_thickness, true); + fi + endchar; + endfor; +endfor; + +beginsymbol(2u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "vertical bar -- module"; + x0 = x1 = w/2; + y0 = h + 1/2line_thickness; + y1 = -d - 1/2line_thickness; + + draw_line(z0, z1, false); +endchar; + +extensible current_char: 0, 0, 0, current_char; % vertical bar +charlist current_char - 5: current_char - 4: current_char; + +for negated = false, true: + for scale = 0.5, 1, 1.2: + beginsymbol(5u# + if negated: 2u# + floor scale * u# else: 0u# fi + 2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "double vertical bar"; + x0 = x1; + x2 = x3; + 1/2[x0,x2] = w/2; + x2 - x0 = 3u + line_thickness; + y0 = y2 = h; + y1 = y3 = -d; + + draw_line(z0, z1, false); + draw_line(z2, z3, false); + + if negated: + if scale < 1: theta := 30; else: theta := 45; fi + len := 1/2(7u + floor scale * u + line_thickness) / cosd theta; + pair centre; + centre := 1/2[1/2[z0,z1],1/2[z2,z3]]; + + draw_straight(centre + len * dir theta, centre - len * dir theta, stroke_through_thickness, true); + fi + endchar; + endfor; +endfor; + +beginsymbol(5u# + 2line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "double vertical bar -- module"; + x0 = x1; + x2 = x3; + 1/2[x0,x2] = w/2; + x2 - x0 = 3u + line_thickness; + y0 = y2 = h + 1/2line_thickness; + y1 = y3 = -d - 1/2line_thickness; + + draw_line(z0, z1, false); + draw_line(z2, z3, false); +endchar; + +extensible current_char: 0, 0, 0, current_char; % double vertical line +charlist current_char - 5: current_char -4: current_char; + +for scale = 1, 1.2: + beginsymbol(8u# + 3line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "tripe vertical bar"; + x0 = x1; + x2 = x3; + x4 = x5; + 1/2[x0,x4] = w/2; + x2 - x0 = x4 - x2 = 3u + line_thickness; + y0 = y2 = y4 = h; + y1 = y3 = y5 = -d; + + draw_line(z0, z1, false); + draw_line(z2, z3, false); + draw_line(z4, z5, false); + endchar; +endfor; + +beginsymbol(8u# + 3line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "triple vertical bar -- module"; + x0 = x1; + x2 = x3; + x4 = x5; + 1/2[x0,x4] = w/2; + x2 - x0 = x4 - x2 = 3u + line_thickness; + y0 = y2 = y4 = h + 1/2line_thickness; + y1 = y3 = y5 = -d - 1/2line_thickness; + + draw_line(z0, z1, false); + draw_line(z2, z3, false); + draw_line(z4, z5, false); +endchar; + +extensible current_char: 0, 0, 0, current_char; % triple vertical line +charlist current_char - 2: current_char -1: current_char; + +% Arrows + +for arrow_dir = 90, 270: + beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "arrow up/down"; + pair foot, head; + + if arrow_dir = 90: + head = (w/2, h - 1/2line_thickness); + foot = (w/2, -d); + else: + head = (w/2, -d + 1/2line_thickness); + foot = (w/2, h + 1/2line_thickness); + fi; + + draw_line(foot, head, false); + draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness); + endchar; +endfor; + +beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "arrow module"; + z0 = (w/2, h); + z1 = (w/2, -d); + + draw_line(z0, z1, true); +endchar; + +extensible current_char-2: current_char-2, 0, current_char, current_char; +extensible current_char-1: current_char, 0, current_char-1, current_char; +extensible current_char: current_char-2, 0, current_char-1, current_char; + +for arrow_dir = 90, 270: + beginsymbol(7u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "double arrow up/down"; + pair foot, head; + + if arrow_dir = 90: + head = (w/2, h - 1/2line_thickness); + foot = (w/2, -d - 1/2line_thickness); + else: + head = (w/2, -d + 1/2line_thickness); + foot = (w/2, h + 1/2line_thickness); + fi; + + z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90); + 1/2[z0,z1] = foot; + 1/2[z2,z3] = head; + + draw_line(z0, arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z0 -- z2), false); + draw_line(z1, arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z1 -- z3), false); + draw_arrowhead(head, arrow_dir, 13/10arrow_spread, line_thickness); + endchar; +endfor; + +beginsymbol(7u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "double arrow module"; + z1 - z0 = z3 - z2 = equal_spread * right; + 1/2[z0,z1] = (w/2, h); + 1/2[z2,z3] = (w/2, -d); + + draw_line(z0, z2, true); + draw_line(z1, z3, true); +endchar; + +extensible current_char-2: current_char-2, 0, current_char, current_char; +extensible current_char-1: current_char, 0, current_char-1, current_char; +extensible current_char: current_char-2, 0, current_char-1, current_char; + +% horizontal curly braces + +beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- left"; + draw_brace((3delim_height, (h-d)/2), 6delim_height, h + d, 90, line_thickness, w, 0, 0); +endchar; + +beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- left"; + draw_brace((3delim_height, (h-d)/2), 6delim_height, h + d, -90, line_thickness, 0, 0, w); +endchar; + +beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- right"; + draw_brace((w - 3delim_height, (h-d)/2), 6delim_height, h + d, 90, line_thickness, 0, 0, w); +endchar; + +beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- right"; + draw_brace((w - 3delim_height, (h-d)/2), 6delim_height, h + d, -90, line_thickness, w, 0, 0); +endchar; + +for sign = 1, -1: + beginsymbol(delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- middle"; + draw_brace((w/2, (h-d)/2), 6delim_height, h + d, sign * 90, line_thickness, 0, w, 0); + endchar; +endfor; + +beginsymbol(u#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- module"; + y2 = y3 = (h - d)/2; + x2 = -1/2line_thickness; + x3 = w + 1/2line_thickness; + + draw_line(z2, z3, false); +endchar; + +% roots + +root_char = current_char + 1; + +for scale = 1, 1.2, 1.5, 1.8, 2.4, 3: + beginsymbol((4scale + 2) * u# + 3/2line_thickness# + 2side_bearing#, rule_thickness#, 2scale * delim_height# - rule_thickness#); "root"; + draw_root(line_thickness); + endchar; +endfor; + +beginsymbol(14u# + 3/2line_thickness# + 2side_bearing#, rule_thickness#, 1.2delim_height# - rule_thickness#); "root -- top"; + draw_root_top(line_thickness); +endchar; + +beginsymbol(14u# + 3/2line_thickness# + 2side_bearing#, 0, 2.4delim_height#); "root -- bottom"; + draw_root_bot(line_thickness); +endchar; + +beginsymbol(14u# + 3/2line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "root -- module"; + x0 = x1 = 4/9w + 1/2line_thickness; + y0 = h; + y1 = -d; + + draw_line(z0, z1, true); +endchar; + +extensible current_char - 2: current_char - 2, 0, current_char - 1, current_char; +charlist root_char: root_char + 1: root_char + 2: root_char + 3: root_char + 4: root_char + 5: current_char - 2; |