]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tweak-registration.cc
(print): support left/right-padding for
[lilypond.git] / lily / tweak-registration.cc
index fe815e19c85e86fa927cd1db328b7a1ff5a1f5b2..95ff32d06a4df58cfc3134d6eaf435f82443bb45 100644 (file)
@@ -3,7 +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"
@@ -18,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 ()
@@ -30,7 +30,7 @@ Tweak_registry::clear ()
 {
   tweaks_.clear ();
   undumper_ = new Object_key_undumper ();
-  scm_gc_unprotect_object (undumper_->self_scm ());
+  undumper_->unprotect ();
 }
 
 void
@@ -42,16 +42,19 @@ Tweak_registry::insert_tweak_from_file (SCM tweak)
          && 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;
 
@@ -61,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)
 {
-  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];