From 36f6cd546770e38c6e2314404e21f1c89504eb7d Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Fri, 8 Jul 2005 17:53:41 +0000 Subject: [PATCH] * scm/define-grobs.scm (all-grob-descriptions): reorganize in alphabetical order. * input/regression/trill-spanner-pitched.ly: new file. * lily/font-interface-scheme.cc (LY_DEFINE): function ly:grob-default-font (changed from get-default-font). * lily/axis-group-interface-scheme.cc (LY_DEFINE): new file. * lily/note-head.cc (internal_print): if style is not a symbol, set style to 'default. (internal_print): no style suffix if glyph-name-procedure not set. Default to quarter head. * scm/define-grobs.scm (Module): new grob TrillPitchHead. * scm/define-music-properties.scm (all-music-properties): add trill-pitch. * ly/music-functions-init.ly: \pitchedTrill * lily/pitched-trill-engraver.cc (acknowledge_grob): new file. * ly/Welcome_to_LilyPond.ly: update to 2.6.0 * lily/trill-spanner-engraver.cc (finalize): rename req -> event * scm/define-markup-commands.scm (pad-markup): pad-markup command. --- ChangeLog | 29 ++ Documentation/user/advanced-notation.itely | 18 + input/regression/trill-spanner-pitched.ly | 17 + input/regression/whiteout.ly | 2 +- lily/arpeggio-engraver.cc | 16 +- lily/axis-group-interface-scheme.cc | 29 ++ lily/axis-group-interface.cc | 14 +- lily/font-interface-scheme.cc | 23 ++ lily/font-interface.cc | 10 - lily/include/axis-group-interface.hh | 2 +- lily/note-head.cc | 11 +- lily/pitched-trill-engraver.cc | 149 ++++++++ lily/trill-spanner-engraver.cc | 36 +- ly/Welcome_to_LilyPond.ly | 2 +- ly/accordion-defs-init.ly | 2 +- ly/catalan.ly | 2 +- ly/chord-modifiers-init.ly | 2 +- ly/declarations-init.ly | 2 +- ly/deutsch.ly | 2 +- ly/drumpitch-init.ly | 2 +- ly/dynamic-scripts-init.ly | 2 +- ly/english.ly | 2 +- ly/engraver-init.ly | 5 +- ly/espanol.ly | 4 +- ly/generate-documentation.ly | 2 +- ly/generate-interface-doc-init.ly | 2 +- ly/grace-init.ly | 2 +- ly/gregorian-init.ly | 2 +- ly/init.ly | 2 +- ly/italiano.ly | 2 +- ly/midi-init.ly | 2 +- ly/music-functions-init.ly | 28 +- ly/nederlands.ly | 2 +- ly/norsk.ly | 2 +- ly/paper-defaults.ly | 2 +- ly/params-init.ly | 2 +- ly/performer-init.ly | 2 +- ly/portugues.ly | 4 +- ly/property-init.ly | 2 +- ly/scale-definitions-init.ly | 2 +- ly/script-init.ly | 2 +- ly/spanners-init.ly | 2 +- ly/suomi.ly | 2 +- ly/svenska.ly | 2 +- ly/vlaams.ly | 2 +- scm/define-grobs.scm | 391 ++++++++++++--------- scm/define-markup-commands.scm | 17 +- scm/define-music-properties.scm | 14 +- scm/output-lib.scm | 17 + scm/safe-lily.scm | 2 +- scm/translation-functions.scm | 19 + 51 files changed, 649 insertions(+), 264 deletions(-) create mode 100644 input/regression/trill-spanner-pitched.ly create mode 100644 lily/axis-group-interface-scheme.cc create mode 100644 lily/font-interface-scheme.cc create mode 100644 lily/pitched-trill-engraver.cc diff --git a/ChangeLog b/ChangeLog index a8d2544a9e..a3180e29d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,34 @@ 2005-07-08 Han-Wen Nienhuys + * scm/define-grobs.scm (all-grob-descriptions): reorganize in + alphabetical order. + + * input/regression/trill-spanner-pitched.ly: new file. + + * lily/font-interface-scheme.cc (LY_DEFINE): function + ly:grob-default-font (changed from get-default-font). + + * lily/axis-group-interface-scheme.cc (LY_DEFINE): new file. + + * lily/note-head.cc (internal_print): if style is not a symbol, + set style to 'default. + (internal_print): no style suffix if glyph-name-procedure not + set. Default to quarter head. + + * scm/define-grobs.scm (Module): new grob TrillPitchHead. + + * scm/define-music-properties.scm (all-music-properties): add trill-pitch. + + * ly/music-functions-init.ly: \pitchedTrill + + * lily/pitched-trill-engraver.cc (acknowledge_grob): new file. + + * ly/Welcome_to_LilyPond.ly: update to 2.6.0 + + * lily/trill-spanner-engraver.cc (finalize): rename req -> event + + * scm/define-markup-commands.scm (pad-markup): pad-markup command. + * po/fr.po: update * po/de.po: update. diff --git a/Documentation/user/advanced-notation.itely b/Documentation/user/advanced-notation.itely index 21774cba71..6d3255042e 100644 --- a/Documentation/user/advanced-notation.itely +++ b/Documentation/user/advanced-notation.itely @@ -1709,6 +1709,24 @@ To see all notehead styles, please see Program reference: @internalsref{NoteHead}. +@node Pitched trills +@subsection Pitched trills + +Trills that should be executed on an explicitly specified pitch can be +typeset with the command @code{pitchedTrill}, + +@lilypond[raggedright,verbatim] + \pitchedTrill c'4\startTrillSpan fis + f'\stopTrillSpan +@end lilypond + +The first argument is the main note. The absolute pitch of the second +is printed as a stemless note head in parentheses. + +@refbugs + +Relative octave mode ignores the octave of the second argument of +@code{\pitchedTrill}. @node Feathered beams @subsection Feathered beams diff --git a/input/regression/trill-spanner-pitched.ly b/input/regression/trill-spanner-pitched.ly new file mode 100644 index 0000000000..fe75b1dc88 --- /dev/null +++ b/input/regression/trill-spanner-pitched.ly @@ -0,0 +1,17 @@ +\version "2.6.0" + +\header { + + texidoc = "Pitched trills are denoted by a small note head in + parentheses following the main note. This note head is properly + ledgered, and parentheses include the accidental." + +} + +\paper { + raggedright = ##t +} + +\relative { + \pitchedTrill c4\startTrillSpan fis f\stopTrillSpan +} diff --git a/input/regression/whiteout.ly b/input/regression/whiteout.ly index a85a036a8f..b6890db702 100644 --- a/input/regression/whiteout.ly +++ b/input/regression/whiteout.ly @@ -14,5 +14,5 @@ since staff lines are in a different layer. " { \override TextScript #'extra-offset = #'(2 . 4) - c'4-\markup { \whiteout foo } c + c'4-\markup { \whiteout \pad-markup #0.5 foo } c } diff --git a/lily/arpeggio-engraver.cc b/lily/arpeggio-engraver.cc index 61dbe54f32..494326f47f 100644 --- a/lily/arpeggio-engraver.cc +++ b/lily/arpeggio-engraver.cc @@ -26,21 +26,21 @@ protected: virtual bool try_music (Music *); private: Item *arpeggio_; - Music *arpeggio_req_; + Music *arpeggio_event_; }; Arpeggio_engraver::Arpeggio_engraver () { arpeggio_ = 0; - arpeggio_req_ = 0; + arpeggio_event_ = 0; } bool Arpeggio_engraver::try_music (Music *m) { - if (!arpeggio_req_) + if (!arpeggio_event_) { - arpeggio_req_ = m; + arpeggio_event_ = m; } return true; } @@ -78,9 +78,9 @@ Arpeggio_engraver::acknowledge_grob (Grob_info info) void Arpeggio_engraver::process_music () { - if (arpeggio_req_) + if (arpeggio_event_) { - arpeggio_ = make_item ("Arpeggio", arpeggio_req_->self_scm ()); + arpeggio_ = make_item ("Arpeggio", arpeggio_event_->self_scm ()); } } @@ -88,11 +88,11 @@ void Arpeggio_engraver::stop_translation_timestep () { arpeggio_ = 0; - arpeggio_req_ = 0; + arpeggio_event_ = 0; } ADD_TRANSLATOR (Arpeggio_engraver, - /* descr */ "Generate an Arpeggio from a Arpeggio_req", + /* descr */ "Generate an Arpeggio symbol", /* creats*/ "Arpeggio", /* accepts */ "arpeggio-event", /* acks */ "stem-interface rhythmic-head-interface note-column-interface", diff --git a/lily/axis-group-interface-scheme.cc b/lily/axis-group-interface-scheme.cc new file mode 100644 index 0000000000..36f5d7a453 --- /dev/null +++ b/lily/axis-group-interface-scheme.cc @@ -0,0 +1,29 @@ +/* + axis-group-interface-scheme.cc -- implement Axis_group_interface + + source file of the GNU LilyPond music typesetter + + (c) 2005 Han-Wen Nienhuys + +*/ + +#include "axis-group-interface.hh" +#include "lily-guile.hh" + +LY_DEFINE(ly_relative_group_extent, "ly:relative-group-extent", + 3, 0, 0, (SCM elements, SCM common, SCM axis), + "Determine the extent of @var{elements} relative to @var{common} in the " + "@var{axis} direction.") +{ + SCM_ASSERT_TYPE(scm_is_pair (elements), elements, SCM_ARG1, __FUNCTION__, "list"); + SCM_ASSERT_TYPE(unsmob_grob (common), common, SCM_ARG2, __FUNCTION__, "grob"); + SCM_ASSERT_TYPE(is_axis (axis), axis, SCM_ARG3, __FUNCTION__, "axis"); + + + Interval ext = Axis_group_interface::relative_group_extent (elements, + unsmob_grob (common), + (Axis) scm_to_int (axis)); + return ly_interval2scm (ext); +} + + diff --git a/lily/axis-group-interface.cc b/lily/axis-group-interface.cc index 46b15f18d3..2c3a23601e 100644 --- a/lily/axis-group-interface.cc +++ b/lily/axis-group-interface.cc @@ -7,12 +7,18 @@ */ #include "axis-group-interface.hh" + #include "hara-kiri-group-spanner.hh" +#include "warn.hh" void Axis_group_interface::add_element (Grob *me, Grob *e) { - for (SCM ax = me->get_property ("axes"); ax != SCM_EOL; ax = scm_cdr (ax)) + SCM axes = me->get_property ("axes"); + if (!scm_is_pair (axes)) + programming_error ("axes should be nonempty"); + + for (SCM ax = axes; ax != SCM_EOL; ax = scm_cdr (ax)) { Axis a = (Axis) scm_to_int (scm_car (ax)); @@ -40,7 +46,7 @@ Axis_group_interface::has_axis (Grob *me, Axis a) } Interval -Axis_group_interface::relative_group_extent (Axis a, Grob *common, SCM elts) +Axis_group_interface::relative_group_extent (SCM elts, Grob *common, Axis a) { Interval r; for (SCM s = elts; scm_is_pair (s); s = scm_cdr (s)) @@ -53,6 +59,8 @@ Axis_group_interface::relative_group_extent (Axis a, Grob *common, SCM elts) return r; } + + MAKE_SCHEME_CALLBACK (Axis_group_interface, group_extent_callback, 2); SCM Axis_group_interface::group_extent_callback (SCM element_smob, SCM scm_axis) @@ -64,7 +72,7 @@ Axis_group_interface::group_extent_callback (SCM element_smob, SCM scm_axis) Grob *common = common_refpoint_of_list (elts, me, a); Real my_coord = me->relative_coordinate (common, a); - Interval r (relative_group_extent (a, common, elts)); + Interval r (relative_group_extent (elts, common, a)); return ly_interval2scm (r - my_coord); } diff --git a/lily/font-interface-scheme.cc b/lily/font-interface-scheme.cc new file mode 100644 index 0000000000..737f4a5725 --- /dev/null +++ b/lily/font-interface-scheme.cc @@ -0,0 +1,23 @@ +/* + font-interface-scheme.cc -- implement Font_interface bindings + + source file of the GNU LilyPond music typesetter + + (c) 2000--2005 Han-Wen Nienhuys +*/ + + +#include "font-interface.hh" + +#include "grob.hh" + + +LY_DEFINE (ly_grob_default_font, "ly:grob-default-font", + 1, 0, 0, (SCM grob), + "Return the default font for grob @var{gr}.") +{ + Grob *gr = unsmob_grob (grob); + SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "grob"); + + return Font_interface::get_default_font (gr)->self_scm (); +} diff --git a/lily/font-interface.cc b/lily/font-interface.cc index 878c3031a4..c9400629ae 100644 --- a/lily/font-interface.cc +++ b/lily/font-interface.cc @@ -29,16 +29,6 @@ Font_interface::get_default_font (Grob *me) return fm; } -LY_DEFINE (ly_font_interface_get_default_font, "ly:get-default-font", - 1, 0, 0, (SCM grob), - "Return the default font for grob @var{gr}.") -{ - Grob *gr = unsmob_grob (grob); - SCM_ASSERT_TYPE (gr, grob, SCM_ARG1, __FUNCTION__, "grob"); - - return Font_interface::get_default_font (gr)->self_scm (); -} - SCM Font_interface::music_font_alist_chain (Grob *g) { diff --git a/lily/include/axis-group-interface.hh b/lily/include/axis-group-interface.hh index bcc5e7819c..e80e20a706 100644 --- a/lily/include/axis-group-interface.hh +++ b/lily/include/axis-group-interface.hh @@ -16,7 +16,7 @@ struct Axis_group_interface { DECLARE_SCHEME_CALLBACK (group_extent_callback, (SCM smob, SCM axis)); - static Interval relative_group_extent (Axis, Grob *common, SCM list); + static Interval relative_group_extent (SCM list, Grob *common, Axis); static void add_element (Grob *me, Grob *); static void set_axes (Grob *, Axis, Axis); diff --git a/lily/note-head.cc b/lily/note-head.cc index c05340a3d0..bfdc201fc2 100644 --- a/lily/note-head.cc +++ b/lily/note-head.cc @@ -35,13 +35,16 @@ internal_print (Grob *me, String *font_char) SCM style = me->get_property ("style"); if (!scm_is_symbol (style)) { - return Stencil (); + style = ly_symbol2scm ("default"); } SCM log = scm_int2num (Note_head::get_balltype (me)); SCM proc = me->get_property ("glyph-name-procedure"); - SCM scm_font_char = scm_call_2 (proc, log, style); + String suffix = to_string (robust_scm2int (me->get_property ("duration-log"), 2)); + if (scm_procedure_p (proc) == SCM_BOOL_T) + suffix = ly_scm2string (scm_call_2 (proc, log, style)); + Font_metric *fm = Font_interface::get_default_font (me); Direction stem_dir = CENTER; @@ -56,11 +59,11 @@ internal_print (Grob *me, String *font_char) String prefix = "noteheads."; String idx - = prefix + ((stem_dir == UP) ? "u" : "d") + ly_scm2string (scm_font_char); + = prefix + ((stem_dir == UP) ? "u" : "d") + suffix; out = fm->find_by_name (idx); if (out.is_empty ()) { - idx = prefix + "s" + ly_scm2string (scm_font_char); + idx = prefix + "s" + suffix; out = fm->find_by_name (idx); } diff --git a/lily/pitched-trill-engraver.cc b/lily/pitched-trill-engraver.cc new file mode 100644 index 0000000000..67c5d83b05 --- /dev/null +++ b/lily/pitched-trill-engraver.cc @@ -0,0 +1,149 @@ +/* + pitched-trill-engraver.cc -- implement Pitched_trill_engraver + + source file of the GNU LilyPond music typesetter + + (c) 2005 Han-Wen Nienhuys + +*/ + +#include "engraver.hh" + +#include "group-interface.hh" +#include "axis-group-interface.hh" +#include "context.hh" +#include "note-head.hh" +#include "item.hh" +#include "side-position-interface.hh" +#include "pitch.hh" +#include "warn.hh" + +class Pitched_trill_engraver : public Engraver +{ + +public: + TRANSLATOR_DECLARATIONS(Pitched_trill_engraver); + +protected: + virtual void acknowledge_grob (Grob_info); + virtual void process_music (); + virtual bool try_music (Music*); + virtual void stop_translation_timestep (); +private: + Item *trill_head_; + Item *trill_group_; + Item *trill_accidental_; + + Link_array heads_; + + void make_trill (Music *); +}; + + +Pitched_trill_engraver::Pitched_trill_engraver () +{ + trill_head_ = 0; + trill_group_ = 0; + trill_accidental_ = 0; +} + +void +Pitched_trill_engraver::acknowledge_grob (Grob_info info) +{ + Music *mus = info.music_cause (); + + if (Note_head::has_interface (info.grob ())) + { + heads_.push (info.grob ()); + } + else if (mus + && mus->is_mus_type ("trill-span-event") + && to_dir (mus->get_property ("span-direction")) == START + && unsmob_pitch (mus->get_property ("trill-pitch"))) + { + make_trill (mus); + } +} + +void +Pitched_trill_engraver::make_trill (Music *mus) +{ + SCM scm_pitch = mus->get_property ("trill-pitch"); + Pitch * p = unsmob_pitch (scm_pitch); + + SCM keysig = get_property ("localKeySignature"); + + SCM key = scm_cons (scm_int2num (p->get_octave ()), + scm_int2num (p->get_notename ())); + + SCM handle = scm_assoc (key, keysig); + bool print_acc = + (handle == SCM_BOOL_F) + || p->get_alteration () == 0; + + if (trill_head_) + { + programming_error ("already have a trill head."); + trill_head_ = 0; + } + + trill_head_ = make_item ("TrillPitchHead", mus->self_scm ()); + SCM c0scm = get_property ("middleCPosition"); + + int c0 = scm_is_number (c0scm) ? scm_to_int (c0scm) : 0; + + trill_head_->set_property ("staff-position", + scm_from_int (unsmob_pitch (scm_pitch)->steps () + + c0)); + + trill_group_ = make_item ("TrillPitchGroup", mus->self_scm()); + + Axis_group_interface::add_element (trill_group_, trill_head_); + + if (print_acc) + { + trill_accidental_ = make_item ("TrillPitchAccidental", mus->self_scm ()); + + // fixme: naming -> alterations + trill_accidental_->set_property ("accidentals", scm_list_1 (scm_from_int (p->get_alteration ()))); + Side_position_interface::add_support (trill_accidental_, trill_head_); + trill_head_->set_property ("accidental-grob", trill_accidental_->self_scm ()); + trill_group_->set_parent (trill_head_, Y_AXIS); + Axis_group_interface::add_element (trill_group_, trill_accidental_); + trill_accidental_->set_parent (trill_head_, Y_AXIS); + } +} + +void +Pitched_trill_engraver::stop_translation_timestep () +{ + if (trill_group_) + for (int i = 0; i < heads_.size (); i++) + { + Side_position_interface::add_support (trill_group_, heads_[i]); + } + + heads_.clear (); + trill_head_ = 0; + trill_group_ = 0; + trill_accidental_ = 0; +} + +void +Pitched_trill_engraver::process_music () +{ +} + +bool +Pitched_trill_engraver::try_music (Music *) +{ + return false; +} + +ADD_TRANSLATOR (Pitched_trill_engraver, + /* descr */ "Print the bracketed notehead after a notehead with trill.", + /* creats*/ "TrillPitchHead TrillPitchAccidental TrillPitchGroup", + /* accepts */ "", + /* acks */ "script-interface text-spanner-interface note-head-interface", + /* reads */ "", + /* write */ ""); diff --git a/lily/trill-spanner-engraver.cc b/lily/trill-spanner-engraver.cc index ddb283ea48..454227c297 100644 --- a/lily/trill-spanner-engraver.cc +++ b/lily/trill-spanner-engraver.cc @@ -31,18 +31,18 @@ protected: private: Spanner *span_; Spanner *finished_; - Music *current_req_; - Drul_array req_drul_; + Music *current_event_; + Drul_array event_drul_; void typeset_all (); }; Trill_spanner_engraver::Trill_spanner_engraver () { finished_ = 0; - current_req_ = 0; + current_event_ = 0; span_ = 0; - req_drul_[START] = 0; - req_drul_[STOP] = 0; + event_drul_[START] = 0; + event_drul_[STOP] = 0; } bool @@ -51,7 +51,7 @@ Trill_spanner_engraver::try_music (Music *m) if (m->is_mus_type ("trill-span-event")) { Direction d = to_dir (m->get_property ("span-direction")); - req_drul_[d] = m; + event_drul_[d] = m; return true; } @@ -61,32 +61,32 @@ Trill_spanner_engraver::try_music (Music *m) void Trill_spanner_engraver::process_music () { - if (req_drul_[STOP]) + if (event_drul_[STOP]) { if (!span_) { - req_drul_[STOP]->origin ()->warning (_ ("can't find start of trill spanner")); + event_drul_[STOP]->origin ()->warning (_ ("can't find start of trill spanner")); } else { finished_ = span_; span_ = 0; - current_req_ = 0; + current_event_ = 0; } } - if (req_drul_[START]) + if (event_drul_[START]) { - if (current_req_) + if (current_event_) { - req_drul_[START]->origin ()->warning (_ ("already have a trill spanner")); + event_drul_[START]->origin ()->warning (_ ("already have a trill spanner")); } else { - current_req_ = req_drul_[START]; - span_ = make_spanner ("TrillSpanner", req_drul_[START]->self_scm ()); + current_event_ = event_drul_[START]; + span_ = make_spanner ("TrillSpanner", event_drul_[START]->self_scm ()); Side_position_interface::set_axis (span_, Y_AXIS); - req_drul_[START] = 0; + event_drul_[START] = 0; } } } @@ -129,8 +129,8 @@ Trill_spanner_engraver::stop_translation_timestep () } typeset_all (); - req_drul_[START] = 0; - req_drul_[STOP] = 0; + event_drul_[START] = 0; + event_drul_[STOP] = 0; } void @@ -139,7 +139,7 @@ Trill_spanner_engraver::finalize () typeset_all (); if (span_) { - current_req_->origin ()->warning (_ ("unterminated trill spanner")); + current_event_->origin ()->warning (_ ("unterminated trill spanner")); span_->suicide (); span_ = 0; } diff --git a/ly/Welcome_to_LilyPond.ly b/ly/Welcome_to_LilyPond.ly index 0948d32523..220f869f29 100644 --- a/ly/Welcome_to_LilyPond.ly +++ b/ly/Welcome_to_LilyPond.ly @@ -31,4 +31,4 @@ That's it. For more information, visit http://lilypond.org . } -\version "2.5.25" % necessary for upgrading to future LilyPond versions. +\version "2.6.0" % necessary for upgrading to future LilyPond versions. diff --git a/ly/accordion-defs-init.ly b/ly/accordion-defs-init.ly index c5769e16c4..f27288e148 100644 --- a/ly/accordion-defs-init.ly +++ b/ly/accordion-defs-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" % Symbols needed to print accordion music % % 2' = T diff --git a/ly/catalan.ly b/ly/catalan.ly index 5bda5ee19f..18ce752658 100644 --- a/ly/catalan.ly +++ b/ly/catalan.ly @@ -74,6 +74,6 @@ pitchnamesCatalan = #`( pitchnames = \pitchnamesCatalan -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/chord-modifiers-init.ly b/ly/chord-modifiers-init.ly index ff78e3daca..713062b2f1 100644 --- a/ly/chord-modifiers-init.ly +++ b/ly/chord-modifiers-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" chordmodifiers = #default-chord-modifier-list diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly index 3beff0b6e0..3c73227be1 100644 --- a/ly/declarations-init.ly +++ b/ly/declarations-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" %% < 1.8 compatibility switch #(ly:set-option 'old-relative) diff --git a/ly/deutsch.ly b/ly/deutsch.ly index 7cd1013f4c..6cb8b9464f 100644 --- a/ly/deutsch.ly +++ b/ly/deutsch.ly @@ -63,6 +63,6 @@ pitchnamesDeutsch = #`( pitchnames = \pitchnamesDeutsch -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/drumpitch-init.ly b/ly/drumpitch-init.ly index 0eb93273ee..07be83d784 100644 --- a/ly/drumpitch-init.ly +++ b/ly/drumpitch-init.ly @@ -1,5 +1,5 @@ -\version "2.4.0" +\version "2.6.0" drumPitchNames = #'((acousticbassdrum . acousticbassdrum) diff --git a/ly/dynamic-scripts-init.ly b/ly/dynamic-scripts-init.ly index 94ba839647..439e6d184b 100644 --- a/ly/dynamic-scripts-init.ly +++ b/ly/dynamic-scripts-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" % % declare the standard dynamic identifiers. diff --git a/ly/english.ly b/ly/english.ly index af32c05738..35292caf5f 100644 --- a/ly/english.ly +++ b/ly/english.ly @@ -87,7 +87,7 @@ pitchnamesEnglish = #`( pitchnames = \pitchnamesEnglish -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 50d042bc48..2edf00f312 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.5.18" \context { \name Global @@ -169,7 +169,8 @@ contained staves are not connected vertically." localKeySignature = #'() \consists "Font_size_engraver" - + + \consists "Pitched_trill_engraver" \consists "Output_property_engraver" \consists "Arpeggio_engraver" \consists "Multi_measure_rest_engraver" diff --git a/ly/espanol.ly b/ly/espanol.ly index 6786c1d661..44e5befbee 100644 --- a/ly/espanol.ly +++ b/ly/espanol.ly @@ -8,7 +8,7 @@ %} -% contributed by Carlos García Suárez <> +% contributed by Carlos García Suárez <> % For using "sostingut" notation, which is also correct @@ -58,6 +58,6 @@ pitchnamesEspanol = #`( pitchnames = \pitchnamesEspanol -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/generate-documentation.ly b/ly/generate-documentation.ly index 7c68337db1..376d6a3f16 100644 --- a/ly/generate-documentation.ly +++ b/ly/generate-documentation.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" % % Running LilyPond on this file generates the documentation diff --git a/ly/generate-interface-doc-init.ly b/ly/generate-interface-doc-init.ly index 5ad46246dc..4eff2d7dd1 100644 --- a/ly/generate-interface-doc-init.ly +++ b/ly/generate-interface-doc-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" % % Running LilyPond on this file generates the short interface doc diff --git a/ly/grace-init.ly b/ly/grace-init.ly index 4a08d8695d..fbd299096c 100644 --- a/ly/grace-init.ly +++ b/ly/grace-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" startGraceMusic = { diff --git a/ly/gregorian-init.ly b/ly/gregorian-init.ly index 77831af2ee..efab48580d 100644 --- a/ly/gregorian-init.ly +++ b/ly/gregorian-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" %%%%%%%% %%%%%%%% shortcuts common for all styles of gregorian chant notation diff --git a/ly/init.ly b/ly/init.ly index e8bdf7ab35..6a7e513c7e 100644 --- a/ly/init.ly +++ b/ly/init.ly @@ -7,7 +7,7 @@ #(define-public midi-debug #f) -\version "2.4.0" +\version "2.6.0" \include "declarations-init.ly" diff --git a/ly/italiano.ly b/ly/italiano.ly index 833e555019..4dd4c809cd 100644 --- a/ly/italiano.ly +++ b/ly/italiano.ly @@ -86,6 +86,6 @@ pitchnamesItaliano = #`( pitchnames = \pitchnamesItaliano -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/midi-init.ly b/ly/midi-init.ly index dcccfc70a4..dde5d3b4ed 100644 --- a/ly/midi-init.ly +++ b/ly/midi-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" \midi { \tempo 4=60 \include "performer-init.ly" diff --git a/ly/music-functions-init.ly b/ly/music-functions-init.ly index f42bdd50d6..480fe7713d 100644 --- a/ly/music-functions-init.ly +++ b/ly/music-functions-init.ly @@ -1,4 +1,6 @@ -\version "2.4.0" +% -*-Scheme-*- + +\version "2.6.0" applymusic = #(def-music-function (parser location func music) (procedure? ly:music?) @@ -106,6 +108,30 @@ quoteDuring = # +pitchedTrill = +#(def-music-function + (parser location main-note secondary-note) + (ly:music? ly:music?) + (let* + ((get-notes (lambda (ev-chord) + (filter + (lambda (m) (eq? 'NoteEvent (ly:music-property m 'name))) + (ly:music-property ev-chord 'elements)))) + (sec-note-events (get-notes secondary-note)) + (trill-events (filter (lambda (m) (memq 'trill-span-event (ly:music-property m 'types))) + (ly:music-property main-note 'elements))) + + (trill-pitch + (if (pair? sec-note-events) + (ly:music-property (car sec-note-events) 'pitch) + ))) + + (if (ly:pitch? trill-pitch) + (for-each (lambda (m) (ly:music-set-property! m 'trill-pitch trill-pitch)) + trill-events) + (ly:warning (_ "Second argument of \\pitchedTrill should be single note."))) + + main-note)) killCues = #(def-music-function diff --git a/ly/nederlands.ly b/ly/nederlands.ly index 71ba49c97a..93b2668743 100644 --- a/ly/nederlands.ly +++ b/ly/nederlands.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" %{ common dutch names for notes. es means flat, is means sharp diff --git a/ly/norsk.ly b/ly/norsk.ly index a6960c24ea..676fb65f68 100644 --- a/ly/norsk.ly +++ b/ly/norsk.ly @@ -105,6 +105,6 @@ pitchnamesNorsk = #`( pitchnames =\pitchnamesNorsk -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/paper-defaults.ly b/ly/paper-defaults.ly index 925f1c3ffa..855c161bec 100644 --- a/ly/paper-defaults.ly +++ b/ly/paper-defaults.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" \paper { diff --git a/ly/params-init.ly b/ly/params-init.ly index e2fddd894b..05d07bb533 100644 --- a/ly/params-init.ly +++ b/ly/params-init.ly @@ -1,2 +1,2 @@ -\version "2.4.0" +\version "2.6.0" diff --git a/ly/performer-init.ly b/ly/performer-init.ly index d13655a894..d667a12206 100644 --- a/ly/performer-init.ly +++ b/ly/performer-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" % % setup for Request->Element conversion. Guru-only diff --git a/ly/portugues.ly b/ly/portugues.ly index 19fcfe8676..d04c36b2bb 100644 --- a/ly/portugues.ly +++ b/ly/portugues.ly @@ -8,7 +8,7 @@ %} -% contributed by Pedro Kröger <> +% contributed by Pedro Kröger <> pitchnamesPortuguese = #`( @@ -86,6 +86,6 @@ pitchnamesPortuguese = #`( pitchnames = \pitchnamesPortuguese -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/property-init.ly b/ly/property-init.ly index e5814cb5b8..71076e5f7b 100644 --- a/ly/property-init.ly +++ b/ly/property-init.ly @@ -1,6 +1,6 @@ % property-init.ly -\version "2.4.0" +\version "2.6.0" stemUp = \override Stem #'direction = #1 stemDown = \override Stem #'direction = #-1 diff --git a/ly/scale-definitions-init.ly b/ly/scale-definitions-init.ly index d5c38842ee..7a600ea106 100644 --- a/ly/scale-definitions-init.ly +++ b/ly/scale-definitions-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" major = #`( diff --git a/ly/script-init.ly b/ly/script-init.ly index 26cfac733e..09a0ce2b29 100644 --- a/ly/script-init.ly +++ b/ly/script-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" % code char abbreviations diff --git a/ly/spanners-init.ly b/ly/spanners-init.ly index 98e663f7bd..2a0ee17aef 100644 --- a/ly/spanners-init.ly +++ b/ly/spanners-init.ly @@ -1,4 +1,4 @@ -\version "2.4.0" +\version "2.6.0" startGroup = #(make-span-event 'NoteGroupingEvent START) stopGroup = #(make-span-event 'NoteGroupingEvent STOP) diff --git a/ly/suomi.ly b/ly/suomi.ly index f3dc263e69..34980c2205 100644 --- a/ly/suomi.ly +++ b/ly/suomi.ly @@ -48,6 +48,6 @@ pitchnamesSuomi = #`( pitchnames = \pitchnamesSuomi -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/svenska.ly b/ly/svenska.ly index c7ff1b73ad..6a92b3a768 100644 --- a/ly/svenska.ly +++ b/ly/svenska.ly @@ -42,6 +42,6 @@ pitchnamesSvenska = #`( ) pitchnames = \pitchnamesSvenska -\version "2.4.0" +\version "2.6.0" #(ly:parser-set-note-names parser pitchnames) diff --git a/ly/vlaams.ly b/ly/vlaams.ly index 547606cd7e..46302dd835 100644 --- a/ly/vlaams.ly +++ b/ly/vlaams.ly @@ -1,4 +1,4 @@ -\version "2.4.0" %hier stond 2.1.36, mocht ik dat wel veranderen? +\version "2.6.0" %hier stond 2.1.36, mocht ik dat wel veranderen? %{ diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 99fa123ef8..3984c024c2 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -12,6 +12,9 @@ ;;;; WARNING: don't use anonymous functions for initialization. ;; TODO: junk the meta field in favor of something more compact? + +;;; todo:: reorder sensibly. + (define-public all-grob-descriptions `( (Accidental @@ -78,7 +81,6 @@ (AmbitusNoteHead . ( (duration-log . 2) - (style . default) (print-function . ,Note_head::print) (glyph-name-procedure . ,find-notehead-symbol) (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) @@ -318,6 +320,7 @@ (meta . ((interfaces . (cluster-interface spanner-interface)))) )) + (ChordName . ( (print-function . ,Text_interface::print) @@ -330,6 +333,24 @@ item-interface)))) )) + (CombineTextScript + . ( + (print-function . ,Text_interface::print) + (no-spacing-rods . #t) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) + (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) + (direction . 1) + (padding . 0.5) + (staff-padding . 0.5) + (script-priority . 200) + ;; todo: add X self alignment? + (baseline-skip . 2) + (font-series . bold) + (meta . ((interfaces . (text-script-interface + text-interface side-position-interface + font-interface item-interface )))) + )) + (Custos . ( (break-align-symbol . custos) @@ -427,28 +448,6 @@ (meta . ((interfaces . (dynamic-interface axis-group-interface side-position-interface spanner-interface)))))) - (LeftEdge - . ( - (break-align-symbol . left-edge) - (X-extent . (0 . 0)) - (breakable . #t) - (break-visibility . ,center-invisible) - (space-alist . ( - (custos . (extra-space . 0.0)) - (ambitus . (extra-space . 2.0)) - (time-signature . (extra-space . 0.0)) - (staff-bar . (extra-space . 0.0)) - (breathing-sign . (minimum-space . 0.0)) - (clef . (extra-space . 0.8)) - (first-note . (fixed-space . 1.0)) - (right-edge . (extra-space . 0.0)) - (key-signature . (extra-space . 0.0)) - (key-cancellation . (extra-space . 0.0)) - - )) - (meta . ((interfaces . (break-aligned-interface item-interface )))) - )) - (Fingering . ( (print-function . ,Text_interface::print) @@ -466,22 +465,6 @@ side-position-interface self-alignment-interface item-interface)))) )) - (StringNumber - . ( - (print-function . ,print-circled-text-callback) - (padding . 0.5) - (staff-padding . 0.5) - (self-alignment-X . 0) - (self-alignment-Y . 0) - (script-priority . 100) - (font-encoding . fetaNumber) - (font-size . -5) ; don't overlap when next to heads. - (meta . ((interfaces . (string-number-interface - font-interface text-script-interface text-interface - side-position-interface self-alignment-interface - item-interface)))) - )) - (Glissando . ( (style . line) @@ -565,23 +548,6 @@ break-aligned-interface item-interface )))) )) - (VocalName - . ( - (breakable . #t) - (Y-offset-callbacks . (,Side_position_interface::aligned_on_support_refpoints)) - (direction . 0) - (space-alist . ((left-edge . (extra-space . 1.0)) - )) - (break-align-symbol . instrument-name) - (print-function . ,Text_interface::print) - (break-align-symbol . clef) - (break-visibility . ,begin-of-line-visible) - (baseline-skip . 2) - (meta . ((interfaces . (font-interface - self-alignment-interface - side-position-interface text-interface - break-aligned-interface item-interface )))) - )) (KeyCancellation . ( (print-function . ,Key_signature_interface::print) @@ -630,6 +596,28 @@ (meta . ((interfaces . (spanner-interface ledger-line-interface)))) )) + (LeftEdge + . ( + (break-align-symbol . left-edge) + (X-extent . (0 . 0)) + (breakable . #t) + (break-visibility . ,center-invisible) + (space-alist . ( + (custos . (extra-space . 0.0)) + (ambitus . (extra-space . 2.0)) + (time-signature . (extra-space . 0.0)) + (staff-bar . (extra-space . 0.0)) + (breathing-sign . (minimum-space . 0.0)) + (clef . (extra-space . 0.8)) + (first-note . (fixed-space . 1.0)) + (right-edge . (extra-space . 0.0)) + (key-signature . (extra-space . 0.0)) + (key-cancellation . (extra-space . 0.0)) + + )) + (meta . ((interfaces . (break-aligned-interface item-interface )))) + )) + (LigatureBracket . ( (ligature-primitive-callback . ,Note_head::print) @@ -692,23 +680,6 @@ (meta . ((interfaces . (mensural-ligature-interface font-interface)))) )) - (RehearsalMark - . ( - (print-function . ,Text_interface::print) - (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) - (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (after-line-breaking-callback . ,shift-right-at-line-begin) - (self-alignment-X . 0) - (direction . 1) - (breakable . #t) - (font-size . 2) - (baseline-skip . 2) - (break-visibility . ,end-of-line-invisible) - (padding . 0.8) - (meta . ((interfaces . (text-interface - side-position-interface font-interface mark-interface - self-alignment-interface item-interface )))) - )) (MetronomeMark . ( (print-function . ,Text_interface::print) @@ -794,7 +765,6 @@ (NoteHead . ( - (style . default) (print-function . ,Note_head::print) (ligature-primitive-callback . ,Note_head::print) (glyph-name-procedure . ,find-notehead-symbol) @@ -817,17 +787,6 @@ (meta . ((interfaces . (spacing-interface note-spacing-interface item-interface )))) )) - (VoiceFollower - . ( - (style . line) - (gap . 0.5) - (breakable . #t) - (X-extent-callback . #f) - (Y-extent-callback . #f) - (print-function . ,Line_spanner::print) - (after-line-breaking-callback . ,Line_spanner::after_line_breaking) - (meta . ((interfaces . (line-spanner-interface line-interface spanner-interface)))) - )) (NoteName . ( @@ -853,6 +812,23 @@ (meta . ((interfaces . (text-interface self-alignment-interface side-position-interface font-interface item-interface )))) )) + (OttavaBracket + . ( + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) + (print-function . ,Ottava_bracket::print) + (font-shape . italic) + (shorten-pair . (0.0 . -0.6)) + (staff-padding . 1.0) + (padding . 0.5) + (minimum-length . 1.0) + (dash-fraction . 0.3) + (edge-height . (0 . 1.2)) + (direction . 1) + (meta . ((interfaces . (ottava-bracket-interface + line-interface side-position-interface + font-interface text-interface spanner-interface)))) + )) + (PaperColumn . ( (axes . (0)) @@ -914,6 +890,24 @@ piano-pedal-interface piano-pedal-bracket-interface spanner-interface)))) )) + (RehearsalMark + . ( + (print-function . ,Text_interface::print) + (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) + (after-line-breaking-callback . ,shift-right-at-line-begin) + (self-alignment-X . 0) + (direction . 1) + (breakable . #t) + (font-size . 2) + (baseline-skip . 2) + (break-visibility . ,end-of-line-invisible) + (padding . 0.8) + (meta . ((interfaces . (text-interface + side-position-interface font-interface mark-interface + self-alignment-interface item-interface )))) + )) + (RemoveEmptyVerticalGroup . ( @@ -978,6 +972,20 @@ (meta . ((interfaces . (script-column-interface item-interface )))) )) + + (SeparationItem + . ( + (X-extent-callback . #f) + (Y-extent-callback . #f) + (meta . ((interfaces . (spacing-interface separation-item-interface item-interface )))) + )) + + (SeparatingGroupSpanner + . ( + (spacing-procedure . ,Separating_group_spanner::set_spacing_rods) + (meta . ((interfaces . (only-prebreak-interface spacing-interface separation-spanner-interface spanner-interface)))) + )) + (Slur . ((slur-details . ,default-slur-details) (print-function . ,Slur::print) @@ -1035,6 +1043,22 @@ stanza-number-interface text-interface font-interface item-interface )))) )) + (StringNumber + . ( + (print-function . ,print-circled-text-callback) + (padding . 0.5) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (font-encoding . fetaNumber) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((interfaces . (string-number-interface + font-interface text-script-interface text-interface + side-position-interface self-alignment-interface + item-interface)))) + )) + (StaffSpacing . ( (breakable . #t) @@ -1137,19 +1161,6 @@ (meta . ((interfaces . (stem-tremolo-interface item-interface )))) )) - (SeparationItem - . ( - (X-extent-callback . #f) - (Y-extent-callback . #f) - (meta . ((interfaces . (spacing-interface separation-item-interface item-interface )))) - )) - - (SeparatingGroupSpanner - . ( - (spacing-procedure . ,Separating_group_spanner::set_spacing_rods) - (meta . ((interfaces . (only-prebreak-interface spacing-interface separation-spanner-interface spanner-interface)))) - )) - (SustainPedal . ( (no-spacing-rods . #t) @@ -1217,6 +1228,21 @@ (meta . ((interfaces . (system-start-delimiter-interface spanner-interface)))) )) + + (TabNoteHead + . ( + (print-function . ,Text_interface::print) + (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) + (stem-attachment-function . ,tablature-stem-attachment-function) + (font-series . bold) + (meta . ((interfaces + . (rhythmic-head-interface + font-interface + note-head-interface staff-symbol-referencer-interface + text-interface item-interface )))) + )) + + (TextScript . ( (print-function . ,Text_interface::print) @@ -1233,21 +1259,7 @@ text-interface side-position-interface font-interface item-interface )))) )) - (CombineTextScript - . ( - (print-function . ,Text_interface::print) - (no-spacing-rods . #t) - (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (X-offset-callbacks . (,Self_alignment_interface::aligned_on_self)) - (direction . 1) - (padding . 0.5) - (staff-padding . 0.5) - (script-priority . 200) - ;; todo: add X self alignment? - (baseline-skip . 2) - (font-series . bold) - (meta . ((interfaces . (text-script-interface text-interface side-position-interface font-interface item-interface )))) - )) + (TextSpanner . ( (print-function . ,Text_spanner::print) @@ -1259,51 +1271,8 @@ (direction . 1) (meta . ((interfaces . (text-spanner-interface side-position-interface font-interface spanner-interface)))) )) - (TrillSpanner - . ( - (print-function . ,Dynamic_text_spanner::print) - (edge-text . ,(cons (make-musicglyph-markup "scripts.trill") - "")) - (style . trill) - (staff-padding . 1.0) - (padding . 0.5) - (direction . 1) - (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (meta . ((interfaces . (text-spanner-interface side-position-interface font-interface spanner-interface)))) - )) - - (OttavaBracket - . ( - (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (print-function . ,Ottava_bracket::print) - (font-shape . italic) - (shorten-pair . (0.0 . -0.6)) - (staff-padding . 1.0) - (padding . 0.5) - (minimum-length . 1.0) - (dash-fraction . 0.3) - (edge-height . (0 . 1.2)) - (direction . 1) - (meta . ((interfaces . (ottava-bracket-interface - line-interface side-position-interface - font-interface text-interface spanner-interface)))) - )) - - (TabNoteHead - . ( - (style . default) - (print-function . ,Text_interface::print) - (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) - (stem-attachment-function . ,tablature-stem-attachment-function) - (font-series . bold) - (meta . ((interfaces - . (rhythmic-head-interface - font-interface - note-head-interface staff-symbol-referencer-interface - text-interface item-interface )))) - )) - + (Tie . ( (print-function . ,Tie::print) @@ -1343,6 +1312,48 @@ (meta . ((interfaces . (time-signature-interface break-aligned-interface font-interface item-interface )))) )) + + (TrillSpanner + . ( + (print-function . ,Dynamic_text_spanner::print) + (edge-text . ,(cons (make-musicglyph-markup "scripts.trill") + "")) + (style . trill) + (staff-padding . 1.0) + (padding . 0.5) + (direction . 1) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) + (meta . ((interfaces . (text-spanner-interface side-position-interface font-interface spanner-interface)))) + )) + + (TrillPitchAccidental + . ((X-offset-callbacks . (,Side_position_interface::aligned_side)) + (padding . 0.2) + (direction . ,LEFT) + (font-size . -4) + (print-function . ,Accidental_interface::print) + (meta . ((interfaces . (item-interface font-interface)))) + )) + + (TrillPitchGroup + . ((X-offset-callbacks . (,Side_position_interface::aligned_side)) + (axes . (,X)) + (font-size . -4) + (print-function . ,parenthesize-elements) + (direction . ,RIGHT) + (padding . 0.3) + (meta . ((interfaces . (font-interface item-interface axis-group-interface)))) + )) + + (TrillPitchHead + . ((print-function . ,Note_head::print) + (duration-log . 2) + (Y-offset-callbacks . (,Staff_symbol_referencer::callback)) + (font-size . -4) + (meta . ((interfaces . (item-interface font-interface ledgered-interface staff-symbol-referencer-interface)))) + )) + + (TupletBracket . ( (padding . 1.1) @@ -1356,7 +1367,9 @@ ; (font-series . bold) (font-size . -2) - (meta . ((interfaces . (text-interface line-interface tuplet-bracket-interface font-interface spanner-interface)))) + (meta . ((interfaces . (text-interface line-interface + tuplet-bracket-interface + font-interface spanner-interface)))) )) (UnaCordaPedal @@ -1392,21 +1405,6 @@ (meta . ((interfaces . (vaticana-ligature-interface font-interface)))) )) - (VoltaBracket - . ( - (print-function . ,Volta_bracket_interface::print) - (direction . 1) - (padding . 1) - (font-encoding . fetaNumber) - (Y-offset-callbacks . (,Side_position_interface::aligned_side)) - (thickness . 1.6) ;; linethickness - (height . 2.0) ;; staffspace; - (minimum-space . 5) - (font-size . -4) - (meta . ((interfaces . (volta-bracket-interface - line-interface text-interface - side-position-interface font-interface spanner-interface)))) - )) (VerticalAlignment . ( @@ -1426,6 +1424,53 @@ (meta . ((interfaces . (axis-group-interface vertically-spaceable-interface spanner-interface)))) )) + + (VocalName + . ( + (breakable . #t) + (Y-offset-callbacks . (,Side_position_interface::aligned_on_support_refpoints)) + (direction . 0) + (space-alist . ((left-edge . (extra-space . 1.0)) + )) + (break-align-symbol . instrument-name) + (print-function . ,Text_interface::print) + (break-align-symbol . clef) + (break-visibility . ,begin-of-line-visible) + (baseline-skip . 2) + (meta . ((interfaces . (font-interface + self-alignment-interface + side-position-interface text-interface + break-aligned-interface item-interface )))) + )) + + (VoltaBracket + . ( + (print-function . ,Volta_bracket_interface::print) + (direction . 1) + (padding . 1) + (font-encoding . fetaNumber) + (Y-offset-callbacks . (,Side_position_interface::aligned_side)) + (thickness . 1.6) ;; linethickness + (height . 2.0) ;; staffspace; + (minimum-space . 5) + (font-size . -4) + (meta . ((interfaces . (volta-bracket-interface + line-interface text-interface + side-position-interface font-interface spanner-interface)))) + )) + + + (VoiceFollower + . ( + (style . line) + (gap . 0.5) + (breakable . #t) + (X-extent-callback . #f) + (Y-extent-callback . #f) + (print-function . ,Line_spanner::print) + (after-line-breaking-callback . ,Line_spanner::after_line_breaking) + (meta . ((interfaces . (line-spanner-interface line-interface spanner-interface)))) + )) )) (define (completize-grob-entry x) diff --git a/scm/define-markup-commands.scm b/scm/define-markup-commands.scm index d2b1aaa0b6..9a61ba87e6 100644 --- a/scm/define-markup-commands.scm +++ b/scm/define-markup-commands.scm @@ -90,7 +90,6 @@ the PDF backend." (cons (+ (- half) (car yext)) (+ half (cdr yext)))))) - (def-markup-command (box layout props arg) (markup?) "Draw a box round @var{arg}. Looks at @code{thickness}, @code{box-padding} and @code{font-size} properties to determine line @@ -102,8 +101,6 @@ thickness and padding around the markup." (m (interpret-markup layout props arg))) (box-stencil m th pad))) - - (def-markup-command (filled-box layout props xext yext blot) (number-pair? number-pair? number?) "Draw a box with rounded corners of dimensions @var{xext} and @var{yext}." @@ -125,6 +122,19 @@ thickness and padding around the markup." (ly:stencil-add white stil))) +(def-markup-command (pad-markup layout props padding arg) (number? markup?) + "Add space around a markup object." + + (let* + ((stil (interpret-markup layout props arg)) + (xext (ly:stencil-extent stil X)) + (yext (ly:stencil-extent stil Y))) + + (ly:make-stencil + (ly:stencil-expr stil) + (interval-widen xext padding) + (interval-widen yext padding)))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; space ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -160,7 +170,6 @@ normally inserted before elements on a line. "Stencil as markup" stil) - (define bbox-regexp (make-regexp "%%BoundingBox: ([0-9-]+) ([0-9-]+) ([0-9-]+) ([0-9-]+)")) diff --git a/scm/define-music-properties.scm b/scm/define-music-properties.scm index ef68b93f24..dfaff81440 100644 --- a/scm/define-music-properties.scm +++ b/scm/define-music-properties.scm @@ -43,11 +43,6 @@ descend in the context tree.") (digit ,integer? "digit for fingering") (direction ,ly:dir? "Print this up or down?") (drum-type ,symbol? "Which percussion instrument to play this note on.") - (tags ,list? "List of symbols that for denoting extra details, -e.g. @code{\\tag #'part ...} could tag a piece of music as only being active in a part.") - (text-type ,symbol? "Particular type of text script (e.g. finger, dynamic).") - (tempo-unit ,ly:duration? "The unit for the metronome count.") - (tonic ,ly:pitch? "Base of the scale") (error-found ,boolean? "If true, a parsing error was found in this expression") (element ,ly:music? "The single child of a Music_wrapper music object, or the body of a repeat.") (elements ,ly:music-list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ") @@ -65,7 +60,7 @@ can only be defined as initializer in @file{define-music-types.scm}.") (numerator ,integer? "numerator of a time signature") (once ,boolean? "Apply this operation only during one time step?") (octavation ,integer? - "This pitch was octavated by how many octaves? + "This pitch was octavated by how many octaves? For chord inversions, this is negative.") (origin ,ly:input-location? "where was this piece of music defined?") (page-penalty ,number? "Penalty for page break hint.") @@ -93,8 +88,15 @@ length of starting grace notes. This property can only be defined as initializer in @file{define-music-types.scm}.") (string-number ,integer? "The number of the string in a StringNumberEvent") (symbol ,symbol? "Grob name to perform an override/revert on.") + (tags ,list? "List of symbols that for denoting extra details, +e.g. @code{\\tag #'part ...} could tag a piece of music as only being active in a part.") + (text-type ,symbol? "Particular type of text script (e.g. finger, dynamic).") + (text ,markup? "markup expression to be printed") + (tempo-unit ,ly:duration? "The unit for the metronome count.") + (tonic ,ly:pitch? "Base of the scale") (tremolo-type ,integer? "") + (trill-pitch ,ly:pitch? "Pitch of other note of the trill.") (type ,symbol? "The type of this music object. Determines iteration in some cases.") (types ,list? "The types of this music object; determines by what engraver this music expression is processed.") diff --git a/scm/output-lib.scm b/scm/output-lib.scm index 4ee8e0f996..5ef27d02c2 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -282,3 +282,20 @@ centered, X==1 is at the right, X == -1 is at the left." (define-public darkcyan '(0.5 0.5 0.0)) (define-public darkmagenta '(0.5 0.0 0.5)) (define-public darkyellow '(0.0 0.5 0.5)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Pitch Trill Heads + +(define (parenthesize-elements grob) + (let* + ((elts (ly:grob-property grob 'elements)) + (x-ext (ly:relative-group-extent elts grob X)) + (font (ly:grob-default-font grob)) + (lp (ly:font-get-glyph font "accidentals.leftparen")) + (rp (ly:font-get-glyph font "accidentals.rightparen")) + (padding 0.1)) + + (ly:stencil-add + (ly:stencil-translate-axis lp (- (car x-ext) padding) X) + (ly:stencil-translate-axis rp (+ (cdr x-ext) padding) X)) + )) diff --git a/scm/safe-lily.scm b/scm/safe-lily.scm index 5df324577c..e45d2ef646 100644 --- a/scm/safe-lily.scm +++ b/scm/safe-lily.scm @@ -43,10 +43,10 @@ ly:format-output ly:get-all-function-documentation ly:get-all-translators - ly:get-default-font ly:get-glyph ly:get-option ly:grob-alist-chain + ly:grob-default-font ly:grob-extent ly:grob-original ly:grob-layout diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index 571e6c964c..3571440dd4 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -52,3 +52,22 @@ (define-public (format-mark-box-barnumbers mark context) (make-bold-markup (make-box-markup (number->string (ly:context-property context 'currentBarNumber))))) + +(define-public (format-pitched-trill-head pitch do-print-accidental context) + (make-override-markup + '(word-space . 0.0) + (make-line-markup + (append + (list + (make-musicglyph-markup "accidentals.leftparen")) + (if do-print-accidental + (list (make-musicglyph-markup + (string-append "accidentals." + (number->string (ly:pitch-alteration pitch)))) + (make-hspace-markup 0.2)) + '()) + + (list + (make-musicglyph-markup "noteheads.s2") + (make-musicglyph-markup "accidentals.rightparen")) + )))) -- 2.39.2