X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftranslator-group.cc;h=33fa92d9cd1b93ea70fcc3829a99b16be220dffd;hb=9627516f833fcd89ce59351ae90dc722ec96a2c5;hp=0dd0ea5d3a4d3966b1ef0026ace5453124a6f948;hpb=3b3e161088f1a4be942e67729d0f89f0e8d31c51;p=lilypond.git diff --git a/lily/translator-group.cc b/lily/translator-group.cc index 0dd0ea5d3a..33fa92d9cd 100644 --- a/lily/translator-group.cc +++ b/lily/translator-group.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ #include "music-output-def.hh" @@ -16,13 +16,13 @@ #include "translator-def.hh" Translator_group::Translator_group (Translator_group const&s) - : Translator(s) + : Translator (s) { iterator_count_ =0; Scheme_hash_table * tab = new Scheme_hash_table (*s.properties_dict ()); properties_scm_ = tab->self_scm (); - scm_unprotect_object (tab->self_scm( )); + scm_unprotect_object (tab->self_scm ()); } Scheme_hash_table* @@ -34,11 +34,11 @@ Translator_group::properties_dict () const Translator_group::~Translator_group () { - //assert (removable_b()); + //assert (removable_b ()); } -Translator_group::Translator_group() +Translator_group::Translator_group () { iterator_count_ = 0; Scheme_hash_table *tab = new Scheme_hash_table ; @@ -48,7 +48,7 @@ Translator_group::Translator_group() } void -Translator_group::check_removal() +Translator_group::check_removal () { SCM next = SCM_EOL; for (SCM p = trans_group_list_; gh_pair_p (p); p = next) @@ -58,7 +58,7 @@ Translator_group::check_removal() Translator_group *trg = dynamic_cast (unsmob_translator (gh_car (p))); trg->check_removal (); - if (trg->removable_b()) + if (trg->removable_b ()) terminate_translator (trg); } } @@ -87,7 +87,7 @@ Translator_group::add_group_translator (Translator *t) bool -Translator_group::removable_b() const +Translator_group::removable_b () const { return trans_group_list_ == SCM_EOL && ! iterator_count_; } @@ -120,7 +120,7 @@ Translator_group::find_create_translator_l (String n, String id) return existing; Link_array path - = unsmob_translator_def (definition_)->path_to_acceptable_translator (ly_str02scm ((char*)n.ch_C()), output_def_l ()); + = unsmob_translator_def (definition_)->path_to_acceptable_translator (ly_str02scm ((char*)n.ch_C ()), output_def_l ()); if (path.size ()) { @@ -172,9 +172,9 @@ Translator_group::try_music (Music* m) } int -Translator_group::depth_i() const +Translator_group::depth_i () const { - return (daddy_trans_l_) ? daddy_trans_l_->depth_i() + 1 : 0; + return (daddy_trans_l_) ? daddy_trans_l_->depth_i () + 1 : 0; } Translator_group* @@ -189,7 +189,7 @@ Translator_group::ancestor_l (int level) void Translator_group::terminate_translator (Translator*r_l) { - r_l->removal_processing(); + r_l->removal_processing (); /* Return value ignored. GC does the rest. */ @@ -218,7 +218,7 @@ Translator_group::is_bottom_translator_b () const } Translator_group* -Translator_group::get_default_interpreter() +Translator_group::get_default_interpreter () { if (!is_bottom_translator_b ()) { @@ -228,7 +228,7 @@ Translator_group::get_default_interpreter() Translator_def *t = unsmob_translator_def (st); if (!t) { - warning (_f ("can't find or create: `%s'", ly_scm2string (nm).ch_C())); + warning (_f ("can't find or create: `%s'", ly_scm2string (nm).ch_C ())); t = unsmob_translator_def (this->definition_); } Translator_group *tg = t->instantiate (output_def_l_); @@ -245,8 +245,8 @@ Translator_group::get_default_interpreter() static void static_each (SCM list, Method_pointer method) { - for (SCM p = list; gh_pair_p (p); p = gh_cdr(p)) - (unsmob_translator (gh_car (p))->*method) (); + for (SCM p = list; gh_pair_p (p); p = gh_cdr (p)) + (unsmob_translator (gh_car (p))->*method) (); } @@ -291,15 +291,26 @@ Translator_group::get_property (SCM sym) const void Translator_group::set_property (String id, SCM val) { - set_property (ly_symbol2scm (id.ch_C()), val); + set_property (ly_symbol2scm (id.ch_C ()), val); } + void Translator_group::set_property (SCM sym, SCM val) { properties_dict ()->set (sym, val); } +/* + TODO: look up to check whether we have inherited var? + */ +void +Translator_group::unset_property (SCM sym) +{ + properties_dict ()->remove (sym); +} + + /* Push or pop (depending on value of VAL) a single entry (ELTPROP . VAL) entry from a translator property list by name of PROP @@ -307,7 +318,7 @@ Translator_group::set_property (SCM sym, SCM val) void Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM val) { - if (gh_symbol_p(prop)) + if (gh_symbol_p (prop)) { if (val != SCM_UNDEFINED) { @@ -361,13 +372,13 @@ Translator_group::execute_single_pushpop_property (SCM prop, SCM eltprop, SCM va void Translator_group::stop_translation_timestep () { - each (&Translator::pre_move_processing); + each (&Translator::stop_translation_timestep); } void Translator_group::start_translation_timestep () { - each (&Translator::post_move_processing); + each (&Translator::start_translation_timestep); } void @@ -394,18 +405,14 @@ type_check_assignment (SCM val, SCM sym, SCM type_symbol) { bool ok = true; SCM type_p = SCM_EOL; - SCM errport = scm_current_error_port (); - if (gh_symbol_p(sym)) + if (gh_symbol_p (sym)) type_p = scm_object_property (sym, type_symbol); if (type_p != SCM_EOL && !gh_procedure_p (type_p)) { - /* warning () ? */ - scm_puts (_f ("Can't find property type-check for `%s'. Perhaps you made a typing error?", - ly_symbol2string (sym).ch_C ()).ch_C (), - errport); - scm_puts ("\n", errport); + warning (_f ("Can't find property type-check for `%s'. Perhaps you made a typing error? Doing assignment anyway.", + ly_symbol2string (sym).ch_C ())); } else { @@ -413,30 +420,17 @@ type_check_assignment (SCM val, SCM sym, SCM type_symbol) && gh_procedure_p (type_p) && gh_call1 (type_p, val) == SCM_BOOL_F) { - ok = false; - scm_puts (_("Failed typecheck for `").ch_C (),errport); - scm_display (sym,errport); - scm_puts ( _("', value `").ch_C (), errport); - scm_write (val, errport); - scm_puts (_("' must be of type ").ch_C (), errport); - SCM typefunc = scm_eval2 (ly_symbol2scm ("type-name"), SCM_EOL); - scm_display (gh_call1 (typefunc, type_p), errport); - scm_puts ("\n", errport); -#if 0 + SCM errport = scm_current_error_port (); ok = false; SCM typefunc = scm_eval2 (ly_symbol2scm ("type-name"), SCM_EOL); SCM type_name = gh_call1 (typefunc, type_p); - /* warning () ? */ - scm_puts (_f ("Failed typecheck for `%s', value `%s' must be of type `%s'", + scm_puts (_f ("Type check for `%s' failed; value `%s' must be of type `%s'", ly_symbol2string (sym).ch_C (), - ly_symbol2string (val).ch_C (), ly_scm2string (ly_write2scm (val)).ch_C (), - ly_symbol2string (type_name).ch_C ()).ch_C (), + ly_scm2string (type_name).ch_C ()).ch_C (), errport); scm_puts ("\n", errport); -#endif - } } return ok; @@ -476,7 +470,7 @@ void add_trans_scm_funcs () { scm_make_gsubr ("ly-get-trans-property", 2, 0, 0, (Scheme_function_unknown)ly_get_trans_property); - scm_make_gsubr ("ly-get-trans-property", 3, 0, 0, (Scheme_function_unknown)ly_get_trans_property); + scm_make_gsubr ("ly-set-trans-property", 3, 0, 0, (Scheme_function_unknown)ly_set_trans_property); } -ADD_SCM_INIT_FUNC(trans_scm, add_trans_scm_funcs); +ADD_SCM_INIT_FUNC (trans_scm, add_trans_scm_funcs);