X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftweak-registration.cc;h=95ff32d06a4df58cfc3134d6eaf435f82443bb45;hb=8d540cf685bfda800b1ea99bef1ae236dba6280d;hp=701eb08dcc266ff0225744d27a1e32c498201757;hpb=c659cb200486c2f908703696a1b2873e78c8160a;p=lilypond.git diff --git a/lily/tweak-registration.cc b/lily/tweak-registration.cc index 701eb08dcc..95ff32d06a 100644 --- a/lily/tweak-registration.cc +++ b/lily/tweak-registration.cc @@ -1,10 +1,9 @@ /* - tweak-registration.cc -- implement Tweak_registry + tweak-registration.cc -- implement Tweak_registry source file of the GNU LilyPond music typesetter - (c) 2004 Han-Wen Nienhuys - + (c) 2004--2006 Han-Wen Nienhuys */ #include "tweak-registration.hh" @@ -14,12 +13,24 @@ #include "ly-smobs.icc" +Tweak_registry::Tweak_registry () +{ + undumper_ = 0; + smobify_self (); + undumper_ = new Object_key_undumper (); + undumper_->unprotect (); +} + +Tweak_registry::~Tweak_registry () +{ +} + void Tweak_registry::clear () { tweaks_.clear (); - undumper_ = new Object_key_undumper(); - scm_gc_unprotect_object (undumper_->self_scm ()); + undumper_ = new Object_key_undumper (); + undumper_->unprotect (); } void @@ -27,53 +38,43 @@ 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; - } + Object_key const *key = undumper_->get_key (scm_to_int (scm_cadr (skey))); - 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 (); - if (tweaks_.find (key) == tweaks_.end()) - { - tweaks_[key] = SCM_EOL; - } + Object_key const *key = g->key (); + if (tweaks_.find (key) == tweaks_.end ()) + tweaks_[key] = SCM_EOL; tweaks_[key] = scm_cons (tweak, tweaks_[key]); } - -SCM -Tweak_registry::get_tweaks (Grob *g) -{ - Object_key const *key = g->get_key(); - if (tweaks_.find (key) == tweaks_.end()) - { - return SCM_EOL; - } - return tweaks_[key]; -} - -Tweak_registry::Tweak_registry () +void +Tweak_registry::replace_grob_tweak (Grob *g, SCM tweak) { - undumper_ = 0; - smobify_self(); - undumper_ = new Object_key_undumper(); - scm_gc_unprotect_object (undumper_->self_scm ()); + Object_key const *key = g->key (); + tweaks_[key] = scm_cons (tweak, SCM_EOL); } -Tweak_registry::~Tweak_registry () +SCM +Tweak_registry::get_tweaks (Grob *g) { + Object_key const *key = g->key (); + if (tweaks_.find (key) == tweaks_.end ()) + return SCM_EOL; + return tweaks_[key]; } SCM @@ -81,14 +82,12 @@ Tweak_registry::list_tweaks () { SCM retval = SCM_EOL; for (Tweak_map::const_iterator i (tweaks_.begin ()); - i != tweaks_.end(); + i != tweaks_.end (); i++) { - const Object_key * key = (*i).first; + Object_key const *key = (*i).first; for (SCM t = (*i).second; scm_is_pair (t); t = scm_cdr (t)) - { - retval = scm_cons (scm_cons (key->self_scm(), scm_car (t)), retval); - } + retval = scm_cons (scm_cons (key->self_scm (), scm_car (t)), retval); } return retval; @@ -97,101 +96,43 @@ 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(); + i != me->tweaks_.end (); i++) { - scm_gc_mark ((*i).first->self_scm()); + scm_gc_mark ((*i).first->self_scm ()); scm_gc_mark ((*i).second); } if (me->undumper_) - scm_gc_mark (me->undumper_->self_scm()); - + scm_gc_mark (me->undumper_->self_scm ()); + return SCM_EOL; } int Tweak_registry::print_smob (SCM smob, SCM port, scm_print_state*) { - scm_puts ("#", port); + (void) smob; // smother warning. + scm_puts ("#", port); return 1; } -Object_key_undumper* +Object_key_undumper * Tweak_registry::undumper () const { return undumper_; } -IMPLEMENT_DEFAULT_EQUAL_P(Tweak_registry); -IMPLEMENT_SMOBS(Tweak_registry); +IMPLEMENT_DEFAULT_EQUAL_P (Tweak_registry); +IMPLEMENT_SMOBS (Tweak_registry); - -Tweak_registry * global_registry_; +Tweak_registry *global_registry_; void -init_global_tweak_registry() -{ - global_registry_ = new Tweak_registry(); -} - - -LY_DEFINE(ly_clear_tweak_registry, "ly:tweak-clear-registry", - 0,0,0,(), - "Clear global tweak registry" - ) -{ - global_registry_->clear (); - return SCM_UNSPECIFIED; -} - -LY_DEFINE(ly_insert_tweak, "ly:insert-tweak", - 2,0,0, - (SCM grob, SCM tweak), - "add new tweak for grob." - ) -{ - Grob *gr = unsmob_grob (grob); - SCM_ASSERT_TYPE(gr, grob, SCM_ARG1, __FUNCTION__, "Grob"); - SCM_ASSERT_TYPE(scm_list_p (tweak) == SCM_BOOL_T - && ly_c_procedure_p (scm_car (tweak)), - tweak, SCM_ARG2, __FUNCTION__, "Tweak"); - - global_registry_->insert_grob_tweak (gr, tweak); - return SCM_UNSPECIFIED; -} - - -LY_DEFINE(ly_tweak_read_keys, "ly:tweak-define-keys", - 1,0,0,(SCM keys), - "Read keys" - ) -{ - global_registry_->undumper ()->parse_contents (keys); - return SCM_UNSPECIFIED; -} - - -LY_DEFINE(ly_all_tweaks, "ly:all-tweaks", - 0,0,0,(), - "all tweaks" - ) +init_global_tweak_registry () { - return global_registry_->list_tweaks(); -} - - -LY_DEFINE(ly_tweak_read_tweaks, "ly:tweak-define-tweaks", - 1,0,0,(SCM tweaks), - "Read tweaks" - ) -{ - for (SCM s = tweaks; scm_is_pair (s); s = scm_cdr (s)) - { - global_registry_->insert_tweak_from_file (scm_car (s)); - } - return SCM_UNSPECIFIED; + global_registry_ = new Tweak_registry (); }