summaryrefslogtreecommitdiff
path: root/fonts/elvish/tengmacs.mf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/elvish/tengmacs.mf
Initial commit
Diffstat (limited to 'fonts/elvish/tengmacs.mf')
-rw-r--r--fonts/elvish/tengmacs.mf221
1 files changed, 221 insertions, 0 deletions
diff --git a/fonts/elvish/tengmacs.mf b/fonts/elvish/tengmacs.mf
new file mode 100644
index 0000000000..b28eb37aa9
--- /dev/null
+++ b/fonts/elvish/tengmacs.mf
@@ -0,0 +1,221 @@
+autorounding := 1 ;
+mode_setup;
+define_pixels(em,asc,desc,ex);
+define_blacker_pixels(penwidth,penthickness) ;
+define_blacker_pixels(tehta_penwidth) ;
+define_corrected_pixels(o);
+define_whole_pixels(straight_sidebar,curve_sidebar) ;
+
+define_pixels(fudge, tinco_width, parma_width, romen_width) ;
+define_pixels(luva_width) ;
+pickup pencircle xscaled penwidth yscaled penthickness rotated penangle;
+main_nib := savepen ;
+pickup pencircle xscaled tehta_penwidth yscaled penthickness rotated penangle;
+tehta_nib := savepen ;
+
+def draw_luva(suffix i,j,k,l)
+ (expr luva_type,bow_stem_y,bow_arch_x,
+ bow_side_y,bow_end_x) =
+ y.i = bow_stem_y * ex ;
+ x.j - x.i = bow_arch_x * (x.k - x.i) ;
+ y.k = (if (luva_type = "calma") or (luva_type = "quesse"): 1 - fi bow_side_y) * ex ;
+ x.l - x.i = bow_end_x * (x.k - x.i) ;
+ numeric x.luva_serif,y.luva_serif ;
+ z.luva_serif = z.l + 0.03em *
+ if luva_type = "tinco": dir 135 else: dir 315 fi ;
+
+ path luva_path ;
+ luva_path = z.i{dir( if (luva_type = "tinco") or (luva_type = "parma"):
+ penangle else: penangle+180 fi)}
+ .. z.j{if (luva_type = "tinco") or (luva_type = "parma"):
+ right else: left fi}
+ .. z.k ..
+ if (luva_type = "parma") or (luva_type = "quesse"): {curl 0.3}z.l
+ else: z.l .. {curl 2}z.luva_serif fi ;
+ draw luva_path ;
+ labels(i,j,k,l)
+ enddef ;
+
+def draw_tinco_luva(suffix i,j,k,l) =
+ % this draws a complete tinco luva, using the four given suffices
+ % for the control points. ALL the information about the control
+ % points is determined within the macro; they are provided only for
+ % information and later use.
+ lft x.i = straight_sidebar ; % intersection with stem
+ top y.j = round(ex + o + tinco_fudge) ; % top
+ rt x.k = round (x.i + luva_width) ; % right
+ bot y.l = 0; % round (- o) ; % bottom, with fudge factor
+ draw_luva(i,j,k,l)("tinco",tp_bow_stem_y,
+ tc_bow_arch_x,
+ tc_bow_side_y,
+ tc_bow_end_x )
+
+ enddef ;
+
+def draw_ando_luva(suffix i,j,k,l,ii,jj,kk,ll) =
+ % this draws a complete ando luva
+ % first bow
+ lft x.i = straight_sidebar ; % intersection with stem
+ top y.j = round(ex + o + tinco_fudge) ; % top
+ rt x.k = round (x.i + luva_width) ; % right
+ bot y.l = round (- o) ; % bottom, with fudge factor
+ draw_luva(i,j,k,l)("tinco",tp_bow_stem_y,
+ tc_bow_arch_x,
+ tc_bow_side_y,
+ tc_bow_end_x ) ;
+ % now the second luva
+ z.second = ( (x.i+pt,y.i) .. (infinity,y.i) ) intersectionpoint luva_path ;
+ x.ii = good.x (xpart z.second) ;
+ y.jj = y.j ;
+ rt x.kk = round (x.ii + luva_width) ; % right
+ y.ll = y.l ;
+ draw_luva(ii,jj,kk,ll)("tinco",tp_bow_stem_y,
+ tc_bow_arch_x,
+ tc_bow_side_y,
+ tc_bow_end_x )
+ enddef ;
+
+def draw_parma_luva(suffix i,j,k,l) =
+ % this draws a complete parma luva
+ lft x.i = straight_sidebar ; % intersection with stem
+ top y.j = round(ex + o) ; % top
+ rt x.k = round (x.i + luva_width) ; % right
+ bot y.l = 0 ;% bottom
+ draw_luva(i,j,k,l)("parma",tp_bow_stem_y,
+ pq_bow_arch_x,
+ pq_bow_side_y,
+ pq_bow_end_x )
+ enddef ;
+
+def draw_umbar_luva(suffix i,j,k,l,ii,jj,kk,ll) =
+ % this draws a complete umbar luva
+ % first bow
+ lft x.i = straight_sidebar ; % intersection with stem
+ top y.j = round(ex + o) ; % top
+ rt x.k = round (x.i + luva_width) ; % right
+ bot y.l = 0 ;% bottom
+ draw_luva(i,j,k,l)("parma",tp_bow_stem_y,
+ pq_bow_arch_x,
+ pq_bow_side_y,
+ pq_bow_end_x ) ;
+ %second bow
+ z.second = ( (x.i+pt,y.i) .. (infinity,y.i) ) intersectionpoint luva_path ;
+ x.ii = good.x (xpart z.second) ;
+ y.jj = y.j ;
+ rt x.kk = round (x.ii + luva_width) ; % right
+ y.ll = y.l ;
+ draw_luva(ii,jj,kk,ll)("parma",tp_bow_stem_y,
+ pq_bow_arch_x,
+ pq_bow_side_y,
+ pq_bow_end_x )
+ enddef ;
+
+def draw_calma_luva(suffix i,j,k,l) =
+ % this draws a complete calma luva
+ rt x.i = w - straight_sidebar ; % intersection with stem
+ y.j = good.y 0 ; % bottom
+ lft x.k = round (x.i - luva_width) ; % left
+ top y.l = round(ex - fudge) ; % top
+ draw_luva(i,j,k,l)("calma",cq_bow_stem_y,
+ tc_bow_arch_x,
+ tc_bow_side_y,
+ tc_bow_end_x )
+ enddef ;
+
+def draw_anga_luva(suffix i,j,k,l,ii,jj,kk,ll) =
+ % this draws a complete anga luva
+ % first bow
+ rt x.i = w - straight_sidebar ; % intersection with stem
+ y.j = good.y 0 ; % bottom
+ lft x.k = round (x.i - luva_width) ; % left
+ top y.l = round(ex - fudge) ; % top
+ draw_luva(i,j,k,l)("calma",cq_bow_stem_y,
+ tc_bow_arch_x,
+ tc_bow_side_y,
+ tc_bow_end_x ) ;
+ % now the second luva
+ z.second = ( (x.i-pt,y.i) .. (-infinity,y.i) ) intersectionpoint luva_path ;
+ x.ii = good.x (xpart z.second) ;
+ y.jj = y.j ;
+ lft x.kk = round (x.ii - luva_width) ; % left
+ y.ll = y.l ;
+ draw_luva(ii,jj,kk,ll)("calma",cq_bow_stem_y,
+ tc_bow_arch_x,
+ tc_bow_side_y,
+ tc_bow_end_x )
+ enddef ;
+
+def draw_quesse_luva(suffix i,j,k,l) =
+ % this draws a complete quesse luva
+ rt x.i = w - straight_sidebar ; % intersection with stem
+ y.j = good.y 0 ; % bottom
+ lft x.k = round (x.i - luva_width) ; % left
+ top y.l = round(ex) ; % top
+ draw_luva(i,j,k,l)("quesse",cq_bow_stem_y,
+ pq_bow_arch_x,
+ pq_bow_side_y,
+ pq_bow_end_x )
+ enddef ;
+
+def draw_ungwe_luva(suffix i,j,k,l,ii,jj,kk,ll) =
+ % this draws a complete ungwe luva
+ % first bow
+ rt x.i = w - straight_sidebar ; % intersection with stem
+ y.j = good.y 0 ; % bottom
+ lft x.k = round (x.i - luva_width) ; % left
+ top y.l = round(ex) ; % top
+ draw_luva(i,j,k,l)("quesse",cq_bow_stem_y,
+ pq_bow_arch_x,
+ pq_bow_side_y,
+ pq_bow_end_x ) ;
+ % second bow
+ z.second = ( (x.i-pt,y.i) .. (-infinity,y.i) ) intersectionpoint luva_path ;
+ x.ii = good.x (xpart z.second) ;
+ y.jj = y.j ;
+ lft x.kk = round (x.ii - luva_width) ; % left
+ y.ll = y.l ;
+ draw_luva(ii,jj,kk,ll)("quesse",cq_bow_stem_y,
+ pq_bow_arch_x,
+ pq_bow_side_y,
+ pq_bow_end_x )
+ enddef ;
+
+
+
+def draw_telco(suffix i,j)(expr serifs) = % serifs = t,b,tb for Top & Bottom
+ z.i.$ = z.i + 0.05em * dir(penangle+180) ;
+ z.i.$$ = z.i + 0.1em * down ;
+ z.j.$ = z.j + 0.05em * dir(penangle) ;
+ z.j.$$ = z.j + 0.1em * up ;
+ draw z.i .. z.j ;
+ if (serifs = "t") or (serifs = "tb"):
+ filldraw z.i -- z.i.${dir(penangle-90)}
+ .. {down}z.i.$$ & z.i.$$ .. z.i & cycle ; fi
+ if (serifs = "b") or (serifs = "tb"):
+ filldraw z.j -- z.j.${dir(penangle+90)}
+ .. {up}z.j.$$ & z.j.$$ .. z.j & cycle ; fi
+ labels(i,j)
+ enddef ;
+
+def draw_bar(suffix i,j)(expr serifs) = % serifs = r,l,rl for Right/Left
+ z.right_serif1 = z.j + 0.04em * left ;
+ z.right_serif2 = z.j + 0.04em * dir penangle ;
+ z.left_serif1 = z.i + 0.04em * right ;
+ z.left_serif2 = z.i + 0.04em * dir(penangle+180) ;
+ draw if (serifs = "l") or (serifs = "rl"):
+ z.left_serif2{dir penangle} .. z.left_serif1 else: z.i fi
+ ---
+ if (serifs = "r") or (serifs = "rl"):
+ z.right_serif1 .. {dir penangle}z.right_serif2 else: z.j fi ;
+labels(i,j)
+ enddef ;
+
+
+def draw_dot(suffix i) =
+ % calculate width of pen
+ numeric penwdth ;
+ 1.1penwdth = (pen_rt - pen_lft) ++ (pen_top - pen_bot) ;
+ z.i.$ = z.i + 1/2penwdth*dir(penangle+90) ;
+ z.i.$$ = z.i + 1/2penwidth*dir(penangle-90) ;
+ draw z.i.$$ -- z.i.$ ; drawdot z.i.$$ ; drawdot z.i.$ ;
+enddef ;