summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf')
-rw-r--r--Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf129
1 files changed, 71 insertions, 58 deletions
diff --git a/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf b/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
index 51dd7970f31..7c5b193d3d0 100644
--- a/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
+++ b/Master/texmf-dist/fonts/source/public/fdsymbol/fdbase.mf
@@ -10,7 +10,7 @@ design_size := 10;
font_size design_size * pt#;
if known ps_output:
- font_version := "1.002";
+ font_version := "1.003";
font_comment := "Copyright (c) 2011, Michael Ummels. This Font Software is licensed under the SIL Open Font License, Version 1.1.";
fi
@@ -161,11 +161,12 @@ def beginorder(expr sign, width, spread) =
right_point := centre + sign * (w/2 - side_bearing - line_thickness/2) * right;
enddef;
+% Make strokes run anti-clockwise
vardef stroke text t =
forsuffixes e = l, r:
path_.e := t;
endfor
- path_.l -- reverse path_.r -- cycle
+ path_.r -- reverse path_.l -- cycle
enddef;
% Shapes
@@ -211,18 +212,20 @@ enddef;
% Draw macros
def draw_straight(expr orig, dest, thick, extend) =
- pair p[].l, p[].r;
-
- theta := angle (dest - orig);
- if extend:
- 1/2[p1.l,p1.r] = orig - 1/2thick * dir theta;
- 1/2[p2.l,p2.r] = dest + 1/2thick * dir theta;
- else:
- 1/2[p1.l,p1.r] = orig;
- 1/2[p2.l,p2.r] = dest;
- fi
- p1.l - p1.r = p2.l - p2.r = thick * dir (theta + 90);
- fill p1.l -- p2.l -- p2.r -- p1.r -- cycle;
+ begingroup;
+ pair p[].l, p[].r;
+
+ theta := angle (dest - orig);
+ if extend:
+ 1/2[p1.l,p1.r] = orig - 1/2thick * dir theta;
+ 1/2[p2.l,p2.r] = dest + 1/2thick * dir theta;
+ else:
+ 1/2[p1.l,p1.r] = orig;
+ 1/2[p2.l,p2.r] = dest;
+ fi
+ p1.l - p1.r = p2.l - p2.r = thick * dir (theta + 90);
+ fill stroke p1.e -- p2.e;
+ endgroup;
enddef;
def draw_line(expr orig, dest, extend) =
@@ -410,8 +413,8 @@ def draw_smile(suffix $)(expr sign, lc, rc, spread, thick, round) =
if round:
penpos2$(thick, angle(rc - lc) + sign * 90);
- fill stroke z0$.e{dir (angle(rc - lc) - sign * theta)} ..
- {rc - lc}z2$.e{rc - lc} .. {dir (angle(rc - lc) + sign * theta)}z1$.e;
+ fill stroke z0$.e{dir (angle(rc - lc) - sign * theta)} ..
+ {rc - lc}z2$.e{rc - lc} .. {dir (angle(rc - lc) + sign * theta)}z1$.e;
else:
penpos2$(thick / cosd theta, angle(rc - lc) + sign * 90);
@@ -421,14 +424,18 @@ def draw_smile(suffix $)(expr sign, lc, rc, spread, thick, round) =
penlabels(0$, 1$, 2$);
enddef;
-def stroke_through(expr pos, spread) =
+def stroke_through_angle(expr pos, spread, angle) =
begingroup;
- stroke_len := 1/2spread / cosd 15;
+ stroke_len := 1/2spread / cosd (90 - angle);
- draw_straight(pos + stroke_len * dir 75, pos - stroke_len * dir 75, stroke_through_thickness, true);
+ draw_straight(pos + stroke_len * dir angle, pos - stroke_len * dir angle, stroke_through_thickness, true);
endgroup;
enddef;
+def stroke_through(expr pos, spread) =
+ stroke_through_angle(pos, spread, 75);
+enddef;
+
def stroke_through_arrow(expr pos, alpha, spread)(text angles) =
begingroup;
stroke_dir := arrow_dir + select(alpha/45)(angles);
@@ -467,7 +474,7 @@ def draw_product(expr centre, width, height, sign, thick) =
x10 = x6r;
x11 = x7l;
- fill z0l -- z0r{dir (sign * 20)} .. {sign * up}z6l -- z8l{sign * up} .. {dir (180 - sign * 15)}z2l -- z2r -- z3r -- z3l{dir (180 + sign * 15)} .. {sign * down}z9r -- z7r{sign * down} .. {dir (-sign * 20)}z1r -- z1l -- z5l -- z5r{dir (sign * 20)} .. {sign * up}z7l -- z11 -- z10 -- z6r{sign * down} .. {dir (-sign * 20)}z4r -- z4l -- cycle;
+ fill z0l -- z4l -- z4r{dir (sign * 160)} .. {sign * up}z6r -- z10 -- z11 -- z7l{sign * down} .. {dir (-sign * 160)}z5r -- z5l -- z1l -- z1r{dir (sign * 160)} .. {sign * up}z7r -- z9r{sign * up} .. {dir (sign * 15)}z3l -- z3r -- z2r -- z2l{dir (-sign * 15)} .. {sign * down}z8l -- z6l{sign * down} .. {dir (-sign * 160)}z0r -- cycle;
penlabels(0,1,2,3,4,5,6,7,8,9,10,11);
enddef;
@@ -555,51 +562,57 @@ def draw_integral(suffix $)(expr scale, centre, thick) =
enddef;
def draw_arrowhead_left(expr pos, angle, spread, thick) =
- pair p[], p[].l, p[].r;
-
- p1 = pos;
- p2 = pos + sqrt(2) * (spread + 1/2thick)/2 * dir (angle + 135);
- 1/2[p1.l, p1.r] = p1;
- 1/2[p2.l, p2.r] = p2;
- p1.r - p1 = thick/(2 * sind 45) * dir angle;
- p2.r - p2 = thick/2 * dir (angle + 45);
- p3.l = whatever[p2.l,p1.l];
- p3.l = pos + 1/2thick * dir (angle - 90) + whatever * dir angle;
- p3.r - p1.r = whatever * dir (angle - 105);
- p3.r = pos + 1/2thick * dir (angle - 90) + whatever * dir angle;
- fill p1.r -- p2.r -- p2.l -- p3.l -- p3.r -- cycle;
+ begingroup;
+ pair p[], p[].l, p[].r;
+
+ p1 = pos;
+ p2 = pos + sqrt(2) * (spread + 1/2thick)/2 * dir (angle + 135);
+ 1/2[p1.l, p1.r] = p1;
+ 1/2[p2.l, p2.r] = p2;
+ p1.r - p1 = thick/(2 * sind 45) * dir angle;
+ p2.r - p2 = thick/2 * dir (angle + 45);
+ p3.l = whatever[p2.l,p1.l];
+ p3.l = pos + 1/2thick * dir (angle - 90) + whatever * dir angle;
+ p3.r - p1.r = whatever * dir (angle - 105);
+ p3.r = pos + 1/2thick * dir (angle - 90) + whatever * dir angle;
+ fill p1.r -- p2.r -- p2.l -- p3.l -- p3.r -- cycle;
+ endgroup;
enddef;
def draw_arrowhead_right(expr pos, angle, spread, thick) =
- pair p[], p[].l, p[].r;
-
- p1 = pos;
- p2 = pos + sqrt(2) * (spread + 1/2thick)/2 * dir (angle - 135);
- 1/2[p1.l, p1.r] = p1;
- 1/2[p2.l, p2.r] = p2;
- p1.r - p1 = thick/(2 * sind 45) * dir angle;
- p2.r - p2 = thick/2 * dir (angle - 45);
- p3.l = whatever[p2.l,p1.l];
- p3.l = pos + 1/2thick * dir (angle + 90) + whatever * dir angle;
- p3.r - p1.r = whatever * dir (angle + 105);
- p3.r = pos + 1/2thick * dir (angle + 90) + whatever * dir angle;
- fill p1.r -- p2.r -- p2.l -- p3.l -- p3.r -- cycle;
+ begingroup;
+ pair p[], p[].l, p[].r;
+
+ p1 = pos;
+ p2 = pos + sqrt(2) * (spread + 1/2thick)/2 * dir (angle - 135);
+ 1/2[p1.l, p1.r] = p1;
+ 1/2[p2.l, p2.r] = p2;
+ p1.r - p1 = thick/(2 * sind 45) * dir angle;
+ p2.r - p2 = thick/2 * dir (angle - 45);
+ p3.l = whatever[p2.l,p1.l];
+ p3.l = pos + 1/2thick * dir (angle + 90) + whatever * dir angle;
+ p3.r - p1.r = whatever * dir (angle + 105);
+ p3.r = pos + 1/2thick * dir (angle + 90) + whatever * dir angle;
+ fill p1.r -- p3.r -- p3.l -- p2.l -- p2.r -- cycle;
+ endgroup;
enddef;
def draw_arrowhead(expr pos, angle, spread, thick) =
- pair p[], p[].l, p[].r;
+ begingroup;
+ pair p[], p[].l, p[].r;
- p1 = pos;
- p2 = pos + sqrt(2) * spread/2 * dir (angle + 135);
- p3 = pos + sqrt(2) * spread/2 * dir (angle - 135);
- 1/2[p1.l, p1.r] = p1;
- 1/2[p2.l, p2.r] = p2;
- 1/2[p3.l, p3.r] = p3;
- p1.r - p1 = thick/(2 * sind 45) * dir angle;
- p2.r - p2 = thick/2 * dir (angle + 45);
- p3.r - p3 = thick/2 * dir (angle - 45);
-
- fill p1.r -- p2.r -- p2.l -- p1.l -- p3.l -- p3.r -- cycle;
+ p1 = pos;
+ p2 = pos + sqrt(2) * spread/2 * dir (angle + 135);
+ p3 = pos + sqrt(2) * spread/2 * dir (angle - 135);
+ 1/2[p1.l, p1.r] = p1;
+ 1/2[p2.l, p2.r] = p2;
+ 1/2[p3.l, p3.r] = p3;
+ p1.r - p1 = thick/(2 * sind 45) * dir angle;
+ p2.r - p2 = thick/2 * dir (angle + 45);
+ p3.r - p3 = thick/2 * dir (angle - 45);
+
+ fill p1.r -- p2.r -- p2.l -- p1.l -- p3.l -- p3.r -- cycle;
+ endgroup;
enddef;
% intersect the arrowhead curve with a path