X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ftranslator.cc;h=ae0bb1a0e42107b9c901072790a1956bb5489216;hb=eea589c2d7bee6ab38bc611eb205d4c74e2011f7;hp=35ef5a7abe321d92a688f50169b65c0e16d69e99;hpb=615a9212789c2cb2994748c023d0e19f3a83a0fd;p=lilypond.git diff --git a/lily/translator.cc b/lily/translator.cc index 35ef5a7abe..ae0bb1a0e4 100644 --- a/lily/translator.cc +++ b/lily/translator.cc @@ -3,180 +3,169 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ - #include "translator.hh" -#include "debug.hh" + +#include "warn.hh" #include "translator-group.hh" -#include "dictionary-iter.hh" -#include "rational.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_music (Music *) +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 << classname (this) << " {"; - if (classname (this) != 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 () { } +/* + 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_music (Music * r) -{ - if (status < MOVE_INITED) - post_move_processing (); +/* + + SMOBS - return do_try_music (r); +*/ +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_.elem_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 output_def_l_; + return must_be_last_; +} + +void +Translator::derived_mark () const +{ + }