]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/engraver.cc
(change-rhs-size): add support for "paper19.ly"
[lilypond.git] / lily / engraver.cc
index 9c5c936d90aaaa7075fbe79e07a2c1cd060f9b6c..449ebd0ce07aa8882d9dea3b563e351d7d7cec8f 100644 (file)
@@ -3,7 +3,7 @@
 
   Sourcefile of GNU LilyPond music type setter
 
-  (c)  1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "music.hh"
@@ -11,7 +11,8 @@
 #include "engraver-group-engraver.hh"
 #include "grob.hh"
 #include "main.hh"
-
+#include "score-engraver.hh"
+#include "warn.hh"
 
 void
 Engraver::announce_grob (Grob_info inf)
@@ -20,15 +21,17 @@ Engraver::announce_grob (Grob_info inf)
 }
 
 void
-Engraver::announce_grob (Grob* e, Music *m)
+Engraver::announce_grob (Grob* e, SCM cause)
 {
-  if (m && store_locations_global_b 
-      && m->origin ()->location_str ().length_i ())
-    {
-      e->set_grob_property ("origin", m->get_mus_property ("origin"));
-    }
+  /*
+    TODO: junk grob-info, and make a cause grob-property to store
+    `causes' generically.
+  */
   
-  Grob_info i (e, m);
+  if (unsmob_music (cause) || unsmob_grob (cause))
+    e->set_grob_property ("cause", cause);
+
+  Grob_info i (e);
   if (!i.origin_trans_l_)
     i.origin_trans_l_ = this;
   daddy_grav_l ()->announce_grob (i);
@@ -62,5 +65,22 @@ Engraver::Engraver()
 }
 
 
+Score_engraver* 
+Engraver::top_engraver () const
+{
+  /*
+    ugh.
+   */
+  if (dynamic_cast<Score_engraver*>((Engraver*)this))
+    return dynamic_cast<Score_engraver*> ((Engraver*)this);
+
+  if (daddy_trans_l_)
+    return dynamic_cast<Engraver*> (daddy_trans_l_)->top_engraver ();
+
+  programming_error ("No score engraver!");
+  return 0;
+}
+
 ENTER_DESCRIPTION(Engraver,
                   "", "", "", "", "");
+