X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftranslator.cc;h=4191450809f1e5a8b377a665c6ac401177f58729;hb=6d14ec9744ef91579b0c77e4a39602bab712c324;hp=0345c2c370b08e705bfd007d94ea43a7188fc89a;hpb=07a5ed85c189a97d04c550679826dfc5eca2eb18;p=lilypond.git diff --git a/lily/translator.cc b/lily/translator.cc index 0345c2c370..4191450809 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -3,22 +3,18 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2003 Han-Wen Nienhuys */ #include "translator.hh" -#include "debug.hh" +#include "warn.hh" #include "translator-group.hh" +#include "translator-def.hh" #include "moment.hh" #include "ly-smobs.icc" -char const* -Translator::name() const -{ - return classname(this); -} Translator::~Translator () { @@ -31,23 +27,23 @@ Translator::init () trans_group_list_ = SCM_EOL; properties_scm_ = SCM_EOL; definition_ = SCM_EOL; - daddy_trans_l_ =0; + daddy_trans_ =0; } Translator::Translator () { + self_scm_ = SCM_EOL; init (); - output_def_l_ = 0; + output_def_ = 0; smobify_self (); - } Translator::Translator (Translator const &s) - : Input (s) { + self_scm_ = SCM_EOL; init (); - output_def_l_ = s.output_def_l_; - type_str_ = s.type_str_; + output_def_ = s.output_def_; + type_string_ = s.type_string_; smobify_self (); } @@ -55,7 +51,13 @@ Translator::Translator (Translator const &s) bool Translator::is_alias_b (String s) const { - return s == type_str_; + bool b = s == type_string_; + + for (SCM a = unsmob_translator_def (definition_)->type_aliases_; + !b && gh_pair_p (a); a = ly_cdr (a)) + b = b || s == ly_scm2string (ly_car (a)); + + return b; } bool @@ -68,17 +70,7 @@ Translator::try_music (Music *) Moment Translator::now_mom () const { - return daddy_trans_l_->now_mom (); -} - - - - - -void -Translator::post_move_processing () -{ - start_translation_timestep (); + return daddy_trans_->now_mom (); } void @@ -87,38 +79,21 @@ Translator::removal_processing () finalize (); } - -void -Translator::announces () -{ - do_announces (); -} - - void -Translator::pre_move_processing () +Translator::do_announces () { - stop_translation_timestep (); } - - Music_output_def * -Translator::output_def_l () const +Translator::get_output_def () const { - return output_def_l_; + return output_def_; } SCM -Translator::get_property (char const * id) const +Translator::internal_get_property (SCM sym) const { - return daddy_trans_l_->get_property (ly_symbol2scm (id)); -} - -SCM -Translator::get_property (SCM sym) const -{ - return daddy_trans_l_->get_property (sym); + return daddy_trans_->internal_get_property (sym); } void @@ -131,11 +106,6 @@ Translator::start_translation_timestep () { } -void -Translator::do_announces () -{ -} - void Translator::initialize () { @@ -155,7 +125,7 @@ Translator::finalize () SCM Translator::mark_smob (SCM sm) { - Translator * me = (Translator*) SCM_CELL_WORD_1(sm); + Translator * me = (Translator*) SCM_CELL_WORD_1 (sm); scm_gc_mark (me->simple_trans_list_); scm_gc_mark (me->trans_group_list_); scm_gc_mark (me->definition_); @@ -164,27 +134,57 @@ Translator::mark_smob (SCM sm) return me->properties_scm_; } +LY_DEFINE(ly_translator_name, + "ly:translator-name", 1,0,0, (SCM trans), + "Return the type name of the translator @var{trans}. +") +{ + Translator* tr = unsmob_translator (trans); + SCM_ASSERT_TYPE(tr, trans, SCM_ARG1, __FUNCTION__, "Context"); + + char const* nm = classname (tr); + return scm_makfrom0str (nm); +} + +LY_DEFINE(ly_translator_description, + "ly:translator-description", + 1,0,0, (SCM me), + "Return an alist of properties of translator @var{me}.") +{ + Translator *tr =unsmob_translator (me); + SCM_ASSERT_TYPE (tr, me, SCM_ARG1, __FUNCTION__, "Context"); + + return tr->translator_description (); +} + +SCM +Translator::translator_description () const +{ + return SCM_EOL; +} int Translator::print_smob (SCM s, SCM port, scm_print_state *) { - Translator *sc = (Translator *) gh_cdr (s); + Translator *sc = (Translator *) ly_cdr (s); scm_puts ("#name (), port); + scm_display (ly_translator_name (s), port); scm_display (sc->simple_trans_list_, port); /* don't try to print properties, that is too much hassle. */ scm_puts (" >", port); - - return 1; } +SCM +Translator::static_translator_description ()const +{ + return SCM_EOL; +} -IMPLEMENT_UNSMOB(Translator, translator); -IMPLEMENT_SMOBS(Translator); -IMPLEMENT_DEFAULT_EQUAL_P(Translator); +IMPLEMENT_SMOBS (Translator); +IMPLEMENT_DEFAULT_EQUAL_P (Translator);