(c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+#include "dictionary.hh"
#include "scope.hh"
#include "debug.hh"
#include "music-output-def.hh"
#include "global-translator.hh"
-#include "dictionary-iter.hh"
+#include "translator-def.hh"
#include "identifier.hh"
#include "main.hh"
#include "lily-guile.hh"
{
scope_p_ = new Scope (*s.scope_p_);
translator_p_dict_p_ = new Scope (*s.translator_p_dict_p_);
- // default_properties_ = s.default_properties_;
-
- for (Scope_iter i (*translator_p_dict_p_); i.ok (); i++)
- {
- Translator * t = i.val ()->access_content_Translator_group (false);
- t-> output_def_l_ = this;
- }
}
void
-Music_output_def::assign_translator (Translator_group*tp)
+Music_output_def::assign_translator (SCM transdef)
{
- 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_->elem (s) = new Translator_group_identifier (tp, 0);
- tp ->output_def_l_ = this;
+ Translator_def *tp = unsmob_translator_def (transdef);
+ assert (tp);
+
+ String s = ly_scm2string (tp->type_name_);
+ translator_p_dict_p_->set (s, transdef);
}
-Translator*
-Music_output_def::find_translator_l (String name) const
+SCM
+Music_output_def::find_translator_l (SCM name) const
{
- if (translator_p_dict_p_->elem_b (name))
- return translator_p_dict_p_->elem (name)->access_content_Translator_group (false);
-
- map<String, Translator*>::const_iterator ki
- =global_translator_dict_p->find (name);
-
- if (ki != global_translator_dict_p->end ())
- return (*ki).second ;
-
- return 0;
+ String s = ly_scm2string (name);
+
+ SCM val =SCM_EOL;
+ if (translator_p_dict_p_->elem_b (s))
+ return translator_p_dict_p_->scm_elem (s);
+ return val;
}
Global_translator *
Music_output_def::get_global_translator_p ()
{
- Translator * t = find_translator_l ("Score");
+ Translator_def * t = unsmob_translator_def (find_translator_l (ly_str02scm ("Score")));
if (!t)
error (_f ("can't find `%s' context", "Score"));
- t = t->clone ();
- Global_translator *g = dynamic_cast <Global_translator *> (t);
- t->add_processing ();
+
+ Translator_group * tg = t->instantiate (this);
+
+ tg->initialize ();
- return g;
+ return dynamic_cast <Global_translator *> (tg);
}
-void
-Music_output_def::print () const
-{
-}
+
String
Music_output_def::get_default_output () const
{
if (safe_global_b || !scope_p_->elem_b ("output"))
return "";
- Identifier * id = scope_p_->elem ("output");
-
- String *p = id->access_content_String (false);
- return p ? *p : String ("");
+ SCM s = scope_p_->scm_elem ("output");
+
+ return gh_string_p (s) ? ly_scm2string (s) : String ("");
}
+
+