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/elvish/tengmacs.mf |
Initial commit
Diffstat (limited to 'fonts/elvish/tengmacs.mf')
-rw-r--r-- | fonts/elvish/tengmacs.mf | 221 |
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 ; |