-#include "score-elem.hh"
-#include "input-translator.hh"
-Engraver* get_engraver_p(String);
-
-Engraver_group_engraver::~Engraver_group_engraver()
-{
- assert(removable_b());
-}
-
-void
-Engraver_group_engraver::check_removal()
-{
- for (int i =0; i < group_l_arr_.size(); ) {
- group_l_arr_[i]->check_removal();
- if (group_l_arr_[i]->removable_b())
- terminate_engraver(group_l_arr_[i]);
- else
- i++;
- }
-
-}
-
-bool
-Engraver_group_engraver::removable_b()const
-{
- return !iterator_count_&& !group_l_arr_.size() ;
-}
-
-Engraver_group_engraver::Engraver_group_engraver()
-{
- itrans_l_ =0;
-}
-
-void
-Engraver_group_engraver::set_feature(Feature d)
-{
- PCursor<Engraver*> i(grav_list_.top());
- // why the while construct?
- while (i.ok()) {
- // this construction to ensure clean deletion
- Engraver *grav_l = i++;
- grav_l->set_feature(d);
- }
-}
-
-void
-Engraver_group_engraver::sync_features()
-{
- PCursor<Engraver*> i(grav_list_.top());
- while (i.ok()) {
- Engraver *grav_l = i++;
- grav_l->sync_features();
- }
-}
-
-void
-Engraver_group_engraver::do_pre_move_processing()
-{
- PCursor<Engraver*> i(grav_list_.top());
- while (i.ok()) {
- Engraver *grav_l = i++;
- grav_l->pre_move_processing();
- }
-}
-
-void
-Engraver_group_engraver::do_process_requests()
-{
- PCursor<Engraver*> i(grav_list_.top());
- while (i.ok()) {
- Engraver *grav_l = i++;
- grav_l->process_requests();
- }
-}
-
-
-void
-Engraver_group_engraver::do_post_move_processing()
-{
- PCursor<Engraver*> i(grav_list_.top());
- while (i.ok()) {
- // this construction to ensure clean deletion
- Engraver *grav_l = i++;
- grav_l->post_move_processing();
- }
-}
-
-
-bool
-Engraver_group_engraver::contains_b(Engraver* grav_l)const
-{
- bool parent_b = Engraver::contains_b(grav_l);
-
- if (parent_b)
- return true;
- for (PCursor<Engraver*> i(grav_list_.top()); i.ok(); i++)
- if (i->contains_b(grav_l))
- return true;
- return false;
-}
-
-
-
-bool
-Engraver_group_engraver::do_try_request(Request*req_l)
-{
- bool hebbes_b =false;
- for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++)
- hebbes_b =nongroup_l_arr_[i]->try_request(req_l);
- if (!hebbes_b && daddy_grav_l_)
- hebbes_b = daddy_grav_l_->try_request(req_l);
- return hebbes_b ;
-}
-
-bool
-Engraver_group_engraver::try_request(Request* r)
-{
- return Engraver::try_request(r);
-}
-
-void
-Engraver_group_engraver::add(Engraver *grav_p)
-{
- grav_list_.bottom().add(grav_p);
- grav_p->daddy_grav_l_ = this;
-
- if (grav_p->is_type_b(Engraver_group_engraver::static_name())) {
- group_l_arr_.push((Engraver_group_engraver*)grav_p);
- } else {
- nongroup_l_arr_ .push(grav_p);
- }
-}