source file of the GNU LilyPond music typesetter
- (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
+ (c) 2002--2009 Juergen Reuter <reuter@ipd.uka.de>
*/
#include "ligature-engraver.hh"
#include "international.hh"
#include "note-head.hh"
#include "rest.hh"
-#include "score-engraver.hh"
#include "spanner.hh"
-#include "warn.hh"
-
+#include "stream-event.hh"
#include "translator.icc"
/*
*
* A concrete ligature engraver must subclass this class and provide
* functions create_ligature_spanner () and typeset_ligature
- * (Spanner *, std::vector<Grob_info>). Subclasses of this class basically
+ * (Spanner *, vector<Grob_info>). Subclasses of this class basically
* fall into two categories.
*
* The first category consists of engravers that engrave ligatures in
brew_ligature_primitive_proc = SCM_EOL;
}
-bool
-Ligature_engraver::try_music (Music *m)
+void
+Ligature_engraver::listen_ligature (Stream_event *ev)
{
- if (m->is_mus_type ("ligature-event"))
- {
- Direction d = to_dir (m->get_property ("span-direction"));
- events_drul_[d] = m;
- return true;
- }
- return false;
+ Direction d = to_dir (ev->get_property ("span-direction"));
+ ASSIGN_EVENT_ONCE (events_drul_[d], ev);
}
void
{
if (!ligature_)
{
- events_drul_[STOP]->origin ()->warning (_ ("can't find start of ligature"));
+ events_drul_[STOP]->origin ()->warning (_ ("cannot find start of ligature"));
return;
}
if (ligature_)
{
// TODO: maybe forbid breaks only if not transcribing
- get_score_engraver ()->forbid_breaks ();
+ context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
}
if (events_drul_[START])
if (ligature_)
{
primitives_.push_back (info);
- if (info.grob () && (brew_ligature_primitive_proc != SCM_EOL))
+ if (info.grob () && brew_ligature_primitive_proc != SCM_EOL)
{
info.grob ()->set_property ("stencil", brew_ligature_primitive_proc);
}
{
if (ligature_)
{
- info.music_cause ()->origin ()->warning (_ ("ignoring rest: ligature may not contain rest"));
+ info.event_cause ()->origin ()->warning (_ ("ignoring rest: ligature may not contain rest"));
prev_start_event_->origin ()->warning (_ ("ligature was started here"));
// TODO: maybe better should stop ligature here rather than
// ignoring the rest?