X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftranslator.cc;h=e1f3408a38b79f441ab928b239ef8baa8d895bf4;hb=87d48c0b8a5c75a1476bbb88ca853de838f3c7ac;hp=58b4c589178f09a50610562213b83339187d61fa;hpb=2181534bd94587fcac8f1769f2dda7bece693649;p=lilypond.git diff --git a/lily/translator.cc b/lily/translator.cc index 58b4c58917..e1f3408a38 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -3,179 +3,156 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2005 Han-Wen Nienhuys */ - #include "translator.hh" -#include "debug.hh" + +#include "warn.hh" #include "translator-group.hh" -#include "dictionary-iter.hh" +#include "context-def.hh" +#include "global-context.hh" + +#include "ly-smobs.icc" Translator::~Translator () { } -Translator::Translator () +void +Translator::init () { - status = ORPHAN; - daddy_trans_l_ = 0; - output_def_l_ = 0; + must_be_last_ = false; + self_scm_ = SCM_EOL; + daddy_context_ = 0; + smobify_self (); } -Translator::Translator (Translator const &s) - : Input (s) +void +Translator::do_announces () { - status = ORPHAN; - daddy_trans_l_ =0; - output_def_l_ = s.output_def_l_; - properties_dict_ = s.properties_dict_; - type_str_ = s.type_str_; } -bool -Translator::is_alias_b (String s) const +void +Translator::process_music () +{ +} + +Translator::Translator () { - return s == type_str_; + init (); +} + +Translator::Translator (Translator const &src) +{ + init (); + must_be_last_ = src.must_be_last_; } bool -Translator::do_try_request (Request *) +Translator::try_music (Music *) { return false; } - Moment -Translator::now_moment () const +Translator::now_mom () const { - return daddy_trans_l_->now_moment (); + return daddy_context_->now_mom (); } - -void -Translator::add_processing () +Output_def * +Translator::get_output_def () const { - if (status > ORPHAN) - return; - - do_add_processing (); - status = VIRGIN; + return daddy_context_->get_output_def (); } -void -Translator::do_add_processing () +Translator_group * +Translator::get_daddy_translator () const { + return daddy_context_->implementation (); } -void -Translator::print () const +SCM +Translator::internal_get_property (SCM sym) const { -#ifndef NPRINT - DOUT << name () << " {"; - if (name () != type_str_) - DOUT << "type = " << type_str_; - for (Dictionary_iter i (properties_dict_); i.ok (); i++) - { - DOUT << i.key () << "=" << i.val () <<"\n"; - } - do_print (); - DOUT << "}\n"; -#endif + return daddy_context_->internal_get_property (sym); } void -Translator::do_print () const +Translator::stop_translation_timestep () { } -IMPLEMENT_IS_TYPE_B(Translator); +/* + this function has 2 properties + - It is called before try_music () + - It is called before any user information enters the translators. + (i.e. any \property or event is not processed yet.) +*/ void -Translator::creation_processing () +Translator::start_translation_timestep () { - if (status >= CREATION_INITED) - return ; - - do_creation_processing (); - status = CREATION_INITED; } void -Translator::post_move_processing() +Translator::initialize () { - if (status >= MOVE_INITED) - return; - - creation_processing(); - do_post_move_processing(); - status = MOVE_INITED; } void -Translator::removal_processing() +Translator::finalize () { - if (status == ORPHAN) - return; - creation_processing(); - do_removal_processing(); - // elegancy ... - // status = ORPHAN; } - -bool -Translator::try_request (Request * r) +/* + SMOBS +*/ +SCM +Translator::mark_smob (SCM sm) { - if (status < MOVE_INITED) - post_move_processing(); - - return do_try_request (r); + Translator *me = (Translator *) SCM_CELL_WORD_1 (sm); + me->derived_mark (); + return SCM_EOL; } -void -Translator::process_requests() +SCM +Translator::translator_description () const { - if (status < PROCESSED_REQS) - post_move_processing(); - else if (status >= PROCESSED_REQS) - return; - - status = PROCESSED_REQS; - do_process_requests(); + return SCM_EOL; } -void -Translator::pre_move_processing() +Global_context * +Translator::get_global_context () const { - do_pre_move_processing(); - status = CREATION_INITED; + return daddy_context_->get_global_context (); } -Scalar -Translator::get_property (String id) +Score_context * +Translator::get_score_context () const { - if (properties_dict_.elt_b (id)) - { - return properties_dict_[id]; - } - - if (daddy_trans_l_) - return daddy_trans_l_->get_property (id); - - return ""; + return daddy_context_->get_score_context (); } -void -Translator::set_property (String id, Scalar val) +SCM +Translator::static_translator_description ()const { - properties_dict_[id] = val; + return SCM_EOL; } +IMPLEMENT_SMOBS (Translator); +IMPLEMENT_DEFAULT_EQUAL_P (Translator); +IMPLEMENT_TYPE_P (Translator, "ly:translator?"); -Music_output_def * -Translator::output_def_l () const +bool +Translator::must_be_last () const +{ + return must_be_last_; +} + +void +Translator::derived_mark () const { - return output_def_l_; }