X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftranslator.cc;h=af72ca083a723697ec0d3820b2e51533862f10ea;hb=266a1dfe19ef50999bec6543f261ce340f2bc808;hp=58b4c589178f09a50610562213b83339187d61fa;hpb=2181534bd94587fcac8f1769f2dda7bece693649;p=lilypond.git diff --git a/lily/translator.cc b/lily/translator.cc index 58b4c58917..af72ca083a 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -3,179 +3,169 @@ 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 () +{ + must_be_last_ = false; + self_scm_ = SCM_EOL; + daddy_context_ = 0; + smobify_self (); +} + +void +Translator::do_announces () { - status = ORPHAN; - daddy_trans_l_ = 0; - output_def_l_ = 0; } -Translator::Translator (Translator const &s) - : Input (s) +void +Translator::process_music () { - 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 +Translator::Translator () +{ + init (); +} + +Translator::Translator (Translator const &src) { - return s == type_str_; + 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) -{ - if (status < MOVE_INITED) - post_move_processing(); +/* - return do_try_request (r); + SMOBS + +*/ +SCM +Translator::mark_smob (SCM sm) +{ + 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 daddy_context_->get_score_context (); +} - return ""; -} -void -Translator::set_property (String id, Scalar val) +SCM +Translator::static_translator_description ()const { - properties_dict_[id] = val; + return SCM_EOL; } -Music_output_def * -Translator::output_def_l () const +IMPLEMENT_SMOBS (Translator); +IMPLEMENT_DEFAULT_EQUAL_P (Translator); +IMPLEMENT_TYPE_P (Translator, "ly:translator?"); + +bool +Translator::must_be_last () const +{ + return must_be_last_; +} + +void +Translator::derived_mark () const { - return output_def_l_; + }