X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-output-def.cc;h=c05534131b0f5197c561d589ed133015d66d93f0;hb=b2cc0ee8300845fbe604b408adb597247464acc9;hp=86a20a731e862e20bc8a2bdd42501d555b8d56f0;hpb=7c0081d2e09d35232da5b7b5998f39adfa76d741;p=lilypond.git diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc index 86a20a731e..c05534131b 100644 --- a/lily/music-output-def.cc +++ b/lily/music-output-def.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ #include "scope.hh" @@ -12,6 +12,8 @@ #include "global-translator.hh" #include "dictionary-iter.hh" #include "identifier.hh" +#include "main.hh" +#include "lily-guile.hh" int Music_output_def::get_next_default_count () const @@ -19,7 +21,7 @@ Music_output_def::get_next_default_count () const return 0; } -IMPLEMENT_IS_TYPE_B(Music_output_def); + Music_output_def::Music_output_def () { @@ -37,22 +39,27 @@ Music_output_def::Music_output_def (Music_output_def const &s) { scope_p_ = new Scope (*s.scope_p_); translator_p_dict_p_ = new Scope (*s.translator_p_dict_p_); + default_properties_ = s.default_properties_; - for (Dictionary_iter i (*translator_p_dict_p_); i.ok (); i++) + for (Scope_iter i (*translator_p_dict_p_); i.ok (); i++) { - Translator * t = i.val ()->access_Translator (false); + Translator * t = i.val ()->access_content_Translator_group (false); t-> output_def_l_ = this; } } void -Music_output_def::assign_translator (Translator*tp) +Music_output_def::assign_translator (Translator_group*tp) { String s =tp->type_str_; + if (s.empty_b ()) + { + tp->warning (_("Interpretation context with empty type")); + } 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); + translator_p_dict_p_->elem (s) = new Translator_group_identifier (tp, 0); tp ->output_def_l_ = this; } @@ -60,10 +67,10 @@ Translator* Music_output_def::find_translator_l (String name) const { if (translator_p_dict_p_->elem_b (name)) - return (*translator_p_dict_p_)[name]->access_Translator (); + return translator_p_dict_p_->elem (name)->access_content_Translator_group (false); if (global_translator_dict_p->elem_b (name)) - return (*global_translator_dict_p)[name]; + return global_translator_dict_p->elem(name); return 0; } @@ -74,9 +81,9 @@ Music_output_def::get_global_translator_p () { Translator * t = find_translator_l ("Score"); if (!t) - error (_("Can't find Score context")); + error (_f ("Can't find `%s' context", "Score")); t = t->clone (); - Global_translator *g = t->access_Translator_group ()->global_l (); + Global_translator *g = dynamic_cast (t); t->add_processing (); return g; @@ -86,7 +93,9 @@ void Music_output_def::print () const { #ifndef NPRINT + DEBUG_OUT << "Translators: \n"; translator_p_dict_p_->print (); + DEBUG_OUT << "Other definitions.\n"; scope_p_->print( ); #endif } @@ -94,10 +103,11 @@ Music_output_def::print () const String Music_output_def::get_default_output () const { - if (!scope_p_->elem_b ("output")) - return ""; - Identifier * id = (*scope_p_) ["output"]; + if (safe_global_b || !scope_p_->elem_b ("output")) + return ""; + Identifier * id = scope_p_->elem ("output"); - String *p = id->access_String (); + String *p = id->access_content_String (false); return p ? *p : String (""); } +