From 2fb262fb403b75907bdebbaf7fbb819733bf6355 Mon Sep 17 00:00:00 2001 From: Trevor Daniels Date: Thu, 24 Mar 2011 15:36:04 +0000 Subject: [PATCH] Suppress continuing LyricHyphen under grace note at start of line - fixes 688 --- input/regression/lyric-hyphen-grace.ly | 30 ++++++++++++++++++++++++++ lily/include/moment.hh | 3 ++- lily/lyric-hyphen.cc | 10 ++++++++- lily/moment.cc | 13 ++++++++++- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 input/regression/lyric-hyphen-grace.ly diff --git a/input/regression/lyric-hyphen-grace.ly b/input/regression/lyric-hyphen-grace.ly new file mode 100644 index 0000000000..64a11b1d23 --- /dev/null +++ b/input/regression/lyric-hyphen-grace.ly @@ -0,0 +1,30 @@ +\header { + + texidoc = "No hyphen should be printed under a grace note at the start +of a line if the grace's main note starts a new syllable." +} + +<< + \new Staff { + \appoggiatura f'8 g'2 g'( | \break + \appoggiatura f'8 g'2) \appoggiatura f'8 g'2 | \break + \appoggiatura f'8 g'2 g' | \break + g'2 g' | + } + \addlyrics { + \lyricmode { + bla -- bla -- bla -- bla -- bla -- bla -- bla + } + } + \new Staff { + g'2 g' | + g'2 g' | + g'2 g' | + g'2 g' | + } + \addlyrics { + \lyricmode { + bla -- bla -- bla -- bla -- bla -- bla -- bla -- bla + } + } +>> diff --git a/lily/include/moment.hh b/lily/include/moment.hh index 6a3922066e..59dfcd3798 100644 --- a/lily/include/moment.hh +++ b/lily/include/moment.hh @@ -54,6 +54,8 @@ public: bool to_bool () const; I64 den () const; I64 num () const; + Rational main_part () const; + Rational grace_part () const; /* Deliver a copy of THIS as a smobified SCM */ @@ -81,4 +83,3 @@ ostream &operator << (ostream &, Moment const &); bool moment_less (SCM a, SCM b); #endif /* MOMENT_HH */ - diff --git a/lily/lyric-hyphen.cc b/lily/lyric-hyphen.cc index 5fae21fc34..b80fcaa7d0 100644 --- a/lily/lyric-hyphen.cc +++ b/lily/lyric-hyphen.cc @@ -35,10 +35,19 @@ MAKE_SCHEME_CALLBACK (Lyric_hyphen, print, 1); SCM Lyric_hyphen::print (SCM smob) { + Spanner *me = unsmob_spanner (smob); Drul_array bounds (me->get_bound (LEFT), me->get_bound (RIGHT)); + /* No hyphen should be printed under a grace note at the start + of a line if the grace's main note starts a new syllable. */ + + if (Paper_column::when_mom (bounds[LEFT]->get_column ()).grace_part () != Rational (0) + && Paper_column::when_mom (bounds[LEFT]->get_column ()).main_part () + == Paper_column::when_mom (bounds[RIGHT]->get_column ()).main_part ()) + return SCM_EOL; + if (bounds[LEFT]->break_status_dir () && (Paper_column::when_mom (bounds[LEFT]) == Paper_column::when_mom (bounds[RIGHT]->get_column ()))) @@ -153,4 +162,3 @@ ADD_INTERFACE (Lyric_hyphen, "padding " "thickness " ); - diff --git a/lily/moment.cc b/lily/moment.cc index ae6ea63dd2..1a646b9735 100644 --- a/lily/moment.cc +++ b/lily/moment.cc @@ -159,6 +159,18 @@ Moment::to_bool () const return main_part_ || grace_part_; } +Rational +Moment::main_part () const +{ + return main_part_; +} + +Rational +Moment::grace_part () const +{ + return grace_part_; +} + void Moment::set_infinite (int k) { @@ -207,4 +219,3 @@ moment_less (SCM a, SCM b) { return *unsmob_moment (a) < *unsmob_moment (b); } - -- 2.39.2