#include "translator.icc"
+
+/*
+ NOTE NOTE NOTE
+
+ This is largely similar to Phrasing_slur_engraver. Check if fixes
+ apply there too.
+
+ (on principle, engravers don't use inheritance for code sharing)
+
+ */
+
/*
It is possible that a slur starts and ends on the same note. At
least, it is for phrasing slurs: a note can be both beginning and
DECLARE_ACKNOWLEDGER (text_script);
DECLARE_ACKNOWLEDGER (tie);
DECLARE_ACKNOWLEDGER (tuplet_number);
+
void acknowledge_extra_object (Grob_info);
void stop_translation_timestep ();
- virtual void finalize ();
void process_music ();
+ virtual void finalize ();
+
+
public:
TRANSLATOR_DECLARATIONS (Slur_engraver);
};
ASSIGN_EVENT_ONCE (events_[START], ev);
else if (d == STOP)
ASSIGN_EVENT_ONCE (events_[STOP], ev);
- else ev->origin ()->warning (_ ("Invalid direction of slur-event"));
+ else ev->origin ()->warning (_f ("direction of %s invalid: %d",
+ "slur-event", int (d)));
}
void
if (events_[STOP])
{
if (slurs_.size () == 0)
- events_[STOP]->origin ()->warning (_ ("can't end slur"));
+ events_[STOP]->origin ()->warning (_ ("cannot end slur"));
end_slurs_ = slurs_;
void
Slur_engraver::stop_translation_timestep ()
{
+ if (Grob *g = unsmob_grob (get_property ("breakableSeparationItem")))
+ {
+ for (vsize i = 0; i < end_slurs_.size (); i++)
+ Slur::add_extra_encompass (end_slurs_[i], g);
+
+ if (!events_[START])
+ for (vsize i = 0; i < slurs_.size (); i++)
+ Slur::add_extra_encompass (slurs_[i], g);
+ }
+
+
for (vsize i = 0; i < end_slurs_.size (); i++)
announce_end_grob (end_slurs_[i], SCM_EOL);
end_slurs_.clear ();
ADD_TRANSLATOR (Slur_engraver,
/* doc */ "Build slur grobs from slur events",
/* create */ "Slur",
- /* accept */ "slur-event",
- /* read */ "slurMelismaBusy doubleSlurs",
+ /* read */
+ "slurMelismaBusy "
+ "doubleSlurs ",
+
/* write */ "");