]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/score-engraver.cc
* scm/define-markup-commands.scm (text): add \text markup command.
[lilypond.git] / lily / score-engraver.cc
index 0f01110780f582f50138ee58ddd92a71c207e452..46d2078a424e19c056417917e9581abfb239ff7d 100644 (file)
@@ -34,6 +34,15 @@ Score_engraver::Score_engraver ()
   pscore_ = 0;
 }
 
+void
+Score_engraver::derived_mark () const
+{
+  if (pscore_)
+    scm_gc_mark (pscore_->self_scm ());
+  Score_translator::derived_mark ();
+  Engraver_group_engraver::derived_mark ();
+}
+
 void
 Score_engraver::make_columns ()
 {
@@ -106,6 +115,7 @@ Score_engraver::initialize ()
     }
 
   pscore_ = new Paper_score (dynamic_cast<Output_def *> (get_output_def ()));
+  scm_gc_unprotect_object (pscore_->self_scm ()); 
 
   SCM props = updated_grob_properties (context (), ly_symbol2scm ("System"));
 
@@ -149,8 +159,8 @@ void
 Score_engraver::announce_grob (Grob_info info)
 {
   announce_infos_.push (info);
-  pscore_->root_system ()->typeset_grob (info.grob_);
-  elems_.push (info.grob_);
+  pscore_->root_system ()->typeset_grob (info.grob ());
+  elems_.push (info.grob ());
 }
 
 void
@@ -217,12 +227,11 @@ Score_engraver::set_columns (Paper_column *new_command,
   system_->add_column (musical_column_);
 }
 
-Music_output *
+SCM
 Score_engraver::get_output ()
 {
   Music_output *o = pscore_;
-  ///FIXME WTF ? pscore_ = 0;
-  return o;
+  return o->self_scm ();
 }
 
 bool
@@ -268,21 +277,21 @@ Score_engraver::forbid_breaks ()
 void
 Score_engraver::acknowledge_grob (Grob_info gi)
 {
-  if (Staff_spacing::has_interface (gi.grob_))
+  if (Staff_spacing::has_interface (gi.grob ()))
     {
       Pointer_group_interface::add_grob (command_column_,
                                         ly_symbol2scm ("spacing-wishes"),
-                                        gi.grob_);
+                                        gi.grob ());
     }
-  if (Note_spacing::has_interface (gi.grob_))
+  if (Note_spacing::has_interface (gi.grob ()))
     {
       Pointer_group_interface::add_grob (musical_column_,
                                         ly_symbol2scm ("spacing-wishes"),
-                                        gi.grob_);
+                                        gi.grob ());
     }
 
-  if (Axis_group_interface::has_interface (gi.grob_)
-      && gi.grob_->internal_has_interface (ly_symbol2scm ("vertically-spaceable-interface")))
+  if (Axis_group_interface::has_interface (gi.grob ())
+      && gi.grob ()->internal_has_interface (ly_symbol2scm ("vertically-spaceable-interface")))
     {
       SCM spaceable = get_property ("verticallySpacedContexts");
       Context *orig = gi.origin_contexts (this)[0];
@@ -292,7 +301,7 @@ Score_engraver::acknowledge_grob (Grob_info gi)
        {
          Pointer_group_interface::add_grob (system_,
                                             ly_symbol2scm ("spaceable-staves"),
-                                            gi.grob_);
+                                            gi.grob ());
        }
     }
 }