From: Han-Wen Nienhuys Date: Sun, 3 Oct 2004 17:46:18 +0000 (+0000) Subject: * lily/break-substitution.cc (substitute_mutable_property_alist): X-Git-Tag: release/2.3.21~14 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=ccb6254ee7726910f377d3882e638adda70f2342;p=lilypond.git * lily/break-substitution.cc (substitute_mutable_property_alist): only put property back into value if != SCM_UNDEFINED * lily/lyric-extender.cc (print): don't take common refpoint of null object if right_text isn't there. --- diff --git a/ChangeLog b/ChangeLog index 26f1950f65..c388998457 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2004-10-03 Han-Wen Nienhuys + * lily/break-substitution.cc (substitute_mutable_property_alist): + only put property back into value if != SCM_UNDEFINED + + * lily/lyric-extender.cc (print): don't take common refpoint of + null object if right_text isn't there. + * lily/slur-scoring.cc (struct Slur_score_state): new struct. Collect scoring function arguments. (struct Slur_score_state): add musical_dy_ diff --git a/lily/break-substitution.cc b/lily/break-substitution.cc index 2238f44957..3ccc16c090 100644 --- a/lily/break-substitution.cc +++ b/lily/break-substitution.cc @@ -478,10 +478,17 @@ substitute_mutable_property_alist (SCM alist) else val = do_break_substitution (val); - *tail = scm_cons (scm_cons (sym, val), SCM_EOL); - tail = SCM_CDRLOC (*tail); - } + if (val != SCM_UNDEFINED) + { + /* + for ly:grob? properties, SCM_UNDEFINED could leak out + through ly:grob-property + */ + *tail = scm_cons (scm_cons (sym, val), SCM_EOL); + tail = SCM_CDRLOC (*tail); + } + } return l; } diff --git a/lily/lyric-extender.cc b/lily/lyric-extender.cc index 6d1c037c00..bae1d9bbfe 100644 --- a/lily/lyric-extender.cc +++ b/lily/lyric-extender.cc @@ -25,10 +25,14 @@ SCM Lyric_extender::print (SCM smob) { Spanner *me = unsmob_spanner (smob); - Item *le = me->get_bound (LEFT); + Item *left_edge = me->get_bound (LEFT); Item *right_text = unsmob_item (me->get_property ("next")); - Grob *common = le->common_refpoint (right_text, X_AXIS); + Grob *common = left_edge; + + if (right_text) + common = common->common_refpoint (right_text, X_AXIS); + common = common->common_refpoint (me->get_bound (RIGHT), X_AXIS); Real sl = me->get_paper ()->get_dimension (ly_symbol2scm ("linethickness")); Link_array heads (Pointer_group_interface__extract_grobs (me, (Grob*)0, @@ -40,12 +44,12 @@ Lyric_extender::print (SCM smob) common = common_refpoint_of_array (heads, common, X_AXIS); Real left_point = 0.0; - if (le->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface"))) - left_point = le->extent (common, X_AXIS)[RIGHT]; + if (left_edge->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface"))) + left_point = left_edge->extent (common, X_AXIS)[RIGHT]; else if (heads.size ()) left_point = heads[0]->extent (common, X_AXIS)[LEFT]; else - left_point = le->extent (common, X_AXIS)[RIGHT]; + left_point = left_edge->extent (common, X_AXIS)[RIGHT]; if (isinf (left_point)) return SCM_EOL; @@ -66,7 +70,7 @@ Lyric_extender::print (SCM smob) right_point = right_point ? (me->get_bound (RIGHT)->extent (common, X_AXIS)[LEFT] - pad); + right_point = right_point >? (robust_relative_extent (me->get_bound (RIGHT), common, X_AXIS)[LEFT] - pad); left_point += pad;