X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusic-output-def.cc;h=73c2326e73c22a52996eda9038d2c1bc52222ad3;hb=333ec20b00d7e6952cb7d3800a82548957feb803;hp=ff392eaeeb7bec65fd475d373852880df6c3ac59;hpb=7e72a1e50e94a7f9738d62599de79fe7745f600c;p=lilypond.git diff --git a/lily/music-output-def.cc b/lily/music-output-def.cc index ff392eaeeb..73c2326e73 100644 --- a/lily/music-output-def.cc +++ b/lily/music-output-def.cc @@ -10,28 +10,25 @@ #include "warn.hh" #include "music-output-def.hh" -#include "global-translator.hh" +#include "global-context.hh" #include "context-def.hh" #include "main.hh" #include "file-path.hh" #include "lily-guile.hh" -#include "ly-modules.hh" +#include "ly-module.hh" #include "ly-smobs.icc" Music_output_def::Music_output_def () { - scaled_fonts_ = SCM_EOL; translator_tab_ = new Scheme_hash_table; scope_ = SCM_EOL; smobify_self (); - scm_gc_unprotect_object (translator_tab_->self_scm ()); - scope_ = ly_make_anonymous_module(); + scm_gc_unprotect_object (translator_tab_->self_scm ()); + scope_ = ly_make_anonymous_module (); } - - Music_output_def::~Music_output_def () { } @@ -39,18 +36,15 @@ Music_output_def::~Music_output_def () Music_output_def::Music_output_def (Music_output_def const &s) { scope_ = SCM_EOL; - translator_tab_ = new Scheme_hash_table (*s.translator_tab_); - - scaled_fonts_ = SCM_EOL; - + translator_tab_ = 0; smobify_self (); + + translator_tab_ = new Scheme_hash_table (*s.translator_tab_); scm_gc_unprotect_object (translator_tab_->self_scm ()); - scaled_fonts_ = scm_list_copy (s.scaled_fonts_); - scope_= ly_make_anonymous_module (); - if (ly_module_p (s.scope_)) - ly_copy_module_variables (scope_, s.scope_); + if (is_module (s.scope_)) + ly_import_module (scope_, s.scope_); } @@ -61,14 +55,22 @@ SCM Music_output_def::mark_smob (SCM m) { Music_output_def * mo = (Music_output_def*) SCM_CELL_WORD_1 (m); - scm_gc_mark (mo->translator_tab_->self_scm ()); - scm_gc_mark (mo->scope_); + if (mo->translator_tab_) + scm_gc_mark (mo->translator_tab_->self_scm ()); - return mo->scaled_fonts_; + mo->derived_mark (); + + return mo->scope_; } void -Music_output_def::assign_translator (SCM transdef) +Music_output_def::derived_mark () +{ + +} + +void +Music_output_def::assign_context_def (SCM transdef) { Context_def *tp = unsmob_context_def (transdef); assert (tp); @@ -78,37 +80,20 @@ Music_output_def::assign_translator (SCM transdef) String nm = ly_symbol2string (tp->get_context_name ()) + "Context"; - scm_module_define (scope_, ly_symbol2scm (nm.to_str0()), transdef); + scm_module_define (scope_, ly_symbol2scm (nm.to_str0 ()), transdef); } /* find the translator for NAME. NAME must be a symbol. - */ +*/ SCM -Music_output_def::find_translator (SCM name) const +Music_output_def::find_context_def (SCM name) const { SCM val =SCM_EOL; translator_tab_->try_retrieve (name, &val); return val; } - -Global_translator * -Music_output_def::get_global_translator () -{ - SCM key = ly_symbol2scm ("Score"); - Context_def * t = unsmob_context_def (find_translator (key)); - - if (!t) - error (_f ("can't find `%s' context", "Score")); - - Translator_group * tg = t->instantiate (this, SCM_EOL); - - tg->initialize (); - - return dynamic_cast (tg); -} - int Music_output_def::print_smob (SCM s, SCM p, scm_print_state *) { @@ -121,14 +106,12 @@ Music_output_def::print_smob (SCM s, SCM p, scm_print_state *) return 1; } - SCM Music_output_def::get_scmvar (String s) const { return lookup_variable (ly_symbol2scm (s.to_str0 ())); } - void Music_output_def::set_variable (SCM sym, SCM val) { @@ -143,50 +126,37 @@ Music_output_def::lookup_variable (SCM sym) const return scm_variable_ref (var); } -LY_DEFINE(ly_paper_lookup, - "ly:paper-lookup", - 2, 0,0, - (SCM pap, SCM sym), - "Lookup @var{sym} in @var{pap}. Return the value " - " or '() if undefined. " - ) +LY_DEFINE (ly_paper_lookup, "ly:paper-lookup", + 2, 0,0, (SCM pap, SCM sym), + "Lookup @var{sym} in @var{pap}. " + "Return the value or @code{'()} if undefined.") { Music_output_def *op = unsmob_music_output_def (pap); SCM_ASSERT_TYPE (op, pap, SCM_ARG1, __FUNCTION__, "Paper"); - SCM_ASSERT_TYPE (gh_symbol_p (sym), sym, SCM_ARG2, __FUNCTION__, "symbol"); - - SCM v = op->lookup_variable (sym); + SCM_ASSERT_TYPE (is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol"); - if (SCM_VARIABLEP(v)) - return SCM_VARIABLE_REF(v); + SCM var = ly_module_lookup (op->scope_, sym); + if (SCM_VARIABLEP (var)) + return SCM_VARIABLE_REF (var); else return SCM_EOL; } -LY_DEFINE(ly_output_def_scope, - "ly:output-def-scope", - 1, 0,0, - (SCM def), - "Get the scope inside @var{def}." - ) +LY_DEFINE (ly_output_def_scope, "ly:output-def-scope", + 1, 0,0, (SCM def), + "Get the variable scope inside @var{def}.") { Music_output_def *op = unsmob_music_output_def (def); SCM_ASSERT_TYPE (op, def, SCM_ARG1, __FUNCTION__, "Output definition"); - return op->scope_; } - -LY_DEFINE(ly_output_def_clone, - "ly:output-def-clone", - 1, 0,0, - (SCM def), - "Clone @var{def}." - ) +LY_DEFINE (ly_output_def_clone, "ly:output-def-clone", + 1, 0, 0, (SCM def), + "Clone @var{def}.") { Music_output_def *op = unsmob_music_output_def (def); SCM_ASSERT_TYPE (op, def, SCM_ARG1, __FUNCTION__, "Output definition"); - SCM s = op->clone ()->self_scm (); scm_gc_unprotect_object (s); return s;