]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-column-engraver.cc
* The grand 2005-2006 replace.
[lilypond.git] / lily / paper-column-engraver.cc
index e61ac2d4a8d234875ed39b87d318aa524089785c..9076080653bad537af73f8f5fdf6c48c3ea2daa3 100644 (file)
@@ -3,8 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
+  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "paper-column-engraver.hh"
@@ -20,7 +19,6 @@
 
 #include "translator.icc"
 
-
 Paper_column_engraver::Paper_column_engraver ()
 {
   command_column_ = 0;
@@ -41,7 +39,7 @@ Paper_column_engraver::finalize ()
     {
       command_column_->set_property ("breakable", SCM_BOOL_T);
       system_->set_bound (RIGHT, command_column_);
-    }  
+    }
 }
 
 void
@@ -53,49 +51,42 @@ Paper_column_engraver::make_columns ()
   Paper_column *p1 = make_paper_column ("NonMusicalPaperColumn");
   Paper_column *p2 = make_paper_column ("PaperColumn");
 
-  SCM m = now_mom().smobbed_copy();
+  SCM m = now_mom ().smobbed_copy ();
   p1->set_property ("when", m);
   p2->set_property ("when", m);
-      
+
   set_columns (p1, p2);
 }
 
-
 void
 Paper_column_engraver::initialize ()
 {
-  system_ = dynamic_cast<System*> (unsmob_grob (get_property ("rootSystem")));
+  system_ = dynamic_cast<System *> (unsmob_grob (get_property ("rootSystem")));
   make_columns ();
 
-  
   system_->set_bound (LEFT, command_column_);
   command_column_->set_property ("breakable", SCM_BOOL_T);
 }
 
 void
-Paper_column_engraver::acknowledge_grob (Grob_info gi)
+Paper_column_engraver::acknowledge_item (Grob_info gi)
 {
-  Item *item = dynamic_cast<Item *> (gi.grob ());
-  if (!item)
-    {
-      programming_error ("Spanner found in Paper_column_engraver::acknowledge_grob()"); 
-      return;
-    }
-  
-  items_.push (item);
-  
-  if (Staff_spacing::has_interface (item))
-    {
-      Pointer_group_interface::add_grob (command_column_,
-                                        ly_symbol2scm ("spacing-wishes"),
-                                        gi.grob ());
-    }
-  if (Note_spacing::has_interface (item))
-    {
-      Pointer_group_interface::add_grob (musical_column_,
-                                        ly_symbol2scm ("spacing-wishes"),
-                                        gi.grob ());
-    }
+  items_.push (gi.item ());
+}
+
+void
+Paper_column_engraver::acknowledge_staff_spacing (Grob_info gi)
+{
+  Pointer_group_interface::add_grob (command_column_,
+                                    ly_symbol2scm ("spacing-wishes"),
+                                    gi.grob ());
+}
+void
+Paper_column_engraver::acknowledge_note_spacing (Grob_info gi)
+{
+  Pointer_group_interface::add_grob (musical_column_,
+                                    ly_symbol2scm ("spacing-wishes"),
+                                    gi.grob ());
 }
 
 void
@@ -105,20 +96,15 @@ Paper_column_engraver::set_columns (Paper_column *new_command,
   command_column_ = new_command;
   musical_column_ = new_musical;
   if (new_command)
-    {
-      context ()->set_property ("currentCommandColumn", new_command->self_scm ());
-    }
+    context ()->set_property ("currentCommandColumn", new_command->self_scm ());
 
   if (new_musical)
-    {
-      context ()->set_property ("currentMusicalColumn", new_musical->self_scm ());
-    }
+    context ()->set_property ("currentMusicalColumn", new_musical->self_scm ());
 
   system_->add_column (command_column_);
   system_->add_column (musical_column_);
 }
 
-
 void
 Paper_column_engraver::forbid_breaks ()
 {
@@ -126,7 +112,6 @@ Paper_column_engraver::forbid_breaks ()
     command_column_->set_property ("breakable", SCM_EOL);
 }
 
-
 bool
 Paper_column_engraver::try_music (Music *m)
 {
@@ -147,7 +132,7 @@ Paper_column_engraver::process_music ()
       if (scm_is_number (mpen))
        total_penalty += scm_to_double (mpen);
 
-      command_column_->set_property ("penalty", scm_make_real (total_penalty));
+      command_column_->set_property ("penalty", scm_from_double (total_penalty));
 
       /* ugh.  arbitrary, hardcoded */
       if (total_penalty > 10000.0)
@@ -159,10 +144,9 @@ Paper_column_engraver::process_music ()
       if (scm_is_number (mpage_pen))
        total_pp += scm_to_double (mpage_pen);
 
-      command_column_->set_property ("page-penalty", scm_make_real (total_pp));
+      command_column_->set_property ("page-penalty", scm_from_double (total_pp));
     }
 
-
   bool start_of_measure = (last_moment_.main_part_ != now_mom ().main_part_
                           && !measure_position (context ()).main_part_);
 
@@ -173,11 +157,11 @@ Paper_column_engraver::process_music ()
   if (start_of_measure)
     {
       Moment mlen = Moment (measure_length (context ()));
-      Grob * column = unsmob_grob (get_property ("currentCommandColumn"));
+      Grob *column = unsmob_grob (get_property ("currentCommandColumn"));
       if (column)
        column->set_property ("measure-length", mlen.smobbed_copy ());
       else
-       programming_error("No command column?");
+       programming_error ("No command column?");
     }
 }
 
@@ -195,7 +179,7 @@ Paper_column_engraver::stop_translation_timestep ()
        }
     }
   items_.clear ();
-  
+
   if (to_boolean (command_column_->get_property ("breakable")))
     {
       breaks_++;
@@ -217,11 +201,12 @@ Paper_column_engraver::start_translation_timestep ()
     make_columns ();
 }
 
-
-
+ADD_ACKNOWLEDGER (Paper_column_engraver, item);
+ADD_ACKNOWLEDGER (Paper_column_engraver, note_spacing);
+ADD_ACKNOWLEDGER (Paper_column_engraver, staff_spacing);
 
 ADD_TRANSLATOR (Paper_column_engraver,
-               /* descr */ "Takes care of generating columns."
+               /* doc */ "Takes care of generating columns."
                "\n\n "
                "This engraver decides whether a column is breakable. The default is "
                "that a column is always breakable. However, when every Bar_engraver "
@@ -229,8 +214,13 @@ ADD_TRANSLATOR (Paper_column_engraver,
                "Score_engraver::forbid_breaks to stop linebreaks.  In practice, this "
                "means that you can make a breakpoint by creating a barline (assuming "
                "that there are no beams or notes that prevent a breakpoint.) ",
-               /* creats*/ "PaperColumn NonMusicalPaperColumn",
-               /* accepts */ "break-event",
-               /* acks  */ "item-interface",
-               /* reads */ "",
-               /* write */ "currentCommandColumn currentMusicalColumn");
+               
+               /* create */
+               "PaperColumn "
+               "NonMusicalPaperColumn",
+               
+               /* accept */ "break-event",
+               /* read */ "",
+               /* write */
+               "currentCommandColumn "
+               "currentMusicalColumn");