diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/allrunes/frubase.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/allrunes/frubase.mf | 1611 |
1 files changed, 1611 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/allrunes/frubase.mf b/Master/texmf-dist/fonts/source/public/allrunes/frubase.mf new file mode 100644 index 00000000000..eb839fff06d --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/allrunes/frubase.mf @@ -0,0 +1,1611 @@ +%% +%% This is file `frubase.mf', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% allrunes.dtx (with options: `frubase') +%% +%% +%% Copyright 2001-2004 Carl-Gustav Werner +%% +%% This program is provided under the terms of the +%% LaTeX Project Public License distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +%% +string allrunes ; +allrunes = "2.0" ; +if proofing > 1 : + message "Base file for font `allrunes', version " & allrunes ; +fi +font_identifier:="allrunes"; + +font_size 10pt#; + +mode_setup; + +if mag <= 1: + magadj = 1; + tightness_f=0.0; +elseif mag <= 4: + magadj = 1-(mag-1)/10; + tightness_f=0.0; +else: + magadj = 1-(4-1)/10; + tightness_f=0.01; +fi; + +if loweredbars=true: + topjointrounding=0.3; + topbarred=0.85; +else: + topjointrounding=1.0; + topbarred=1.0; +fi; + +if barshape="straight": + curve_d=0; +elseif barshape="curved": + curve_d=40; +elseif barshape="rounded": + curve_d=90; +fi; + +if withlines=true: + toprounding=1.0; +else: + toprounding=0.3; +fi; + +if boldness="light": + stem_w#=0.4pt#*magadj; + base_width#=3.8pt#; + margin_width#=1.1pt#; +elseif boldness="medium": + stem_w#=0.57pt#*magadj; + base_width#=4pt#; + margin_width#=1.2pt#; +elseif boldness="bold": + stem_w#=0.8pt#*magadj; + base_width#=4.2pt#; + margin_width#=1.2pt#; +fi; + +endrounding=0.3; +jointrounding=1.0; +round_adj_f=0.2; + +circle_w#=0.9*stem_w#; +stem_h#=7pt#; +full_height_f=1; +nib_w#=0.01pt#; + +freedot_f=1.3; +sepdot_f=1.6; +stemdot_f=2.2; +endstemdot_f=1.7; +stemcircle_f=3.2; +endstemcircle_f=2.8; +twig_length_f=3.1; + +define_pixels(nib_w); +define_pixels(stem_h); +define_whole_pixels(stem_w); +define_whole_pixels(circle_w); +define_pixels(margin_width); + +def beginrunechar(expr code, width) = + beginchar(code, width, stem_h#, 0.4*stem_h#); + pickup pencircle scaled nib_w; + if withlines=true: + filldraw barpath( -stem_w/2, 0-stem_w/2, jointrounding, + w+stem_w/2, 0-stem_w/2, jointrounding, 0, 0, 0); + filldraw barpath( -stem_w/2, h+stem_w/2, jointrounding, + w+stem_w/2, h+stem_w/2, jointrounding, 0, 0, 10); + fi +enddef; + +def dotpath (expr x, y, width_f, i) = + fullcircle scaled (width_f*stem_w) shifted (x,y) +enddef; + +def draw_circle (expr x, y, width_f, i) = + pickup pencircle scaled circle_w; + draw fullcircle scaled (width_f*stem_w) shifted (x,y) +enddef; + +def barpath (expr x_start, y_start, start_rounding_f, + x_end, y_end, end_rounding_f, + curve_angle, tightness_f, i) = + begingroup + save dx, dy; + save l; + save xy_angle, a; + save midshift; + save bar_path; + path bar_path; + + dx = x_end-x_start; + dy = y_end-y_start; + l = dx++dy; + xy_angle = angle(dx,dy)-90; + a = curve_angle/2; + if a = 0: midshift=0; + else: midshift = l*(1-cosd a)/(2*sind a);fi + + z[i] = .5stem_w*start_rounding_f*down rotated -a; + z[i+1]l = .5stem_w*((1+round_adj_f*(1-start_rounding_f))*cosd -135, start_rounding_f*sind -135) rotated -a; + z[i+1]r = .5stem_w*((1+round_adj_f*(1-start_rounding_f))*cosd -45, start_rounding_f*sind -45) rotated -a; + .5[z[i+2]r, z[i+2]l] = origin; + z[i+2]r - z[i+2]l = stem_w * dir -a; + .5[z[i+3]r, z[i+3]l] = (midshift, l/2); + z[i+3]r - z[i+3]l = (stem_w*(1-tightness_f), 0); + .5[z[i+4]r, z[i+4]l] = (0, l); + z[i+4]r - z[i+4]l = stem_w * dir a; + z[i+5]l = (.5stem_w*((1+round_adj_f*(1-start_rounding_f))*cosd 135, end_rounding_f*sind 135) rotated a) + (0, l); + z[i+5]r = (.5stem_w*((1+round_adj_f*(1-start_rounding_f))*cosd 45, end_rounding_f*sind 45) rotated a) + (0, l); + z[i+6] = (.5stem_w*end_rounding_f*up rotated a) + (0, l); + + bar_path = z[i]{dir(180-a)}..z[i+1]l..z[i+2]l{dir(90-a)}.. + z[i+3]l{up}..z[i+4]l{dir(90+a)}..z[i+5]l.. + z[i+6]{dir a}..z[i+5]r..z[i+4]r{dir(a-90)}.. + z[i+3]r{down}.. + z[i+2]r{dir(-90-a)}..z[i+1]r.. + cycle; + bar_path rotated xy_angle shifted (x_start, y_start) + endgroup +enddef; + +def draw_arrowhead (expr x_centre, y_centre, arrowhead_w_f, arrowhead_l_f, dir, i) = + save arrowhead_w_adj_f; + save arrowhead_path; + path arrowhead_path; + + if barshape="straight": + arrowhead_w_adj_f=arrowhead_w_f+0.7; + filldraw barpath( 0, -arrowhead_l_f/2*stem_w+stem_w/2, endrounding, + 0, arrowhead_l_f/2*stem_w, endrounding, 0, tightness_f, i) + rotated dir shifted (x_centre, y_centre); + filldraw barpath(-arrowhead_w_adj_f/2*stem_w, -arrowhead_l_f/2*stem_w, endrounding, + arrowhead_w_adj_f/2*stem_w, -arrowhead_l_f/2*stem_w, endrounding, + 0, tightness_f, i+10) + rotated dir shifted (x_centre, y_centre); + elseif barshape="curved": + arrowhead_w_adj_f=arrowhead_w_f; + z[i] =(0,-arrowhead_l_f/2*stem_w*0.92); + z[i+1]l=(-arrowhead_w_adj_f/2*stem_w,-arrowhead_l_f/2*stem_w); + z[i+1]r=( arrowhead_w_adj_f/2*stem_w,-arrowhead_l_f/2*stem_w); + z[i+2]l=(-arrowhead_w_adj_f/4*stem_w*1.4,stem_w/6); + z[i+2]r=( arrowhead_w_adj_f/4*stem_w*1.4,stem_w/6); + z[i+3]l=(-0.4*stem_w,(arrowhead_l_f/2-0.5)*stem_w); + z[i+3]r=( 0.4*stem_w,(arrowhead_l_f/2-0.5)*stem_w); + z[i+4] =(0,arrowhead_l_f/2*stem_w); + arrowhead_path = z[i]{left}..z[i+1]l..z[i+2]l..z[i+3]l{up}.. + z[i+4]{right}..z[i+3]r{down}..z[i+2]r..z[i+1]r..cycle; + filldraw arrowhead_path rotated dir shifted (x_centre, y_centre); + elseif barshape="rounded": + arrowhead_w_adj_f=arrowhead_w_f+0.6; + filldraw barpath( 0, -arrowhead_l_f/2*stem_w+stem_w/2, endrounding, + 0, arrowhead_l_f/2*stem_w, endrounding, 0, tightness_f, i) + rotated dir shifted (x_centre, y_centre); + filldraw dotpath( 0, -arrowhead_l_f/2*stem_w, arrowhead_w_adj_f, i+20) + rotated dir shifted (x_centre, y_centre); + fi; +enddef; + + +def xhalf=(w/2-stem_w/2-margin_width) enddef; + +def xmid=(w/2) enddef; + +def yhalf=(h/2) enddef; + +def ymid=(h/2) enddef; + +def yhalfred=((h*topbarred)/2) enddef; + +def ymidred(expr yd)=(h*((((topbarred/2)-0.5)*yd)+0.5)) enddef; + + +def draw_normal_f(expr rune, xd, yd, highdot, stemdot, twigdot) = + beginrunechar(rune, 1.08*base_width#+2*margin_width#); + save f_ymid_f; + save f_yup_f; + save f_xhighdot_f; + save f_twigdot_f; + save f_twigdotangel_f; + f_ymid_f=0.0; + if highdot: + f_yup_f=0.4; + f_xhighdot_f=0.4; + else: + f_yup_f=0.5; + fi; + if twigdot: + f_twigdot_f=0.52; + f_twigdotangel_f=(if curve_d=0:0 else:(1-cosd(curve_d/2))/(2*sind(curve_d/2)) fi); + fi; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid-yd*f_ymid_f*yhalf, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*f_yup_f*yhalf, jointrounding, + xmid-xd*xhalf+xd*(1-f_yup_f)*yhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 40); + if highdot: + filldraw dotpath(xmid-xd*xhalf+xd*(1-f_yup_f)*yhalf*f_xhighdot_f, ymid+yd*(yhalf-stem_w/2), freedot_f, 50); + fi; + if stemdot: + filldraw dotpath(xmid-xd*xhalf, ymid+yd*yhalf*f_ymid_f+yd*stem_w/3, stemdot_f, 60); + fi; + if twigdot: + filldraw dotpath(xmid+xd*(-1+(1-(-1))*f_twigdot_f+(1-f_ymid_f)*(yhalf/xhalf)*(f_twigdotangel_f))*xhalf, + ymid+yd*(f_ymid_f+(1-f_ymid_f)*f_twigdot_f-(1-(-1))*(xhalf/yhalf)*(f_twigdotangel_f))*yhalf, + stemdot_f, 70); + fi; + endchar; +enddef; + +def draw_medieval_f(expr rune, xd, yd) = + beginrunechar(rune, 1.2*base_width#+2*margin_width#); + save f_ylow_f; + save f_ymid_f; + save f_yup_f; + f_ylow_f=-0.2; + f_ymid_f=0.2; + f_yup_f=0.6; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*f_ylow_f*yhalf, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*f_ymid_f*yhalf, jointrounding, + xmid-xd*xhalf+xd*(1-f_ymid_f)*yhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid+yd*f_yup_f*yhalf, jointrounding, + xmid-xd*xhalf+xd*(1-f_yup_f)*yhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 50); + endchar; +enddef; + +def draw_primitive_f(expr rune, xd, yd) = + beginrunechar(rune, 0.65*base_width#+2*margin_width#); + save f_yraise_f; + save f_ysep_f; + f_yraise_f=0.4; + f_ysep_f=0.54; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(1-f_yraise_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(1-f_yraise_f-f_ysep_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(1-f_ysep_f), toprounding, xd*yd*curve_d, tightness_f, 40); + endchar; +enddef; + +def draw_staveless_f(expr rune, xd, yd, long) = + save end_marker_width_f; + save end_marker_length_f; + end_marker_width_f=1.6; + end_marker_length_f=3.2; + beginrunechar(rune, end_marker_width_f*stem_w#+2*margin_width#); + save f_y_f; + if long: + f_y_f=0.5; + else: + f_y_f=-0.3; + fi; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf*f_y_f, toprounding, 0, tightness_f, 20); + draw_arrowhead(xmid, ymid+yd*yhalf*f_y_f, end_marker_width_f, end_marker_length_f, -180+if yd=-1:180 else:0 fi+if loweredbars:180 else:0 fi, 30); + endchar; +enddef; + +def draw_normal_u(expr rune, xd, yd, tight, marks) = + beginrunechar(rune, topbarred*0.98*base_width#+2*margin_width#); + save u_x_f; + save u_y_f; + save u_curvehigh_f; + save u_curvelow_f; + save y_cross_x_f; + save y_cross_xadj_f; + save y_cross_y_f; + save y_y_bary_f; + save y_y_lbranchy_f; + save y_y_rbranchy_f; + if tight: + u_x_f=0.6; + else: + u_x_f=0.715; + fi; + u_y_f=0.2; + if curve_d > 45: + u_curvelow_f=(1-(curve_d-45)/45)/4; + u_curvehigh_f=1+(1-(curve_d-45)/45)/4; + else: + u_curvelow_f=0.25; + u_curvehigh_f=1.25; + fi; + y_cross_x_f=0.4; + y_cross_xadj_f=0.06; + y_cross_y_f=0.9; + y_y_bary_f=0.15; + y_y_lbranchy_f=0.16; + y_y_rbranchy_f=0.14; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred, jointrounding, + xmid+xd*xhalf*u_x_f, ymidred(yd)+yd*yhalfred*u_y_f, jointrounding, 0-u_curvehigh_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf*u_x_f, ymidred(yd)+yd*yhalfred*u_y_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, -u_curvelow_f*xd*yd*curve_d, tightness_f, 40); + if marks=0: + elseif marks=1: % one dot + filldraw dotpath(xmid-xd*xhalf*0.07, ymidred(yd)-yd*yhalf*0.07, freedot_f, 50); + elseif marks=2: % two dots + filldraw dotpath(xmid-xd*xhalf*0.08, ymidred(yd)+yd*yhalf*0.06, freedot_f, 50); + filldraw dotpath(xmid-xd*xhalf*0.04, ymidred(yd)-yd*yhalf*0.34, freedot_f, 60); + elseif marks=3: % one bar + filldraw barpath(xmid-xd*xhalf*0.08, ymidred(yd)-yd*yhalf*0.06, endrounding, + xmid-xd*xhalf*0.04, ymidred(yd)-yd*yhalf, endrounding, 0, tightness_f, 50); + elseif marks=4: % one x + filldraw barpath(xmid-xd*xhalf*(y_cross_x_f+y_cross_xadj_f), ymid-yd*yhalf*y_cross_y_f, endrounding, + xmid+xd*xhalf*(y_cross_x_f-y_cross_xadj_f), ymid-yd*yhalf*y_cross_y_f+2*yd*xhalf*y_cross_x_f, endrounding, 0, tightness_f, 50); + filldraw barpath(xmid+xd*xhalf*(y_cross_x_f-y_cross_xadj_f), ymid-yd*yhalf*y_cross_y_f, endrounding, + xmid-xd*xhalf*(y_cross_x_f+y_cross_xadj_f), ymid-yd*yhalf*y_cross_y_f+2*yd*xhalf*y_cross_x_f, endrounding, 0, tightness_f, 60); + elseif marks=5: % one y + filldraw barpath(xmid-xd*xhalf*0.08, ymidred(yd)-yd*yhalf*y_y_bary_f, endrounding, + xmid-xd*xhalf*0.04, ymidred(yd)-yd*yhalf, endrounding, 0, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*0.08, ymidred(yd)-yd*yhalf*y_y_bary_f, endrounding, + xmid-xd*xhalf, ymidred(yd)+yd*yhalf*y_y_lbranchy_f, endrounding, 0, tightness_f, 60); + filldraw barpath(xmid-xd*xhalf*0.08, ymidred(yd)-yd*yhalf*y_y_bary_f, endrounding, + xmid+xd*xhalf*u_x_f, ymidred(yd)+yd*yhalf*y_y_rbranchy_f, endrounding, 0, tightness_f, 70); + + fi; + endchar; +enddef; + +def draw_medieval_w(expr rune, xd, yd) = + beginrunechar(rune, topbarred*1.1*base_width#+2*margin_width#); + save u_x_f; + save u_y_f; + save u_yinner_f; + save u_curvehigh_f; + save u_curvelow_f; + u_x_f=0.715; + u_y_f=0.2; + u_yinner_f=0.5; + if curve_d > 45: + u_curvelow_f=(1-(curve_d-45)/45)/4; + u_curvehigh_f=1+(1-(curve_d-45)/45)/3; + else: + u_curvelow_f=0.25; + u_curvehigh_f=1.33; + fi; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred, jointrounding, + xmid+xd*xhalf*u_x_f, ymidred(yd)+yd*yhalfred*u_y_f, jointrounding, 0-u_curvehigh_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf*u_x_f, ymidred(yd)+yd*yhalfred*u_y_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, -u_curvelow_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*u_yinner_f, jointrounding, + xmid-xd*xhalf*(1-(1+u_x_f)/2), ymidred(yd)+yd*yhalfred*u_y_f*(1-2*(1-u_yinner_f)), jointrounding, 0-u_curvehigh_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*(1-(1+u_x_f)/2), ymidred(yd)+yd*yhalfred*u_y_f*(1-2*(1-u_yinner_f)), jointrounding, + xmid, ymid-yd*yhalf, toprounding, -u_curvelow_f*xd*yd*curve_d, tightness_f, 60); + + endchar; +enddef; + +def draw_primitive_U(expr rune, xd, yd, symmetric) = + beginrunechar(rune, topbarred*1.02*base_width#+2*margin_width#); + save U_x_f; + if symmetric: + U_x_f=0; + else: + U_x_f=0.99; + fi; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf*U_x_f, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-((1-topbarred)*(1-U_x_f)+U_x_f)*xd*xhalf, ymidred(yd)+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, 0, tightness_f, 30); + endchar; +enddef; + +def draw_staveless_u(expr rune, xd, yd) = + beginrunechar(rune, 0.6*base_width#+2*margin_width#); + save u_xmid_f; + save u_ytop_f; + save u_ymid_f; + save u_curvehigh_d; + save u_curvelow_d; + u_xmid_f=0.6; + u_ytop_f=0.6; + u_ymid_f=0.15; + u_curvelow_d=25; + u_curvehigh_d=65; + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*u_ytop_f, endrounding, + xmid+xd*xhalf*u_xmid_f, ymid+yd*yhalf*u_ymid_f, jointrounding, -u_curvehigh_d*xd*yd, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf*u_xmid_f, ymid+yd*yhalf*u_ymid_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, -u_curvelow_d*xd*yd, tightness_f, 30); + endchar; +enddef; + +def draw_normal_th(expr rune, xd, yd, big, dot, doubble) = + save th_width_f; + if big: + th_width_f=0.7; + elseif doubble: + th_width_f=0.85; + else: + th_width_f=0.65; + fi; + beginrunechar(rune, th_width_f*base_width#+2*margin_width#); + save th_y_f; + save th_innery_f; + save dot_x; + if big: + th_y_f=1-(1-topbarred)*2; + elseif doubble: + th_y_f=0.7; + th_innery_f=0.3; + else: + th_y_f=0.44; + fi; + dot_x=1/6*(90-xd*yd*curve_d)/90; + + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf*th_y_f, jointrounding, + xmid+xd*xhalf, ymid, jointrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*th_y_f, jointrounding, + xmid+xd*xhalf, ymid, jointrounding, -xd*yd*curve_d, tightness_f, 40); + if doubble: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf*th_innery_f, jointrounding, + xmid, ymid, jointrounding, xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*th_innery_f, jointrounding, + xmid, ymid, jointrounding, -xd*yd*curve_d, tightness_f, 60); + fi; + if dot: + filldraw dotpath(xmid-xd*xhalf*dot_x, ymid, freedot_f, 70); + fi; + endchar; +enddef; + +def draw_staveless_th(expr rune, xd, yd) = + beginrunechar(rune, stem_w#+2*margin_width#); + save th_y_f; + m_y_f=0.44; + filldraw barpath(xmid, ymid-yd*yhalf*m_y_f, endrounding, + xmid, ymid+yd*yhalf*m_y_f, endrounding, 0, tightness_f, 20); + endchar; +enddef; + +def draw_normal_single_A(expr rune, xd, yd, top) = + beginrunechar(rune, 0.6*base_width#+2*margin_width#); + save A_ysep_f; + save A_ydrop_f; + save A_ymid_f; + A_ysep_f=0.26; + A_ydrop_f=0.4; + if top: + A_ymid_f=1-A_ysep_f; + else: + A_ymid_f=0.14; + fi; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(A_ymid_f+A_ysep_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(A_ymid_f+A_ysep_f-A_ydrop_f), endrounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(A_ymid_f-A_ysep_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(A_ymid_f-A_ysep_f-A_ydrop_f), endrounding, 0, tightness_f, 40); + endchar; +enddef; + +def draw_staveless_A(expr rune, xd, yd, pos, down) = + save arrowhead_w_f; + save arrowhead_l_f; + save A_width_f; + save A_dir_d; + arrowhead_w_f=1.6; + arrowhead_l_f=3.2; + if down: + A_dir_d=180; + else: + A_dir_d=-125; + fi; + A_width_f=max(abs(sind(A_dir_d))*arrowhead_l_f, + abs(cosd(A_dir_d))*arrowhead_w_f)*stem_w#/base_width#; + beginrunechar(rune, A_width_f*base_width#+2*margin_width#); + save A_y_f; + A_y_f=0.6; + if pos=1: %high + draw_arrowhead(xmid, ymid+yd*yhalf*A_y_f, arrowhead_w_f, arrowhead_l_f, if yd=1: xd*A_dir_d else: xd*(180-A_dir_d) fi, 20); + elseif pos=2: %mid + draw_arrowhead(xmid, ymid , arrowhead_w_f, arrowhead_l_f, if yd=1: xd*A_dir_d else: xd*(180-A_dir_d) fi, 20); + elseif pos=3: %low + draw_arrowhead(xmid, ymid-yd*yhalf*A_y_f, arrowhead_w_f, arrowhead_l_f, if yd=1: xd*A_dir_d else: xd*(180-A_dir_d) fi, 20); + fi; + endchar; +enddef; + +def draw_anglo_o(expr rune, xd, yd, two) = + beginrunechar(rune, 0.87*base_width#+2*margin_width#); + save A_ysep_f; + save A_ydrop_f; + save A_ymid_f; + save o_x_f; + A_ysep_f=0.26; + A_ydrop_f=0.4; + A_ymid_f=1-A_ysep_f; + o_x_f=0.23; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*(A_ymid_f+A_ysep_f), jointrounding, + xmid+xd*xhalf*o_x_f, ymidred(yd)+yd*yhalfred*(A_ymid_f+A_ysep_f-A_ydrop_f), jointrounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*(A_ymid_f-A_ysep_f), jointrounding, + xmid+xd*xhalf*o_x_f, ymidred(yd)+yd*yhalfred*(A_ymid_f-A_ysep_f-A_ydrop_f), if two: jointrounding else: endrounding fi, 0, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf*o_x_f, ymidred(yd)+yd*yhalfred*(A_ymid_f+A_ysep_f-A_ydrop_f), jointrounding, + xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(A_ymid_f+A_ysep_f), endrounding, 0, tightness_f, 50); + if two: + filldraw barpath(xmid+xd*xhalf*o_x_f, ymidred(yd)+yd*yhalfred*(A_ymid_f-A_ysep_f-A_ydrop_f), jointrounding, + xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(A_ymid_f-A_ysep_f), endrounding, 0, tightness_f, 60); + fi; + endchar; +enddef; + +def draw_normal_double_A(expr rune, xd, yd, three, stlb, sblb) = % Skip Top Left Bar, Skip Bottom Left Bar + beginrunechar(rune, 1.05*base_width#+2*margin_width#); + save A_ysep_f; + save A_ydrop_f; + if three: + A_ysep_f=0.36; + else: + A_ysep_f=0.24; + fi; + A_ydrop_f=0.3; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + if stlb: + filldraw barpath(xmid, ymid+yd*yhalf*(A_ysep_f), endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(A_ysep_f-A_ydrop_f), endrounding, 0, tightness_f, 30); + else: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(A_ysep_f+A_ydrop_f), endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(A_ysep_f-A_ydrop_f), endrounding, 0, tightness_f, 30); + fi; + if three: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(A_ydrop_f), endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(-A_ydrop_f), endrounding, 0, tightness_f, 40); + fi; + if sblb: + filldraw barpath(xmid, ymid+yd*yhalf*(-A_ysep_f), endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(-A_ysep_f-A_ydrop_f), endrounding, 0, tightness_f, 50); + else: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(-A_ysep_f+A_ydrop_f), endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(-A_ysep_f-A_ydrop_f), endrounding, 0, tightness_f, 50); + fi; + endchar; +enddef; + +def draw_normal_r(expr rune, xd, yd, closed, topdot) = + beginrunechar(rune, topbarred*0.92*base_width#+2*margin_width#); + save r_xup_f; + save r_yup_f; + save r_xmid_f; + save r_ymid_f; + save r_curve_f; + r_xup_f=0.78; + r_yup_f=0.36; + if closed: + r_ymid_f=0; + r_xmid_f=0.9; + else: + r_ymid_f=0.06; + r_xmid_f=0.3; + fi; + r_curve_f=0.63+0.37*abs(xd*yd*curve_d-45)/45; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf+xd*1, ymidred(yd)+yd*yhalfred, jointrounding, + xmid+xd*xhalf*r_xup_f, ymidred(yd)+yd*yhalfred*r_yup_f, jointrounding, -r_curve_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf*r_xup_f, ymidred(yd)+yd*yhalfred*r_yup_f, jointrounding, + xmid-xd*xhalf*r_xmid_f, ymidred(yd)-yd*yhalfred*r_ymid_f, jointrounding, -r_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf*r_xmid_f, ymidred(yd)-yd*yhalfred*r_ymid_f, jointrounding, + xmid+xd*xhalf, ymidred(yd)-yd*yhalfred, toprounding, -r_curve_f*xd*yd*curve_d, tightness_f, 50); + if topdot: + filldraw dotpath(xmid-xd*xhalf/3, ymid+yd*yhalfred*(1+r_yup_f+r_ymid_f)/3, freedot_f, 60); + fi; + + endchar; +enddef; + +def draw_greenland_r(expr rune, xd, yd) = + beginrunechar(rune, topbarred*0.92*base_width#+2*margin_width#); + save r_ytopend_f; + save r_ybottomstart_f; + r_ytopend_f=0.0; + r_ybottomstart_f=0.2; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf+xd*1, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred*r_ytopend_f, endrounding, -xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred*r_ybottomstart_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalfred, endrounding, -xd*yd*curve_d, tightness_f, 40); + endchar; +enddef; + +def draw_normal_k(expr rune, xd, yd, topdot, middot, midtwig, two) = + beginrunechar(rune, 0.9*base_width#+2*margin_width#); + save k_ymid_f; + k_ymid_f=0.1; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*k_ymid_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 30); + if two: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf*k_ymid_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, -xd*yd*curve_d, tightness_f, 40); + fi; + if topdot: + filldraw dotpath(xmid-xd*xhalf/3+xd*stem_w/3, ymid+yd*yhalf*(2+k_ymid_f)/3+yd*stem_w/2, freedot_f, 50); + if two: + filldraw dotpath(xmid-xd*xhalf/3+xd*stem_w/3, ymid-yd*yhalf*(2+k_ymid_f)/3-yd*stem_w/2, freedot_f, 60); + fi; + fi; + if middot: + filldraw dotpath(xmid-xd*xhalf, ymid+yd*yhalf*k_ymid_f+yd*stem_w/3, stemdot_f, 70); + fi; + if midtwig: + filldraw barpath(xmid-xd*xhalf-xd*twig_length_f*stem_w/2, ymid+yd*yhalf*k_ymid_f-yd*3*stem_w/2, endrounding, + xmid-xd*xhalf+xd*twig_length_f*stem_w/2, ymid+yd*yhalf*k_ymid_f-yd*3*stem_w/2, endrounding, 0, tightness_f, 80); + fi; + endchar; +enddef; + +def draw_primitive_k(expr rune, xd, yd) = + beginrunechar(rune, 0.72*base_width#+2*margin_width#); + save k_y_f; + k_y_f=0.54; + filldraw barpath(xmid-xd*xhalf, ymid, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf*k_y_f, endrounding, xd*yd*curve_d, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*k_y_f, endrounding, -xd*yd*curve_d, tightness_f, 30); + endchar; +enddef; + +def draw_primitive_kup(expr rune, xd, yd, stem, big) = + beginrunechar(rune, 1.12*base_width#+2*margin_width#); + save k_yupsep_f; + save k_yupmid_f; + if big: + k_yupsep_f=0.4; + k_yupmid_f=0.6; + else: + k_yupsep_f=1/3; + k_yupmid_f=0.0; + fi; + if stem: + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf*(k_yupmid_f-k_yupsep_f), jointrounding, 0, tightness_f, 20); + fi; + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(k_yupmid_f+k_yupsep_f), endrounding, + xmid, ymid+yd*yhalf*(k_yupmid_f-k_yupsep_f), jointrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalf*(k_yupmid_f+k_yupsep_f), endrounding, + xmid, ymid+yd*yhalf*(k_yupmid_f-k_yupsep_f), jointrounding, -xd*yd*curve_d, tightness_f, 40); + endchar; +enddef; + +def draw_primitive_g(expr rune, xd, yd, v_stem, h_angles, eye) = + save g_width_f; + if v_stem: + g_width_f=1.3; + else: + g_width_f=1.1; + fi; + beginrunechar(rune, g_width_f*base_width#+2*margin_width#); + save eye_x_f; + save eye_y_f; + save eye_curve_f; + save h_angle_f; + eye_x_f=0.8 - if mag <= 1: 0; elseif mag <= 2: (mag-1)/5; else: 0.2; fi; + eye_y_f=0.45 - if mag <= 1: 0; elseif mag <= 2: (mag-1)/5; else: 0.2; fi; + eye_curve_f=0.8; + h_angle_f=0.3; + if v_stem: + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + fi; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf, toprounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, 0, tightness_f, 40); + if eye: + filldraw barpath(xmid, ymid+yd*yhalf*eye_y_f, jointrounding, + xmid-xd*xhalf*eye_x_f, ymid, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*eye_x_f, ymid, jointrounding, + xmid, ymid-yd*yhalf*eye_y_f, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 60); + filldraw barpath(xmid, ymid-yd*yhalf*eye_y_f, jointrounding, + xmid+xd*xhalf*eye_x_f, ymid, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 70); + filldraw barpath(xmid+xd*xhalf*eye_x_f, ymid, jointrounding, + xmid, ymid+yd*yhalf*eye_y_f, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 80); + elseif h_angles: + filldraw barpath(xmid-xd*xhalf*h_angle_f, ymid+yd*yhalf*h_angle_f, jointrounding, + xmid-xd*xhalf*eye_x_f, ymid, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*eye_x_f, ymid, jointrounding, + xmid-xd*xhalf*h_angle_f, ymid-yd*yhalf*h_angle_f, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 60); + filldraw barpath(xmid+xd*xhalf*h_angle_f, ymid-yd*yhalf*h_angle_f, jointrounding, + xmid+xd*xhalf*eye_x_f, ymid, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 70); + filldraw barpath(xmid+xd*xhalf*eye_x_f, ymid, jointrounding, + xmid+xd*xhalf*h_angle_f, ymid+yd*yhalf*h_angle_f, jointrounding, eye_curve_f*xd*yd*curve_d, tightness_f, 80); + fi; + endchar; +enddef; + +def draw_primitive_w(expr rune, xd, yd) = + beginrunechar(rune, topbarred*0.7*base_width#+2*margin_width#); + save w_y_f; + w_y_f=0.0; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(1+w_y_f)/2, jointrounding, -xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(1+w_y_f)/2, jointrounding, + xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*w_y_f, jointrounding, -xd*yd*curve_d, tightness_f, 40); + endchar; +enddef; + +def draw_normal_h(expr rune, xd, yd, NWSE, NESW, dot) = + beginrunechar(rune, 0.95*base_width#+2*margin_width#); + save h_y_f; + h_y_f=0.36; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + if NWSE: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*h_y_f, endrounding, + xmid+xd*xhalf, ymid-yd*yhalf*h_y_f, endrounding, 0, tightness_f, 30); + fi; + if NESW: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf*h_y_f, endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*h_y_f, endrounding, 0, tightness_f, 40); + fi; + if dot: + filldraw dotpath(xmid, ymid, stemdot_f, 50); + fi; + endchar; +enddef; + +def draw_medieval_h(expr rune, xd, yd, twigs, offset) = + beginrunechar(rune, 1.2*base_width#+2*margin_width#); + for i=0 step 1 until twigs-1: + filldraw barpath(xmid, ymid, jointrounding, + xmid+xd*xhalf*cosd(i/twigs*360+offset), ymid+yd*xhalf*sind(i/twigs*360+offset), endrounding, 0, tightness_f, 20+i*10); + endfor; + endchar; +enddef; + +def draw_medieval_bigh(expr rune, xd, yd) = + save bigh_twigs_n; + save bigh_offset_d; + bigh_twigs_n=8; + bigh_offset_d=90; + beginrunechar(rune, 1.2*base_width#+2*margin_width#); + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + for i=1 step 1 until bigh_twigs_n/2-1: + filldraw barpath(xmid-xd*xhalf*cosd(i/bigh_twigs_n*360+bigh_offset_d), ymid-yd*xhalf*sind(i/bigh_twigs_n*360+bigh_offset_d), jointrounding, + xmid+xd*xhalf*cosd(i/bigh_twigs_n*360+bigh_offset_d), ymid+yd*xhalf*sind(i/bigh_twigs_n*360+bigh_offset_d), jointrounding, 0, tightness_f, 20+i*10); + endfor; + endchar; +enddef; + +def draw_shorttwig_n(expr rune, xd, yd, middot, sidedot) = + save n_width_f; + if sidedot: + n_width_f=0.75; + else: + n_width_f=0.55; + fi; + beginrunechar(rune,n_width_f*base_width#+2*margin_width#); + save n_ymid_f; + save n_ydrop_f; + save n_xdot_f; + save n_ydot_f; + n_ymid_f=0.0; + n_ydrop_f=0.18; + n_xdot_f=0.17; + n_ydot_f=0.12; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(n_ymid_f+n_ydrop_f), endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(n_ymid_f-n_ydrop_f), endrounding, 0, tightness_f, 30); + + if middot: + filldraw dotpath(xmid-xd*xhalf, ymid+yd*yhalf*(n_ymid_f+n_ydrop_f)-yd*stem_w/3, stemdot_f, 40); + fi; + if sidedot: + filldraw dotpath(xmid-xd*xhalf*n_xdot_f, ymid+yd*yhalf*(n_ymid_f-n_ydrop_f-n_ydot_f), freedot_f, 50); + fi; + endchar; +enddef; + +def draw_primitive_h(expr rune, xd, yd, top, twobars) = + beginrunechar(rune, 1.1*base_width#+2*margin_width#); + save h_ymid_f; + save h_ytop_f; + save h_ysep_f; + h_ymid_f=0.16; + h_ytop_f=0.96; + h_ysep_f=0.16; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 30); + if top: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred*h_ytop_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalfred*h_ytop_f, jointrounding, 0, tightness_f, 40); + else: + if twobars: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(h_ymid_f-h_ysep_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(-h_ymid_f-h_ysep_f), jointrounding, 0, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(h_ymid_f+h_ysep_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(-h_ymid_f+h_ysep_f), jointrounding, 0, tightness_f, 40); + else: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*h_ymid_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf*h_ymid_f, jointrounding, 0, tightness_f, 40); + fi; + fi; + endchar; +enddef; + +def draw_normal_i(expr rune, xd, yd, dot, twig, high, top, twodots, circle) = + save i_width_f; + if twig: + i_width_f=twig_length_f+1; + elseif dot or twodots: + i_width_f=stemdot_f; + elseif circle: + i_width_f=stemcircle_f; + else: + i_width_f=1.0; + fi; + beginrunechar(rune, i_width_f*stem_w#+2*margin_width#); + save i_ystem_f; + save i_ydottwig_f; + if top: + i_ystem_f=0.7; + i_ydottwig_f=0.7; + else: + i_ystem_f=1.0; + if high: + i_ydottwig_f=0.6; + elseif twodots: + i_ydottwig_f=0.3; + else: %mid + i_ydottwig_f=0.0; + fi; + fi; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf*i_ystem_f, toprounding, 0, tightness_f, 20); + if dot: + filldraw dotpath(xmid, ymid+yd*yhalf*i_ydottwig_f, stemdot_f, 30); + elseif twodots: + filldraw dotpath(xmid, ymid+yd*yhalf*i_ydottwig_f, stemdot_f, 30); + filldraw dotpath(xmid, ymid-yd*yhalf*i_ydottwig_f, stemdot_f, 40); + fi; + if twig: + filldraw barpath(xmid-twig_length_f*stem_w/2, ymid+yd*yhalf*i_ydottwig_f, endrounding, + xmid+twig_length_f*stem_w/2, ymid+yd*yhalf*i_ydottwig_f, endrounding, 0, tightness_f, 50); + fi; + if circle: + draw_circle(xmid, ymid+yd*yhalf*i_ydottwig_f, stemcircle_f, 60); + fi; + endchar; +enddef; + +def draw_roek_i(expr rune, xd, yd) = + beginrunechar(rune, 1.3*base_width#+2*margin_width#); + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid+1, ymidred(yd)-yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymidred(yd)-yd*yhalfred/2, jointrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymidred(yd)-yd*yhalfred/2, jointrounding, + xmid, ymid, jointrounding, xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid, ymidred(yd)+yd*yhalfred, jointrounding, + xmid-xd*xhalf, ymidred(yd)+yd*yhalfred/2, jointrounding, xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred/2, jointrounding, + xmid-1, ymid, jointrounding, xd*yd*curve_d, tightness_f, 60); + endchar; +enddef; + +def draw_primitive_j(expr rune, xd, yd) = + beginrunechar(rune, 1.0*base_width#+2*margin_width#); + save j_y_f; + j_y_f=2/9; + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*j_y_f, jointrounding, + xmid, ymid+yd*yhalf*3*j_y_f, endrounding, -xd*yd*curve_d, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*j_y_f, jointrounding, + xmid, ymid-yd*yhalf*j_y_f, endrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf*j_y_f, jointrounding, + xmid, ymid-yd*yhalf*3*j_y_f, endrounding, -xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf*j_y_f, jointrounding, + xmid, ymid+yd*yhalf*j_y_f, endrounding, xd*yd*curve_d, tightness_f, 50); + endchar; +enddef; + +def draw_primitive_jup(expr rune, xd, yd) = + beginrunechar(rune, 1.3*base_width#+2*margin_width#); + save j_yup_f; + j_yup_f=0.50; + filldraw barpath(xmid-xd*xhalf, ymid, endrounding, + xmid-xd*xhalf/3, ymid-yd*yhalf*j_yup_f, jointrounding, xd*yd*curve_d, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf/3, ymid-yd*yhalf*j_yup_f, jointrounding, + xmid+xd*xhalf/3, ymid, endrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf/3, ymid, endrounding, + xmid+xd*xhalf/3, ymid+yd*yhalf*j_yup_f, jointrounding, -xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf/3, ymid+yd*yhalf*j_yup_f, jointrounding, + xmid+xd*xhalf, ymid, endrounding, -xd*yd*curve_d, tightness_f, 50); + endchar; +enddef; + +def draw_anglo_j(expr rune, xd, yd) = + beginrunechar(rune, 1.6*base_width#+2*margin_width#); + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid, endrounding, + xmid+xd*xhalf, ymid, endrounding, 0, tightness_f, 30); + endchar; +enddef; + +def draw_primitive_I(expr rune, xd, yd) = + beginrunechar(rune, topbarred*1.1*base_width#+2*margin_width#); + save I_y_f; + save I_curve_f; + I_y_f=0.48; + I_curve_f=0.25; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*1, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred*I_y_f, endrounding, -I_curve_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*1, ymid-yd*yhalfred, jointrounding, + xmid-xd*xhalf, ymid-yd*yhalfred*I_y_f, endrounding, -I_curve_f*xd*yd*curve_d, tightness_f, 40); + endchar; +enddef; + +def draw_roek_a(expr rune, xd, yd) = + beginrunechar(rune, 0.65*base_width#+2*margin_width#); + save a_y_f; + save a_ycorner_f; + a_y_f=0.16; + a_ycorner_f=0.36; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf*a_y_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf*a_ycorner_f, jointrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf*a_ycorner_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*a_ycorner_f, jointrounding, xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalf*a_ycorner_f, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf*a_y_f, jointrounding, xd*yd*curve_d, tightness_f, 50); + endchar; +enddef; + +def draw_primitive_p(expr rune, xd, yd) = + beginrunechar(rune, topbarred*1.0*base_width#+2*margin_width#); + save p_x_f; + save p_y_f; + save p_curve_f; + p_x_f=0.06; + p_y_f=0.6; + p_curve_f=0.25; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, topjointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalfred, jointrounding, + xmid+xd*xhalf*p_x_f, ymid-yd*yhalfred*p_y_f, jointrounding, -p_curve_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalfred, jointrounding, + xmid+xd*xhalf*p_x_f, ymid-yd*yhalfred*p_y_f, jointrounding, p_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf*p_x_f, ymid+yd*yhalfred*p_y_f, jointrounding, p_curve_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf*p_x_f, ymid+yd*yhalfred*p_y_f, jointrounding, -p_curve_f*xd*yd*curve_d, tightness_f, 60); + endchar; +enddef; + +def draw_frisian_p(expr rune, xd, yd) = + beginrunechar(rune, topbarred*0.63*base_width#+2*margin_width#); + save p_y_f; + save p_curve_f; + p_y_f=0.55; + p_curve_f=0.25; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, topjointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalfred*p_y_f, jointrounding, p_curve_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred*p_y_f, jointrounding, -p_curve_f*xd*yd*curve_d, tightness_f, 40); + endchar; +enddef; + +def draw_normal_s(expr rune, xd, yd, twobars, chair, high, twigs, flat) = + save s_width_f; + if twigs: + s_width_f=0.80; + else: + s_width_f=0.75; + fi; + beginrunechar(rune, s_width_f*base_width#+2*margin_width#); + save s_xtop_f; + save s_ymid_f; + save s_ymidmid_f; + save s_ysep_f; + save s_ytwig_f; + if chair or high or twigs: + s_xtop_f=1.0; + else: + s_xtop_f=0.8; + fi; + if twobars: + s_ysep_f=0.22; + else: + s_ysep_f=0.0; + fi; + if high: + s_ymidmid_f=0.68; + s_ymid_f=0.28; + else: + s_ymidmid_f=0.0; + if flat: + s_ymid_f=-0.08; + else: + s_ymid_f=0.08; + fi; + fi; + s_ytwig_f=0.6; + filldraw barpath(xmid-xd*xhalf*s_xtop_f, ymid+yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf*(s_ymidmid_f-s_ymid_f-s_ysep_f), jointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*(s_ymidmid_f-s_ymid_f-s_ysep_f), jointrounding, + xmid+xd*xhalf*(1+s_xtop_f)/2, ymid+yd*yhalf*(s_ymidmid_f+s_ymid_f-s_ysep_f), jointrounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf*(1+s_xtop_f)/2, ymid+yd*yhalf*(s_ymidmid_f-s_ymid_f+s_ysep_f), jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*(s_ymidmid_f+s_ymid_f+s_ysep_f), jointrounding, 0, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalf*(s_ymidmid_f+s_ymid_f+s_ysep_f), jointrounding, + xmid+xd*xhalf*s_xtop_f, ymid-yd*yhalf, toprounding, 0, tightness_f, 50); + if chair: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 60); + fi; + if twigs: + filldraw barpath(xmid-xd*xhalf*s_xtop_f-xd*twig_length_f*stem_w/2, ymid+yd*yhalf*s_ytwig_f, endrounding, + xmid-xd*xhalf*s_xtop_f+xd*twig_length_f*stem_w/2, ymid+yd*yhalf*s_ytwig_f, endrounding, 0, tightness_f, 70); + filldraw barpath(xmid+xd*xhalf*s_xtop_f-xd*twig_length_f*stem_w/2, ymid-yd*yhalf*s_ytwig_f, endrounding, + xmid+xd*xhalf*s_xtop_f+xd*twig_length_f*stem_w/2, ymid-yd*yhalf*s_ytwig_f, endrounding, 0, tightness_f, 80); + fi; + endchar; +enddef; + +def draw_primitive_s(expr rune, xd, yd, strokes) = + save s_width_f; + s_width_f=(stem_h#/strokes+stem_w#)/base_width#; + beginrunechar(rune, s_width_f*base_width#+2*margin_width#); + xdir:=1; + for i=strokes step -2 until -strokes+2: + filldraw barpath(xmid+xdir*xd*xhalf, ymid+yd*yhalf*i/strokes, if i=strokes:toprounding else: jointrounding fi, + xmid-xdir*xd*xhalf, ymid+yd*yhalf*(i-2)/strokes, if i=-strokes+2:toprounding else: jointrounding fi, 0, tightness_f, (i+strokes)*10); + xdir:=-xdir; + endfor; + endchar; +enddef; + +def draw_shorttwig_s(expr rune, xd, yd, dot, twig, hook, arrow, circle) = + save s_width_f; + if twig: + s_width_f=twig_length_f+1; + elseif hook: + s_width_f=0.7*twig_length_f+1; + elseif dot: + s_width_f=endstemdot_f; + elseif arrow: + s_width_f=1.4*twig_length_f+1; + elseif circle: + s_width_f=endstemcircle_f; + else: + s_width_f=1.0; + fi; + beginrunechar(rune, s_width_f*stem_w#+2*margin_width#); + save s_y_f; + save s_hooky_f; + s_y_f=0.1; + s_hooky_f=0.4; + filldraw barpath(xmid if hook: -xd*xhalf fi, ymid+yd*yhalf*s_y_f, toprounding, + xmid if hook: -xd*xhalf fi, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + if dot: + filldraw dotpath(xmid, ymid+yd*yhalf*s_y_f, endstemdot_f, 30); + fi; + if twig: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*s_y_f, endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*s_y_f, endrounding, 0, tightness_f, 40); + fi; + if hook: + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*s_y_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*s_hooky_f, endrounding, 0, tightness_f, 50); + elseif arrow: + filldraw barpath(xmid, ymid+yd*yhalf*s_y_f, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf*s_hooky_f, endrounding, 0, tightness_f, 50); + filldraw barpath(xmid, ymid+yd*yhalf*s_y_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf*s_hooky_f, endrounding, 0, tightness_f, 60); + elseif circle: + draw_circle(xmid, ymid+yd*(yhalf*s_y_f-endstemcircle_f*stem_w/2), endstemcircle_f, 50); + fi; + endchar; +enddef; + +def draw_normal_t(expr rune, xd, yd, middot, topdots, doublearrow, arlaug, mid) = + save t_width_f; + if topdots: + t_width_f=1.28; + else: + t_width_f=1.1; + fi; + beginrunechar(rune, topbarred*t_width_f*base_width#+2*margin_width#); + save t_y_f; + save t_curve_f; + save t_topdotx_f; + t_curve_f=0.25; + t_y_f=0.42; + t_topdotx_f=0.43; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + if mid: + filldraw barpath(xmid+xd*2, ymid+yd*yhalf*(1-t_y_f)/2, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf*(1-t_y_f)/2, endrounding, -t_curve_f*xd*yd*curve_d, tightness_f, 30); + else: + filldraw barpath(xmid+xd*2, ymidred(yd)+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*t_y_f, endrounding, -t_curve_f*xd*yd*curve_d, tightness_f, 30); + fi; + if mid or arlaug: + filldraw barpath(xmid-xd*2, ymid+yd*yhalf*(1-t_y_f)/2, jointrounding, + xmid-xd*xhalf, ymid-yd*yhalf*(1-t_y_f)/2, endrounding, t_curve_f*xd*yd*curve_d, tightness_f, 40); + else: + filldraw barpath(xmid-xd*2, ymidred(yd)+yd*yhalfred, jointrounding, + xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*t_y_f, endrounding, t_curve_f*xd*yd*curve_d, tightness_f, 40); + fi; + if middot: + filldraw dotpath(xmid, ymidred(yd), stemdot_f, 50); + fi; + if topdots: + filldraw dotpath(xmid-xd*xhalf*t_topdotx_f, ymidred(yd)+yd*yhalfred*t_y_f, freedot_f, 60); + filldraw dotpath(xmid+xd*xhalf*t_topdotx_f, ymidred(yd)+yd*yhalfred*t_y_f, freedot_f, 70); + fi; + if doublearrow: + filldraw barpath(xmid+2, ymidred(yd)-yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymidred(yd)-yd*yhalfred*t_y_f, endrounding, xd*yd*-t_curve_f*xd*yd*curve_d, tightness_f, 80); + filldraw barpath(xmid-2, ymidred(yd)-yd*yhalfred, jointrounding, + xmid-xd*xhalf, ymidred(yd)-yd*yhalfred*t_y_f, endrounding, xd*yd*t_curve_f*xd*yd*curve_d, tightness_f, 90); + fi; + endchar; +enddef; + +def draw_normal_b(expr rune, xd, yd, topdot, bottomdot, separated) = + save b_width_f; + if separated: + b_width_f=0.6; + else: + b_width_f=0.75; + fi; + beginrunechar(rune, topbarred*b_width_f*base_width#+2*margin_width#); + save b_yup_f; + save b_ymid_f; + save b_curve_f; + if separated: + b_yup_f=0.65; + b_ymid_f=0.3; + else: + b_yup_f=0.4; + b_ymid_f=0.0; + fi; + b_curve_f=0.63+0.37*abs(curve_d-45)/45; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, topjointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred*b_yup_f, jointrounding, -b_curve_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalfred*b_yup_f, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalfred*b_ymid_f, jointrounding, -b_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalfred*b_ymid_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalfred*b_yup_f, jointrounding, -b_curve_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalfred*b_yup_f, jointrounding, + xmid-xd*xhalf, ymid-yd*yhalfred, jointrounding, -b_curve_f*xd*yd*curve_d, tightness_f, 60); + if topdot: + filldraw dotpath(xmid-xd*xhalf/4, ymid+yd*yhalfred*(1+b_yup_f+b_ymid_f)/3, freedot_f, 70); + fi; + if bottomdot: + filldraw dotpath(xmid-xd*xhalf/4, ymid-yd*yhalfred*(1+b_yup_f+b_ymid_f)/3, freedot_f, 80); + fi; + endchar; +enddef; + +def draw_primitive_e(expr rune, xd, yd, closed, midstem) = + beginrunechar(rune, topbarred*1.25*base_width#+2*margin_width#); + save e_y_f; + save e_curve_f; + e_y_f=0.4; + e_curve_f=0.25; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf+1, ymid+yd*yhalfred, jointrounding, + xmid, ymid+yd*yhalfred*e_y_f, jointrounding, e_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf-1, ymid+yd*yhalfred, jointrounding, + xmid, ymid+yd*yhalfred*e_y_f, jointrounding, -e_curve_f*xd*yd*curve_d, tightness_f, 50); + if closed: + filldraw barpath(xmid-xd*xhalf+1, ymid-yd*yhalfred, jointrounding, + xmid, ymid-yd*yhalfred*e_y_f, jointrounding, -e_curve_f*xd*yd*curve_d, tightness_f, 60); + filldraw barpath(xmid+xd*xhalf-1, ymid-yd*yhalfred, jointrounding, + xmid, ymid-yd*yhalfred*e_y_f, jointrounding, e_curve_f*xd*yd*curve_d, tightness_f, 70); + fi; + if midstem: + filldraw barpath(xmid, ymid+yd*yhalfred*e_y_f, jointrounding, + xmid, ymid-yd*yhalfred*e_y_f, jointrounding, 0, tightness_f, 80); + fi; + endchar; +enddef; + +def draw_primitive_E(expr rune, xd, yd, closed) = + beginrunechar(rune, topbarred*1.15*base_width#+2*margin_width#); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred, jointrounding, 0, tightness_f, 40); + if closed: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalfred, jointrounding, 0, tightness_f, 40); + fi; + endchar; +enddef; + +def draw_normal_m(expr rune, xd, yd, dots, double, tree) = + beginrunechar(rune, 1.3*base_width#+2*margin_width#); + save m_y_f; + save m_xdot_f; + save m_ydot_f; + m_xdot_f=0.4 + if mag <= 1: 0; elseif mag <= 2: (mag-1)/20; else: 0.05; fi; + m_ydot_f=0.85; + m_y_f=0.1; + filldraw barpath(xmid, ymid-yd*yhalf, if tree:jointrounding else:toprounding fi, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid, ymid+yd*yhalf*m_y_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid, ymid+yd*yhalf*m_y_f, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, -xd*yd*curve_d, tightness_f, 40); + if double: + filldraw barpath(xmid, ymid-yd*yhalf*m_y_f, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf, toprounding, -xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid, ymid-yd*yhalf*m_y_f, jointrounding, + xmid-xd*xhalf, ymid-yd*yhalf, toprounding, xd*yd*curve_d, tightness_f, 60); + elseif tree: + filldraw barpath(xmid, ymid-yd*yhalf, jointrounding, + xmid+xd*xhalf, ymid-yd*yhalf*m_y_f, toprounding, xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid, ymid-yd*yhalf, jointrounding, + xmid-xd*xhalf, ymid-yd*yhalf*m_y_f, toprounding, -xd*yd*curve_d, tightness_f, 60); + fi; + if dots: + filldraw dotpath(xmid+xd*xhalf*m_xdot_f, ymid+yd*yhalf*m_ydot_f, freedot_f, 70); + filldraw dotpath(xmid-xd*xhalf*m_xdot_f, ymid+yd*yhalf*m_ydot_f, freedot_f, 80); + if double: + filldraw dotpath(xmid+xd*xhalf*m_xdot_f, ymid-yd*yhalf*m_ydot_f, freedot_f, 90); + filldraw dotpath(xmid-xd*xhalf*m_xdot_f, ymid-yd*yhalf*m_ydot_f, freedot_f, 100); + fi; + fi; + endchar; +enddef; + +def draw_normal_M(expr rune, xd, yd, dots) = + beginrunechar(rune, 1.0*topbarred*base_width#+2*margin_width#); + save M_ymid_f; + save M_xdot_f; + M_xdot_f=0.42; + M_ymid_f=0.04; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-1, ymidred(yd)+yd*yhalfred, jointrounding, + xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*(1+M_ymid_f)/2, jointrounding, xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*(1+M_ymid_f)/2, jointrounding, + xmid, ymidred(yd)+yd*yhalfred*M_ymid_f, jointrounding, xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid, ymidred(yd)+yd*yhalfred*M_ymid_f, jointrounding, + xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(1+M_ymid_f)/2, jointrounding, xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(1+M_ymid_f)/2, jointrounding, + xmid+1, ymidred(yd)+yd*yhalfred, jointrounding, xd*yd*curve_d, tightness_f, 60); + if dots: + filldraw dotpath(xmid+xd*xhalf*M_xdot_f, ymidred(yd)+yd*yhalfred*(1+M_ymid_f)/2, freedot_f, 50); + filldraw dotpath(xmid-xd*xhalf*M_xdot_f, ymidred(yd)+yd*yhalfred*(1+M_ymid_f)/2, freedot_f, 60); + fi; + endchar; +enddef; + +def draw_primitive_m(expr rune, xd, yd, big, top, double) = + beginrunechar(rune, topbarred*1.3*base_width#+2*margin_width#); + save m_ymid_f; + save m_ysep_f; + if big: + m_ysep_f=1.0; + else: + m_ysep_f=0.5; + fi; + if top: + m_ymid_f=0.5; + else: + m_ymid_f=0.0; + fi; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf, ymid+yd*yhalf, toprounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*(m_ymid_f+m_ysep_f), jointrounding, + xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(m_ymid_f-m_ysep_f), jointrounding, 0, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf, ymidred(yd)+yd*yhalfred*(m_ymid_f+m_ysep_f), jointrounding, + xmid-xd*xhalf, ymidred(yd)+yd*yhalfred*(m_ymid_f-m_ysep_f), jointrounding, 0, tightness_f, 50); + if double: + filldraw barpath(xmid-xd*xhalf, ymidred(yd)-yd*yhalfred*(m_ymid_f+m_ysep_f), jointrounding, + xmid+xd*xhalf, ymidred(yd)-yd*yhalfred*(m_ymid_f-m_ysep_f), jointrounding, 0, tightness_f, 60); + filldraw barpath(xmid+xd*xhalf, ymidred(yd)-yd*yhalfred*(m_ymid_f+m_ysep_f), jointrounding, + xmid-xd*xhalf, ymidred(yd)-yd*yhalfred*(m_ymid_f-m_ysep_f), jointrounding, 0, tightness_f, 70); + fi; + endchar; +enddef; + +def draw_staveless_m(expr rune, xd, yd) = + beginrunechar(rune, freedot_f*stem_w#+2*margin_width#); + save m_ytop_f; + save m_ybottom_f; + m_ytop_f=0.75; + m_ybottom_f=0.25; + filldraw dotpath(xmid, ymid+yd*yhalf*m_ytop_f, freedot_f, 20); + filldraw dotpath(xmid, ymid+yd*yhalf*m_ybottom_f, freedot_f, 30); + endchar; +enddef; + +def draw_normal_l(expr rune, xd, yd, middot, topdot, midtwig, toptwig, circle) = + beginrunechar(rune, topbarred*0.73*base_width#+2*margin_width#); + save l_y_f; + save l_curve_f; + save l_topdotx_f; + save l_twigcrossing_f; + save l_twigtwiglength_f; + l_curve_f=0.25; + l_y_f=0.4; + l_topdotx_f=0.15; + l_twigcrossing_f=0.65; + l_twigtwiglength_f=0.3; + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred*l_y_f, endrounding, -l_curve_f*xd*yd*curve_d, tightness_f, 30); + if middot: + filldraw dotpath(xmid-xd*xhalf, ymidred(yd), stemdot_f, 40); + fi; + if topdot: + filldraw dotpath(xmid-xd*xhalf*l_topdotx_f, ymid+yd*yhalfred*l_y_f, freedot_f, 50); + fi; + if midtwig: + filldraw barpath(xmid-xd*xhalf-xd*twig_length_f*stem_w/2, ymidred(yd), endrounding, + xmid-xd*xhalf+xd*twig_length_f*stem_w/2, ymidred(yd), endrounding, 0, tightness_f, 60); + fi; + if toptwig: + filldraw barpath(xmid+xd*xhalf*(((1-(-1))*l_twigcrossing_f-1)-(l_y_f-1)*yhalfred/xhalf*l_twigtwiglength_f), ymid+yd*yhalfred*(((l_y_f-1)*l_twigcrossing_f+1)+(1-(-1))*xhalf/yhalfred*l_twigtwiglength_f), endrounding, + xmid+xd*xhalf*(((1-(-1))*l_twigcrossing_f-1)+(l_y_f-1)*yhalfred/xhalf*l_twigtwiglength_f), ymid+yd*yhalfred*(((l_y_f-1)*l_twigcrossing_f+1)-(1-(-1))*xhalf/yhalfred*l_twigtwiglength_f), endrounding, -l_curve_f*xd*yd*curve_d, tightness_f, 70); + fi; + if circle: + draw_circle(xmid-xd*xhalf, ymidred(yd), stemcircle_f, 80); + fi; + endchar; +enddef; + +def draw_shorttwig_l(expr rune, xd, yd) = + beginrunechar(rune, 0.7*base_width#+2*margin_width#); + save l_topy_f; + save l_twigy_f; + l_topy_f=0.76; + l_twigy_f=0.36; + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf, ymid+yd*yhalf*l_topy_f, endrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalf*l_twigy_f, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, endrounding, 0, tightness_f, 30); + endchar; +enddef; + +def draw_shorttwig_L(expr rune, xd, yd) = + beginrunechar(rune, 0.9*base_width#+2*margin_width#); + save L_topy_f; + save L_x_f; + L_topy_f=0.3; + L_x_f=0.1; + filldraw barpath(xmid-xd*xhalf*L_x_f, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf*L_x_f, ymid+yd*yhalf*(1+L_topy_f)/2, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf, endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*L_topy_f, endrounding, 0, tightness_f, 30); + endchar; +enddef; + +def draw_primitive_ng(expr rune, xd, yd, top, line, empty, belgthor) = + save ng_width_f; + if belgthor: + ng_width_f=1.25; + else: + ng_width_f=1.0; + fi; + beginrunechar(rune, ng_width_f*base_width#+2*margin_width#); + save ng_curve_f; + if belgthor: + ng_curve_f=1.0; + else: + ng_curve_f=0.25; + fi; + if line: + if empty: + if top: + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalfred-2*yd*xhalf, toprounding, 0, tightness_f, 20); + else: + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid-yd*xhalf, toprounding, 0, tightness_f, 20); + filldraw barpath(xmid, ymid+yd*yhalf, toprounding, + xmid, ymid+yd*xhalf, toprounding, 0, tightness_f, 30); + fi; + else: + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + fi; + fi; + if top: + filldraw barpath(xmid, ymid+yd*yhalfred, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalfred-yd*xhalf, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalfred-yd*xhalf, jointrounding, + xmid, ymid+yd*yhalfred-yd*2*xhalf, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid, ymid+yd*yhalfred-yd*2*xhalf, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred-yd*xhalf, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 60); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalfred-yd*xhalf, jointrounding, + xmid, ymid+yd*yhalfred, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 70); + else: + filldraw barpath(xmid, ymid+yd*xhalf, jointrounding, + xmid-xd*xhalf, ymid, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid, jointrounding, + xmid, ymid-yd*xhalf, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 50); + filldraw barpath(xmid, ymid-yd*xhalf, jointrounding, + xmid+xd*xhalf, ymid, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 60); + filldraw barpath(xmid+xd*xhalf, ymid, jointrounding, + xmid, ymid+yd*xhalf, jointrounding, ng_curve_f*xd*yd*curve_d, tightness_f, 70); + fi; + endchar; +enddef; + +def draw_primitive_NG(expr rune, xd, yd) = + beginrunechar(rune, 0.8*base_width#+2*margin_width#); + save NG_curve_f; + NG_curve_f=0.25; + filldraw barpath(xmid-xd*xhalf, ymid+yd*xhalf, jointrounding, + xmid+xd*xhalf, ymid+yd*xhalf, jointrounding, -NG_curve_f*xd*yd*curve_d, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid+yd*xhalf, jointrounding, + xmid+xd*xhalf, ymid-yd*xhalf, jointrounding, -NG_curve_f*xd*yd*curve_d, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid-yd*xhalf, jointrounding, + xmid-xd*xhalf, ymid-yd*xhalf, jointrounding, -NG_curve_f*xd*yd*curve_d, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid-yd*xhalf, jointrounding, + xmid-xd*xhalf, ymid+yd*xhalf, jointrounding, -NG_curve_f*xd*yd*curve_d, tightness_f, 50); + endchar; +enddef; + +def draw_anglo_ng(expr rune, xd, yd) = + beginrunechar(rune, 0.98*base_width#+2*margin_width#); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, jointrounding, + xmid+xd*xhalf, ymid, jointrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, jointrounding, 0, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, jointrounding, + xmid-xd*xhalf, ymid, jointrounding, 0, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf, ymid, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, jointrounding, 0, tightness_f, 50); + endchar; +enddef; + +def draw_primitive_o(expr rune, xd, yd) = + beginrunechar(rune, 1.4*base_width#+2*margin_width#); + save o_x_f; + save o_y_f; + save oround_x_f; + save oround_y_f; + save oround_curve_d; + save oroundsharp_curve_d; + o_x_f=0.72; + o_y_f=0.44; + oround_x_f=0.52; + oround_y_f=0.6; + oround_curve_d=70; + oroundsharp_curve_d=170; + if curve_d < 45: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid+xd*xhalf*o_x_f, ymid+yd*yhalf*o_y_f, jointrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid-xd*xhalf*o_x_f, ymid+yd*yhalf*o_y_f, jointrounding, 0, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf*o_x_f, ymid+yd*yhalf*o_y_f, jointrounding, + xmid, ymid+yd*yhalf, jointrounding, 0, tightness_f, 40); + filldraw barpath(xmid-xd*xhalf*o_x_f, ymid+yd*yhalf*o_y_f, jointrounding, + xmid, ymid+yd*yhalf, jointrounding, 0, tightness_f, 50); + else: + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf*(o_y_f-1)/2, jointrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf*(o_y_f-1)/2, jointrounding, 0, tightness_f, 30); + filldraw barpath(xmid, ymid+yd*yhalf*(o_y_f-1)/2, jointrounding, + xmid-xd*xhalf*oround_x_f, ymid+yd*yhalf*oround_y_f, jointrounding, -xd*yd*oround_curve_d, tightness_f, 40); + filldraw barpath(xmid, ymid+yd*yhalf*(o_y_f-1)/2, jointrounding, + xmid+xd*xhalf*oround_x_f, ymid+yd*yhalf*oround_y_f, jointrounding, xd*yd*oround_curve_d, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*oround_x_f, ymid+yd*yhalf*oround_y_f, jointrounding, + xmid+xd*xhalf*oround_x_f, ymid+yd*yhalf*oround_y_f, jointrounding, -xd*yd*oroundsharp_curve_d, tightness_f, 60); + fi; + endchar; +enddef; + +def draw_anglo_ea(expr rune, xd, yd, q) = + beginrunechar(rune, topbarred*1.5*base_width#+2*margin_width#); + save ea_x_f; + save ea_y_f; + save ea_y_mirr; + ea_x_f=0.7; + ea_y_f=0.53; + ea_y_mirr=if q: -1 else: 1 fi; + filldraw barpath(xmid, ymid-yd*yhalf, endrounding, + xmid, ymid+yd*yhalf, topjointrounding, 0, tightness_f, 20); + filldraw barpath(xmid+xd*2, ymid+yd*yhalfred, jointrounding, + xmid+xd*xhalf*ea_x_f, ymid+yd*yhalfred*ea_y_f, jointrounding, 0, tightness_f, 30); + filldraw barpath(xmid+xd*xhalf*ea_x_f, ymid+yd*yhalfred*ea_y_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalfred, endrounding, 0, tightness_f, 40); + filldraw barpath(xmid-xd*2, ymid+yd*yhalfred*ea_y_mirr, jointrounding, + xmid-xd*xhalf*ea_x_f, ymid+yd*yhalfred*ea_y_f*ea_y_mirr, jointrounding, 0, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*ea_x_f, ymid+yd*yhalfred*ea_y_f*ea_y_mirr, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalfred*ea_y_mirr, endrounding, 0, tightness_f, 60); + endchar; +enddef; + +def draw_anglo_rex(expr rune, xd, yd) = + beginrunechar(rune, topbarred*1.15*base_width#+2*margin_width#); + save rex_y_f; + rex_y_f=0.4; + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf*rex_y_f, jointrounding, 0, tightness_f, 20); + filldraw barpath(xmid, ymid+yd*yhalf*rex_y_f, jointrounding, + xmid+xd*xhalf, ymid+yd*yhalf, endrounding, 0, tightness_f, 30); + filldraw barpath(xmid, ymid+yd*yhalf*rex_y_f, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, endrounding, 0, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf, ymid+yd*yhalf, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, jointrounding, 0, tightness_f, 50); + endchar; +enddef; + +def draw_medieval_x(expr rune, xd, yd, stem) = + beginrunechar(rune, 1.25*base_width#+2*margin_width#); + save x_y_f; + save x_twigtwiglength_f; + x_y_f=0.65; + x_twigtwiglength_f=0.25; + if stem: + filldraw barpath(xmid, ymid-yd*yhalf, toprounding, + xmid, ymid+yd*yhalf, toprounding, 0, tightness_f, 20); + fi; + filldraw barpath(xmid-xd*xhalf, ymid+yd*yhalf*x_y_f, endrounding, + xmid+xd*xhalf, ymid-yd*yhalf*x_y_f, endrounding, 0, tightness_f, 30); + filldraw barpath(xmid-xd*xhalf, ymid-yd*yhalf*x_y_f, endrounding, + xmid+xd*xhalf, ymid+yd*yhalf*x_y_f, endrounding, 0, tightness_f, 40); + filldraw barpath(xmid+xd*xhalf*(1-x_twigtwiglength_f), ymid+yd*yhalf*x_y_f*(1+((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, + xmid+xd*xhalf*(1+x_twigtwiglength_f), ymid+yd*yhalf*x_y_f*(1-((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, 0, tightness_f, 50); + filldraw barpath(xmid-xd*xhalf*(1-x_twigtwiglength_f), ymid-yd*yhalf*x_y_f*(1+((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, + xmid-xd*xhalf*(1+x_twigtwiglength_f), ymid-yd*yhalf*x_y_f*(1-((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, 0, tightness_f, 60); + filldraw barpath(xmid-xd*xhalf*(1-x_twigtwiglength_f), ymid+yd*yhalf*x_y_f*(1+((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, + xmid-xd*xhalf*(1+x_twigtwiglength_f), ymid+yd*yhalf*x_y_f*(1-((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, 0, tightness_f, 70); + filldraw barpath(xmid+xd*xhalf*(1-x_twigtwiglength_f), ymid-yd*yhalf*x_y_f*(1+((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, + xmid+xd*xhalf*(1+x_twigtwiglength_f), ymid-yd*yhalf*x_y_f*(1-((xhalf/(yhalf*x_y_f))**2)*x_twigtwiglength_f), endrounding, 0, tightness_f, 80); + endchar; +enddef; + +def draw_modern_aa(expr rune, xd, yd) = + beginrunechar(rune, 0.8*base_width#+2*margin_width#); + save aa_curve_f; + aa_curve_f=0.5; + filldraw barpath(xmid+xd*xhalf, ymid, jointrounding, + xmid-xd*xhalf, ymid+yd*yhalf, endrounding, aa_curve_f*xd*yd*curve_d, tightness_f, 20); + filldraw barpath(xmid+xd*xhalf, ymid, jointrounding, + xmid-xd*xhalf, ymid-yd*yhalf, endrounding, -aa_curve_f*xd*yd*curve_d, tightness_f, 30); + endchar; +enddef; + |