From a17e9f87fd743d947cabaa5f81dddb625845f887 Mon Sep 17 00:00:00 2001
From: Maximilian Albert <Anhalter42@gmx.de>
Date: Mon, 8 Sep 2008 21:02:08 +0200
Subject: [PATCH] Add arrowed natural signs

---
 mf/feta-toevallig.mf |   74 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 65 insertions(+), 9 deletions(-)

diff --git a/mf/feta-toevallig.mf b/mf/feta-toevallig.mf
index 27fb673..f85fd2e 100644
--- a/mf/feta-toevallig.mf
+++ b/mf/feta-toevallig.mf
@@ -451,9 +451,10 @@ draw_shifted_too;
 % The stems of the natural are brushed (at least, in Barenreiter SCS)
 %
 
-fet_beginchar ("Natural", "natural");
+def draw_natural (expr arrowup, arrowdown) =
 	save stemwidth, top_stem_thick;
 	save ne, pat_top, pat_bottom;
+	save width, depth, height, arrowshift, extendleft, extendright, stemlength;
+	save brush_scale_up, brush_scale_down;
 	pair ne;
 	path pat_top, pat_bottom;
 
@@ -461,25 +462,51 @@ fet_beginchar ("Natural", "natural");
 	stemwidth# = 0.09 staff_space# + .5 stafflinethickness#;
 	define_whole_blacker_pixels (top_stem_thick, stemwidth);
 
-	set_char_box (0, 2/3 staff_space#,
-		      1.5 staff_space#, 1.5 staff_space#);
+	stemlength# = 1.5 staff_space#;
+	define_pixels (stemlength);
+
+	height# = stemlength#;
+	depth# = stemlength#;
+	extendleft# = 0;
+	extendright# = 0;
+	arrowshift# = 0;
+	if arrowup:
+		extendleft# := stafflinethickness#;
+		height# := height# + 1.2 staff_space#;
+		arrowshift# := 2 stafflinethickness#;
+	fi;
+	if arrowdown:
+		extendright# := 3.25 stafflinethickness#;
+		depth# := depth# + 1.2 staff_space#;
+	fi;
+	width# = 2/3 staff_space# + arrowshift#;
+	define_pixels (arrowshift, width);
+
+	set_char_box (extendleft#, width# + extendright#, depth#, height#);
 
 	d := d - feta_space_shift;
 
 	pickup pencircle scaled stemwidth;
 
-	penpos1 (top_stem_thick, 0);
-	penpos3 (top_stem_thick, 0);
+	% to look nice, arrowed stems must be less brushed
+	brush_scale_up := 1.0;
+	brush_scale_down := 1.0;
+	if arrowup:
+		brush_scale_up := 0.85;
+	fi;
+	if arrowdown:
+		brush_scale_down := 0.85;
+	fi;
+
+	penpos1 (top_stem_thick * brush_scale_up, 0);
+	penpos3 (top_stem_thick * brush_scale_down, 0);
 	penpos2 (stemwidth, 0);
 	penpos4 (stemwidth, 0);
 
-	x2r = w;
-	x4l = 0;
+	x2r = width;
+	x4l = 0 + arrowshift;
 	x3 = x2;
 	x1 = x4;
 
-	y1 = h;
-	y3 = -d;
+	y1 = stemlength;
+	y3 = -stemlength;
 	top y2 = vround (staff_space - 3/2 stafflinethickness);
 	y4 = -y2 + feta_space_shift;
 
@@ -533,9 +560,38 @@ fet_beginchar ("Natural", "natural");
 	penlabels (1, 2, 3, 4);
 	labels (11, 11', 12, 13, 14, 21, 21', 22, 23, 24);
 
+	if arrowup:
+		draw_arrow (z1, top_stem_thick * brush_scale_up,
+			    z1l-z4l, stafflinethickness/2, false);
+	fi;
+	if arrowdown:
+		draw_arrow (z3, top_stem_thick * brush_scale_down,
+			    z1l-z4l, stafflinethickness/2, true);
+	fi;
+
 	remember_pic := currentpicture;
 
 	draw_staff (-2, 2, 0);
+enddef;
+
+fet_beginchar ("Natural", "natural");
+	draw_natural (false, false);
+fet_endchar;
+
+
+draw_shifted_too;
+
+
+fet_beginchar ("Natural", "natural.arrowup");
+	draw_natural (true, false);
+fet_endchar;
+
+
+draw_shifted_too;
+
+
+fet_beginchar ("Natural", "natural.arrowdown");
+	draw_natural (false, true);
 fet_endchar;
 
 
-- 
1.5.6.5

