diff options
36 files changed, 829 insertions, 76 deletions
@@ -1,3 +1,20 @@ +1.3.43.jcn1 +=========== + +* Added a Piano_pedal_engraver. + +* Removed some empty files. + +* Created piano pedal symbols: * - . P e d. + +* Fixed ps-to-pfa.py to handle multiple unfills. + +* Moved accordion symbols out of feta-script to end of font. + +* Bugfix: don't create tfm's, pfa's etc of feta-test fonts. + +* Fixed blot_diameter for small resolutions. + 1.3.43 ====== @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=43 -MY_PATCH_LEVEL= +MY_PATCH_LEVEL=jcn1 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/buildscripts/ps-to-pfa.py b/buildscripts/ps-to-pfa.py index bab745820d..796c5d8b37 100755 --- a/buildscripts/ps-to-pfa.py +++ b/buildscripts/ps-to-pfa.py @@ -122,8 +122,7 @@ end % of font dictionary f.write ('' 'exch definefont pop % Define the font\n') - -suspect_re = re.compile ('closepath (.*?) 1 setgray newpath (.*?) closepath fill') +suspect_re = re.compile ('closepath ((gsave )*fill( grestore stroke)*) 1 setgray newpath (.*?) closepath fill') def characters (f): sys.stderr.write ('[') @@ -153,7 +152,7 @@ def characters (f): m = suspect_re.search (s) while m: fill = m.group (1) - path = m.group (2) + path = m.group (4) # be complicated, in case of gsave/grestore. # vill as quick hack to avoid duple substitutions. diff --git a/input/test/ped.ly b/input/test/ped.ly new file mode 100644 index 0000000000..40410a32f6 --- /dev/null +++ b/input/test/ped.ly @@ -0,0 +1,14 @@ +\score{ +\context Staff \notes\relative c'{ +c\sustaindown d e f\sustainup g\sustaindown b c +c,\sustainup\sustaindown d e f \sustainup g\sustaindown b c +\property Staff.stopStartSustain = #"-P" +\property Staff.startSustain = #"P" +c,\sustainup\sustaindown d e f \sustainup g\sustaindown b c +} +\paper{ +} +\midi{ +\tempo 4 = 60; +} +} diff --git a/input/test/pedal.ly b/input/test/pedal.ly new file mode 100644 index 0000000000..cd7398265c --- /dev/null +++ b/input/test/pedal.ly @@ -0,0 +1,14 @@ +\score{ +\context Staff \notes\relative c{ +c\sustaindown d e f\sustainup g\sustaindown b c +c,\sustainup\sustaindown d e f \sustainup g\sustaindown b c +\property Staff.stopStartSustain = #"-P" +\property Staff.startSustain = #"P" +c,\sustainup\sustaindown d e f \sustainup g\sustaindown b c +} +\paper{ +} +\midi{ +\tempo 4 = 60; +} +} diff --git a/lily/include/axis-group-item.hh b/lily/include/axis-group-item.hh index 09c7cfafd0..e69de29bb2 100644 --- a/lily/include/axis-group-item.hh +++ b/lily/include/axis-group-item.hh @@ -1 +0,0 @@ -#error diff --git a/lily/include/axis-group-spanner.hh b/lily/include/axis-group-spanner.hh index 65296f8106..e69de29bb2 100644 --- a/lily/include/axis-group-spanner.hh +++ b/lily/include/axis-group-spanner.hh @@ -1,2 +0,0 @@ - -#error diff --git a/lily/include/notename-table.hh b/lily/include/notename-table.hh index 8b13789179..e69de29bb2 100644 --- a/lily/include/notename-table.hh +++ b/lily/include/notename-table.hh @@ -1 +0,0 @@ - diff --git a/lily/include/priority-halign-engraver.hh b/lily/include/priority-halign-engraver.hh index 09c7cfafd0..e69de29bb2 100644 --- a/lily/include/priority-halign-engraver.hh +++ b/lily/include/priority-halign-engraver.hh @@ -1 +0,0 @@ -#error diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh index 2435085d57..bb34f17efe 100644 --- a/lily/include/rhythmic-head.hh +++ b/lily/include/rhythmic-head.hh @@ -12,6 +12,12 @@ #include "item.hh" +/* + Why don't I have a + VIRTUAL_COPY_CONS (Score_element); + see also note-head, rest. + ? +*/ class Rhythmic_head : public Item { diff --git a/lily/lexer.ll b/lily/lexer.ll index 1f75b5d39b..23692d60d7 100644 --- a/lily/lexer.ll +++ b/lily/lexer.ll @@ -25,7 +25,6 @@ #include <stdio.h> #include <ctype.h> -#include "notename-table.hh" #include "lily-guile.hh" #include "string.hh" #include "string-convert.hh" diff --git a/lily/lookup.cc b/lily/lookup.cc index 8be036fa78..166af27043 100644 --- a/lily/lookup.cc +++ b/lily/lookup.cc @@ -365,11 +365,11 @@ Lookup::accordion (SCM s, Real staff_space) const if (sym == "Discant") { - Molecule r = afm_find("scripts-accDiscant"); + Molecule r = afm_find("accordion-accDiscant"); m.add_molecule(r); if (reg.left_str(1) == "F") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 2.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); @@ -397,27 +397,27 @@ Lookup::accordion (SCM s, Real staff_space) const } if (eflag & 0x02) { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 1.5 PT, Y_AXIS); m.add_molecule(d); } if (eflag & 0x04) { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 1.5 PT, Y_AXIS); d.translate_axis(0.8 * staff_space PT, X_AXIS); m.add_molecule(d); } if (eflag & 0x01) { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 1.5 PT, Y_AXIS); d.translate_axis(-0.8 * staff_space PT, X_AXIS); m.add_molecule(d); } if (reg.left_str(2) == "SS") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(0.5 * staff_space PT, Y_AXIS); d.translate_axis(0.4 * staff_space PT, X_AXIS); m.add_molecule(d); @@ -427,7 +427,7 @@ Lookup::accordion (SCM s, Real staff_space) const } if (reg.left_str(1) == "S") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(0.5 * staff_space PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); @@ -435,29 +435,29 @@ Lookup::accordion (SCM s, Real staff_space) const } else if (sym == "Freebase") { - Molecule r = afm_find("scripts-accFreebase"); + Molecule r = afm_find("accordion-accFreebase"); m.add_molecule(r); if (reg.left_str(1) == "F") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 1.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); } if (reg == "E") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 0.5 PT, Y_AXIS); m.add_molecule(d); } } else if (sym == "Bayanbase") { - Molecule r = afm_find("scripts-accBayanbase"); + Molecule r = afm_find("accordion-accBayanbase"); m.add_molecule(r); if (reg.left_str(1) == "T") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 2.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); @@ -465,14 +465,14 @@ Lookup::accordion (SCM s, Real staff_space) const /* include 4' reed just for completeness. You don't want to use this. */ if (reg.left_str(1) == "F") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 1.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); } if (reg.left_str(2) == "EE") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 0.5 PT, Y_AXIS); d.translate_axis(0.4 * staff_space PT, X_AXIS); m.add_molecule(d); @@ -482,7 +482,7 @@ Lookup::accordion (SCM s, Real staff_space) const } if (reg.left_str(1) == "E") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 0.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); @@ -490,25 +490,25 @@ Lookup::accordion (SCM s, Real staff_space) const } else if (sym == "Stdbase") { - Molecule r = afm_find("scripts-accStdbase"); + Molecule r = afm_find("accordion-accStdbase"); m.add_molecule(r); if (reg.left_str(1) == "T") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 3.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); } if (reg.left_str(1) == "F") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 2.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); } if (reg.left_str(1) == "M") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 2 PT, Y_AXIS); d.translate_axis(staff_space PT, X_AXIS); m.add_molecule(d); @@ -516,14 +516,14 @@ Lookup::accordion (SCM s, Real staff_space) const } if (reg.left_str(1) == "E") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 1.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); } if (reg.left_str(1) == "S") { - Molecule d = afm_find("scripts-accDot"); + Molecule d = afm_find("accordion-accDot"); d.translate_axis(staff_space * 0.5 PT, Y_AXIS); m.add_molecule(d); reg = reg.right_str(reg.length_i()-1); @@ -533,22 +533,22 @@ Lookup::accordion (SCM s, Real staff_space) const for the rectangle */ else if (sym == "SB") { - Molecule r = afm_find("scripts-accSB"); + Molecule r = afm_find("accordion-accSB"); m.add_molecule(r); } else if (sym == "BB") { - Molecule r = afm_find("scripts-accBB"); + Molecule r = afm_find("accordion-accBB"); m.add_molecule(r); } else if (sym == "OldEE") { - Molecule r = afm_find("scripts-accOldEE"); + Molecule r = afm_find("accordion-accOldEE"); m.add_molecule(r); } else if (sym == "OldEES") { - Molecule r = afm_find("scripts-accOldEES"); + Molecule r = afm_find("accordion-accOldEES"); m.add_molecule(r); } return m; diff --git a/lily/new-span-bar-engraver.cc b/lily/new-span-bar-engraver.cc index 8b13789179..e69de29bb2 100644 --- a/lily/new-span-bar-engraver.cc +++ b/lily/new-span-bar-engraver.cc @@ -1 +0,0 @@ - diff --git a/lily/notename-table.cc b/lily/notename-table.cc index 8b13789179..e69de29bb2 100644 --- a/lily/notename-table.cc +++ b/lily/notename-table.cc @@ -1 +0,0 @@ - diff --git a/lily/piano-pedal-engraver.cc b/lily/piano-pedal-engraver.cc new file mode 100644 index 0000000000..6d0327ddc3 --- /dev/null +++ b/lily/piano-pedal-engraver.cc @@ -0,0 +1,246 @@ +/* + piano-pedal-engraver.cc -- implement Piano_pedal_engraver + + source file of the GNU LilyPond music typesetter + + (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org> + + */ + +#include "engraver.hh" +#include "musical-request.hh" +#include "score-element.hh" +#include "item.hh" +#include "lookup.hh" +#include "lily-guile.hh" +#include "note-head.hh" +#include "stem.hh" +#include "side-position-interface.hh" +#include "staff-symbol-referencer.hh" + + +/* + TODO: + sostenuto + una-chorda / tre-corde + */ + + +/* + Urg. + This is almost text + Problem is: + * we have no kerning + * symbols are at wrong place in font +*/ + +class Sustain_pedal : public Item +{ +public: + VIRTUAL_COPY_CONS (Score_element); + +protected: + virtual Molecule do_brew_molecule () const; + virtual void after_line_breaking (); +}; + +void +Sustain_pedal::after_line_breaking () +{ + Side_position_interface i (this); + Direction d = i.get_direction (); + i.set_direction (d); +} + +Molecule +Sustain_pedal::do_brew_molecule () const +{ + Molecule mol; + SCM glyph = get_elt_property ("glyph"); + if (glyph == SCM_UNDEFINED) + return mol; + String text = ly_scm2string (glyph); + + for (int i = 0; i < text.length_i (); i++) + { + // leuke koor dump door tiepo, snapnie helemaal: + //String idx = ("pedal-") + text[i]; + // urg, Byte* ?? + // braak: waarom vindt String het zo moeilijk om + // String + char te doen? + //String idx = "pedal-" + String (&text.byte_C ()[i], 1); + String idx = String ("pedal-") + String (&text.byte_C ()[i], 1); + Molecule m = lookup_l ()->afm_find (idx); + if (m.empty_b ()) + continue; + Real kern = 0; + if (i) + { + SCM s = scm_eval (gh_list (ly_symbol2scm ("pedal-kerning"), + ly_str02scm (String (&text.byte_C ()[i - 1], 1).ch_C ()), + ly_str02scm (String (&text.byte_C ()[i], 1).ch_C ()), + SCM_UNDEFINED)); + if (gh_number_p (s)) + { + Staff_symbol_referencer_interface st (this); + Real staff_space = st.staff_space (); + kern = gh_scm2double (s) * staff_space; + } + } + mol.add_at_edge (X_AXIS, RIGHT, m, kern); + } + + return mol; +} + +/** + engrave Piano pedals + */ +class Piano_pedal_engraver : public Engraver +{ +public: + VIRTUAL_COPY_CONS (Translator); + Piano_pedal_engraver (); + +protected: + virtual bool do_try_music (Music*); + virtual void do_process_music (); + virtual void do_pre_move_processing (); + virtual void do_post_move_processing (); + virtual void acknowledge_element (Score_element_info); + +private: + Span_req* sustain_start_req_l_; + Drul_array<Span_req*> sustain_req_l_drul_; + Sustain_pedal* sustain_p_; +}; + +ADD_THIS_TRANSLATOR(Piano_pedal_engraver); + +Piano_pedal_engraver::Piano_pedal_engraver () +{ + sustain_p_ = 0; + sustain_req_l_drul_[START] = 0; + sustain_req_l_drul_[STOP] = 0; + sustain_start_req_l_ = 0; +} + +/* + Urg: Code dup + I'm a script + */ +void +Piano_pedal_engraver::acknowledge_element (Score_element_info i) +{ + if (sustain_p_) + { + if (Note_head* n = dynamic_cast<Note_head*> (i.elem_l_)) + { + Side_position_interface st (sustain_p_); + st.add_support (n); + if (st.get_axis( ) == X_AXIS + && !sustain_p_->parent_l (Y_AXIS)) + sustain_p_->set_parent (n, Y_AXIS); + } + if (Stem* s = dynamic_cast<Stem*> (i.elem_l_)) + { + Side_position_interface st (sustain_p_); + st.add_support (s); + } + } +} + +bool +Piano_pedal_engraver::do_try_music (Music *m) +{ + if (Span_req * s = dynamic_cast<Span_req*>(m)) + { + if (s->span_type_str_ == "sustain") + { + sustain_req_l_drul_[s->span_dir_] = s; + return true; + } + } + return false; +} + +void +Piano_pedal_engraver::do_process_music () +{ + SCM s = SCM_UNDEFINED; + if (sustain_req_l_drul_[STOP] && sustain_req_l_drul_[START]) + { + if (!sustain_start_req_l_) + { + sustain_req_l_drul_[STOP]->warning (_ ("can't find start of piano_pedal")); + } + else + { + s = get_property ("stopStartSustain"); + if (!gh_string_p (s)) + s = ly_str02scm ("*Ped."); + } + sustain_start_req_l_ = sustain_req_l_drul_[START]; + } + else if (sustain_req_l_drul_[STOP]) + { + if (!sustain_start_req_l_) + { + sustain_req_l_drul_[STOP]->warning (_ ("can't find start of piano_pedal")); + } + else + { + s = get_property ("stopSustain"); + if (!gh_string_p (s)) + s = ly_str02scm ("*"); + } + sustain_start_req_l_ = 0; + } + else if (sustain_req_l_drul_[START]) + { + sustain_start_req_l_ = sustain_req_l_drul_[START]; + s = get_property ("startSustain"); + if (!gh_string_p (s)) + s = ly_str02scm ("Ped."); + } + if (s != SCM_UNDEFINED) + { + sustain_p_ = new Sustain_pedal; + sustain_p_->set_elt_property ("glyph", s); + + + Side_position_interface si (sustain_p_); + si.set_axis (Y_AXIS); + + /* Hmm, + If set to empty, it can't be centred + Howto centre non-fat text? + sustain_p_->set_empty (X_AXIS); + */ + sustain_p_->set_elt_property ("self-alignment-X", gh_int2scm (0)); + sustain_p_->add_offset_callback (Side_position_interface::aligned_on_self, X_AXIS); + sustain_p_->add_offset_callback (Side_position_interface::centered_on_parent, X_AXIS); + announce_element (Score_element_info (sustain_p_, + sustain_req_l_drul_[START] + ? sustain_req_l_drul_[START] + : sustain_req_l_drul_[STOP])); + } +} + +void +Piano_pedal_engraver::do_pre_move_processing () +{ + if (sustain_p_) + { + side_position (sustain_p_).add_staff_support (); + typeset_element (sustain_p_); + } + sustain_p_ = 0; +} + +void +Piano_pedal_engraver::do_post_move_processing () +{ + sustain_req_l_drul_[STOP] = 0; + sustain_req_l_drul_[START] = 0; +} diff --git a/lily/piano-pedal-performer.cc b/lily/piano-pedal-performer.cc index f5cfd90895..444028b8de 100644 --- a/lily/piano-pedal-performer.cc +++ b/lily/piano-pedal-performer.cc @@ -15,7 +15,7 @@ /* TODO: sostenuto - una-chorda ? + una-chorda / tre-corde */ /** @@ -36,27 +36,27 @@ protected: private: Link_array<Audio_piano_pedal> audio_p_arr_; - Span_req* span_start_req_l_; - Drul_array<Span_req*> span_req_l_drul_; + Span_req* sustain_start_req_l_; + Drul_array<Span_req*> sustain_req_l_drul_; }; ADD_THIS_TRANSLATOR (Piano_pedal_performer); Piano_pedal_performer::Piano_pedal_performer () { - span_req_l_drul_[START] = 0; - span_req_l_drul_[STOP] = 0; - span_start_req_l_ = 0; + sustain_req_l_drul_[START] = 0; + sustain_req_l_drul_[STOP] = 0; + sustain_start_req_l_ = 0; } void Piano_pedal_performer::do_process_music () { - if (span_req_l_drul_[STOP]) + if (sustain_req_l_drul_[STOP]) { - if (!span_start_req_l_) + if (!sustain_start_req_l_) { - span_req_l_drul_[STOP]->warning (_ ("can't find start of piano_pedal")); + sustain_req_l_drul_[STOP]->warning (_ ("can't find start of piano_pedal")); } else { @@ -64,12 +64,12 @@ Piano_pedal_performer::do_process_music () p->type_b_ = false; audio_p_arr_.push (p); } - span_start_req_l_ = 0; + sustain_start_req_l_ = 0; } - if (span_req_l_drul_[START]) + if (sustain_req_l_drul_[START]) { - span_start_req_l_ = span_req_l_drul_[START]; + sustain_start_req_l_ = sustain_req_l_drul_[START]; Audio_piano_pedal* p = new Audio_piano_pedal; p->type_b_ = true; audio_p_arr_.push (p); @@ -87,8 +87,8 @@ Piano_pedal_performer::do_pre_move_processing () void Piano_pedal_performer::do_post_move_processing () { - span_req_l_drul_[STOP] = 0; - span_req_l_drul_[START] = 0; + sustain_req_l_drul_[STOP] = 0; + sustain_req_l_drul_[START] = 0; } bool @@ -96,9 +96,9 @@ Piano_pedal_performer::do_try_music (Music* r) { if (Span_req * s = dynamic_cast<Span_req*>(r)) { - if (s-> span_type_str_ == "sustain") + if (s->span_type_str_ == "sustain") { - span_req_l_drul_[s->span_dir_] = s; + sustain_req_l_drul_[s->span_dir_] = s; return true; } } diff --git a/lily/span-score-bar-engraver.cc b/lily/span-score-bar-engraver.cc index 8b13789179..e69de29bb2 100644 --- a/lily/span-score-bar-engraver.cc +++ b/lily/span-score-bar-engraver.cc @@ -1 +0,0 @@ - diff --git a/ly/engraver.ly b/ly/engraver.ly index 68a8c9df2e..2859461903 100644 --- a/ly/engraver.ly +++ b/ly/engraver.ly @@ -144,6 +144,7 @@ VoiceContext = \translator { \consists "Melisma_engraver"; textScriptPadding = #3.0 \consists "Text_engraver"; + \consists "Piano_pedal_engraver"; \consists "Script_engraver"; \consists "Script_column_engraver"; \consists "Rhythmic_column_engraver"; diff --git a/mf/GNUmakefile b/mf/GNUmakefile index 4549535290..2cbdcded23 100644 --- a/mf/GNUmakefile +++ b/mf/GNUmakefile @@ -3,14 +3,18 @@ depth = .. STEPMAKE_TEMPLATES=metafont metapost asciifont install install-out +include $(depth)/make/stepmake.make AF_FILES = $(wildcard *.af) EXTRA_DIST_FILES += README feta.tex -FET_FILES = $(wildcard feta[0-9]*.mf) -FONT_FILES = $(wildcard feta*[0-9].mf) -XPM_FONTS = feta20 +# don't try to make fonts from test files +TEST_FILES = $(wildcard *test*.mf) +FET_FILES = $(filter-out $(TEST_FILES),$(wildcard feta[0-9]*.mf)) +FONT_FILES = $(filter-out $(TEST_FILES),$(wildcard feta*[0-9].mf)) + +XPM_FONTS = feta20 feta-nummer10 feta-braces20 LOG_FILES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.log)) TEXTABLES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.tex)) @@ -18,6 +22,11 @@ AFM_FILES = $(addprefix $(outdir)/, $(FET_FILES:.mf=.afm) $(AF_FILES:.af=.afm)) TFM_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.tfm)) PFA_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.pfa)) +foo: + @echo fof: $(FONT_FILES) + @echo fef: $(FET_FILES) + @echo tfm: $(TFM_FILES) + # Make tfm files first, log files last, # so that normally log files aren't made twice ALL_GEN_FILES= $(TFM_FILES) $(TEXTABLES) $(AFM_FILES) $(TFM_FILES) $(PFA_FILES) $(LOG_FILES) @@ -42,9 +51,7 @@ INSTALLATION_OUT_FILES3=$(TFM_FILES) INSTALLATION_OUT_DIR4=$(datadir)/pfa INSTALLATION_OUT_FILES4=$(PFA_FILES) - export MFINPUTS:=.:$(MFINPUTS) -include $(depth)/make/stepmake.make default: $(ALL_GEN_FILES) diff --git a/mf/feta-accordion.mf b/mf/feta-accordion.mf index e08c90bf00..c06618dc37 100644 --- a/mf/feta-accordion.mf +++ b/mf/feta-accordion.mf @@ -1,5 +1,7 @@ % -*- Fundamental -*- +fet_begingroup("accordion") + accreg_dot_size# := .5staff_space#; accreg_linethickness# := 1.3stafflinethickness#; @@ -150,16 +152,28 @@ def def_some_vars = enddef; def print_penpos (suffix $)= - message str $ &": ("&decimal x.$.l&", "&decimal y.$.l&"); ("&decimal x.$.r&", "&decimal y.$.r&");"; + message "z"&str $ &"l = ("&decimal x.$.l&", "&decimal y.$.l&"); z"&str $ &"r = ("&decimal x.$.r&", "&decimal y.$.r&");"; enddef; +%fet_beginchar("accTEST", "accTEST", "accTEST") +% set_char_box(.4staffsize#, .4staffsize#, 0, 2.4staff_space#); +% def_some_vars; +% penlabels(10, 11, 12, 13, 14); +% penstroke z10e--z11e{right}..z12e..z13e{left}--z14e; +%fet_endchar; + fet_beginchar("accSB", "accSB", "accSB") set_char_box(.4staffsize#, .4staffsize#, 0, 2.4staff_space#); def_some_vars; def_B(.35width, .7height); - penstroke z10e--z11e{right}..z12e..z13e{left}--z14e; + %print_penpos (10); + %print_penpos (11); + %print_penpos (12); + %print_penpos (13); + %print_penpos (14); penlabels(10, 11, 12, 13, 14); + penstroke z10e--z11e{right}..z12e..z13e{left}--z14e; penstroke z13e{right}..z15e{up}..z16e{left}--z17e; penstroke z18e--z19e; @@ -283,3 +297,5 @@ fet_beginchar("accOldEES", "accOldEES", "accOldEES") currentpicture := currentpicture shifted (-w/2, -shy*h); currentpicture := currentpicture shifted (0, r); fet_endchar; + +fet_endgroup("accordion") diff --git a/mf/feta-generic.mf b/mf/feta-generic.mf index 94c8c67611..4d01e53bf7 100644 --- a/mf/feta-generic.mf +++ b/mf/feta-generic.mf @@ -22,8 +22,7 @@ make_pen_stack; make_picture_stack; input feta-params; - - +font_x_height staff_space#; if test = 0: input feta-eindelijk; @@ -34,13 +33,17 @@ if test = 0: input feta-banier; input feta-klef; input feta-timesig; + input feta-pendaal; + input feta-accordion; else: % input feta-bolletjes; % input feta-banier; % input feta-eindelijk; % input feta-klef; % input feta-toevallig; - input feta-schrift; +% input feta-schrift; % input feta-haak; % input feta-timesig; + input feta-pendaal; +% input feta-accordion; fi diff --git a/mf/feta-macros.mf b/mf/feta-macros.mf index 47e415c70d..814c82a16d 100644 --- a/mf/feta-macros.mf +++ b/mf/feta-macros.mf @@ -214,7 +214,11 @@ def draw_bulb(expr turndir, zl, zr, bulb_rad, radius_factor)= save rad, ang; ang = angle(zr-zl); - z0 = zr + bulb_rad * (zl-zr)/length(zr -zl); + + % don't get near infinity + %z0 = zr + bulb_rad * (zl-zr)/length(zr -zl); + z0 = zr + bulb_rad /length(zr -zl) * (zl-zr); + rad = bulb_rad; z1 = z0 + radius_factor* rad * dir(ang + turndir* 100); diff --git a/mf/feta-nummer-generic.mf b/mf/feta-nummer-generic.mf index cdd56736c3..c171f9b42d 100644 --- a/mf/feta-nummer-generic.mf +++ b/mf/feta-nummer-generic.mf @@ -5,14 +5,16 @@ test:=0; input feta-autometric; input feta-macros; +input feta-params; -blot_diameter# = .4pt#; +%blot_diameter# = .4pt#; fet_beginfont("feta-nummer", size); mode_setup; height#:=designsize; +font_x_height height#; save b,h; 4h+b=1.15; 10h+b=1; fatten:=designsize*h+b; diff --git a/mf/feta-nummer.mf b/mf/feta-nummer.mf index b66cc177a5..a7664589ef 100644 --- a/mf/feta-nummer.mf +++ b/mf/feta-nummer.mf @@ -6,7 +6,7 @@ % % (c) 1997--2000 Jan Nieuwenhuizen <janneke@gnu.org> -fet_begingroup("nummer") +fet_begingroup("number") define_pixels(height,thick,thick,thin,hair,flare); define_pixels(foot_top,foot_width); @@ -85,7 +85,8 @@ save dot_diam; dot_diam# = 7/8flare#; define_pixels(dot_diam); -code := 43; + +code := 43; % , = 44 % urg fet_beginchar("Numeral comma", ",", "comma") @@ -121,7 +122,7 @@ fet_endchar; % skip slash -code := 47; +code := 47; % 0 = 48 fet_beginchar("Numeral 0", "0", "zero") % set_char_box(0, 4/5height#*widen, 0, height#); @@ -416,5 +417,5 @@ fet_beginchar("Numeral 9", "9", "nine") currentpicture := currentpicture shifted (w,h); fet_endchar; -fet_endgroup("nummer") +fet_endgroup("number") diff --git a/mf/feta-params.mf b/mf/feta-params.mf index 21b365958f..702604002a 100644 --- a/mf/feta-params.mf +++ b/mf/feta-params.mf @@ -4,7 +4,7 @@ stafflines = 5; staff_space#:=staffsize#/(stafflines-1); % URG! -font_x_height staff_space# ; +%font_x_height staff_space# ; % % [D.K.Roush & J.S.Gourlay] say this should be 0.072 @@ -39,4 +39,10 @@ overdone_heads = 0.0; % numeric blot_diameter; blot_diameter# = .4pt#; +if (blot_diameter# * hppp) < 1: + blot_diameter# := 1/hppp; +fi +if (blot_diameter# * vppp) < 1: + blot_diameter# := 1/vppp; +fi define_pixels(blot_diameter); diff --git a/mf/feta-pendaal.mf b/mf/feta-pendaal.mf new file mode 100644 index 0000000000..2cdbddc0a0 --- /dev/null +++ b/mf/feta-pendaal.mf @@ -0,0 +1,262 @@ +% feta-pendaal.mf -- piano pedal markings +% +% part of LilyPond's pretty-but-neat music font +% +% source file of the Feta (not the Font-En-Tja) music font +% +% (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org> +% +% Voor Cup + +% Kerning +% +% Pe = -0.034 pedalh == -0.07 staff-space +% ed = -0.27 pedalh == -0.53 staff-space + +fet_begingroup("pedal") + +pedalpha = 40; +pedbeta = 25; + +penh#=0.7stafflinethickness#; +penw#=4penh#; +%penw#=penh#; +define_pixels (penh,penw); + +pedalh# = 2staff_space#; +pedalbh# = 4/7pedalh#; +define_pixels (pedalh,pedalbh); + +% code values for own pedal font commented out +% code := 41; % * = 42 + +def draw_asterisk_bulb (expr w, h, i) = + begingroup; + clearxy; + save bulb, p; + path p; + bulb = 4/3penw; + + pickup pencircle scaled penh; + penpos 1 (bulb, 180); + penpos 2 (bulb, 0); + penpos 3 (penh, 0); + penpos 4 (penw, 0); + + z0 = (1/2w, h - 1/2w); + z1 = (1/2w, h-1/2bulb); + z2 = z1; + z3 = (x1, y1-penw); + z4 = (x1, y3-2penh); + + penlabels (1,2,3,4); +% penstroke z1e{up}..z2e{down}..z3e{down}..z4e; + p = z1l{up}..z2l{down}..z3l{down}..z4l..z4r + ..z3r{up}..z2r{up}..z1r{down}..cycle; + p := p rotatedaround (z0, 360/8i); + fill p; + endgroup; + enddef; + +fet_beginchar("Pedal asterisk", "*", "pedal-asterisk") + set_char_box(0, 7/9pedalh#, 0, pedalh#); + z0 = (1/2w, h - 1/2w); + for i = 0 upto 7: + draw_asterisk_bulb (w, h, i); + pickup pencircle scaled penw; + undraw z0; + endfor +fet_endchar; + +% skip + and , + +% code := 44; % - = 45 + +fet_beginchar("Pedal dash", "-", "pedal-dash") + set_char_box(0, 3penw#, 0, pedalbh#); + pickup pencircle scaled penh; + + penpos 1 (penw, 60); + penpos 2 (penw, 60); + z1l = (0, 2/3h - 1/2penw); + z2r = (w, y1l + 1.2penw); + penlabels (1,2); + penstroke z1e{dir 40}..tension 1.2 ..z2e{dir 40}; +fet_endchar; + +fet_beginchar("Pedal dot", ".", "pedal-dot") + set_char_box(0, penw#, 0, penw#); + pickup pencircle scaled penw; + draw (1/2penw,1/2penw); +fet_endchar; + +% code := 79; % P = 80 + +fet_beginchar("Pedal P", "P", "pedal-P") + set_char_box(0, 5/6pedalh#, 0, pedalh#); + pickup pencircle scaled penh; + + penpos 1 (penh, 0); + penpos 2 (penw, 55); + penpos 3 (penw, pedalpha); + penpos 4 (1.2penh, -pedalpha); + penpos 5 (penh, -pedalpha); + penpos 6 (penh, 180-pedalpha); + penpos 7 (2penh, 180-pedalpha); + penpos 8 (penh, 90); + penpos 9 (4/3penw,50); + penpos 10 (1.4penw,50); + penpos 11 (penh, 90+pedalpha); + + z1r = (0.6w, h); + x2l = x1l - penw; + y2 = 0.7h; + x3r = x2l + 2penw; + y3r = 0.4h; + z4l = z5r + 1/4(z3r - z5r); + x5 = 1/4w; + y5r = 0; + z6 = z5; + z7 = z6r + 1/3(z8r - z6r); + z8r = z5r + 3/5(z3r - z5r); + x9l = x10l - penh; + y9l = 1/4penh; + x10l = w - tand (90-pedalpha)*y11l; + y10l = 1/4penh; + x11l = w; + y11 = 1/5h; + + penlabels (1,2,3,4,5,6,7,8,9,10,11); + penstroke z1e..tension 2.5 .. z2e.. tension 1.5 .. z3e ..tension 2.5 + ..z4e..tension 1.5 + ..z5e..z6e..tension 1.5 + ..z7e..tension 1.5 + ..z8e{right}..tension 1.5 + ..z9e{dir -pedalpha} + ..z10e..tension 2.5..z11e; + + penpos 12 (penh, 0); + penpos 13 (penw, -90-pedbeta); + penpos 14 (penh, 90); + penpos 15 (penw, -90+pedbeta); + penpos 16 (penh, 180+pedbeta); + z12 = (5/9x1, y2); + z13l = (1/2x12r, y15r); + z14r = z1r; + z15l = (1/2[x16,w], y2l + 0.5penw); + x16 = 1/4[x1, w]; + y16r = y2r; + + penlabels (12,13,14,15,16); + penstroke z12e{down}..tension 1.1 + ..z13e{dir (180-pedbeta)}..tension 1.1 + ..z14e{right}..tension 1.1 + ..z15e{dir (180+pedbeta)}..tension 1.1 + ..z16e{dir (90+pedbeta)}; +fet_endchar; + + +% code := 99; % d = 100 + +if 0 = 1: + +fet_beginchar("Pedal d", "d", "pedal-d") + set_char_box(2/9pedalh#, 4/9pedalh#, 0, 7/8pedalh#); + pickup pencircle scaled penh; + + penpos 1 (penh, -70); + penpos 2 (3/4penw, 0); + penpos 3 (2penh, 90); + penpos 4 (penw, 190); + penpos 5 (penh, -10-90); + + z1l = (1/2w, pedalbh); + z2l = (0, 1/2pedalbh); + z3l = (1/2w, 0); + z4 = (w - 1/2penw, 1/2pedalbh + penh); + x5r = -b; + y5l = h; + + penlabels (1,2,3,4,5); + + penstroke z1e{dir (-70-90)}..tension 1.1 + ..z2e{down}..tension 1.1 + ..z3e{right}..tension 1.1 + ..z4e{dir (90+10)}..tension 1.1 + ..z5e{dir (180-10)}; +fet_endchar; + +else: + +fet_beginchar("Pedal d", "d", "pedal-d") + set_char_box(0, 2/3pedalh#, 0, 7/8pedalh#); + pickup pencircle scaled penh; + + penpos 1 (penh, -70); + penpos 2 (3/4penw, 0); + penpos 3 (2penh, 90); + penpos 4 (penw, 190); + penpos 5 (penh, -10-90); + + z1l = (2/3w, pedalbh); + z2l = (1/3w, 1/2pedalbh); + z3l = (x1l, 0); + z4 = (w - 1/2penw, 1/2pedalbh + penh); + x5r = 0; + y5l = h; + + penlabels (1,2,3,4,5); + + penstroke z1e{dir (-70-90)}..tension 1.1 + ..z2e{down}..tension 1.1 + ..z3e{right}..tension 1.1 + ..z4e{dir (90+10)}..tension 1.1 + ..z5e{dir (180-10)}; +fet_endchar; + +fi + +fet_beginchar("Pedal e", "e", "pedal-e") + set_char_box(0, 2/5pedalh#, 0, pedalbh#); + pickup pencircle scaled penh; + + penpos 1 (penh, pedalpha-90); + penpos 2 (penh, pedalpha-90); + penpos 3 (3/5penw, pedalpha); + penpos 4 (1.2penh, 90+pedalpha); + penpos 5 (2/3penw, 180); + penpos 6 (penw, 180+pedalpha); + penpos 7 (2/3penw, -90-20); + penpos 8 (penh, pedalpha-90); + + z1l = (0, 1/5pedalh); + z2 = z1 + dir pedalpha * penw; + z3 = (3/5w, 8/9h); + + z4 = (2/9w, y3); + + x5r = 0; + y5 = y2; + + x6 = 3/8w; + y6r = 1/2penh; + + z7l = (x6l+penh, y6l); + + x8r = w; + y8 = 1/5pedalh; + + penlabels (1,2,3,4,5,6,7,8); + penstroke z1e{dir pedalpha} + ..z2e{dir pedalpha}.. tension 1.1 + %urg + ..z3e..tension 1.05 + ..z4e..tension 1.1 + ..z5e..tension 1.5 + ..z6e{dir -pedalpha}..tension 1.1 + ..z7e.. tension 2.5 + ..z8e; +fet_endchar; + +fet_endgroup("pedal") + diff --git a/mf/feta-schrift.mf b/mf/feta-schrift.mf index b72653b4ad..481e378e50 100644 --- a/mf/feta-schrift.mf +++ b/mf/feta-schrift.mf @@ -699,7 +699,6 @@ fet_beginchar("Coda", "coda", "coda") fet_endchar; input feta-slag; -input feta-accordion; fet_endgroup("scripts"); diff --git a/mf/feta-test11.mf b/mf/feta-test11.mf new file mode 100644 index 0000000000..eaaa862fc5 --- /dev/null +++ b/mf/feta-test11.mf @@ -0,0 +1,21 @@ +% feta-test16 +% part of LilyPond's pretty-but-neat music font + +input feta-autometric; +fet_beginfont("feta-test", 23); +staffsize#:=23pt#; +test:=1; + +% smoked cheese +% test := -1; + + +% dem piksels. +%test := 1; + +input feta-generic; + +fet_endfont("feta"); + +end. + diff --git a/mf/feta-test13.mf b/mf/feta-test13.mf index 3d2ed3cea2..ce1e04cf85 100644 --- a/mf/feta-test13.mf +++ b/mf/feta-test13.mf @@ -2,8 +2,8 @@ % part of LilyPond's pretty-but-neat music font input feta-autometric; -fet_beginfont("feta-test", 16); -staffsize#:=16pt#; +fet_beginfont("feta-test", 13); +staffsize#:=13pt#; test:=1; % smoked cheese diff --git a/mf/feta-test23.mf b/mf/feta-test23.mf new file mode 100644 index 0000000000..e4656d6d26 --- /dev/null +++ b/mf/feta-test23.mf @@ -0,0 +1,22 @@ +% feta-test23 +% part of LilyPond's pretty-but-neat music font + + +input feta-autometric; +fet_beginfont("feta-test", 23); +staffsize#:=23pt#; +test:=1; + +% smoked cheese +% test := -1; + + +% dem piksels. +%test := 1; + +input feta-generic; + +fet_endfont("feta"); + +end. + diff --git a/mf/feta-test26.mf b/mf/feta-test26.mf index e51a6ce12a..212d63fa4a 100644 --- a/mf/feta-test26.mf +++ b/mf/feta-test26.mf @@ -2,7 +2,7 @@ % part of LilyPond's pretty-but-neat music font input feta-autometric; -fet_beginfont("feta-test", 16); +fet_beginfont("feta-test", 26); staffsize#:=26pt#; test:=1; diff --git a/scm/generic-property.scm b/scm/generic-property.scm index 554408caff..adbf00a735 100644 --- a/scm/generic-property.scm +++ b/scm/generic-property.scm @@ -67,6 +67,11 @@ ) )) +(define generic-sustain-pedal-properties + (cons "Sustain_pedal" (list + (list 'textScriptPadding number? 'padding) + (list 'sustainPedalPadding number? 'padding)))) + (define generic-crescendo-properties (cons "Crescendo" (list (list 'verticalDirection dir? 'direction) @@ -198,6 +203,7 @@ generic-slur-properties generic-beam-properties generic-text-properties + generic-sustain-pedal-properties generic-note-column-properties generic-script-properties generic-All-properties diff --git a/scm/paper.scm b/scm/paper.scm index a615f9564f..c5bdbbeba4 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -137,3 +137,19 @@ (beta (/ (* pi r-0) (* 2.0 h-inf)))) (* alpha (atan (* beta b))))) +;; see mf/feta-pendaal.mf +(define pedal-kerning-alist '()) +(set! pedal-kerning-alist + (append + '( + (("P" . "e") . -0.07) + (("e" . "d") . -0.53) + (("*" . "P") . 0.2) + ) + pedal-kerning-alist)) + +(define (pedal-kerning l r) + (let ((entry (assoc (cons l r) pedal-kerning-alist))) + (if entry + (cdr entry)))) + diff --git a/stepmake/stepmake/metafont-vars.make b/stepmake/stepmake/metafont-vars.make index 7beeca4110..96af147311 100644 --- a/stepmake/stepmake/metafont-vars.make +++ b/stepmake/stepmake/metafont-vars.make @@ -1,6 +1,5 @@ MF_FILES := $(wildcard *.mf) -FONT_FILES = $(wildcard *[0-9].mf) EXTRA_DIST_FILES += $(MF_FILES) MF_TFM_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.tfm)) MF_DVI_FILES = $(addprefix $(outdir)/, $(FONT_FILES:.mf=.dvi)) diff --git a/tex/p.tex b/tex/p.tex new file mode 100644 index 0000000000..2f6169490e --- /dev/null +++ b/tex/p.tex @@ -0,0 +1,39 @@ +% pedal.tex + +\hsize = 296mm +\vsize = 210mm + +% fix chord.cc::banter_str before removing these +\def\fetdef#1#2{% + \def#1{\hbox{\char#2}}} + +\fetdef\pedalasterisk{101} +\fetdef\pedaldash{102} +\fetdef\pedaldot{103} +\fetdef\pedalP{104} +\fetdef\pedald{105} +\fetdef\pedale{106} + +%\font\fetatwentysixfontt=feta26 scaled \magstep 4 +%\font\fetatwentysixfontt=feta26 scaled 18842 +\font\fetatwentysixfontt=feta26 scaled 2407 +\magnification \magstep 4 + +\def\fetafont{\fetatwentysixfontt} + +\baselineskip 12mm + +\vbox{ +\kern 50mm + +\hbox{ +\fetatwentysixfontt +\hbox { \pedalP\kern-0.06ex\pedale\kern -0.55ex\pedald\pedaldot} +\kern 100mm +\pedalasterisk +} +} + +\end + +%\endinput diff --git a/tex/pedal.tex b/tex/pedal.tex new file mode 100644 index 0000000000..a4c7616ed5 --- /dev/null +++ b/tex/pedal.tex @@ -0,0 +1,62 @@ +% pedal.tex + +% fix chord.cc::banter_str before removing these +\def\fetdef#1#2{% + \def#1{\hbox{\char#2}}} + +\fetdef\pedalasterisk{101} +\fetdef\pedaldash{102} +\fetdef\pedaldot{103} +\fetdef\pedalP{104} +\fetdef\pedald{105} +\fetdef\pedale{106} + + +\font\fetaelevenfont=feta11 +\font\fetathirteenfont=feta13 +\font\fetasixteenfont=feta16 +\font\fetatwentyfont=feta20 +\font\fetatwentythreefont=feta23 +\font\fetatwentysixfont=feta26 + +\font\fetaelevenfontt=feta11 scaled \magstep 4 +\font\fetathirteenfontt=feta13 scaled \magstep 4 +\font\fetasixteenfontt=feta16 scaled \magstep 4 +\font\fetatwentyfontt=feta20 scaled \magstep 4 +\font\fetatwentythreefontt=feta23 scaled \magstep 4 +\font\fetatwentysixfontt=feta26 scaled \magstep 4 + +\def\fetafont{\fetasixteenfont} + +\def\test{ +\hbox { +\hbox { \pedalP\kern-0.05ex\pedale\kern -0.6ex\pedald\pedaldot} +\kern 1ex +\pedalasterisk +\kern 1ex +\hbox {\pedaldash\pedalP} +} +} + +\magnification \magstep 4 +\baselineskip 12mm + +\vbox{ +\fetaelevenfont \test +\fetathirteenfont \test +\fetasixteenfont \test +\fetatwentyfont \test +\fetatwentythreefont \test +\fetatwentysixfont \test + +%\fetaelevenfontt \test +%\fetathirteenfontt \test +\fetasixteenfontt \test +\fetatwentyfontt \test +\fetatwentythreefontt \test +\fetatwentysixfontt \test +} + +\end + +%\endinput |