]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tweak-registration.cc
*** empty log message ***
[lilypond.git] / lily / tweak-registration.cc
index bde84f7cb7cb0700a22bcc184192000fd321e2f9..95ff32d06a4df58cfc3134d6eaf435f82443bb45 100644 (file)
@@ -3,8 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2004--2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
+  (c) 2004--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "tweak-registration.hh"
@@ -19,7 +18,7 @@ Tweak_registry::Tweak_registry ()
   undumper_ = 0;
   smobify_self ();
   undumper_ = new Object_key_undumper ();
-  scm_gc_unprotect_object (undumper_->self_scm ());
+  undumper_->unprotect ();
 }
 
 Tweak_registry::~Tweak_registry ()
@@ -31,7 +30,7 @@ Tweak_registry::clear ()
 {
   tweaks_.clear ();
   undumper_ = new Object_key_undumper ();
-  scm_gc_unprotect_object (undumper_->self_scm ());
+  undumper_->unprotect ();
 }
 
 void
@@ -39,20 +38,23 @@ Tweak_registry::insert_tweak_from_file (SCM tweak)
 {
   SCM skey = scm_car (tweak);
 
-  assert (scm_is_pair (skey) &&
-        scm_car (skey) == ly_symbol2scm ("key"));
+  assert (scm_is_pair (skey)
+         && scm_car (skey) == ly_symbol2scm ("key"));
 
   Object_key const *key = undumper_->get_key (scm_to_int (scm_cadr (skey)));
-  if (tweaks_.find (key) == tweaks_.end ())
-    tweaks_[key] = SCM_EOL;
 
-  tweaks_[key] = scm_cons (scm_cdr (tweak), tweaks_[key]);
+  SCM existing = SCM_EOL;
+  Tweak_map::const_iterator prev = tweaks_.find (key);
+  if (prev != tweaks_.end ())
+    existing = (*prev).second;
+
+  tweaks_[key] = scm_cons (scm_cdr (tweak), existing);
 }
 
 void
 Tweak_registry::insert_grob_tweak (Grob *g, SCM tweak)
 {
-  Object_key const *key = g->get_key ();
+  Object_key const *key = g->key ();
   if (tweaks_.find (key) == tweaks_.end ())
     tweaks_[key] = SCM_EOL;
 
@@ -62,14 +64,14 @@ Tweak_registry::insert_grob_tweak (Grob *g, SCM tweak)
 void
 Tweak_registry::replace_grob_tweak (Grob *g, SCM tweak)
 {
-  Object_key const *key = g->get_key ();
+  Object_key const *key = g->key ();
   tweaks_[key] = scm_cons (tweak, SCM_EOL);
 }
 
 SCM
-Tweak_registry::get_tweaks (Grob *g) 
+Tweak_registry::get_tweaks (Grob *g)
 {
-  Object_key const *key = g->get_key ();
+  Object_key const *key = g->key ();
   if (tweaks_.find (key) == tweaks_.end ())
     return SCM_EOL;
   return tweaks_[key];
@@ -94,7 +96,7 @@ Tweak_registry::list_tweaks ()
 SCM
 Tweak_registry::mark_smob (SCM smob)
 {
-  Tweak_registry *me = (Tweak_registry*) SCM_CELL_WORD_1 (smob);
+  Tweak_registry *me = (Tweak_registry *) SCM_CELL_WORD_1 (smob);
 
   for (Tweak_map::const_iterator i (me->tweaks_.begin ());
        i != me->tweaks_.end ();
@@ -106,7 +108,7 @@ Tweak_registry::mark_smob (SCM smob)
 
   if (me->undumper_)
     scm_gc_mark (me->undumper_->self_scm ());
-                     
+
   return SCM_EOL;
 }
 
@@ -114,11 +116,11 @@ int
 Tweak_registry::print_smob (SCM smob, SCM port, scm_print_state*)
 {
   (void) smob;                 // smother warning.
-  scm_puts ("#<Tweak_registry>", port); 
+  scm_puts ("#<Tweak_registry>", port);
   return 1;
 }
 
-Object_key_undumper*
+Object_key_undumper *
 Tweak_registry::undumper () const
 {
   return undumper_;
@@ -127,7 +129,6 @@ Tweak_registry::undumper () const
 IMPLEMENT_DEFAULT_EQUAL_P (Tweak_registry);
 IMPLEMENT_SMOBS (Tweak_registry);
 
-
 Tweak_registry *global_registry_;
 
 void