X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver-group-engraver.cc;h=5cab78639a6298163c083867f4d664d81c084d8e;hb=7a9aad3db6fe6ee35bbcda9d9096b5d0df7ef639;hp=56fe566fcaec3bf68cf2073b387b4c54630d6ad1;hpb=94375d04f45b415ad705fd444fdb344416f116d9;p=lilypond.git diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc index 56fe566fca..5cab78639a 100644 --- a/lily/engraver-group-engraver.cc +++ b/lily/engraver-group-engraver.cc @@ -1,69 +1,77 @@ /* - engravergroup.cc -- implement Engraver_group_engraver - + engraver-group-engraver.cc -- implement Engraver_group_engraver + source file of the GNU LilyPond music typesetter - (c) 1997--2001 Han-Wen Nienhuys + (c) 1997--2003 Han-Wen Nienhuys */ #include "flower-proto.hh" #include "engraver-group-engraver.hh" #include "engraver.hh" -#include "debug.hh" +#include "warn.hh" #include "paper-score.hh" #include "grob.hh" void Engraver_group_engraver::announce_grob (Grob_info info) { - announce_info_arr_.push (info); + announce_infos_.push (info); Engraver::announce_grob (info); } - void -Engraver_group_engraver::create_grobs () +Engraver_group_engraver::process_acknowledged_grobs_in_simple_children () { - for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p)) { Translator * t = unsmob_translator (ly_car (p)); Engraver * eng = dynamic_cast (t); if (eng) - eng->create_grobs (); + eng->process_acknowledged_grobs (); } } SCM find_acknowledge_engravers (SCM gravlist, SCM meta); +SCM find_accept_engravers (SCM gravlist, SCM music_descr); + void Engraver_group_engraver::acknowledge_grobs () { - if (!announce_info_arr_.size ()) + if (!announce_infos_.size ()) return ; - SCM tab =get_property (ly_symbol2scm ("acknowledgeHashTable")); + SCM tab = get_property ("acknowledgeHashTable"); SCM name_sym = ly_symbol2scm ("name"); SCM meta_sym = ly_symbol2scm ("meta"); - for (int j =0; j < announce_info_arr_.size (); j++) + for (int j =0; j < announce_infos_.size (); j++) { - Grob_info info = announce_info_arr_[j]; + Grob_info info = announce_infos_[j]; - SCM meta = info.grob_l_->get_grob_property (meta_sym); + SCM meta = info.grob_->internal_get_grob_property (meta_sym); SCM nm = scm_assoc (name_sym, meta); if (gh_pair_p (nm)) nm = ly_cdr (nm); else { - assert (info.grob_l_->immutable_property_alist_ == SCM_EOL); + /* + it's tempting to put an assert for + immutable_property_alist_ == '(), but in fact, some + engravers (clef-engraver) add some more information to the + immutable_property_alist_ (after it has been '()-ed). + + We ignore the grob anyway. He who has no name, shall not + be helped. */ + continue; } SCM acklist = scm_hashq_ref (tab, nm, SCM_UNDEFINED); if (acklist == SCM_BOOL_F) { - acklist= find_acknowledge_engravers (simple_trans_list_, meta); + acklist= find_acknowledge_engravers (gh_cons (self_scm (), simple_trans_list_), meta); scm_hashq_set_x (tab, nm, acklist); } @@ -71,7 +79,7 @@ Engraver_group_engraver::acknowledge_grobs () { Translator * t = unsmob_translator (ly_car (p)); Engraver * eng = dynamic_cast (t); - if (eng && eng!= info.origin_trans_l_) + if (eng && eng!= info.origin_trans_) eng->acknowledge_grob (info); } } @@ -86,17 +94,18 @@ Engraver_group_engraver::do_announces () dynamic_cast (t)->do_announces (); } - create_grobs (); + process_acknowledged_grobs_in_simple_children (); - while (announce_info_arr_.size ()) + do { acknowledge_grobs (); - announce_info_arr_.clear (); - create_grobs (); + announce_infos_.clear (); + process_acknowledged_grobs_in_simple_children (); } + while (announce_infos_.size ()); } -#include + /* order is : top to bottom (as opposed to do_announces) @@ -121,13 +130,15 @@ Engraver_group_engraver::process_music () } } -void find_all_acknowledge_engravers (SCM tab, SCM gravlist, SCM allgrobs); - void Engraver_group_engraver::initialize () { - SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); // magic -> - set_property (ly_symbol2scm ("acknowledgeHashTable"), tab); + /* + docme: why bool_f. + + */ + SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); + set_property ("acknowledgeHashTable", tab); Translator_group::initialize (); } @@ -137,7 +148,8 @@ Engraver_group_engraver::Engraver_group_engraver() {} ENTER_DESCRIPTION(Engraver_group_engraver, /* descr */ "A group of engravers taken together", /* creats*/ "", -/* acks */ "grob-interface", +/* accepts */ "", +/* acks */ "", /* reads */ "", /* write */ ""); @@ -146,7 +158,8 @@ ENTER_DESCRIPTION(Engraver_group_engraver, /*****************/ -bool engraver_valid (Translator*tr, SCM ifaces) +bool +engraver_valid (Translator*tr, SCM ifaces) { SCM ack_ifs = scm_assoc (ly_symbol2scm ("interfaces-acked"), tr->translator_description()); ack_ifs = gh_cdr (ack_ifs); @@ -157,6 +170,7 @@ bool engraver_valid (Translator*tr, SCM ifaces) } + SCM find_acknowledge_engravers (SCM gravlist, SCM meta_alist) { @@ -173,3 +187,5 @@ find_acknowledge_engravers (SCM gravlist, SCM meta_alist) return l; } + +