align all stanza numbers.
+2004-01-26 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/lyric-phrasing-engraver.cc (stop_translation_timestep):
+ align all stanza numbers.
+
2004-01-26 Heikki Junes <hjunes@cc.hut.fi>
* Documentation/user/{introduction.itely,refman.itely,
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=1
-PATCH_LEVEL=14
-MY_PATCH_LEVEL=hwn1
+PATCH_LEVEL=15
+MY_PATCH_LEVEL=
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. */
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()
#include "lyric-extender.hh"
#include "item.hh"
#include "group-interface.hh"
+#include "side-position-interface.hh"
struct Phrasing_association
{
Link_array<Grob> heads_;
Link_array<Spanner> past_extenders_;
Link_array<Spanner> new_extenders_;
+ Link_array<Grob> stanza_numbers_;
+
bool melisma_;
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<Phrasing_association> assocs_;
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 *
a->new_extenders_.push (dynamic_cast<Spanner*> (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)
void
Lyric_phrasing_engraver::stop_translation_timestep ()
{
+ Link_array<Grob> stzs;
+ Link_array<Grob> 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 ();
}
}
"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",
"");
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);
}
{
if (!spacing_)
{
- spacing_ =make_spanner ("SpacingSpanner");
+ spacing_ = make_spanner ("SpacingSpanner");
spacing_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
announce_grob(spacing_, SCM_EOL);
}
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.
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
(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