elif tags[0] == 'char':
name = tags[9]
- name = re.sub ('-', 'M', name)
if group:
name = group + '.' + name
m = {
-This is a font of music symbols. All MF sources are original. Most
-of the documentation is in comments in the MF code.
+This is a font of music symbols. All MF sources are original. Most of the
+documentation is in comments in the MF code.
Non-square pixels are not supported; with other words, the horizontal and
vertical resolution of the output device must be the same.
Currently, outline fonts are created by using `autotrace', but we are
-already in the process to convert the MF code directly to PostScript code
+already in the process of converting the MF code directly to PostScript code
with a tool called `mf2pt1', which in turn calls `FontForge' to postprocess
the output (mainly to remove outline overlaps and to add hints).
The recommended calling sequence of mf2pt1 is
- mf2pt1 --rounding=0.001 <font>
+ mf2pt1 --rounding=0.001 <other options> <font>
You need mf2pt1 version 2.1 or newer.
+
Here some guidelines to assure a clean conversion.
. Never use `---'. Replace it with `--' together with explicit path
directions (if necessary).
-. Don't use self-intersecting outlines in general since it can confuse
+. Don't use self-intersecting outlines in general since they can confuse
mf2pt1's algorithm to get the orientation of a closed path. Note that
MetaPost's implementation of the `turningnumber' primitive (which would
immediately give the orientation of a path) is severely broken before
to work around this bug.
. If outlines intersect, avoid grazing intersections. In case two outlines
- intersect in an explicitly defined point, include this point into both
+ intersect in an explicitly defined point, include this point in both
intersecting paths to avoid problems due to rounding errors.
. Don't use `draw' with a polygonal pen but for straight lines (consisting
overlaps.
+Some glyph name rules:
+
+. Most glyph names have the form <group>.<name>, where <group> is defined
+ with the `fet_begingroup' command, and <name> is given with
+ `fet_beginchar' (within a `fet_begingroup' block). Example:
+ `clefs.vaticana.fa'.
+
+. Sometimes it would be sensible to use negative numbers in glyph names.
+ However, the `-' character shouldn't be used in a glyph name. Replace it
+ with `M'. For example, write `rests.M3mensural' instead of
+ `rests.-3mensural'.
+
+. Glyphs which exist in both an `up' and `down' version should start the
+ <name> part with either `u' or `d', respectively. Example: `flags.d3',
+ `flags.u3'. Glyphs which are neutral w.r.t. the direction, and where
+ members of the glyph group exist which have `up' and `down' versions,
+ should start with an `s'. Example: `noteheads.s0re'.
+
+
Some design rules:
. Always use smooth curve transitions. Since this is difficult to see in
. Use rounded corners.
-Finally, some rules to assure that rasterization at low resolutions give
+Finally, some rules to assure that rasterization at low resolutions gives
good results. Today, this is a minor issue, but in some cases it might show
design flaws.
enddef;
-fet_beginchar ("Longa notehead", "u-2");
+fet_beginchar ("Longa notehead", "uM2");
draw_longa (true);
draw_staff (-2, 2, 0);
fet_endchar;
-fet_beginchar ("Longa notehead", "d-2");
+fet_beginchar ("Longa notehead", "dM2");
draw_longa (false);
draw_staff (-2, 2, 0);
if test > 0:
- fet_beginchar ("Longa notehead", "u-2");
+ fet_beginchar ("Longa notehead", "uM2");
draw_longa (true);
draw_staff (-2, 2, 0.5);
fet_endchar;
- fet_beginchar ("Longa notehead", "d-2");
+ fet_beginchar ("Longa notehead", "dM2");
draw_longa (false);
draw_staff (-2, 2, 0.5);
enddef;
-fet_beginchar ("Brevis notehead", "s-1");
+fet_beginchar ("Brevis notehead", "sM1");
draw_brevis;
draw_staff (-2, 2, 0);
if test > 0:
- fet_beginchar ("Brevis notehead", "s-1");
+ fet_beginchar ("Brevis notehead", "sM1");
draw_brevis;
draw_staff (-2, 2, 0.5);
fet_endchar;
-fet_beginchar ("maxima rest", "-3");
+fet_beginchar ("maxima rest", "M3");
set_char_box (0, 3 breve_rest_x#, breve_rest_y#, breve_rest_y#);
draw_block ((0, -breve_rest_y + feta_shift),
fet_endchar;
-fet_beginchar ("longa rest", "-2");
+fet_beginchar ("longa rest", "M2");
set_char_box (0, breve_rest_x#, breve_rest_y#, breve_rest_y#);
draw_block ((0, -breve_rest_y + feta_shift),
fet_endchar;
-fet_beginchar ("breve rest", "-1");
+fet_beginchar ("breve rest", "M1");
set_char_box (0, breve_rest_x#, 0, breve_rest_y#);
draw_block ((0, 0), (breve_rest_x, breve_rest_y));
%% ugh. rounded corners!
-fet_beginchar ("Pedal dash", "-");
+fet_beginchar ("Pedal dash", "M");
save dash_thickness;
dash_thickness# := penw#;
%
%
%
-fet_beginchar ("Ed. Med. Flat" , "medicaea-1");
+fet_beginchar ("Ed. Med. Flat" , "medicaeaM1");
set_char_box (0.1 staff_space#, 0.6 staff_space#,
0.6 staff_space#, 1.0 staff_space#);
%
%
%
-fet_beginchar ("Ed. Vat. Flat" , "vaticana-1");
+fet_beginchar ("Ed. Vat. Flat" , "vaticanaM1");
z1 = (0.00 staff_space, +0.80 staff_space);
z2 = (0.00 staff_space, -0.08 staff_space);
z3 = (0.25 staff_space, -0.23 staff_space);
fet_endchar;
-fet_beginchar ("Mensural Flat" , "mensural-1");
+fet_beginchar ("Mensural Flat" , "mensuralM1");
save stemthick;
define_pixels (stemthick);
fet_endchar;
-fet_beginchar ("Hufnagel Flat" , "hufnagel-1");
+fet_beginchar ("Hufnagel Flat" , "hufnagelM1");
save stemthick;
define_pixels (stemthick);
%
% (ze is wel breed)
%
-fet_beginchar ("Neo-mensural maxima notehead", "s-3neomensural");
+fet_beginchar ("Neo-mensural maxima notehead", "sM3neomensural");
draw_neomensural_longa (2.6 staff_space#);
fet_endchar;
-fet_beginchar ("Neo-mensural longa notehead", "s-2neomensural");
+fet_beginchar ("Neo-mensural longa notehead", "sM2neomensural");
draw_neomensural_longa (2 staff_space#);
fet_endchar;
-fet_beginchar ("Neo-mensural brevis notehead", "s-1neomensural");
+fet_beginchar ("Neo-mensural brevis notehead", "sM1neomensural");
draw_neomensural_brevis (2 staff_space#);
fet_endchar;
fet_endchar;
-fet_beginchar ("Mensural maxima notehead", "s-3mensural");
+fet_beginchar ("Mensural maxima notehead", "sM3mensural");
draw_mensural_longa (2.0 staff_space#);
fet_endchar;
-fet_beginchar ("Mensural longa notehead", "s-2mensural");
+fet_beginchar ("Mensural longa notehead", "sM2mensural");
draw_mensural_longa (staff_space#);
fet_endchar;
-fet_beginchar ("Mensural brevis notehead", "s-1mensural");
+fet_beginchar ("Mensural brevis notehead", "sM1mensural");
draw_mensural_brevis (staff_space#);
fet_endchar;
enddef;
-fet_beginchar ("Neo-mensural maxima rest", "-3neomensural");
+fet_beginchar ("Neo-mensural maxima rest", "M3neomensural");
set_char_box (0, 3 neomens_block_rest_x#,
neomens_block_rest_y#, neomens_block_rest_y#);
fet_endchar;
-fet_beginchar ("Neo-mensural longa rest", "-2neomensural");
+fet_beginchar ("Neo-mensural longa rest", "M2neomensural");
set_char_box (0, neomens_block_rest_x#,
neomens_block_rest_y#, neomens_block_rest_y#);
fet_endchar;
-fet_beginchar ("Neo-mensural breve rest", "-1neomensural");
+fet_beginchar ("Neo-mensural breve rest", "M1neomensural");
set_char_box (0, neomens_block_rest_x#,
0, neomens_block_rest_y#);
pen_width, pen_height);
-fet_beginchar ("Mensural maxima rest", "-3mensural");
+fet_beginchar ("Mensural maxima rest", "M3mensural");
set_char_box (0, pen_width#,
mens_block_rest_y#, 2 mens_block_rest_y#);
fet_endchar;
-fet_beginchar ("Mensural longa rest", "-2mensural");
+fet_beginchar ("Mensural longa rest", "M2mensural");
set_char_box (0, pen_width#,
mens_block_rest_y#, mens_block_rest_y#);
fet_endchar;
-fet_beginchar ("Mensural breve rest", "-1mensural");
+fet_beginchar ("Mensural breve rest", "M1mensural");
set_char_box (0, pen_width#,
0, mens_block_rest_y#);