diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/malvern/source/mafigs.mf |
Initial commit
Diffstat (limited to 'fonts/malvern/source/mafigs.mf')
-rw-r--r-- | fonts/malvern/source/mafigs.mf | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/fonts/malvern/source/mafigs.mf b/fonts/malvern/source/mafigs.mf new file mode 100644 index 0000000000..a256f78150 --- /dev/null +++ b/fonts/malvern/source/mafigs.mf @@ -0,0 +1,230 @@ +% mafigs.mf 1.2.0 1994/10/11 -- program file for figures +% Copyright 1991, 1992, 1993 P. Damian Cugley. + +%%% @METAFONT-file { +%%% filename = "mafigs.mf", +%%% version = "1.2.0", +%%% date = "1994/10/11", +%%% package = "Malvern 1.2", +%%% author = "P. Damian Cugley", +%%% email = "damian.cugley@comlab.ox.ac.uk", +%%% address = "Oxford University Computing Laboratory, +%%% Parks Road, Oxford OX1 3QD, UK", +%%% codetable = "USASCII", +%%% keywords = "Malvern, METAFONT, font, typefont, TeX", +%%% supported = "Maybe", +%%% abstract = "Character programs for the Malvern +%%% font family.", +%%% dependencies = "other program files", +%%% } + +% See the Malvern Handbook (maman.tex) for more info about Malvern. +% This software is available freely but without warranty. +% See the file COPYING for details. + +% This file is read in more than once in order to create several sets +% of figures: old-style (`text'), ranging, and maybe superior (superscript) +% and inferior (subscript). To do this several parameters set in +% ma.mf must be set correctly. + +%{{{ mafigs.mf +%{{{ macro to start each character with + +% So that each program can generate `superior' figures as well as +% text and ranging figures, they refer to |fig_b| instead of |-d|. +% For text figures this is set to |-d|. For others it must be set +% before the |input mafigs| command. + +string type_of_figs; +type_of_figs := + if text_figs: "old style" + elseif fig_b > 0: "superior" % footnotes etc. + elseif fig_b < 0: "inferior" + else: "ranging" % fixed width and height + fi; + +if (fig_b > 0) or (fig_ht# < x_ht#) and unknown sfig_pn: + small_figs := true; + pickup pencircle xscaled sfig.pn.wd yscaled sfig.pn.ht; + fig_pn := savepen; +fi + +def ma_fig(expr num)(expr w_sh, h_sh, d_sh) = + type_of_figs & " figure " & char(ASCII"0" + num); + ma_char(fig_offset + num, + if text_figs: w_sh, h_sh, d_sh + else: fig_wd#, fig_ht#, fig_dp# fi) + (1,1); + if text_figs: fig_b := -d; fi + if known fig_pn: pickup fig_pn; fi +enddef; +%}}} + +def hsuper(suffix f, t) = + z.f + ... (1/sqrt2)[(x.f, y.t), (x.t, y.f)]{z.t - z.f} + ... z.t +enddef; + +def vsuper(suffix f, t) = + z.f + ... (1/sqrt2)[(x.t, y.f), (x.f, y.t)]{z.t - z.f} + ... z.t +enddef; + +if testing: endinput; fi + +%{{{ 1 + +% - pdc Mon. 25 Feb. 1991 + +ma_fig(1, 4u#, x_ht#, 0v#); + top z1 = (hround (1/2w + 1/2u), h + o); bot z2 = (x1, fig_b - o); + z0 = z1 + whatever*ne; x0 = x1 - 2u; + draw z0 -- z1 -- z2; + labels(0,1,2); set_ic_tr; +endchar; +%}}} +%{{{ 0 + +ma_fig(0, 8u#, x_ht#, 0v#); + top z1 = (1/2[l,r], h + o); bot z4 = (x1, fig_b - o); + lft x2 = lft x3 = l; rt x0 = rt x5 = r; + if x0 - x2 < y1 - y4: + y2 = y0 = 2/3[1/2[fig_b, h] + eps, y1 - 1/2(x0 - x2)]; + y3 = y5 = 2/3[1/2[fig_b, h] - eps, y4 + 1/2(x0 - x2)]; + draw vsuper(0,1) & hsuper(1,2) --- vsuper(3,4) & hsuper(4,5) --- cycle; + else: + y2 = y0 = 1/2[y4, y1]; + draw superellipse(z0, z1, z2, z4)(1/sqrt2); + fi + labels(1, 2, 3, 4, 5, 0); set_ic_tr; +endchar; + +%}}} +%{{{ 3 & 5 + +def draw_fivthree = + rt z4 = (r, 1/2[y3,y5]); + bot z5 = (0.55[r,l], fig_b - o); + bot lft z6 = (l, good.y (fig_b - o + 1/2v)); + draw z1 -- z2 -- z3 ... hsuper(3',4){down} & vsuper(4,5){left} + & hsuper(5,6); + labels(1,2,3,3',4,5,6) +enddef; + +ma_fig(5, 7.25u#, x_ht#, desc_dp#); + top rt z1 = (good.x 0.8[l,r], h); + top lft z2 = (good.x 0.1[l,r], h); + top y3 + if r - l > 5u: 1/4v else: 1/8v fi = top y3' + = if text_figs: 0.708[fig_b,h] else: 2/3[fig_b,h] fi; + x3 = x2; x3' = x5; + draw_fivthree; +endchar; + +ma_fig(3, 7.25u#, x_ht#, desc_dp#); + top lft z1 = (0.05[l,r], h); top rt z2 = (good.x 0.875[l,r], h); + top y3 if r - l > 6u: + 1/6v fi = top y3' + = if text_figs: 0.683[fig_b,h] else: 2/3[fig_b,h] fi; + x3 = max(1/6[l,r] + 1/2pn.wd, min(0.35[l,r], x2 - (y2 - y3))); + x3' = x5; + draw_fivthree; +endchar; + +%}}} +%{{{ 7 +ma_fig(7, 6.5u#, x_ht#, desc_dp#); + draw bot rt (l,h) -- bot lft (r, h) -- top (good.x 1/3[l,r], fig_b - o); +endchar; +%}}} +%{{{ 4 + +ma_fig(4, 7u#, x_ht#, 2/3desc_dp#) + top y1 = h + o; x1 = good.x 1/3[l,r]; + bot y2 = bot y3 = if text_figs: 0 else: 1/4[fig_b, h] fi; + lft x2 = l; rt x3 = r; + draw z1 -- z2 -- z3; + x4 = x5 = good.x 1/3[r,l]; + top y4 = 2/3[fig_b, h]; + bot y5 = fig_b - o; + draw z4 -- z5; + labels(1,2,3,4,5); +endchar; +%}}} +%{{{ 2 + +ma_fig(2, 6u#, x_ht#, 0v#); + lft x1 = l; top y2 = top y1 + if text_figs: 1.25v else: 1.5v fi = h + o; + rt x3 = rt x7 = r; lft x6 = l; bot y6 = bot y7 = fig_b; + + x2 = x4 = 0.55[r,l]; + y3 = if text_figs: 2/3 else: 0.75 fi [y6, y2]; + y4 = 0.55[y6, y3]; %% if text_figs: 3/8 else: 2/5 fi [y6, y2]; + z5 = z6 + 1/2pn.ht * up; + draw z1 ... hsuper(2,3) + ... z4 ... z5 + ... {(z6 - z4) yscaled 8} z6 -- z7; + labels(1,2,3,4,5,6,7); +endchar; + +%}}} +%{{{ 8 + +ma_fig(8, 8u#, fig_ht#, 0v#); + bot z3bot = (1/2[l,r], fig_b - o); + lft x2bot = l - ho; rt x0bot = r + ho; + x1bot = x3bot = x1top = x3top = 1/2[x2top, x0top]; + y2top = y0top = 1/2[y3top, y1top]; + y2bot = y0bot = 1/2[y3bot, y1bot]; top y1top = h + o; + y1bot = y3top = max(0.55[y3bot, y1top], + min(2/3[y3bot, y1top], y3bot + (x0bot - x2bot))); + x2top = max(rt 1/16[l,r], 1/2[l,r] - + 1/2(y1top - y3top) * max(1, (x0bot - x2bot)/(y1bot - y3bot))); + draw superellipse(z0bot, z1bot, z2bot, z3bot)(1/sqrt2); + draw superellipse(z0top, z1top, z2top, z3top)(1/sqrt2); +endchar; + +%}}} +%{{{ 69 + +% pdc Wed. 27 Feb. 1991 +% tails fixed pdc Tue. 23 Apr. 1991 + +ma_fig(6, 8u#, fig_ht#, 0v#); + lft x2 = l; rt x0 = r + ho; bot y3 = fig_b - o; + y2 = y0 = 1/2[y1, y3]; x1 = x3 = 1/2[x0, x2]; + top z2tail = (1/2[l,r], h + o); + y1 = max(0.55[y3, y2tail], min(3/4[y3, y2tail], y3 + (x0 - x2))); + draw superellipse(z0, z1, z2, z3)(1/sqrt2); + + % try to guess the point on bowl where tail connects: + numeric theta; + theta = angle(y1 - y0, (y2tail - y0) +-+ (y1 - y0)); + z1tail = (x1, y0) + (y1 - y0) * (dir (theta + 90) + xscaled ((x0 - x2)/(y1 - y3))); + draw z1tail -- z2tail; + labels(0, 1, 2, 3, 1tail, 2tail); +endchar; + +ma_fig(9, 8u#, x_ht#, desc_dp#); + lft x2 = l; rt x0 = r + ho; top y1 = h + o; + y2 = y0 = 1/2[y1, y3]; x1 = x3 = 1/2[x0, x2]; + bot z2tail = (1/2[l,r], fig_b - o); + y3 = min(0.55[y1, y2tail], max(3/4[y1, y2tail], y1 - (x0 - x2))); + draw superellipse(z0, z1, z2, z3)(1/sqrt2); + + % try to guess the point on bowl where tail connects: + numeric theta; + theta = angle(y1 - y0, (y0 - y2tail) +-+ (y1 - y0)); + z1tail = (x1, y0) + (y1 - y0) * (dir (theta + 270) + xscaled ((x0 - x2)/(y1 - y3))); + draw z1tail -- z2tail; + labels(0, 1, 2, 3, 1tail, 2tail); +endchar; +%}}} +%}}} + + +% Local variables: +% fold-folded-p: t +% End: |