]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/piano-pedal-align-engraver.cc
Doc-es: various updates.
[lilypond.git] / lily / piano-pedal-align-engraver.cc
index c82cb7eae135d361571d7e169fa626fbb25094b5..0d07872db08b18eeb82ad7aef6a1d6747879908a 100644 (file)
@@ -1,12 +1,22 @@
-/* 
-  piano-pedal-align-engraver.cc -- implement  Piano_pedal_align_engraver
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 2006--2009 Han-Wen Nienhuys <hanwen@lilypond.org>
-  
-*/
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2006--2015 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+
+  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 <http://www.gnu.org/licenses/>.
+*/
 
 #include "engraver.hh"
 
 #include "warn.hh"
 #include "axis-group-interface.hh"
 
+#include "translator.icc"
 
 /*
   TODO:
 
 
   * Detach from pedal specifics,
-  
+
   * Also use this engraver for dynamics.
-  
 */
 
-
 struct Pedal_align_info
 {
   Spanner *line_spanner_;
@@ -66,18 +75,19 @@ public:
 
 protected:
   virtual void finalize ();
-  
-  DECLARE_ACKNOWLEDGER (piano_pedal_script);
-  DECLARE_ACKNOWLEDGER (piano_pedal_bracket);
-  DECLARE_ACKNOWLEDGER (note_column);
 
-  DECLARE_END_ACKNOWLEDGER (piano_pedal_bracket);
+  void acknowledge_piano_pedal_script (Grob_info);
+  void acknowledge_piano_pedal_bracket (Grob_info);
+  void acknowledge_note_column (Grob_info);
+
+  void acknowledge_end_piano_pedal_bracket (Grob_info);
 
   void stop_translation_timestep ();
   void start_translation_timestep ();
-  
+
 private:
-  enum Pedal_type {
+  enum Pedal_type
+  {
     SOSTENUTO,
     SUSTAIN,
     UNA_CORDA,
@@ -90,7 +100,8 @@ private:
   Spanner *make_line_spanner (Pedal_type t, SCM);
 };
 
-Piano_pedal_align_engraver::Piano_pedal_align_engraver ()
+Piano_pedal_align_engraver::Piano_pedal_align_engraver (Context *c)
+  : Engraver (c)
 {
 }
 
@@ -103,46 +114,45 @@ Piano_pedal_align_engraver::start_translation_timestep ()
 void
 Piano_pedal_align_engraver::stop_translation_timestep ()
 {
-  for (int i = 0; i < NUM_PEDAL_TYPES; i ++)
+  for (int i = 0; i < NUM_PEDAL_TYPES; i++)
     {
       if (pedal_info_[i].line_spanner_)
-       {
-         
-         if (pedal_info_[i].carrying_item_)
-           {
-             if (!pedal_info_[i].line_spanner_->get_bound (LEFT))
-               pedal_info_[i].line_spanner_->set_bound (LEFT,
-                                                        pedal_info_[i].carrying_item_);
-
-             pedal_info_[i].line_spanner_->set_bound (RIGHT,
-                                                      pedal_info_[i].carrying_item_);
-           }
-         else if (pedal_info_[i].carrying_spanner_
-                  || pedal_info_[i].finished_carrying_spanner_
-                  )
-           {
-             if (!pedal_info_[i].line_spanner_->get_bound (LEFT)
-                 && pedal_info_[i].carrying_spanner_->get_bound (LEFT))
-               pedal_info_[i].line_spanner_->set_bound (LEFT,
-                                                        pedal_info_[i].carrying_spanner_->get_bound (LEFT));
-             
-
-             if (pedal_info_[i].finished_carrying_spanner_)
-               pedal_info_[i].line_spanner_->set_bound (RIGHT,
-                                                        pedal_info_[i].finished_carrying_spanner_->get_bound (RIGHT));
-           }
-         
-         for (vsize j = 0; j < supports_.size (); j++)
-           {
-             Side_position_interface::add_support (pedal_info_[i].line_spanner_, supports_[j]);
-           }
-
-         if (pedal_info_[i].is_finished ())
-           {
-             announce_end_grob (pedal_info_[i].line_spanner_, SCM_EOL);
-             pedal_info_[i].clear ();
-           }
-       }
+        {
+
+          if (pedal_info_[i].carrying_item_)
+            {
+              if (!pedal_info_[i].line_spanner_->get_bound (LEFT))
+                pedal_info_[i].line_spanner_->set_bound (LEFT,
+                                                         pedal_info_[i].carrying_item_);
+
+              pedal_info_[i].line_spanner_->set_bound (RIGHT,
+                                                       pedal_info_[i].carrying_item_);
+            }
+          else if (pedal_info_[i].carrying_spanner_
+                   || pedal_info_[i].finished_carrying_spanner_
+                  )
+            {
+              if (!pedal_info_[i].line_spanner_->get_bound (LEFT)
+                  && pedal_info_[i].carrying_spanner_->get_bound (LEFT))
+                pedal_info_[i].line_spanner_->set_bound (LEFT,
+                                                         pedal_info_[i].carrying_spanner_->get_bound (LEFT));
+
+              if (pedal_info_[i].finished_carrying_spanner_)
+                pedal_info_[i].line_spanner_->set_bound (RIGHT,
+                                                         pedal_info_[i].finished_carrying_spanner_->get_bound (RIGHT));
+            }
+
+          for (vsize j = 0; j < supports_.size (); j++)
+            {
+              Side_position_interface::add_support (pedal_info_[i].line_spanner_, supports_[j]);
+            }
+
+          if (pedal_info_[i].is_finished ())
+            {
+              announce_end_grob (pedal_info_[i].line_spanner_, SCM_EOL);
+              pedal_info_[i].clear ();
+            }
+        }
 
       pedal_info_[i].carrying_item_ = 0;
     }
@@ -158,11 +168,10 @@ Piano_pedal_align_engraver::get_grob_pedal_type (Grob_info g)
   if (g.event_cause ()->in_event_class ("una-corda-event"))
     return UNA_CORDA;
 
-  programming_error ("Unknown piano pedal type. Defaulting to sustain");
+  programming_error ("Unknown piano pedal type.  Defaulting to sustain");
   return SUSTAIN;
 }
 
-
 Spanner *
 Piano_pedal_align_engraver::make_line_spanner (Pedal_type t, SCM cause)
 {
@@ -170,24 +179,24 @@ Piano_pedal_align_engraver::make_line_spanner (Pedal_type t, SCM cause)
   if (!sp)
     {
       switch (t)
-       {
-       case (SOSTENUTO):
-         sp = make_spanner ("SostenutoPedalLineSpanner", cause);
-         break;
-       case (SUSTAIN):
-         sp = make_spanner ("SustainPedalLineSpanner", cause);
-         break;
-       case (UNA_CORDA):
-         sp = make_spanner ("UnaCordaPedalLineSpanner", cause);
-         break;
-       default:
-         programming_error ("No pedal type fonud!") ;
-         return sp;
-       }
-  
+        {
+        case (SOSTENUTO):
+          sp = make_spanner ("SostenutoPedalLineSpanner", cause);
+          break;
+        case (SUSTAIN):
+          sp = make_spanner ("SustainPedalLineSpanner", cause);
+          break;
+        case (UNA_CORDA):
+          sp = make_spanner ("UnaCordaPedalLineSpanner", cause);
+          break;
+        default:
+          programming_error ("No pedal type fonud!");
+          return sp;
+        }
+
       pedal_info_[t].line_spanner_ = sp;
     }
-  
+
   return sp;
 }
 
@@ -218,50 +227,51 @@ void
 Piano_pedal_align_engraver::acknowledge_piano_pedal_script (Grob_info gi)
 {
   Pedal_type type = get_grob_pedal_type (gi);
-  
+
   Grob *sp = make_line_spanner (type, gi.grob ()->self_scm ());
   Axis_group_interface::add_element (sp, gi.grob ());
   pedal_info_[type].carrying_item_ = gi.grob ();
 }
 
-
 void
 Piano_pedal_align_engraver::finalize ()
 {
for (int i = 0; i < NUM_PEDAL_TYPES; i ++)
 for (int i = 0; i < NUM_PEDAL_TYPES; i++)
     {
       if (pedal_info_[i].line_spanner_)
-       {
-         SCM cc = get_property ("currentCommandColumn");
-         Item *c = unsmob_item (cc);
-         pedal_info_[i].line_spanner_->set_bound (RIGHT, c);
+        {
+          SCM cc = get_property ("currentCommandColumn");
+          Item *c = unsmob<Item> (cc);
+          pedal_info_[i].line_spanner_->set_bound (RIGHT, c);
 
-         pedal_info_[i].clear ();
-       }
+          pedal_info_[i].clear ();
+        }
     }
 }
 
-#include "translator.icc"
-
-ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, note_column);
-ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket);
-ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_script);
 
-ADD_END_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket);
 
+void
+Piano_pedal_align_engraver::boot ()
+{
+  ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, note_column);
+  ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket);
+  ADD_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_script);
+  ADD_END_ACKNOWLEDGER (Piano_pedal_align_engraver, piano_pedal_bracket);
+}
 
 ADD_TRANSLATOR (Piano_pedal_align_engraver,
-               /* doc */
-               "Align piano pedal symbols and brackets.",
+                /* doc */
+                "Align piano pedal symbols and brackets.",
 
-               /* create */
-               "SostenutoPedalLineSpanner "
-               "SustainPedalLineSpanner "
-               "UnaCordaPedalLineSpanner ",
+                /* create */
+                "SostenutoPedalLineSpanner "
+                "SustainPedalLineSpanner "
+                "UnaCordaPedalLineSpanner ",
 
-               /* read */
-               "currentCommandColumn ",
+                /* read */
+                "currentCommandColumn ",
 
-               /* write */
-               ""
-               );
+                /* write */
+                ""
+               );