X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fcontributor%2Ffeta-font.itexi;h=002aa895a43167a4fc9eac319d2925e6de207b9e;hb=8fa2d858e492fabbe966cc6a3a4daa7533dfd193;hp=57a740bcc1867dc09fbac77b87173c7f69e3e2c3;hpb=f3ba7d46b33980dc1715107ec7c9a3fd6e7175f8;p=lilypond.git diff --git a/Documentation/contributor/feta-font.itexi b/Documentation/contributor/feta-font.itexi index 57a740bcc1..002aa895a4 100644 --- a/Documentation/contributor/feta-font.itexi +++ b/Documentation/contributor/feta-font.itexi @@ -5,7 +5,10 @@ @menu * Overview of the feta font:: * Font creation tools:: +* Adding a new font section:: +* Adding a new glyph:: * Building the changed font:: +* METAFONT formatting rules:: @end menu @node Overview of the feta font @@ -15,7 +18,10 @@ The feta font is a font that was created specifically for use in LilyPond. The sources for the font are found in mf/*.mf. The feta font is merged from a number of subfonts. Each subfont -can contain at most 223 glyphs. +can contain at most 224 glyphs. This is because each subfont is +limited to a one-byte address space (256 glyphs maximum) and we +avoid the first 32 points in that address space, since they are +non-printing control characters in ASCII. In LilyPond, glyphs are accessed by glyph name, rather than by code point. Therefore, the naming of glyphs is significant. @@ -36,7 +42,64 @@ available at CTAN. mf2pt1 is used to create type 1 fonts from the metafont sources. -FontForge is used to display the resulting glyph shapes. +FontForge is used to postprocess the output of mf2pt1 and clean up +details of the font. It can also be used by a developer to +display the resulting glyph shapes. + +@node Adding a new font section +@section Adding a new font section + +The font is divided into sections, each of which contains less +than 224 glyphs. If more than 224 glyphs are included in a section, +an error will be generated. + +Each of the sections is contained in a separate @code{.mf} file. The +files are named according to the type of glyphs in that section. + +When adding a new section, it will be necessary to add the following: + +@itemize +@item +The code for the glyphs, in a file @code{.mf} +@item +Driver files used to create the font in different sizes +@item +An entry in the generic file used to create the font, or a new +generic file +@item +If necessary, new entries in the GNUmakefile +@item +An entry in @file{scripts/build/gen-emmentaler-scripts.py} +@end itemize + +See the examples in @code{mf/} for more information. + +@node Adding a new glyph +@section Adding a new glyph + +Adding a new glyph is done by modifying the .mf file to which the +glyph will be added. + +Necessary functions to draw the glyph can be added anywhere in the file, +but it is standard to put them immediately before the glyph definition. + +The glyph definition begins with: + +@example +fet_beginchar ("glyph description", "glyphname"); +@end example + +@noindent +with @code{glyph description} replaced with a short description of the +glyph, and @code{glyphname} replaced with the glyphname, which is chosen +to comply with the naming rules in @file{mf/README}. + +The metafont code used to draw the glyph follows the @code{fet_beginchar} +entry. The glyph is finished with: + +@example +fet_endchar; +@end example @node Building the changed font @section Building the changed font @@ -50,3 +113,28 @@ rm mf/out/* make @end example +@node METAFONT formatting rules +@section METAFONT formatting rules + +There are special formatting rules for METAFONT files. + +Tabs are used for the indentation of commands. + +When a path contains more than two points, put each point on a +separate line, with the operator at the beginning of the line. +The operators are indented to the same depth as the initial point +on the path using spaces. The indentation mechanism is illustrated +below, with @samp{------->} indicating a tab character and any other +indentation created using spaces. + +@example +def draw_something (test) = +------->if test: +------->------->fill z1 +------->-------> -- z2 +------->-------> -- z3 +------->-------> .. cycle; +------->fi; +enddef; +@end example +