X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-autometric.mf;h=50ac474f54cacdaed67cabe1a1de264a7fa0665b;hb=HEAD;hp=3b1b79868475f6a97c4cb07bd918551a8657525d;hpb=1bdf3db27451a0873b2c97545f0beab2f5cce06a;p=lilypond.git diff --git a/mf/feta-autometric.mf b/mf/feta-autometric.mf index 3b1b798684..50ac474f54 100644 --- a/mf/feta-autometric.mf +++ b/mf/feta-autometric.mf @@ -1,60 +1,122 @@ -% -% autometric.mf -- administrative MF routines -% -% source file of the Feta (Font-En-Tja) pretty-but-neat music font -% -% (c) 1997 Han-Wen Nienhuys -% Jan Nieuwenhuizen -% -% 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 +% 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 +% Jan Nieuwenhuizen +% +% 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 . + + +message "******************************************************"; +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) = - font_identifier:=name&decimal size; +def fet_beginfont (expr name, size, encod) = + font_identifier := name & decimal size; font_size size; - message "@{font@:"&name&"@:"&decimal size&"@}"; + font_coding_scheme "asis"; + message "@{font@:GNU@:LilyPond@:" & name + & "@:" & decimal size + & "@:" & encod + & "@}"; message ""; - enddef; +enddef; + + +def fet_endfont = + message "@{tnof@}"; +enddef; -def fet_endfont(expr name) = - message "@{tnof@:"&name&"@}"; - message ""; - 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 + & "@}"; enddef; -def autometric_output_char= - message "@{char@:"&charnamestr&"@:"&decimal charcode&"@:"&decimal charbp&"@:"&decimal charwd&"@:"&decimal chardp&"@:"&decimal charht&"@:"&idstr&"@:"&texstr&"@}"; + +def autometric_output_char = + message "@{char@:" & charnamestr + & "@:" & decimal charcode + & "@:" & decimal charbp + & "@:" & decimal charwd + & "@:" & decimal chardp + & "@:" & decimal charht + & "@:" & decimal charwx + & "@:" & decimal charwy + & "@:" & idstr + & "@}"; +enddef; + + +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 vround_pixels (expr sharped) = + vround (sharped * vppp) +enddef; -def tand(expr alpha) = - (sind alpha/cosd alpha) - enddef; +def tand (expr alpha) = + (sind alpha / cosd alpha) +enddef; -%breapth, width, depth, height + +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; @@ -65,14 +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; @@ -81,46 +194,72 @@ def no_dimen_beginchar(expr c) = scantokens extra_beginchar; enddef; -code:=-1; + +% +% we leave the ctrl characters alone +% +code := 32; + % starts just as plain mf's beginchar: -% charcode, +% charcode, % and then adds: % charname see below % id index in lily's table -% texstr name of tex macro in lily's table and tex backend -% the dims are uninitialised; you should use set_char_box manually. -def fet_beginchar(expr name, id_lit, texstr_lit) = - save texstr, 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; - string texstr, idstr, charnamestr; - texstr := texstr_lit; + 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 := 10*(w + b); + + 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;