%PDF- %PDF-
| Direktori : /proc/self/root/data/old/usr/share/texlive/texmf-dist/fonts/source/public/mnsymbol/ |
| Current File : //proc/self/root/data/old/usr/share/texlive/texmf-dist/fonts/source/public/mnsymbol/Sym-Delim.mf |
% brackets
def draw_bracket(expr sign, thick, draw_top, draw_mid, draw_bot, draw_double) =
penpos0(thick, 90 - sign * 90);
penpos1(thick, 90 - sign * 90);
penpos2(3/2thick, 90);
penpos3(1/2thick, 90);
penpos4(3/2thick, 90);
penpos5(1/2thick, 90);
penpos6(1/2thick, 0);
penpos7(1/2thick, 0);
x3 - x2 = x5 - x4 = sign * (w - 2side_bearing); % - 2u + thick);
1/2[x2,x3] = w/2 + sign * 1/2u;
if draw_top:
y1 = h;
else:
y1 = h + 1/3rule_thickness;
fi;
if draw_bot:
y0 = -d;
else:
y0 = -d - 1/3rule_thickness;
fi;
x1 = x0;
z6 = 1/3[z2l,z3l] + sign * thick * dir 0;
z7 = 1/3[z4r,z5r] + sign * thick * dir 0;
y2l = y3l;
y4r = y5r;
z2l = z0l;
z4r = z1l;
if draw_mid:
fill stroke z0e -- z1e;
else:
if draw_bot: fill stroke z0e -- 1/4[z0e,z1e]; fi;
if draw_top: fill stroke 3/4[z0e,z1e] -- z1e; fi;
fi;
if draw_top: fill stroke z4e .. {sign * dir 0}z5e; fi;
if draw_bot: fill stroke z2e .. {sign * dir 0}z3e; fi;
if draw_double: fill stroke z6e -- z7e; fi;
enddef;
lsquare_char = current_char + 1;
rsquare_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "square bracket";
draw_bracket(sign, 5/4rule_thickness * sqrt (scale/2), true, true, true, false);
endchar;
endfor;
endfor;
lfloor_char = current_char + 1;
rfloor_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "floor";
draw_bracket(sign, 5/4rule_thickness * sqrt (scale/2), false, true, true, false);
endchar;
endfor;
endfor;
lceil_char = current_char + 1;
rceil_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "ceiling";
draw_bracket(sign, 5/4rule_thickness * sqrt (scale/2), true, true, false, false);
endchar;
endfor;
endfor;
ulcorner_char = current_char + 1;
urcorner_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "upper corner";
draw_bracket(sign, 5/4rule_thickness * sqrt (scale/2), true, false, false, false);
endchar;
endfor;
endfor;
charlist urcorner_char: urcorner_char + 1: urcorner_char + 2: urcorner_char + 3: urcorner_char + 4;
charlist ulcorner_char: ulcorner_char + 1: ulcorner_char + 2: ulcorner_char + 3: ulcorner_char + 4;
llcorner_char = current_char + 1;
lrcorner_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "lower corner";
draw_bracket(sign, 5/4rule_thickness * sqrt (scale/2), false, false, true, false);
endchar;
endfor;
endfor;
charlist lrcorner_char: lrcorner_char + 1: lrcorner_char + 2: lrcorner_char + 3: lrcorner_char + 4;
charlist llcorner_char: llcorner_char + 1: llcorner_char + 2: llcorner_char + 3: llcorner_char + 4;
ullcorner_char = current_char + 1;
ulrcorner_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "upper/lower corner";
draw_bracket(sign, 5/4rule_thickness * sqrt (scale/2), true, false, true, false);
endchar;
endfor;
endfor;
charlist ulrcorner_char: ulrcorner_char + 1: ulrcorner_char + 2: ulrcorner_char + 3: ulrcorner_char + 4;
charlist ullcorner_char: ullcorner_char + 1: ullcorner_char + 2: ullcorner_char + 3: ullcorner_char + 4;
for sign = 1, -1:
beginsymbol((6 + 6)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "square bracket -- top";
draw_bracket(sign, 5/4rule_thickness * sqrt (6/2), true, true, false, false);
endchar;
endfor;
for sign = 1, -1:
beginsymbol((6 + 6)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "square bracket -- bot";
draw_bracket(sign, 5/4rule_thickness * sqrt (6/2), false, true, true, false);
endchar;
endfor;
for sign = 1, -1:
beginsymbol((6 + 6)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "square bracket -- module";
draw_bracket(sign, 5/4rule_thickness * sqrt (6/2), false, true, false, false);
endchar;
endfor;
extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right square bracket
extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left square bracket
extensible current_char - 2: 0, 0, current_char - 2, current_char; %right floor
extensible current_char - 3: 0, 0, current_char - 3, current_char - 1; %left floor
extensible current_char - 4: current_char - 4, 0, 0, current_char; %right ceiling
extensible current_char - 5: current_char - 5, 0, 0, current_char - 1; %left ceiling
charlist rsquare_char: rsquare_char + 1: rsquare_char + 2: rsquare_char + 3: rsquare_char + 4: current_char;
charlist lsquare_char: lsquare_char + 1: lsquare_char + 2: lsquare_char + 3: lsquare_char + 4: current_char - 1;
charlist rfloor_char: rfloor_char + 1: rfloor_char + 2: rfloor_char + 3: rfloor_char + 4: current_char - 2;
charlist lfloor_char: lfloor_char + 1: lfloor_char + 2: lfloor_char + 3: lfloor_char + 4: current_char - 3;
charlist rceil_char: rceil_char + 1: rceil_char + 2: rceil_char + 3: rceil_char + 4: current_char - 4;
charlist lceil_char: lceil_char + 1: lceil_char + 2: lceil_char + 3: lceil_char + 4: current_char - 5;
% semantic brackets
lsem_char = current_char + 1;
rsem_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 8)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "semantic bracket";
draw_bracket(sign, rule_thickness * sqrt (scale/2), true, true, true, true);
endchar;
endfor;
endfor;
for sign = 1, -1:
beginsymbol((6 + 8)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "semantic bracket -- top";
draw_bracket(sign, 5/4rule_thickness * sqrt (6/2), true, true, false, true);
endchar;
endfor;
for sign = 1, -1:
beginsymbol((6 + 8)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "semantic bracket -- bot";
draw_bracket(sign, 5/4rule_thickness * sqrt (6/2), false, true, true, true);
endchar;
endfor;
for sign = 1, -1:
beginsymbol((6 + 8)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "semantic bracket -- module";
draw_bracket(sign, 5/4rule_thickness * sqrt (6/2), false, true, false, true);
endchar;
endfor;
extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right semanic bracket
extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left semanic bracket
extensible current_char - 2: 0, 0, current_char - 2, current_char; %right semanic floor
extensible current_char - 3: 0, 0, current_char - 3, current_char - 1; %left semanic floor
extensible current_char - 4: current_char - 4, 0, 0, current_char; %right semanic ceiling
extensible current_char - 5: current_char - 5, 0, 0, current_char - 1; %left semanic ceiling
charlist rsem_char: rsem_char + 1: rsem_char + 2: rsem_char + 3: rsem_char + 4: current_char;
charlist lsem_char: lsem_char + 1: lsem_char + 2: lsem_char + 3: lsem_char + 4: current_char - 1;
beginsymbol(6/2 * u# + 2side_bearing#, vcentre(1/2delim_height#)); "vertical bar -- module";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
pickup pencircle scaled 1/12thick;
penpos2 (thick, 0);
penpos3 (thick, 0);
x2 = x3 = w/2;
top y2 = h + 1/3rule_thickness;
bot y3 = -d - 1/3rule_thickness;
filldraw stroke z2e -- z3e;
endchar;
extensible current_char: 0, 0, 0, current_char; % vertical bar
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol(scale/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "vertical bar";
thick := 5/8rule_thickness * sqrt scale;
pickup pencircle scaled 1/12thick;
penpos2 (thick, 0);
penpos3 (thick, 0);
x2 = x3 = w/2;
top y2 = h;
bot y3 = -d;
filldraw stroke z2e -- z3e;
endchar;
endfor;
charlist current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char:
current_char - 5;
beginsymbol((5.1 + 8)/2 * u# + 2side_bearing#, vcentre(1/2delim_height#));
"double vertical bar -- module";
thick := 3/8rule_thickness * sqrt 5.1;
pickup pencircle scaled 1/12thick;
penpos0 (thick, 0);
penpos1 (thick, 0);
penpos2 (thick, 0);
penpos3 (thick, 0);
x0 = x1;
x2 = x3;
1/2[x0,x2] = w/2;
x2 - x0 = 4thick;
top y0 = top y2 = h + 1/3rule_thickness;
bot y1 = bot y3 = -d - 1/3rule_thickness;
filldraw stroke z0e -- z1e;
filldraw stroke z2e -- z3e;
endchar;
extensible current_char: 0, 0, 0, current_char; % double vertical line
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 8)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "double vertical bar";
thick := 4/8rule_thickness * sqrt scale;
pickup pencircle scaled 1/12thick;
penpos0 (thick, 0);
penpos1 (thick, 0);
penpos2 (thick, 0);
penpos3 (thick, 0);
x0 = x1;
x2 = x3;
1/2[x0,x2] = w/2;
x2 - x0 = 4thick;
top y0 = top y2 = h;
bot y1 = bot y3 = -d;
filldraw stroke z0e -- z1e;
filldraw stroke z2e -- z3e;
endchar;
endfor;
charlist current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char:
current_char - 5;
beginsymbol(5u# + 2side_bearing#, vcentre(delim_height#)); "wavy line";
thick := rule_thickness;
pickup pencircle scaled thick;
x0 = x1 = x2 = x3 = w/2;
1/2[y0,y1] = h;
1/2[y2,y3] = -d;
y2 - y1 = y1 - y0 = y3 - y2;
draw (subpath (0.5,2.5) of
(z0{dir (270-30)}
.. {dir (270+30)}z1{dir (270+30)}
.. {dir (270-30)}z2{dir (270-30)}
.. {dir (270+30)}z3));
endchar;
extensible current_char: 0, 0, 0, current_char;
beginsymbol(8u# + 2side_bearing#, vcentre(delim_height#)); "double wavy line";
thick := rule_thickness;
pickup pencircle scaled thick;
x0a = x1a = x2a = x3a = 1/3w;
x0b = x1b = x2b = x3b = 2/3w;
1/2[y0a,y1a] = 1/2[y0b,y1b] = h;
1/2[y2a,y3a] = 1/2[y2b,y3b] = -d;
y2a - y1a = y1a - y0a = y3a - y2a;
y2b - y1b = y1b - y0b = y3b - y2b;
draw (subpath (0.5,2.5) of
(z0a{dir (270-30)}
.. {dir (270+30)}z1a{dir (270+30)}
.. {dir (270-30)}z2a{dir (270-30)}
.. {dir (270+30)}z3a));
draw (subpath (0.5,2.5) of
(z0b{dir (270-30)}
.. {dir (270+30)}z1b{dir (270+30)}
.. {dir (270-30)}z2b{dir (270-30)}
.. {dir (270+30)}z3b));
endchar;
extensible current_char: 0, 0, 0, current_char;
def draw_angle(suffix $)(expr shift, sign, thick) =
pickup pencircle scaled (7/8thick);
x0$ = x1$ = x2$ + sign * (w - 2side_bearing - 2abs shift - thick);
x3$ = x2$ + sign * 3/8thick;
top y1$ = h;
bot y0$ = -d;
1/2[y0$,y1$] = y2$ = y3$;
1/2[x0$,x2$] = w/2;
draw (z0$ + shift * right) -- (z2$ + shift * right) -- (z1$ + shift * right) -- (z3$ + shift * right) -- cycle;
enddef;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "angle";
draw_angle(a, 0, sign, 7/8rule_thickness * sqrt scale);
endchar;
endfor;
charlist current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
endfor;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "angle bar";
draw_angle(a, 0, sign, 7/8rule_thickness * sqrt scale);
z3 = whatever[z0a,z2a];
z4 = whatever[z1a,z2a];
x3 = x4 = (1/(2*scale))[x0a,x2a];
pickup pencircle scaled (11/25rule_thickness * sqrt scale);
draw z3 -- z4;
endchar;
endfor;
charlist current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
endfor;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 6)/2 * u# + 5/2rule_thickness# * sqrt scale + 2side_bearing#,
vcentre(scale * delim_height#));
"double angle";
thick := 5/8rule_thickness * sqrt scale;
draw_angle(a, -2thick, sign, thick);
draw_angle(b, 2thick, sign, thick);
endchar;
endfor;
charlist current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
endfor;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol(3scale * u# + side_bearing#, vcentre(scale * delim_height#)); "slash";
thick := 5/4rule_thickness * sqrt (scale/2);
pickup pencircle scaled thick;
x1 - x0 = sign * (w - side_bearing - thick);
top y1 = h;
bot y0 = -d;
1/2[x0,x1] = w/2;
draw z0 -- z1;
endchar;
endfor;
charlist current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
endfor;
def draw_paren(expr sign, thick) =
penpos0(1/2thick, 90 - sign * 40);
penpos1(1/2thick, -90 + sign * 40);
penpos2(4/3thick, 90 - sign * 90);
x0 = x1 = x2 + sign * (w - 2side_bearing - thick);
top y1l = h;
bot y0l = -d;
1/2[y0,y1] = y2;
1/2[x0l,x2l] = w/2;
fill stroke z0e{3(x2e - x0e), y2e - y0e} .. z2e .. {3(x1e - x2e), y1e - y2e}z1e;
penlabels(0,1,2);
enddef;
lparen_char = current_char + 1;
rparen_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol(2/3*(scale + 5.5) * u# + 2side_bearing#, vcentre(scale * delim_height#)); "parenthesis";
draw_paren(sign, 9/20rule_thickness * sqrt (4*scale));
endchar;
endfor;
endfor;
% extensible parenthesis
for sign = 1, -1:
beginsymbol(2/3*(6 + 5.5) * u# + 2side_bearing#, vcentre(6/2 * delim_height#)); "parenthesis -- top";
thick := 9/20rule_thickness * sqrt 24;
penpos1(1/2thick, -90 + sign * 40);
penpos2(4/3thick, 90 - sign * 90);
x1 = x2 + sign * (w - 2side_bearing - thick);
top y1l = h + eps;
y2 = -d - 1/2rule_thickness;
1/2[x1l,x2l] = w/2;
fill stroke z2e{up} .. {3(x1e - x2e), y1e - y2e}z1e;
endchar;
endfor;
for sign = 1, -1:
beginsymbol(2/3*(6 + 5.5) * u# + 2side_bearing#, vcentre(6/2 * delim_height#)); "parenthesis -- bot";
thick := 9/20rule_thickness * sqrt 24;
penpos0(1/2thick, 90 - sign * 40);
penpos2(4/3thick, 90 - sign * 90);
x0 = x2 + sign * (w - 2side_bearing - thick);
y2 = h + 1/2rule_thickness;
bot y0l = -d - eps;
1/2[x0l,x2l] = w/2;
fill stroke z0e{3(x2e - x0e), y2e - y0e} .. {up}z2e;
endchar;
endfor;
for sign = 1, -1:
beginsymbol(2/3*(6 + 5.5) * u# + 2side_bearing#, vcentre(delim_height#)); "parenthesis -- module";
thick := 9/20rule_thickness * sqrt 24;
penpos1(1/2thick, 90 - sign * 40);
penpos2(4/3thick, 90 - sign * 90);
penpos3(4/3thick, 90 - sign * 90);
x2 = x3 = x1 - sign * (w - 2side_bearing - thick);
y2 = h + 1/2rule_thickness;
y3 = -d - 1/2rule_thickness;
1/2[x1l,x2l] = w/2;
fill stroke z2e -- z3e;
endchar;
endfor;
extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right parenthesis
extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left parenthesis
charlist rparen_char: rparen_char + 1: rparen_char + 2: rparen_char + 3: rparen_char + 4: current_char;
charlist lparen_char: lparen_char + 1: lparen_char + 2: lparen_char + 3: lparen_char + 4: current_char - 1;
% curly braces
def draw_brace_tip(suffix $,@)(expr alpha,thick) =
pickup pencircle scaled 1/12thick;
penpos$ (1/2thick, alpha);
penpos$'(1/2thick, alpha);
penpos@ (thick, alpha);
penpos@'(thick, alpha);
beta := angle (5(x$l-x@l), y$-y@) - alpha;
filldraw z$l{-dir (alpha + beta)} ... z@l --- z@'l -- z@'r
--- z@r ... {dir (alpha + beta)}z$'r -- z$r -- cycle;
enddef;
def draw_brace(expr center, size, width, alpha, thick, top_size, mid_size, bot_size) =
pickup pencircle scaled 1/12thick;
penpos1 (1/2thick, alpha);
penpos1'(1/2thick, alpha);
penpos4 (1/2thick, alpha);
penpos4'(1/2thick, alpha);
penpos7 (1/2thick, alpha);
penpos7'(1/2thick, alpha);
penpos2 (thick, alpha);
penpos2'(thick, alpha);
penpos3 (thick, alpha);
penpos3'(thick, alpha);
penpos5 (thick, alpha);
penpos5'(thick, alpha);
penpos6 (thick, alpha);
penpos6'(thick, alpha);
z1 - z7 = (size - 1/6thick) * dir (alpha + 90);
center - 1/2[z1l,z7l] = 1/2[z4r,z4'r] - center = width/2 * dir alpha;
z2 = center + whatever * dir (alpha + 90);
z3 = center + whatever * dir (alpha + 90);
z3' = center + (mid_size/2 + 1/2rule_thickness) * dir (alpha + 90);
z5' = center - (mid_size/2 + 1/2rule_thickness) * dir (alpha + 90);
z2' = center + (size/2 - top_size - 1/2rule_thickness) * dir (alpha + 90);
z6' = center - (size/2 - bot_size - 1/2rule_thickness) * dir (alpha + 90);
1/2[z2,z6] = 1/2[z3,z5] = center;
z2 - z3 = z5 - z6 = 5/24(size - 1/3thick) * dir (alpha + 90);
z1 - z2 = z3 - z4;
z7 - z6 = z5 - z4';
z1 - z1' = z4 - z4' = z7' - z7 = 1/4thick * dir (alpha + 90);
beta := angle (5 (z1l-z2l) dotprod dir alpha, (z1l-z2l) dotprod dir (alpha+90));
if top_size > 0:
filldraw z1r{-dir (alpha + beta)} ... z2r --- z2'r -- z2'l
--- z2l ... {dir (alpha + beta)}z1'l -- z1l -- cycle;
penlabels(1,2,2');
elseif bot_size > 0:
filldraw
z6'r --- z6r ... {dir (alpha - beta)}z7r
-- z7l -- z7'l{-dir (alpha - beta)} ... z6l --- z6'l -- cycle;
penlabels(6',6,7);
elseif mid_size > 0:
filldraw z3'r --- z3r{dir (alpha-90)} ... {dir alpha}z4r
-- z4'r{-dir alpha} ... {dir (alpha-90)}z5r --- z5'r -- z5'l --- z5l{dir (alpha+90)}
... {dir alpha}1/2[z4l, z4'l]{-dir alpha}
... {dir (alpha+90)}z3l --- z3'l -- cycle;
penlabels(3',3,4,5,5');
else:
filldraw z1r{-dir (alpha + beta)} ... z2r --- z3r{dir (alpha-90)} ... {dir alpha}z4r
-- z4'r{-dir alpha} ... {dir (alpha-90)}z5r --- z6r ... {dir (alpha - beta)}z7r
-- z7l -- z7'l{-dir (alpha - beta)} ... z6l --- z5l{dir (alpha+90)}
... {dir alpha}1/2[z4l, z4'l]{-dir alpha}
... {dir (alpha+90)}z3l --- z2l ... {dir (alpha + beta)}z1'l -- z1l -- cycle;
penlabels(1,2,3,4,5,6,7);
fi;
enddef;
lcurly_char = current_char + 1;
rcurly_char = current_char + 6;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((scale + 10)/2 * u# + 2side_bearing#, vcentre(scale * delim_height#)); "curly brace";
thick := 5/4rule_thickness * sqrt sqrt (scale/2);
draw_brace((w/2, (h-d)/2), h+d, w - 2side_bearing, 90 + sign * 90, thick, 0, 0, 0)
endchar;
endfor;
endfor;
beginsymbol((6 + 10)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "curly brace -- top";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w/2, h - 3delim_height), 6delim_height, w - 2side_bearing, 180, thick, 0, 0, h+d);
endchar;
beginsymbol((6 + 10)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "curly brace -- top";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w/2, h - 3delim_height), 6delim_height, w - 2side_bearing, 0, thick, h+d, 0, 0);
endchar;
beginsymbol((6 + 10)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "curly brace -- bot";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w/2, 3delim_height - d), 6delim_height, w - 2side_bearing, 180, thick, h+d, 0, 0)
endchar;
beginsymbol((6 + 10)/2 * u# + 2side_bearing#, vcentre(delim_height#)); "curly brace -- bot";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
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 + 10)/2 * u# + 2side_bearing#, vcentre(2delim_height#)); "curly brace -- middle";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w/2, (h-d)/2), 6delim_height, w - 2side_bearing, 90 + sign * 90, thick, 0, h+d, 0);
endchar;
endfor;
beginsymbol((6 + 10)/2 * u# + 2side_bearing#, vcentre(1/2delim_height#)); "curly brace -- module";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
pickup pencircle scaled 1/12thick;
penpos2 (thick, 0);
penpos3 (thick, 0);
x2 = x3 = w/2;
top y2 = h + 1/2rule_thickness;
bot y3 = -d - 1/2rule_thickness;
filldraw stroke z2e -- z3e;
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 - 4: current_char - 5, 0, current_char - 4, current_char; %right moustache
extensible current_char - 3: current_char - 6, 0, current_char - 3, current_char; %left 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 rcurly_char: rcurly_char + 1: rcurly_char + 2: rcurly_char + 3: rcurly_char + 4: current_char - 1;
charlist lcurly_char: lcurly_char + 1: lcurly_char + 2: lcurly_char + 3: lcurly_char + 4: current_char - 2;
for sign = 1, -1:
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol(scale * delim_height#, vcentre((scale + 10)/2 * u# + 2side_bearing#));
"horizontal curly brace";
thick := 5/4rule_thickness * sqrt sqrt (scale/2);
draw_brace((w/2, (h-d)/2), w, (h+d) - 2side_bearing, sign * 90, thick, 0, 0, 0)
endchar;
endfor;
endfor;
beginsymbol(delim_height#, vcentre((6 + 10)/2 * u# + 2side_bearing#)); "curly brace -- left";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((3delim_height, (h-d)/2), 6delim_height, (h+d) - 2side_bearing, 90, thick, w, 0, 0);
endchar;
beginsymbol(delim_height#, vcentre((6 + 10)/2 * u# + 2side_bearing#)); "curly brace -- left";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((3delim_height, (h-d)/2), 6delim_height, (h+d) - 2side_bearing, -90, thick, 0, 0, w);
endchar;
beginsymbol(delim_height#, vcentre((6 + 10)/2 * u# + 2side_bearing#)); "curly brace -- right";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w - 3delim_height, (h-d)/2), 6delim_height, (h+d) - 2side_bearing, 90, thick, 0, 0, w);
endchar;
beginsymbol(delim_height#, vcentre((6 + 10)/2 * u# + 2side_bearing#)); "curly brace -- right";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w - 3delim_height, (h-d)/2), 6delim_height, (h+d) - 2side_bearing, -90, thick, w, 0, 0);
endchar;
for sign = 1, -1:
beginsymbol(2delim_height#, vcentre((6 + 10)/2 * u# + 2side_bearing#));
"curly brace -- horizontal middle";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
draw_brace((w/2, (h-d)/2), 6delim_height, (h+d) - 2side_bearing, sign * 90, thick, 0, w, 0);
endchar;
endfor;
beginsymbol(u#, vcentre((6 + 10)/2 * u# + 2side_bearing#));
"curly brace -- horizontal module";
thick := 5/4rule_thickness * sqrt sqrt (6/2);
pickup pencircle scaled 1/12thick;
penpos1 (thick, 90);
penpos2 (thick, 90);
x1 = -u/2;
x2 = w + u/2;
y1 = y2 = (h-d)/2;
filldraw stroke z1e -- z2e;
endchar;
% roots
def draw_root_top(expr scale, thick, vertical) =
pickup pencircle scaled thick;
top y0 = h;
x0 = w;
bot y1 = -d;
if vertical:
x1 = 6/9w;
draw z0 -- (x1, y0) -- z1;
else:
x1 = 4/9w;
draw z0 -- z1;
fi;
enddef;
def draw_root_bot(expr scale, thick, vertical) =
penpos2(3/2thick, 0);
penpos3(thick, 0);
x2l = 1/9w;
y2 = 1/2[y0, y1];
x3 = x1;
bot y3 = -d;
z4 = whatever[z0, z1] = z2r + whatever * (z2l - z3l);
penpos5(1/2thick, angle (z3l - z2l));
z5l = z2r + 5/2thick * dir (angle (z3l - z2l) - 90);
z6 = whatever[z2l, z3l] = z5r + whatever * dir (angle (z3l - z2l) - 90);
fill z5r -- z6 -- z3l -- z3 -- z4 -- z2r -- z5l -- cycle;
enddef;
root_char = current_char + 1;
for scale = 2, 2.5, 3.3, 4.2, 5.1:
beginsymbol((2scale + 10) * u# + side_bearing#,
sqrt (scale/2) * rule_thickness#,
scale * delim_height# - sqrt (scale/2) * rule_thickness#);
"root";
draw_root_top(scale, sqrt (scale/2) * rule_thickness, false);
draw_root_bot(scale, sqrt (scale/2) * rule_thickness, false);
labels(0,1,2,3,4,5,6);
endchar;
endfor;
beginsymbol((12 + 10) * u# + side_bearing#,
sqrt (6/2) * rule_thickness#,
delim_height# - sqrt (6/2) * rule_thickness#);
"root -- top";
thick := vround (sqrt (6/2) * rule_thickness# * hppp);
draw_root_top(6, thick, true);
endchar;
beginsymbol((12 + 10) * u# + side_bearing#, 0, 3 * delim_height#);
"root -- bottom";
thick := vround (sqrt (6/2) * rule_thickness# * hppp);
pickup pencircle scaled thick;
x0 = x1 = 6/9w;
bot y0 = d;
bot y1 = -d;
draw 1/2[z0, z1] -- z1;
draw_root_bot(6, thick, true);
endchar;
beginsymbol((12 + 10) * u# + side_bearing#, vcentre(delim_height#));
"root -- module";
thick := vround (sqrt (6/2) * rule_thickness# * hppp);
pickup pencircle scaled thick;
x0 = x1 = 6/9w;
y0 = h;
y1 = -d;
draw z0 -- z1;
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: current_char - 2;
% reserve space for accents
current_char := 212;
for arrow_dir = 90, 270:
beginsymbol(8u# + 2side_bearing#, vcentre(delim_height#)); "arrow up/down";
pickup rule_pen;
pair foot, head;
if arrow_dir = 90:
head = (w/2, h);
foot = (w/2, -d);
else:
head = (w/2, -d);
foot = (w/2, h);
fi;
draw foot -- head;
draw arrowhead(head, arrow_dir, arrow_spread);
endchar;
endfor;
beginsymbol(8u# + 2side_bearing#, vcentre(delim_height#)); "arrow module";
pickup rule_pen;
z0 = (w/2, h + 1/2rule_thickness);
z1 = (w/2, -d - 1/2rule_thickness);
draw z0 -- z1;
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(8u# + 2side_bearing#, vcentre(delim_height#)); "double arrow up/down";
pickup rule_pen;
pair foot, head;
if arrow_dir = 90:
head = (w/2, h);
foot = (w/2, -d);
else:
head = (w/2, -d);
foot = (w/2, h);
fi;
z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90);
1/2[z0,z1] = foot - 1/2rule_thickness * dir arrow_dir;
1/2[z2,z3] = head;
draw z0 -- arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z0 -- z2);
draw z1 -- arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z1 -- z3);
draw arrowhead(head, arrow_dir, 13/10arrow_spread);
endchar;
endfor;
beginsymbol(8u# + 2side_bearing#, vcentre(delim_height#)); "double arrow module";
pickup rule_pen;
z1 - z0 = z3 - z2 = equal_spread * right;
1/2[z0,z1] = (w/2, h + 1/2rule_thickness);
1/2[z2,z3] = (w/2, -d - 1/2rule_thickness);
draw z0 -- z2;
draw z1 -- z3;
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;