X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver-group.cc;h=a5782d23b0b8fbbcb8fa5272fb2cbdef77b389d2;hb=1bc26969fe372d9e257d91f0ef6e1ca0f9999ed6;hp=4c5a5864c3badc0553ed13588a35b64a3fd93b85;hpb=9e69cb84d6ee5b0a861cd97869b10e3bdf0c833c;p=lilypond.git diff --git a/lily/engraver-group.cc b/lily/engraver-group.cc index 4c5a5864c3..a5782d23b0 100644 --- a/lily/engraver-group.cc +++ b/lily/engraver-group.cc @@ -1,9 +1,20 @@ /* - engraver-group.cc -- implement Engraver_group + This file is part of LilyPond, the GNU music typesetter. - source file of the GNU LilyPond music typesetter + Copyright (C) 1997--2011 Han-Wen Nienhuys - (c) 1997--2006 Han-Wen Nienhuys + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . */ #include "context.hh" @@ -20,10 +31,10 @@ Engraver_group::override (SCM sev) { Stream_event *ev = unsmob_stream_event (sev); - execute_general_pushpop_property (context (), - ev->get_property ("symbol"), - ev->get_property ("property-path"), - ev->get_property ("value")); + sloppy_general_pushpop_property (context (), + ev->get_property ("symbol"), + ev->get_property ("property-path"), + ev->get_property ("value")); } IMPLEMENT_LISTENER (Engraver_group, revert); @@ -32,10 +43,10 @@ Engraver_group::revert (SCM sev) { Stream_event *ev = unsmob_stream_event (sev); - execute_general_pushpop_property (context (), - ev->get_property ("symbol"), - ev->get_property ("property-path"), - SCM_UNDEFINED); + sloppy_general_pushpop_property (context (), + ev->get_property ("symbol"), + ev->get_property ("property-path"), + SCM_UNDEFINED); } void @@ -59,9 +70,16 @@ Engraver_group::announce_grob (Grob_info info) { announce_infos_.push_back (info); + Context *dad_con = context_->get_parent_context (); + if (info.rerouting_daddy_context_) + { + dad_con = info.rerouting_daddy_context_; + info.rerouting_daddy_context_ = 0; + } + Engraver_group *dad_eng - = context_->get_parent_context () - ? dynamic_cast (context_->get_parent_context ()->implementation ()) + = dad_con + ? dynamic_cast (dad_con->implementation ()) : 0; if (dad_eng) @@ -88,7 +106,7 @@ Engraver_group::acknowledge_grobs () else continue; - SCM acklist = scm_hashq_ref (acknowledge_hash_table_drul_[info.start_end()], + SCM acklist = scm_hashq_ref (acknowledge_hash_table_drul_[info.start_end ()], nm, SCM_BOOL_F); Engraver_dispatch_list *dispatch @@ -178,10 +196,18 @@ Engraver_group::Engraver_group () #include "translator.icc" ADD_TRANSLATOR_GROUP (Engraver_group, - /* doc */ "A group of engravers taken together", - /* create */ "", - /* read */ "", - /* write */ ""); + /* doc */ + "A group of engravers taken together.", + + /* create */ + "", + + /* read */ + "", + + /* write */ + "" + ); void Engraver_group::derived_mark () const