From 970e4236feae452eb817c8f85564be35a8bd650e Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Mon, 26 Jan 2004 10:36:07 +0000 Subject: [PATCH] (stop_translation_timestep): align all stanza numbers. --- ChangeLog | 5 ++++ VERSION | 4 +-- lily/beam.cc | 12 ++++++-- lily/engraver.cc | 6 ++-- lily/lyric-phrasing-engraver.cc | 46 ++++++++++++++++++++++++++---- lily/mensural-ligature-engraver.cc | 7 ----- lily/spacing-engraver.cc | 2 +- lily/stem-tremolo.cc | 7 +++-- scm/define-grob-interfaces.scm | 7 +++++ scm/define-grobs.scm | 2 +- 10 files changed, 76 insertions(+), 22 deletions(-) diff --git a/ChangeLog b/ChangeLog index 285e2dd643..620132cbc2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2004-01-26 Han-Wen Nienhuys + + * lily/lyric-phrasing-engraver.cc (stop_translation_timestep): + align all stanza numbers. + 2004-01-26 Heikki Junes * Documentation/user/{introduction.itely,refman.itely, diff --git a/VERSION b/VERSION index e2f0006468..aaa77e5b2b 100644 --- a/VERSION +++ b/VERSION @@ -1,6 +1,6 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=2 MINOR_VERSION=1 -PATCH_LEVEL=14 -MY_PATCH_LEVEL=hwn1 +PATCH_LEVEL=15 +MY_PATCH_LEVEL= diff --git a/lily/beam.cc b/lily/beam.cc index 4c5f743030..60b6944a80 100644 --- a/lily/beam.cc +++ b/lily/beam.cc @@ -83,8 +83,16 @@ Real Beam::get_beam_translation (Grob *me) { SCM func = me->get_grob_property ("space-function"); - SCM s = gh_call2 (func, me->self_scm (), scm_int2num (get_beam_count (me))); - return gh_scm2double (s); + + if (gh_procedure_p (func)) + { + SCM s = gh_call2 (func, me->self_scm (), scm_int2num (get_beam_count (me))); + return gh_scm2double (s); + } + else + { + return 0.81; + } } /* Maximum beam_count. */ diff --git a/lily/engraver.cc b/lily/engraver.cc index 57c4298c39..b009c3cb32 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -71,13 +71,15 @@ Engraver::process_music () Item* Engraver::internal_make_item (SCM x) { - return new Item (x); + SCM props = internal_get_property (x); + return new Item (props); } Spanner* Engraver::internal_make_spanner (SCM x) { - return new Spanner (x); + SCM props = internal_get_property (x); + return new Spanner (props); } Engraver::Engraver() diff --git a/lily/lyric-phrasing-engraver.cc b/lily/lyric-phrasing-engraver.cc index f33a10de35..2787980474 100644 --- a/lily/lyric-phrasing-engraver.cc +++ b/lily/lyric-phrasing-engraver.cc @@ -14,6 +14,7 @@ source file of the GNU LilyPond music typesetter #include "lyric-extender.hh" #include "item.hh" #include "group-interface.hh" +#include "side-position-interface.hh" struct Phrasing_association { @@ -22,6 +23,8 @@ struct Phrasing_association Link_array heads_; Link_array past_extenders_; Link_array new_extenders_; + Link_array stanza_numbers_; + bool melisma_; @@ -45,6 +48,7 @@ private: void add_lyric_phrasing (Grob_info); void add_voice_phrasing (Grob_info); void add_lyric_extender (Grob_info); + void add_stanza_number (Grob_info); Phrasing_association *get_phrasing_assoc (String nm); String get_voice_name_for_lyric (Translator_group*tr); Link_array assocs_; @@ -65,6 +69,8 @@ Lyric_phrasing_engraver::acknowledge_grob (Grob_info i) add_lyric_phrasing (i); else if (Lyric_extender::has_interface (h)) add_lyric_extender (i); + else if (h->internal_has_interface (ly_symbol2scm ("stanza-number-interface"))) + add_stanza_number (i); } Phrasing_association * @@ -127,6 +133,19 @@ Lyric_phrasing_engraver::add_lyric_extender (Grob_info inf) a->new_extenders_.push (dynamic_cast (inf.grob_)); } +void +Lyric_phrasing_engraver::add_stanza_number (Grob_info inf) +{ + Translator_group * tr = inf.origin_trans_->daddy_trans_; + while (tr && !tr->is_alias (ly_symbol2scm ("LyricsVoice"))) + tr = tr->daddy_trans_; + + if (!tr) + return; + + Phrasing_association *a = get_phrasing_assoc (get_voice_name_for_lyric (tr)); + a->stanza_numbers_.push (inf.grob_); +} void Lyric_phrasing_engraver::add_voice_phrasing (Grob_info inf) @@ -162,12 +181,28 @@ Lyric_phrasing_engraver::add_lyric_phrasing (Grob_info inf) void Lyric_phrasing_engraver::stop_translation_timestep () { + Link_array stzs; + Link_array lyrs; for (int i = assocs_.size (); i--; ) { - assocs_[i]->heads_.clear (); - assocs_[i]->lyrics_.clear (); - assocs_[i]->past_extenders_.concat (assocs_[i]->new_extenders_) ; - assocs_[i]->new_extenders_.clear (); + Phrasing_association * a = assocs_[i]; + stzs.concat (a->stanza_numbers_); + lyrs.concat (a->lyrics_); + } + + for(int i= lyrs.size(); i--;) + for (int j = stzs.size (); j--;) + Side_position_interface::add_support (stzs[j], lyrs[i]); + + for (int i = assocs_.size (); i--; ) + { + Phrasing_association * a = assocs_[i]; + + a->stanza_numbers_.clear (); + a->heads_.clear (); + a->lyrics_.clear (); + a->past_extenders_.concat (assocs_[i]->new_extenders_) ; + a->new_extenders_.clear (); } } @@ -211,7 +246,8 @@ ENTER_DESCRIPTION(Lyric_phrasing_engraver, "This engraver combines note heads and lyrics for alignment. ", "", "", - "lyric-syllable-interface note-head-interface lyric-extender-interface", + "stanza-number-interface lyric-syllable-interface " + "note-head-interface lyric-extender-interface", "associatedVoice", ""); diff --git a/lily/mensural-ligature-engraver.cc b/lily/mensural-ligature-engraver.cc index 4f915714da..f982a11ac7 100644 --- a/lily/mensural-ligature-engraver.cc +++ b/lily/mensural-ligature-engraver.cc @@ -403,13 +403,6 @@ Mensural_ligature_engraver::fold_up_primitives (Array primitives) if (i > 0) { -#if 0 - Rod r; - r.distance_ = distance; - r.item_l_drul_[LEFT] = first; - r.item_l_drul_[RIGHT] = current; - r.add_to_cols (); -#endif current->translate_axis (distance, X_AXIS); } diff --git a/lily/spacing-engraver.cc b/lily/spacing-engraver.cc index 377d88bbdf..5e1f6371b5 100644 --- a/lily/spacing-engraver.cc +++ b/lily/spacing-engraver.cc @@ -78,7 +78,7 @@ Spacing_engraver::process_music () { if (!spacing_) { - spacing_ =make_spanner ("SpacingSpanner"); + spacing_ = make_spanner ("SpacingSpanner"); spacing_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn"))); announce_grob(spacing_, SCM_EOL); } diff --git a/lily/stem-tremolo.cc b/lily/stem-tremolo.cc index 886c9df71d..9a0fb6f171 100644 --- a/lily/stem-tremolo.cc +++ b/lily/stem-tremolo.cc @@ -129,14 +129,17 @@ Stem_tremolo::brew_molecule (SCM grob) Grob *stem = unsmob_grob (me->get_grob_property ("stem")); Grob *beam = Stem::get_beam (stem); Direction stemdir = Stem::get_direction (stem); - Real beam_translation = beam ? Beam::get_beam_translation (beam) : 0.81; + Real beam_translation + = (beam && beam->live ()) + ? Beam::get_beam_translation (beam) + : 0.81; Molecule mol = raw_molecule (me); Interval mol_ext = mol.extent (Y_AXIS); Real ss = Staff_symbol_referencer::staff_space (me); // ugh, rather calc from Stem_tremolo_req - int beam_count = (beam) ? (Stem::beam_multiplicity (stem).length ()+ 1): 0; + int beam_count = (beam) ? (Stem::beam_multiplicity (stem).length () + 1): 0; /* TODO. diff --git a/scm/define-grob-interfaces.scm b/scm/define-grob-interfaces.scm index 26e050f838..9012a85e45 100644 --- a/scm/define-grob-interfaces.scm +++ b/scm/define-grob-interfaces.scm @@ -80,6 +80,13 @@ extents of a cluster spanner at this X position. are interesting enough to maintain a hara-kiri staff." '() ) + +(ly:add-interface + 'stanza-number-interface + "" + '() + ) + ;;; todo: this is not typesetting info. Move to interpretation. (ly:add-interface 'tablature-interface diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index ec4977d958..dcdb696410 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -849,7 +849,7 @@ (padding . 1.0) (X-offset-callbacks . (,Side_position_interface::aligned_side)) (direction . ,LEFT) - (meta . ((interfaces . (side-position-interface text-interface font-interface item-interface )))) + (meta . ((interfaces . (side-position-interface stanza-number-interface text-interface font-interface item-interface )))) )) (StaffSpacing -- 2.39.2