X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-output-def.cc;h=8e28cdf4bb49caf176fa3d02b86f80428f14c836;hb=9efbad2d9487a05b04423e7e9f062968e8f8eaf4;hp=bcda3dbc42c642ad49a3011b6b17d2d0da33296c;hpb=b71bb68fd8b36ec4b00cfec5e620c53087983fc0;p=lilypond.git diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc index bcda3dbc42..8e28cdf4bb 100644 --- a/lily/music-output-def.cc +++ b/lily/music-output-def.cc @@ -6,11 +6,12 @@ (c) 1997--1998 Han-Wen Nienhuys */ - +#include "scope.hh" #include "debug.hh" #include "music-output-def.hh" #include "global-translator.hh" #include "dictionary-iter.hh" +#include "identifier.hh" int Music_output_def::get_next_default_count () const @@ -22,28 +23,46 @@ IMPLEMENT_IS_TYPE_B(Music_output_def); Music_output_def::Music_output_def () { + scope_p_ = new Scope; + translator_p_dict_p_ = new Scope; } Music_output_def::~Music_output_def () { - for (Dictionary_iter i (translator_p_dict_); i.ok (); i++) - delete i.val (); + delete scope_p_; + delete translator_p_dict_p_; } Music_output_def::Music_output_def (Music_output_def const &s) { - outfile_str_ = s.outfile_str_; - for (Dictionary_iter i (s.translator_p_dict_); i.ok (); i++) - assign_translator (i.key (), i.val ()->clone ()); + scope_p_ = new Scope (*s.scope_p_); + translator_p_dict_p_ = new Scope (*s.translator_p_dict_p_); + + for (Dictionary_iter i (*translator_p_dict_p_); i.ok (); i++) + { + Translator * t = i.val ()->access_Translator (false); + t-> output_def_l_ = this; + } +} + +void +Music_output_def::assign_translator (Translator*tp) +{ + String s =tp->type_str_; + if (translator_p_dict_p_->elem_b (s)) + delete translator_p_dict_p_->elem (s); + + (*translator_p_dict_p_)[s] = new Translator_identifier (tp, 0); + tp ->output_def_l_ = this; } Translator* Music_output_def::find_translator_l (String name) const { - if (translator_p_dict_.elt_b (name)) - return translator_p_dict_[name]; + if (translator_p_dict_p_->elem_b (name)) + return (*translator_p_dict_p_)[name]->access_Translator (); - if (global_translator_dict_p->elt_b (name)) + if (global_translator_dict_p->elem_b (name)) return (*global_translator_dict_p)[name]; return 0; @@ -57,33 +76,28 @@ Music_output_def::get_global_translator_p () if (!t) error (_("Can't find Score context")); t = t->clone (); - Global_translator *g = t->group_l ()->global_l (); + Global_translator *g = dynamic_cast (t)->global_l (); t->add_processing (); return g; } - -void -Music_output_def::assign_translator (String s, Translator*t) -{ - t->type_str_ = s; - t->output_def_l_ = this; - - if (translator_p_dict_.elt_b (s)) - delete translator_p_dict_[s]; - translator_p_dict_[s] = t; -} - void Music_output_def::print () const { #ifndef NPRINT - for (Dictionary_iter i (translator_p_dict_); i.ok (); i++) - { - DOUT << i.key () << " = "; - i.val ()->print (); - } - DOUT << "output: " << outfile_str_; + translator_p_dict_p_->print (); + scope_p_->print( ); #endif } + +String +Music_output_def::get_default_output () const +{ + if (!scope_p_->elem_b ("output")) + return ""; + Identifier * id = (*scope_p_) ["output"]; + + String *p = dynamic_cast (id); + return p ? *p : String (""); +}