X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fligature-engraver.cc;h=70f490e3b48ea7df52e6be95c0f7d3acb5c75ec2;hb=1a28e684d2b115d9ec86fa44ea3cfda893dec17b;hp=d2b2885ed47d453d6d2bea43851db1681bd7f734;hpb=05fabaaf86fd44f9bd903f282bb98d343a991e40;p=lilypond.git diff --git a/lily/ligature-engraver.cc b/lily/ligature-engraver.cc index d2b2885ed4..70f490e3b4 100644 --- a/lily/ligature-engraver.cc +++ b/lily/ligature-engraver.cc @@ -1,18 +1,19 @@ -/* +/* ligature-engraver.cc -- implement Ligature_engraver - + source file of the GNU LilyPond music typesetter - - (c) 2002--2004 Juergen Reuter - - */ + + (c) 2002--2005 Juergen Reuter +*/ + #include "ligature-engraver.hh" + #include "spanner.hh" #include "score-engraver.hh" #include "note-head.hh" #include "rest.hh" #include "warn.hh" -#include "translator-group.hh" +#include "context.hh" /* * This abstract class provides the general framework for ligatures of @@ -57,7 +58,7 @@ * Mensural_ligature_engraver) to the proper translator * (e.g. VoiceContext) to choose between various representations. * Since adding/removing an engraver to a translator is a global - * action in the paper block, you can not mix various representations + * action in the layout block, you cannot mix various representations * _within_ the same score. Hence, for selecting a representation, * one would rather like to have a property that can be set e.g. for * several staves individually. However, it seems that this approach @@ -79,7 +80,7 @@ Ligature_engraver::try_music (Music *m) { if (m->is_mus_type ("ligature-event")) { - Direction d = to_dir (m->get_mus_property ("span-direction")); + Direction d = to_dir (m->get_property ("span-direction")); reqs_drul_[d] = m; return true; } @@ -110,14 +111,14 @@ Ligature_engraver::create_ligature_spanner () * nests \[ and \]. */ void -Ligature_engraver::override_molecule_callback () +Ligature_engraver::override_stencil_callback () { SCM target_callback = ly_symbol2scm ("print-function"); SCM source_callback = ly_symbol2scm ("ligature-primitive-callback"); - SCM noteHeadProperties = updated_grob_properties (daddy_trans_, ly_symbol2scm ("NoteHead")); - SCM value = ly_cdr (scm_sloppy_assq (source_callback, noteHeadProperties)); - execute_pushpop_property (daddy_trans_, ly_symbol2scm ("NoteHead"), - atarget_callback, value); + SCM noteHeadProperties = updated_grob_properties (context (), ly_symbol2scm ("NoteHead")); + SCM value = scm_cdr (scm_sloppy_assq (source_callback, noteHeadProperties)); + execute_pushpop_property (context (), ly_symbol2scm ("NoteHead"), + target_callback, value); } /* @@ -134,11 +135,11 @@ Ligature_engraver::override_molecule_callback () * nests \[ and \]. */ void -Ligature_engraver::revert_molecule_callback () +Ligature_engraver::revert_stencil_callback () { SCM symbol = ly_symbol2scm ("NoteHead"); SCM key = ly_symbol2scm ("print-function"); - execute_pushpop_property (daddy_trans_, symbol, key, SCM_UNDEFINED); + execute_pushpop_property (context (), symbol, key, SCM_UNDEFINED); } void @@ -166,14 +167,14 @@ Ligature_engraver::process_music () finished_ligature_ = ligature_; primitives_.clear (); ligature_ = 0; - revert_molecule_callback (); + revert_stencil_callback (); } last_bound_ = unsmob_grob (get_property ("currentMusicalColumn")); if (ligature_) { // TODO: maybe forbid breaks only if not transcribing - top_engraver ()->forbid_breaks (); + get_score_engraver ()->forbid_breaks (); } if (reqs_drul_[START]) @@ -186,11 +187,11 @@ Ligature_engraver::process_music () prev_start_req_ = reqs_drul_[START]; ligature_ = create_ligature_spanner (); - brew_ligature_primitive_proc = - ligature_->get_grob_property ("ligature-primitive-callback"); + brew_ligature_primitive_proc + = ligature_->get_property ("ligature-primitive-callback"); if (brew_ligature_primitive_proc == SCM_EOL) { - warning ("Ligature_engraver: ligature-primitive-callback undefined"); + programming_error ("Ligature_engraver: ligature-primitive-callback undefined"); } Grob *bound = unsmob_grob (get_property ("currentMusicalColumn")); @@ -204,9 +205,10 @@ Ligature_engraver::process_music () } ligature_start_mom_ = now_mom (); - - announce_grob(ligature_, reqs_drul_[START]->self_scm()); - override_molecule_callback (); + + // TODO: dump cause into make_item/spanner. + // announce_grob (ligature_, reqs_drul_[START]->self_scm ()); + override_stencil_callback (); } } @@ -267,15 +269,15 @@ Ligature_engraver::acknowledge_grob (Grob_info info) { if (ligature_) { - if (Note_head::has_interface (info.grob_)) + if (Note_head::has_interface (info.grob ())) { primitives_.push (info); - info.grob_->set_grob_property ("print-function", - brew_ligature_primitive_proc); + info.grob ()->set_property ("print-function", + brew_ligature_primitive_proc); } - if (Rest::has_interface (info.grob_)) + if (Rest::has_interface (info.grob ())) { - info.music_cause ()->origin ()->warning (_ ("ligature may not contain rest; ignoring rest")); + info.music_cause ()->origin ()->warning (_ ("ignoring rest: ligature may not contain rest")); prev_start_req_->origin ()->warning (_ ("ligature was started here")); // TODO: maybe better should stop ligature here rather than // ignoring the rest? @@ -283,10 +285,10 @@ Ligature_engraver::acknowledge_grob (Grob_info info) } } -ENTER_DESCRIPTION (Ligature_engraver, -/* descr */ "Abstract class; a concrete subclass handles Ligature_events by engraving Ligatures in a concrete style.", -/* creats */ "", -/* accepts */ "ligature-event", -/* acks */ "note-head-interface rest-interface", -/* reads */ "", -/* write */ ""); +ADD_TRANSLATOR (Ligature_engraver, + /* descr */ "Abstract class; a concrete subclass handles Ligature_events by engraving Ligatures in a concrete style.", + /* creats */ "", + /* accepts */ "ligature-event", + /* acks */ "note-head-interface rest-interface", + /* reads */ "", + /* write */ "");