source file of the GNU LilyPond music typesetter
- (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (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"
int
Music_output_def::get_next_default_count () const
return 0;
}
-IMPLEMENT_IS_TYPE_B(Music_output_def);
+
Music_output_def::Music_output_def ()
{
{
scope_p_ = new Scope (*s.scope_p_);
translator_p_dict_p_ = new Scope (*s.translator_p_dict_p_);
-
- for (Dictionary_iter<Identifier*> i (*translator_p_dict_p_); i.ok (); i++)
- {
- Translator * t = i.val ()->access_content_Translator (false);
- t-> output_def_l_ = this;
- }
}
void
-Music_output_def::assign_translator (Translator*tp)
+Music_output_def::assign_translator (SCM transdef)
{
- 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_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_)[name]->access_content_Translator (false);
-
- if (global_translator_dict_p->elem_b (name))
- return (*global_translator_dict_p)[name];
+ String s = ly_scm2string (name);
+ if (translator_p_dict_p_->elem_b (s))
+ return translator_p_dict_p_->scm_elem (s);
- return 0;
+ return SCM_EOL;
}
Global_translator *
Music_output_def::get_global_translator_p ()
{
- Translator * t = find_translator_l ("Score");
+ Translator_def * t = unsmob_translator_def (find_translator_l (gh_str02scm ("Score")));
if (!t)
- error (_("Can't find Score context"));
- t = t->clone ();
- Global_translator *g = dynamic_cast <Global_translator *> (t);
- t->add_processing ();
+ error (_f ("can't find `%s' context", "Score"));
+
+ Translator_group * tg = t->instantiate (this);
- return g;
+ tg->add_processing ();
+
+ return dynamic_cast <Global_translator *> (tg);
}
void
Music_output_def::print () const
{
-#ifndef NPRINT
- 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 = id->access_content_String (false);
- return p ? *p : String ("");
+ if (safe_global_b || !scope_p_->elem_b ("output"))
+ return "";
+ SCM s = scope_p_->scm_elem ("output");
+
+ return gh_string_p (s) ? ly_scm2string (s) : String ("");
}
+
+