]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/score.cc
* buildscripts/gen-emmentaler-scripts.py (outdir): capitalize
[lilypond.git] / lily / score.cc
index 6a962306b0959d0889a70175de8128d5b691c434..1a3209afb343d3d2423e6eb0f07f9fffdc7343de 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "score.hh"
@@ -15,7 +15,6 @@
 #include "book.hh"
 #include "cpu-timer.hh"
 #include "global-context.hh"
-#include "ly-module.hh"
 #include "ly-smobs.icc"
 #include "main.hh"
 #include "music-iterator.hh"
@@ -80,7 +79,7 @@ Score::Score (Score const &s)
 
   smobify_self ();
 
-  Music *m =unsmob_music (s.music_);
+  Music *m = unsmob_music (s.music_);
   music_ = m ? m->clone ()->self_scm () : SCM_EOL;
   scm_gc_unprotect_object (music_);
   
@@ -89,85 +88,10 @@ Score::Score (Score const &s)
 
   header_ = ly_make_anonymous_module (false);
   if (ly_c_module_p (s.header_))
-    ly_import_module (header_, s.header_);
+    ly_module_copy (header_, s.header_);
 }
 
 
-LY_DEFINE (ly_run_translator, "ly:run-translator", 
-          2, 1, 0, (SCM mus, SCM output_def, SCM key),
-          "Process @var{mus} according to @var{output_def}. \n"
-          "An interpretation context is set up,\n"
-          "and @var{mus} is interpreted with it.  \n"
-          "The context is returned in its final state.\n"
-
-          "\n\nOptionally, this routine takes an Object-key to\n"
-          "to uniquely identify the Score block containing it.\n")
-{
-  Output_def *odef = unsmob_output_def (output_def);
-  Music *music = unsmob_music (mus);
-
-  if (!music
-      || !music->get_length ().to_bool ())
-    {
-      warning (_ ("Need music in a score"));
-      return SCM_BOOL_F;
-    }
-  
-  SCM_ASSERT_TYPE (music, mus, SCM_ARG1,
-                  __FUNCTION__, "Music");
-  SCM_ASSERT_TYPE (odef, output_def, SCM_ARG2, __FUNCTION__,
-                  "Output definition");
-  
-  Cpu_timer timer;
-  
-  Global_context *trans = new Global_context (odef, music->get_length (), unsmob_key (key) );
-  if (!trans)
-    {
-      programming_error ("no toplevel translator");
-      return SCM_BOOL_F;
-    }
-
-  progress_indication (_ ("Interpreting music... "));
-  
-  SCM protected_iter = Music_iterator::get_static_get_iterator (music);
-  Music_iterator * iter = unsmob_iterator (protected_iter);
-  iter->init_translator (music, trans);
-
-  iter->construct_children ();
-
-  if (!iter->ok ())
-    {
-      warning (_ ("Need music in a score"));
-      /* todo: should throw exception. */
-      return SCM_BOOL_F;
-    }
-
-  trans->run_iterator_on_me (iter);
-  iter->quit ();
-  scm_remember_upto_here_1 (protected_iter);
-  trans->finish ();
-
-  if (verbose_global_b)
-    progress_indication (_f ("elapsed time: %.2f seconds",  timer.read ()));
-  
-  return scm_gc_unprotect_object (trans->self_scm ());
-}
-
-LY_DEFINE (ly_format_output, "ly:format-output",
-          2, 0, 0, (SCM context, SCM outname),
-          "Given a Score context in its final state,"
-           "process it and return the (rendered) result.")
-{
-  Global_context *g = dynamic_cast<Global_context*> (unsmob_context (context));
-  SCM_ASSERT_TYPE (g, context, SCM_ARG1, __FUNCTION__, "Global context");
-  SCM_ASSERT_TYPE (scm_is_string (outname), outname, SCM_ARG2, __FUNCTION__, "output file name");
-
-  Music_output *output = g->get_output ();
-  progress_indication ("\n");
-  /* ugh, midi still wants outname  */
-  return output->process (ly_scm2string (outname));
-}
-
 void
 default_rendering (SCM music, SCM outdef,
                   SCM book_outputdef,
@@ -252,6 +176,7 @@ Score::book_rendering (String outname,
 
   Object_key * key = new Lilypond_general_key (book_key, user_key_, 0);
   SCM scm_key = key->self_scm();
+  scm_gc_unprotect_object (scm_key);
   
   for (int i = 0; !i || i < outdef_count; i++)
     {
@@ -285,57 +210,12 @@ Score::book_rendering (String outname,
 
 
 
-LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format",
-          2, 1, 0, (SCM score, SCM layout, SCM key),
-          "Run @var{score} through @var{layout}, an output definition, "
-          "scaled to correct outputscale already, "
-          "return a list of layout-lines. "
-          "\nTake optional Object_key argument."
-          )
-{
-  Score * sc = unsmob_score (score);
-  Output_def *od = unsmob_output_def (layout);
-
-  if (sc->error_found_)
-    {
-      return SCM_EOL;
-    }
-  
-  SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "Score");
-  SCM_ASSERT_TYPE (od, layout, SCM_ARG2, __FUNCTION__, "Output_def");
-
-  Output_def * score_def  = 0;
-
-  /* UGR, FIXME, these are default \layout blocks once again.  They
-     suck. */
-  for (int i = 0; !score_def && i < sc->defs_.size (); i++)
-    if (sc->defs_[i]->c_variable ("is-layout") == SCM_BOOL_T)
-      score_def = sc->defs_[i];
-
-  if (!score_def)
-    return scm_c_make_vector (0, SCM_EOL);
-      
-  score_def = score_def->clone ();
-  SCM prot = score_def->self_scm ();
-  scm_gc_unprotect_object (prot);
-
-  /* TODO: SCORE_DEF should be scaled according to OD->parent_ or OD
-     itself. */
-  score_def->parent_ = od;
-  
-  SCM context = ly_run_translator (sc->get_music (), score_def->self_scm (),
-                                  key);
-  SCM lines = ly_format_output (context, scm_makfrom0str ("<embedded>"));
-  
-  scm_remember_upto_here_1 (prot);
-  return lines;
-}
 
 void
 Score::set_music (SCM music, SCM parser)
 {
   /* URG? */
-  SCM check_funcs = ly_scheme_function ("toplevel-music-functions");
+  SCM check_funcs = ly_lily_module_constant ("toplevel-music-functions");
   for (; scm_is_pair (check_funcs); check_funcs = scm_cdr (check_funcs))
     music = scm_call_2 (scm_car (check_funcs), music, parser);