]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/score-engraver.cc
release: 1.1.28
[lilypond.git] / lily / score-engraver.cc
index 1c43b8c59e9b0b39810090572a2ff09be0793026..7596d9dd0c544c2ef4e656eb91c575ac3aa0aeaf 100644 (file)
@@ -16,7 +16,7 @@
 #include "score-column.hh"
 #include "command-request.hh"
 #include "paper-def.hh"
-#include "graphical-lisp-element.hh"
+
 
 
 Score_engraver::Score_engraver()
@@ -104,10 +104,9 @@ Score_engraver::do_announces()
          */
        if (announce_info_arr_[i].req_l_) 
          {
-           Musical_req *m = announce_info_arr_[i].req_l_->access_Musical_req ();
-           if (m && m->access_Rhythmic_req ()) 
+           if (Rhythmic_req *rq = dynamic_cast <Rhythmic_req *> (announce_info_arr_[i].req_l_))
              {
-               musical_column_l_->add_duration (m->duration());
+               musical_column_l_->add_duration (rq->length_mom ());
              }
          }
       Engraver_group_engraver::do_announces();
@@ -121,12 +120,6 @@ Score_engraver::typeset_element (Score_element *elem_p)
   elem_p_arr_.push (elem_p);
 }
 
-void
-Score_engraver::typeset_element (Graphical_lisp_element* elem_p)
-{
-  *mlog << "not typesetting: " << elem_p->static_name () << "\n";
-  delete elem_p;
-}
 
 void
 Score_engraver::typeset_all()
@@ -134,9 +127,8 @@ Score_engraver::typeset_all()
   for  (int i =0; i < elem_p_arr_.size(); i++) 
     {
       Score_element * elem_p = elem_p_arr_[i];
-      if (elem_p->access_Spanner ()) 
+      if (Spanner *s = dynamic_cast <Spanner *> (elem_p))
        {
-         Spanner *s = elem_p->access_Spanner ();
          pscore_p_->typeset_unbroken_spanner (s);
 
            /*
@@ -148,20 +140,21 @@ Score_engraver::typeset_all()
            if (!s->spanned_drul_[d])
              {
                s->set_bounds(d, command_column_l_);
-               ::warning (_f ("Unbound spanner `%s\'", s->name ()));
+               ::warning (_f ("Unbound spanner `%s\'", classname(s)));
              }
          } while (flip(&d) != LEFT);
        }
       else 
        {
-         Item *item_p = elem_p->access_Item ();
+         Item *item_p = dynamic_cast <Item *> (elem_p);
          pscore_p_->typeset_element (item_p);
-         if (!item_p->axis_group_l_a_[X_AXIS]) {
-           if (item_p->breakable_b_) 
-             command_column_l_->add_element(item_p);
-           else
-             musical_column_l_->add_element(item_p);
-         }
+         if (!item_p->parent_l (X_AXIS))
+           {
+             if (item_p->breakable_b_) 
+               command_column_l_->add_element(item_p);
+             else
+               musical_column_l_->add_element(item_p);
+           }
        }
       scoreline_l_->add_element (elem_p);
     }
@@ -243,37 +236,36 @@ Score_engraver::get_output_p ()
 }
 
 bool
-Score_engraver::do_try_request (Request*r)
+Score_engraver::do_try_music (Music*r)
 {
-  bool gotcha = Engraver_group_engraver::do_try_request (r);  
-
-  if (gotcha || !r->access_Command_req ())
-    return gotcha;
+  bool gotcha = Engraver_group_engraver::do_try_music (r);  
 
-  Command_req * c = r->access_Command_req ();
-  if (c->access_Break_req ())
+  if (!gotcha)
     {
-      Break_req* b = (Break_req*)c->access_Break_req ();
-      if (b->penalty_i_ <= Break_req::DISALLOW)
-       break_penalty_i_ = b->penalty_i_;
-      else if (b->penalty_i_ >= Break_req::FORCE)
+      if (Break_req* b = dynamic_cast<Break_req *> (r))
        {
-         command_column_l_->break_penalty_i_ = b->penalty_i_;
-         gotcha = true;
+         if (b->penalty_i_ <= Break_req::DISALLOW)
+           break_penalty_i_ = b->penalty_i_;
+         else if (b->penalty_i_ >= Break_req::FORCE)
+           {
+             command_column_l_->break_penalty_i_ = b->penalty_i_;
+             gotcha = true;
+           }
        }
     }
-  return gotcha;
+   return gotcha;
+
 }
 
-IMPLEMENT_IS_TYPE_B1(Score_engraver,Engraver_group_engraver);
+
 ADD_THIS_TRANSLATOR(Score_engraver);
 
 void
 Score_engraver::do_add_processing ()
 {
   Translator_group::do_add_processing ();
-  assert (output_def_l_->is_type_b (Paper_def::static_name ()));
+  assert (dynamic_cast<Paper_def *> (output_def_l_));
   assert (!daddy_trans_l_);
   pscore_p_ = new Paper_score;
-  pscore_p_->paper_l_ = (Paper_def*)output_def_l_;
+  pscore_p_->paper_l_ = dynamic_cast<Paper_def*>(output_def_l_);
 }