]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/feta-autometric.mf
Add '-dcrop' option to ps and svg backends
[lilypond.git] / mf / feta-autometric.mf
index 3279ff1b29275ace94f49a7eecb58ad7ea3b1cb4..50ac474f54cacdaed67cabe1a1de264a7fa0665b 100644 (file)
-% 
-% autometric.mf -- administrative MF routines
-% 
-% source file of the Feta (not an acronym for Font-En-Tja)
-% pretty-but-neat music font
-% 
-% (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+% Feta (not the Font-En-Tja) music font -- administrative MF routines
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 %          Jan Nieuwenhuizen <janneke@gnu.org>
-% 
-% these macros help create ascii logging output
-% to automate generation of lily tables and tex backend
-% The output should be parsed by the mf-to-table script
+%
+% These macros help create ascii logging output
+% to automate generation of the lily tables.
+% The output should be parsed by the mf-to-table script.
+%
+% The LilyPond font is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version, or under the SIL Open Font License.
+%
+% LilyPond is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+
 
 message "******************************************************";
-message "Using feta Autometric macros. ";
-message "Do not worry about the @ signs in the output, they are not errors. "; 
+message "Using feta Autometric macros.";
+message "order of messages: ";
+message " NAME/CODE/BP/WD/DP/HT/WX/WY";
 message "******************************************************";
+message "";
+
 
 % font or database?
-def fet_beginfont(expr name,size,encod) =
-       font_identifier:=name&decimal size;
+def fet_beginfont (expr name, size, encod) =
+       font_identifier := name & decimal size;
        font_size size;
-       font_coding_scheme encod;
-       message "@{font@:GNU@:LilyPond@:"&name&"@:"&decimal size&"@:"&encod&"@}";
+       font_coding_scheme "asis";
+       message "@{font@:GNU@:LilyPond@:" & name
+               & "@:" & decimal size
+               & "@:" & encod
+               & "@}";
        message "";
-       enddef;
+enddef;
+
 
 def fet_endfont =
        message "@{tnof@}";
-       enddef;
+enddef;
+
 
 % group or table?
-def fet_begingroup(expr name) =
-       message "@{group@:"&name&"@}";
+def fet_begingroup (expr name) =
+begingroup;
+       save feta_group;
+       string feta_group;
+
+       feta_group := name;
+
+       message "@{group@:" & feta_group
+               & "@}";
        message "";
-       begingroup
 enddef;
 
-def fet_endgroup(expr name) =
-       endgroup;
-       message "@{puorg@:"&name&"@}";
+
+def fet_endgroup (expr name) =
+       message "@{puorg@:" & name
+               & "@}";
        message "";
+endgroup;
 enddef;
 
+
 def autometric_parameter (expr name, value) =
-       message "@{parameter@:"&name&"@:"&decimal value&"@}";
+       message "@{parameter@:" & name
+               & "@:" & decimal value
+               & "@}";
+enddef;
+
+
+def autometric_output_char =
+       message "@{char@:" & charnamestr
+               & "@:" & decimal charcode
+               & "@:" & decimal charbp
+               & "@:" & decimal charwd
+               & "@:" & decimal chardp
+               & "@:" & decimal charht
+               & "@:" & decimal charwx
+               & "@:" & decimal charwy
+               & "@:" & idstr
+               & "@}";
 enddef;
 
 
-def autometric_output_char=
-       message "@{char@:"&charnamestr&"@:"&decimal charcode&"@:"&decimal charbp&"@:"&decimal charwd&"@:"&decimal chardp&"@:"&decimal charht&"@:"&decimal charwx&"@:"&decimal charwy&"@:"&idstr&"@}";
+def hround_pixels (expr sharped) =
+       hround (sharped * hppp)
 enddef;
 
-def hround_pixels(expr sharped) = hround(sharped * hppp) enddef;
-def vround_pixels(expr sharped) = vround(sharped * vppp) enddef;
 
-def tand(expr alpha) = 
-       (sind alpha/cosd alpha)
-       enddef;
+def vround_pixels (expr sharped) =
+       vround (sharped * vppp)
+enddef;
 
-%breapth, width, depth, height
+
+def tand (expr alpha) =
+       (sind alpha / cosd alpha)
+enddef;
+
+
+def to_bp (expr num) =
+       decimal (num * bp_per_pixel)
+enddef;
+
+
+% breapth, width, depth, height
 %     breapth  x-depth
-def set_char_box(expr b_sharp, w_sharp, d_sharp,h_sharp) = 
+def set_char_box (expr b_sharp, w_sharp, d_sharp, h_sharp) =
        save scharbp, scharht, scharwd, schardp;
 
-       % some paranoia if someone calls set_char_box(charwd, charbp, .. )
+       % some paranoia if someone calls set_char_box (charwd, charbp, ...)
        scharbp := b_sharp;
        scharht := h_sharp;
        schardp := d_sharp;
@@ -74,17 +127,65 @@ def set_char_box(expr b_sharp, w_sharp, d_sharp,h_sharp) =
        chardp := schardp;
        charwd := scharwd;
 
-       w := hround(w_sharp *hppp);
-       b := hround(b_sharp *hppp);
-       h := hround(h_sharp *vppp);
-       d := hround(d_sharp *vppp);
+       w := hround (w_sharp * hppp);
+       b := hround (b_sharp * hppp);
+       h := vround (h_sharp * vppp);
+       d := vround (d_sharp * vppp);
 
        charwx := charwd;
        charwy := 0;
+
+       % additions for mf2pt1 (`bbox' is called `glyph_dimensions' starting
+       % with version 2.4.2)
+       if known bp_per_pixel:
+               special "% MF2PT1: bbox "
+                       & to_bp (-b) & " "
+                       & to_bp (-d) & " "
+                       & to_bp (w) & " "
+                       & to_bp (h);
+               special "% MF2PT1: glyph_dimensions "
+                       & to_bp (-b) & " "
+                       & to_bp (-d) & " "
+                       & to_bp (w) & " "
+                       & to_bp (h);
+               special "% MF2PT1: font_size " & decimal designsize;
+               special "% MF2PT1: font_slant " & decimal font_slant_;
+
+               for fvar = "font_identifier",
+                          "font_coding_scheme",
+                          "font_version",
+                          "font_comment",
+                          "font_family",
+                          "font_weight",
+                          "font_unique_id",
+                          "font_name":
+                       if known scantokens (fvar & "_"):
+                               special "% MF2PT1: "
+                                       & fvar & " "
+                                       & scantokens (fvar & "_");
+                       fi;
+               endfor;
+
+               for fvar = "font_underline_position",
+                          "font_underline_thickness":
+                       if known scantokens (fvar & "_"):
+                               special "% MF2PT1: "
+                                       & fvar & " "
+                                       & scantokens ("decimal " & fvar & "_");
+                       fi;
+               endfor;
+
+               special "% MF2PT1: font_fixed_pitch "
+                       & (if font_fixed_pitch_: "1" else: "0" fi);
+
+               % this must come after the `font_size' special
+               special "% MF2PT1: charwd " & decimal charwd;
+       fi;
 enddef;
 
-def no_dimen_beginchar(expr c) =
-       begingroup
+
+def no_dimen_beginchar (expr c) =
+begingroup;
        charcode := if known c: byte c else: 0; fi;
        charic := 0;
        clearxy;
@@ -95,48 +196,70 @@ enddef;
 
 
 %
-% we leave the ctrl characters alone.
+% we leave the ctrl characters alone
 %
-code:=32;
+code := 32;
+
 
 % starts just as plain mf's beginchar:
-%     charcode, 
+%     charcode,
 % and then adds:
 %     charname see below
 %     id       index in lily's table
 
-% the dims are uninitialised; you should use set_char_box manually.
-def fet_beginchar(expr name, id_lit) =
-       save  idstr, charnamestr;
+% The dimensions are uninitialised; you should use set_char_box manually.
+def fet_beginchar (expr name, id_lit) =
+       save idstr, charnamestr;
        save charbp;
-       save w,b,h,d;
+       save w, b, h, d;
        save charwx, charwy;
 
        string idstr, charnamestr;
        charnamestr := name;
        idstr := id_lit;
 
-       no_dimen_beginchar(incr code) name;
-       enddef;
+       % addition for mf2pt1
+       if known bp_per_pixel:
+               if known feta_group:
+                       special "% MF2PT1: glyph_name "
+                               & feta_group & "." & idstr;
+               else:
+                       special "% MF2PT1: glyph_name " & idstr;
+               fi;
+       fi;
+
+       no_dimen_beginchar (incr code) name;
+enddef;
+
 
+def makebox_with_breapth (text r) =
+       for y = -d, 0, h:
+               r ((-b, y), (w, y));
+       endfor;
 
-def makebox_with_breapth(text r) = 
-       for y = -d, 0, h: r((-b, y),(w,y)); endfor
-       for x = -b, 0, w: r((x, -d),(x, h)); endfor
+       for x = -b, 0, w:
+               r ( (x, -d), (x, h));
+       endfor;
 enddef;
 
+
 %
-% override plain endchar.  We want a different box. 
+% override plain endchar.  We want a different box.
 %
 def breapth_endchar =
        scantokens extra_endchar;
-       if proofing > 0: makebox_with_breapth(proofrule); fi
-       chardx := (w + b);      %what the hack is chardx
+
+       if proofing > 0:
+               makebox_with_breapth (proofrule);
+       fi;
+
+       chardx := (w + b);      % what the heck is chardx
        shipit;
-       endgroup
+endgroup;
 enddef;
 
-def fet_endchar=
+
+def fet_endchar =
        autometric_output_char;
        breapth_endchar;
-       enddef;
+enddef;