From: hanwen Date: Thu, 17 Nov 2005 21:12:19 +0000 (+0000) Subject: * scm/define-context-properties.scm X-Git-Tag: release/2.7.20~37 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=6d952df59f18617cb2938748ced0a965d11e3f80;p=lilypond.git * scm/define-context-properties.scm (all-user-translation-properties): rename figuredBassFormatter from newFiguredBassFormatter. * scm/define-grobs.scm (all-grob-descriptions): move from NewBassFigure * lily/figured-bass-engraver.cc: move from new-figured-bass-engraver.cc * lily/beam.cc (calc_beaming): new function. (calc_shorten): new function. * THANKS: add Edward Neeman. * scm/define-grobs.scm (all-grob-descriptions): add Y-offset property. --- diff --git a/ChangeLog b/ChangeLog index dee05a0421..91749521d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2005-11-17 Han-Wen Nienhuys + * scm/define-context-properties.scm + (all-user-translation-properties): rename figuredBassFormatter + from newFiguredBassFormatter. + + * scm/define-grobs.scm (all-grob-descriptions): move from NewBassFigure + + * lily/figured-bass-engraver.cc: move from new-figured-bass-engraver.cc + * lily/stem.cc (calc_stem_info): trigger beaming calculation. * lily/beam.cc (calc_beaming): new function. diff --git a/THANKS b/THANKS index 7483c5586f..9d76cdc643 100644 --- a/THANKS +++ b/THANKS @@ -55,6 +55,7 @@ Michael Welsh Duggan Milan Zamazal Ralph Little Scott Russell +Sven Axelsson Thomas Bushnell BSG Trevor Bača Vicente Solsona Dellá diff --git a/lily/beam.cc b/lily/beam.cc index 4b6bfa3024..806130862c 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -273,7 +273,7 @@ Beam::calc_beaming (SCM smob) } } - return SCM_BOOL_T; + return SCM_EOL; } /* @@ -1388,7 +1388,8 @@ ADD_INTERFACE (Beam, "A beam. \n\n" "The @code{thickness} property is the weight of beams, " - "measured in staffspace. The @code{direction} property is not user-serviceable. Use " + "measured in staffspace. The @code{direction} " + "property is not user-serviceable. Use " "the @code{direction} property of @code{Stem} instead. " , @@ -1396,6 +1397,7 @@ ADD_INTERFACE (Beam, /* properties */ "auto-knee-gap " "beamed-stem-shorten " + "beaming " "break-overshoot " "chord-tremolo " "concaveness " diff --git a/lily/figured-bass-engraver.cc b/lily/figured-bass-engraver.cc index b72b0b91e4..16132f778a 100644 --- a/lily/figured-bass-engraver.cc +++ b/lily/figured-bass-engraver.cc @@ -3,59 +3,254 @@ source file of the GNU LilyPond music typesetter - (c) 2002--2005 Han-Wen Nienhuys + (c) 2005 Han-Wen Nienhuys + */ #include "engraver.hh" -#include "text-interface.hh" -#include "item.hh" + #include "context.hh" +#include "music.hh" +#include "item.hh" +#include "spanner.hh" +#include "axis-group-interface.hh" +#include "align-interface.hh" +#include "pointer-group-interface.hh" +#include "text-interface.hh" +#include "grob-array.hh" + #include "translator.icc" -class Figured_bass_engraver : public Engraver +struct Figure_group { - TRANSLATOR_DECLARATIONS (Figured_bass_engraver); -protected: - Link_array figures_; - Music *rest_event_; + Spanner *group_; + Spanner *continuation_line_; + + SCM number_; + SCM alteration_; + + Item *figure_item_; + Music *current_music_; + bool force_no_continuation_; + + Figure_group () + { + figure_item_ = 0; + force_no_continuation_ = false; + continuation_line_ = 0; + number_ = SCM_EOL; + alteration_ = SCM_EOL; + group_ = 0; + current_music_ = 0; + } + bool is_continuation () const + { + return + current_music_ + && !force_no_continuation_ + && ly_is_equal (number_, + current_music_->get_property ("figure")) + && ly_is_equal (alteration_, + current_music_->get_property ("alteration")); + } +}; - Grob *figure_; +struct Figured_bass_engraver : public Engraver +{ + TRANSLATOR_DECLARATIONS(Figured_bass_engraver); + void clear_spanners(); + void add_brackets (); + void create_grobs (); + void center_continuations (Link_array const &consecutive_lines); + void center_repeated_continuations (); +protected: + Array groups_; + Spanner *alignment_; + Link_array new_musics_; + bool continuation_; + bool new_music_found_; + + Moment stop_moment_; + Music *rest_event_; + virtual bool try_music (Music *); + virtual void derived_mark () const; + + void start_translation_timestep (); void stop_translation_timestep (); void process_music (); }; -Figured_bass_engraver::Figured_bass_engraver () +void +Figured_bass_engraver::derived_mark () const { - figure_ = 0; - rest_event_ = 0; + for (int i = 0; i < groups_.size (); i++) + { + scm_gc_mark (groups_[i].number_); + scm_gc_mark (groups_[i].alteration_); + } } void Figured_bass_engraver::stop_translation_timestep () { - figure_ = 0; + if (groups_.is_empty () + || now_mom ().main_part_ < stop_moment_.main_part_) + return ; + + bool found = false; + for (int i = 0; !found && i < groups_.size (); i++) + found = found || groups_[i].current_music_; - figures_.clear (); + if (!found) + clear_spanners (); +} + +Figured_bass_engraver::Figured_bass_engraver () +{ + alignment_ = 0; + continuation_ = false; + rest_event_ = 0; + new_music_found_ = false; +} + +void +Figured_bass_engraver::start_translation_timestep () +{ + if (now_mom ().main_part_ < stop_moment_.main_part_) + return ; + rest_event_ = 0; + new_musics_.clear (); + for (int i = 0; i < groups_.size (); i++) + { + groups_[i].current_music_ = 0; + } + continuation_ = false; } bool Figured_bass_engraver::try_music (Music *m) { - if (m->is_mus_type ("bass-figure-event")) + new_music_found_ = true; + if (m->is_mus_type ("rest-event")) { - figures_.push (m); + rest_event_ = m; return true; } - else if (m->is_mus_type ("rest-event")) + else { - rest_event_ = m; + stop_moment_ = now_mom () + m->get_length (); + + SCM fig = m->get_property ("figure"); + for (int i = 0; i < groups_.size (); i++) + { + if (!groups_[i].current_music_ + && ly_is_equal (groups_[i].number_, fig)) + { + groups_[i].current_music_ = m; + groups_[i].force_no_continuation_ + = to_boolean (m->get_property ("no-continuation")); + continuation_ = true; + return true; + } + } + + new_musics_.push (m); + return true; } - return false; +} + +void +Figured_bass_engraver::center_continuations (Link_array const &consecutive_lines) +{ + if (consecutive_lines.size () == 2) + { + Link_array left_figs; + for (int j = consecutive_lines.size(); j--;) + left_figs.push (consecutive_lines[j]->get_bound (LEFT)); + + SCM ga = Grob_array::make_array (); + unsmob_grob_array (ga)->set_array (left_figs); + + for (int j = consecutive_lines.size(); j--;) + consecutive_lines[j]->set_object ("figures", + unsmob_grob_array (ga)->smobbed_copy ()); + } +} + +void +Figured_bass_engraver::center_repeated_continuations () +{ + Link_array consecutive_lines; + for (int i = 0; i <= groups_.size(); i++) + { + if (i < groups_.size () + && groups_[i].continuation_line_ + && (consecutive_lines.is_empty () + || (consecutive_lines[0]->get_bound(LEFT)->get_column () + == groups_[i].continuation_line_->get_bound (LEFT)->get_column () + && consecutive_lines[0]->get_bound(RIGHT)->get_column () + == groups_[i].continuation_line_->get_bound (RIGHT)->get_column ()))) + { + consecutive_lines.push (groups_[i].continuation_line_); + } + else + { + center_continuations (consecutive_lines); + consecutive_lines.clear (); + } + } +} + +void +Figured_bass_engraver::clear_spanners () +{ + if (!alignment_) + return; + + alignment_ = 0; + if (to_boolean (get_property ("figuredBassCenterContinuations"))) + center_repeated_continuations(); + + groups_.clear (); +} + +void +Figured_bass_engraver::add_brackets () +{ + Link_array encompass; + bool inside = false; + for (int i = 0; i < groups_.size (); i ++) + { + if (!groups_[i].current_music_) + continue; + + if (to_boolean (groups_[i].current_music_->get_property ("bracket-start"))) + { + inside = true; + } + + if (inside && groups_[i].figure_item_) + encompass.push (groups_[i].figure_item_); + + if (to_boolean (groups_[i].current_music_->get_property ("bracket-stop"))) + { + inside = false; + + Item * brack = make_item ("BassFigureBracket", groups_[i].current_music_->self_scm ()); + for (int j = 0; j < encompass.size (); j++) + { + Pointer_group_interface::add_grob (brack, + ly_symbol2scm ("elements"), + encompass[j]); + } + encompass.clear (); + } + } } void @@ -63,31 +258,216 @@ Figured_bass_engraver::process_music () { if (rest_event_) { - figure_ = make_item ("BassFigure", rest_event_->self_scm ()); - figure_->set_property ("text", scm_makfrom0str ("-")); + clear_spanners (); + return; + } + + if (!continuation_ + && new_musics_.is_empty ()) + { + clear_spanners (); + return; + } + + if (!new_music_found_) + return ; + + new_music_found_ = false; + + /* + Don't need to sync alignments, if we're not using extenders. + */ + bool use_extenders = to_boolean (get_property ("useBassFigureExtenders")); + if (!use_extenders) + { + if (to_boolean (get_property ("figuredBassCenterContinuations"))) + center_repeated_continuations (); + alignment_ = 0; + for (int i = 0; i < groups_.size (); i++) + { + groups_[i].group_ = 0; + groups_[i].continuation_line_ = 0; + } + } + + if (!continuation_) + { + clear_spanners (); } - else if (figures_.size ()) + + int k = 0; + for (int i = 0; i < new_musics_.size (); i++) { - SCM proc = get_property ("bassFigureFormatFunction"); - if (ly_is_procedure (proc)) + while (k < groups_.size() && + groups_[k].current_music_) + k++; + + if (k >= groups_.size ()) { - SCM l = SCM_EOL; - SCM *t = &l; - for (int i = 0; i < figures_.size (); i++) + Figure_group group; + groups_.push (group); + } + + groups_[k].current_music_ = new_musics_[i]; + groups_[k].figure_item_ = 0; + k++; + } + + for (int i = 0; i < groups_.size (); i++) + { + if (!groups_[i].is_continuation ()) + { + groups_[i].number_ = SCM_BOOL_F; + groups_[i].alteration_ = SCM_BOOL_F; + } + } + + if (use_extenders) + { + Array junk_continuations; + for (int i = 0; i < groups_.size(); i++) + { + Figure_group &group = groups_[i]; + + if (group.is_continuation ()) { - *t = scm_cons (figures_[i]->self_scm (), SCM_EOL); - t = SCM_CDRLOC (*t); + if (!group.continuation_line_) + { + Spanner * line = make_spanner ("BassFigureContinuation", SCM_EOL); + Item * item = group.figure_item_; + group.continuation_line_ = line; + line->set_bound (LEFT, item); + + /* + Don't add as child. This will cache the wrong + (pre-break) stencil when callbacks are triggered. + */ + line->set_parent (group.group_, Y_AXIS); + Pointer_group_interface::add_grob (line, ly_symbol2scm ("figures"), item); + + group.figure_item_ = 0; + } } - figure_ = make_item ("BassFigure", figures_[0]->self_scm ()); - scm_call_3 (proc, l, context ()->self_scm (), - figure_->self_scm ()); + else if (group.continuation_line_) + junk_continuations.push (i); } + + /* + Ugh, repeated code. + */ + Link_array consecutive; + for (int i = 0; i <= junk_continuations.size (); i++) + { + if (i < junk_continuations.size() + && (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1)) + consecutive.push (groups_[junk_continuations[i]].continuation_line_); + else + { + center_continuations (consecutive); + consecutive.clear (); + if (i < junk_continuations.size ()) + consecutive.push (groups_[junk_continuations[i]].continuation_line_); + } + } + for (int i = 0; i < junk_continuations.size (); i++) + groups_[junk_continuations[i]].continuation_line_ = 0; + } + + create_grobs (); + add_brackets (); +} + +void +Figured_bass_engraver::create_grobs () +{ + Grob *muscol = dynamic_cast (unsmob_grob (get_property ("currentMusicalColumn"))); + if (!alignment_) + { + alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL); + alignment_->set_bound (LEFT, muscol); + } + alignment_->set_bound (RIGHT, muscol); + + SCM proc = get_property ("figuredBassFormatter"); + for (int i = 0; i < groups_.size(); i++) + { + Figure_group &group = groups_[i]; + + if (group.current_music_) + { + Item *item + = make_item ("BassFigure", + group.current_music_->self_scm ()); + + + SCM fig = group.current_music_->get_property ("figure"); + if (!group.group_) + { + group.group_ = make_spanner ("BassFigureLine", SCM_EOL); + group.group_->set_bound (LEFT, muscol); + Align_interface::add_element (alignment_, + group.group_); + } + + if (scm_memq (fig, get_property ("implicitBassFigures")) != SCM_BOOL_F) + { + item->set_property ("transparent", SCM_BOOL_T); + item->set_property ("implicit", SCM_BOOL_T); + } + + group.number_ = fig; + group.alteration_ = group.current_music_->get_property ("alteration"); + + SCM text = group.current_music_->get_property ("text"); + if (!Text_interface::is_markup (text) + && ly_is_procedure (proc)) + { + text = scm_call_3 (proc, fig, group.current_music_->self_scm (), + context ()->self_scm ()); + } + + item->set_property ("text", text); + + Axis_group_interface::add_element (group.group_, item); + group.figure_item_ = item; + } + + if (group.continuation_line_) + { + /* + UGH should connect to the bass staff, and get the note heads. + */ + group.figure_item_->set_property ("transparent", SCM_BOOL_T); + group.continuation_line_->set_bound (RIGHT, group.figure_item_); + } + + + if (groups_[i].group_) + groups_[i].group_->set_bound (RIGHT, muscol); } + } ADD_TRANSLATOR (Figured_bass_engraver, - /* doc */ "Make figured bass numbers.", - /* create */ "BassFigure", - /* accept */ "rest-event bass-figure-event", - /* read */ "bassFigureFormatFunction", - /* write */ ""); + /* doc */ + + "Make figured bass numbers.", + /* create */ + "BassFigure " + "BassFigureAlignment " + "BassFigureBracket", + "BassFigureContinuation " + "BassFigureLine " + + /* accept */ + "bass-figure-event rest-event", + + /* read */ + "figuredBassCenterContinuations " + "implicitBassFigures " + "figuredBassFormatter " + "figuredBassAlterationDirection " + "useBassFigureExtenders", + + /* write */ + ""); diff --git a/lily/new-figured-bass-engraver.cc b/lily/new-figured-bass-engraver.cc deleted file mode 100644 index f4beb0acab..0000000000 --- a/lily/new-figured-bass-engraver.cc +++ /dev/null @@ -1,473 +0,0 @@ -/* - new-figured-bass-engraver.cc -- implement New_figured_bass_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2005 Han-Wen Nienhuys - -*/ - -#include "engraver.hh" - -#include "context.hh" -#include "music.hh" -#include "item.hh" -#include "spanner.hh" -#include "axis-group-interface.hh" -#include "align-interface.hh" -#include "pointer-group-interface.hh" -#include "text-interface.hh" -#include "grob-array.hh" - - -#include "translator.icc" - -struct Figure_group -{ - Spanner *group_; - Spanner *continuation_line_; - - SCM number_; - SCM alteration_; - - Item *figure_item_; - Music *current_music_; - bool force_no_continuation_; - - Figure_group () - { - figure_item_ = 0; - force_no_continuation_ = false; - continuation_line_ = 0; - number_ = SCM_EOL; - alteration_ = SCM_EOL; - group_ = 0; - current_music_ = 0; - } - bool is_continuation () const - { - return - current_music_ - && !force_no_continuation_ - && ly_is_equal (number_, - current_music_->get_property ("figure")) - && ly_is_equal (alteration_, - current_music_->get_property ("alteration")); - } -}; - -struct New_figured_bass_engraver : public Engraver -{ - TRANSLATOR_DECLARATIONS(New_figured_bass_engraver); - void clear_spanners(); - void add_brackets (); - void create_grobs (); - - void center_continuations (Link_array const &consecutive_lines); - void center_repeated_continuations (); -protected: - Array groups_; - Spanner *alignment_; - Link_array new_musics_; - bool continuation_; - bool new_music_found_; - - Moment stop_moment_; - Music *rest_event_; - - virtual bool try_music (Music *); - virtual void derived_mark () const; - - void start_translation_timestep (); - void stop_translation_timestep (); - void process_music (); -}; - -void -New_figured_bass_engraver::derived_mark () const -{ - for (int i = 0; i < groups_.size (); i++) - { - scm_gc_mark (groups_[i].number_); - scm_gc_mark (groups_[i].alteration_); - } -} - -void -New_figured_bass_engraver::stop_translation_timestep () -{ - if (groups_.is_empty () - || now_mom ().main_part_ < stop_moment_.main_part_) - return ; - - bool found = false; - for (int i = 0; !found && i < groups_.size (); i++) - found = found || groups_[i].current_music_; - - if (!found) - clear_spanners (); -} - -New_figured_bass_engraver::New_figured_bass_engraver () -{ - alignment_ = 0; - continuation_ = false; - rest_event_ = 0; - new_music_found_ = false; -} - -void -New_figured_bass_engraver::start_translation_timestep () -{ - if (now_mom ().main_part_ < stop_moment_.main_part_) - return ; - - rest_event_ = 0; - new_musics_.clear (); - for (int i = 0; i < groups_.size (); i++) - { - groups_[i].current_music_ = 0; - } - continuation_ = false; -} - -bool -New_figured_bass_engraver::try_music (Music *m) -{ - new_music_found_ = true; - if (m->is_mus_type ("rest-event")) - { - rest_event_ = m; - return true; - } - else - { - stop_moment_ = now_mom () + m->get_length (); - - SCM fig = m->get_property ("figure"); - for (int i = 0; i < groups_.size (); i++) - { - if (!groups_[i].current_music_ - && ly_is_equal (groups_[i].number_, fig)) - { - groups_[i].current_music_ = m; - groups_[i].force_no_continuation_ - = to_boolean (m->get_property ("no-continuation")); - continuation_ = true; - return true; - } - } - - new_musics_.push (m); - - return true; - } -} - -void -New_figured_bass_engraver::center_continuations (Link_array const &consecutive_lines) -{ - if (consecutive_lines.size () == 2) - { - Link_array left_figs; - for (int j = consecutive_lines.size(); j--;) - left_figs.push (consecutive_lines[j]->get_bound (LEFT)); - - SCM ga = Grob_array::make_array (); - unsmob_grob_array (ga)->set_array (left_figs); - - for (int j = consecutive_lines.size(); j--;) - consecutive_lines[j]->set_object ("figures", - unsmob_grob_array (ga)->smobbed_copy ()); - } -} - -void -New_figured_bass_engraver::center_repeated_continuations () -{ - Link_array consecutive_lines; - for (int i = 0; i <= groups_.size(); i++) - { - if (i < groups_.size () - && groups_[i].continuation_line_ - && (consecutive_lines.is_empty () - || (consecutive_lines[0]->get_bound(LEFT)->get_column () - == groups_[i].continuation_line_->get_bound (LEFT)->get_column () - && consecutive_lines[0]->get_bound(RIGHT)->get_column () - == groups_[i].continuation_line_->get_bound (RIGHT)->get_column ()))) - { - consecutive_lines.push (groups_[i].continuation_line_); - } - else - { - center_continuations (consecutive_lines); - consecutive_lines.clear (); - } - } -} - -void -New_figured_bass_engraver::clear_spanners () -{ - if (!alignment_) - return; - - alignment_ = 0; - if (to_boolean (get_property ("figuredBassCenterContinuations"))) - center_repeated_continuations(); - - groups_.clear (); -} - -void -New_figured_bass_engraver::add_brackets () -{ - Link_array encompass; - bool inside = false; - for (int i = 0; i < groups_.size (); i ++) - { - if (!groups_[i].current_music_) - continue; - - if (to_boolean (groups_[i].current_music_->get_property ("bracket-start"))) - { - inside = true; - } - - if (inside && groups_[i].figure_item_) - encompass.push (groups_[i].figure_item_); - - if (to_boolean (groups_[i].current_music_->get_property ("bracket-stop"))) - { - inside = false; - - Item * brack = make_item ("BassFigureBracket", groups_[i].current_music_->self_scm ()); - for (int j = 0; j < encompass.size (); j++) - { - Pointer_group_interface::add_grob (brack, - ly_symbol2scm ("elements"), - encompass[j]); - } - encompass.clear (); - } - } -} - -void -New_figured_bass_engraver::process_music () -{ - if (rest_event_) - { - clear_spanners (); - return; - } - - if (!continuation_ - && new_musics_.is_empty ()) - { - clear_spanners (); - return; - } - - if (!new_music_found_) - return ; - - new_music_found_ = false; - - /* - Don't need to sync alignments, if we're not using extenders. - */ - bool use_extenders = to_boolean (get_property ("useBassFigureExtenders")); - if (!use_extenders) - { - if (to_boolean (get_property ("figuredBassCenterContinuations"))) - center_repeated_continuations (); - alignment_ = 0; - for (int i = 0; i < groups_.size (); i++) - { - groups_[i].group_ = 0; - groups_[i].continuation_line_ = 0; - } - } - - if (!continuation_) - { - clear_spanners (); - } - - int k = 0; - for (int i = 0; i < new_musics_.size (); i++) - { - while (k < groups_.size() && - groups_[k].current_music_) - k++; - - if (k >= groups_.size ()) - { - Figure_group group; - groups_.push (group); - } - - groups_[k].current_music_ = new_musics_[i]; - groups_[k].figure_item_ = 0; - k++; - } - - for (int i = 0; i < groups_.size (); i++) - { - if (!groups_[i].is_continuation ()) - { - groups_[i].number_ = SCM_BOOL_F; - groups_[i].alteration_ = SCM_BOOL_F; - } - } - - if (use_extenders) - { - Array junk_continuations; - for (int i = 0; i < groups_.size(); i++) - { - Figure_group &group = groups_[i]; - - if (group.is_continuation ()) - { - if (!group.continuation_line_) - { - Spanner * line = make_spanner ("BassFigureContinuation", SCM_EOL); - Item * item = group.figure_item_; - group.continuation_line_ = line; - line->set_bound (LEFT, item); - - /* - Don't add as child. This will cache the wrong - (pre-break) stencil when callbacks are triggered. - */ - line->set_parent (group.group_, Y_AXIS); - Pointer_group_interface::add_grob (line, ly_symbol2scm ("figures"), item); - - group.figure_item_ = 0; - } - } - else if (group.continuation_line_) - junk_continuations.push (i); - } - - /* - Ugh, repeated code. - */ - Link_array consecutive; - for (int i = 0; i <= junk_continuations.size (); i++) - { - if (i < junk_continuations.size() - && (i == 0 || junk_continuations[i-1] == junk_continuations[i] - 1)) - consecutive.push (groups_[junk_continuations[i]].continuation_line_); - else - { - center_continuations (consecutive); - consecutive.clear (); - if (i < junk_continuations.size ()) - consecutive.push (groups_[junk_continuations[i]].continuation_line_); - } - } - for (int i = 0; i < junk_continuations.size (); i++) - groups_[junk_continuations[i]].continuation_line_ = 0; - } - - create_grobs (); - add_brackets (); -} - -void -New_figured_bass_engraver::create_grobs () -{ - Grob *muscol = dynamic_cast (unsmob_grob (get_property ("currentMusicalColumn"))); - if (!alignment_) - { - alignment_ = make_spanner ("BassFigureAlignment", SCM_EOL); - alignment_->set_bound (LEFT, muscol); - } - alignment_->set_bound (RIGHT, muscol); - - SCM proc = get_property ("newFiguredBassFormatter"); - for (int i = 0; i < groups_.size(); i++) - { - Figure_group &group = groups_[i]; - - if (group.current_music_) - { - Item *item - = make_item ("NewBassFigure", - group.current_music_->self_scm ()); - - - SCM fig = group.current_music_->get_property ("figure"); - if (!group.group_) - { - group.group_ = make_spanner ("BassFigureLine", SCM_EOL); - group.group_->set_bound (LEFT, muscol); - Align_interface::add_element (alignment_, - group.group_); - } - - if (scm_memq (fig, get_property ("implicitBassFigures")) != SCM_BOOL_F) - { - item->set_property ("transparent", SCM_BOOL_T); - item->set_property ("implicit", SCM_BOOL_T); - } - - group.number_ = fig; - group.alteration_ = group.current_music_->get_property ("alteration"); - - SCM text = group.current_music_->get_property ("text"); - if (!Text_interface::is_markup (text) - && ly_is_procedure (proc)) - { - text = scm_call_3 (proc, fig, group.current_music_->self_scm (), - context ()->self_scm ()); - } - - item->set_property ("text", text); - - Axis_group_interface::add_element (group.group_, item); - group.figure_item_ = item; - } - - if (group.continuation_line_) - { - /* - UGH should connect to the bass staff, and get the note heads. - */ - group.figure_item_->set_property ("transparent", SCM_BOOL_T); - group.continuation_line_->set_bound (RIGHT, group.figure_item_); - } - - - if (groups_[i].group_) - groups_[i].group_->set_bound (RIGHT, muscol); - } - -} - -ADD_TRANSLATOR (New_figured_bass_engraver, - /* doc */ - - "Make figured bass numbers.", - /* create */ - "NewBassFigure " - "BassFigureAlignment " - "BassFigureBracket", - "BassFigureContinuation " - "BassFigureLine " - - /* accept */ - "bass-figure-event rest-event", - - /* read */ - "figuredBassCenterContinuations " - "implicitBassFigures " - "newFiguredBassFormatter " - "figuredBassAlterationDirection " - "useBassFigureExtenders", - - /* write */ - ""); diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index 60689ae5f5..9ac8cfad6d 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -550,7 +550,7 @@ AncientRemoveEmptyStaffContext = \context { tablatureFormat = #fret-number-tablature-format %% - newFiguredBassFormatter = #format-new-bass-figure + figuredBassFormatter = #format-bass-figure metronomeMarkFormatter = #format-metronome-markup graceSettings = #`( (Voice Stem direction 1) @@ -581,8 +581,7 @@ AncientRemoveEmptyStaffContext = \context { \type "Engraver_group" \name "FiguredBass" -%% \consists "Figured_bass_engraver" - \consists "New_figured_bass_engraver" + \consists "Figured_bass_engraver" \consists "Note_swallow_translator" \consists "Skip_event_swallow_translator" \consists "Separating_line_group_engraver" diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index deecf7ba7b..051d1d28dc 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -108,7 +108,7 @@ for the down staff of PianoStaff. Used by @code{\\autochange}") (trebleStaffProperties ,list? "Alist of property settings to apply for the up staff of PianoStaff. Used by @code{\\autochange}") - (newFiguredBassFormatter ,procedure? "Routine generating a markup + (figuredBassFormatter ,procedure? "Routine generating a markup for a bass figure.") (bassFigureFormatFunction ,procedure? "Procedure that is called to produce the formatting for a @code{BassFigure} grob. It takes a diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 9188337440..1b5dbf31d9 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -211,26 +211,6 @@ )) (BassFigure - . ( - - (stencil . ,Text_interface::print) - - (Y-offset . ,Self_alignment_interface::y_aligned_on_self) - (direction . 1) - (font-family . number) - - ;; We must do this, other BFs in - ;; layout16 become too small. - (font-size . -4) - (kern . 0.2) - (meta . ((class . Item) - (interfaces . (text-interface - rhythmic-grob-interface - bass-figure-interface - self-alignment-interface - font-interface)))))) - - (NewBassFigure . ( ; (stencil . ,Text_interface::print) diff --git a/scm/translation-functions.scm b/scm/translation-functions.scm index ad79b7bc2d..312acb5949 100644 --- a/scm/translation-functions.scm +++ b/scm/translation-functions.scm @@ -58,7 +58,7 @@ ;; Bass figures. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(define-public (format-new-bass-figure figure event context) +(define-public (format-bass-figure figure event context) (let* ((fig (ly:music-property event 'figure)) (fig-markup (if (number? figure) (if (eq? #t (ly:music-property event 'diminished))