X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fscore-scheme.cc;h=eebdedbb95c3d8614b043d932a799d1e9896b25e;hb=d1f044d19e0e3c163374973ee8a6c61611c3408e;hp=3c7f5c9a274e56e4b3d9ba9d5fd8e3bb04164dcc;hpb=58bcc84c9480dae1b21bc24d8396b91fe19e0131;p=lilypond.git diff --git a/lily/score-scheme.cc b/lily/score-scheme.cc index 3c7f5c9a27..eebdedbb95 100644 --- a/lily/score-scheme.cc +++ b/lily/score-scheme.cc @@ -3,32 +3,79 @@ source file of the GNU LilyPond music typesetter - (c) 2005 Han-Wen Nienhuys + (c) 2005--2007 Han-Wen Nienhuys */ #include "score.hh" + #include "music.hh" #include "output-def.hh" #include "global-context.hh" +#include "music-output.hh" +#include "paper-score.hh" +#include "paper-book.hh" -LY_DEFINE (ly_music_scorify, "ly:music-scorify", - 2, 0, 0, - (SCM music, SCM parser), - "Return MUSIC with TEXTS encapsulated in SCORE.") +LY_DEFINE (ly_make_score, "ly:make-score", + 1, 0, 0, + (SCM music), + "Return score with @var{music} encapsulated in @var{score}.") { -#if 0 - SCM_ASSERT_TYPE (ly_c_music_p (music), music, SCM_ARG1, __FUNCTION__, "music"); -#endif + Music *mus = unsmob_music (music); + SCM_ASSERT_TYPE (mus, music, SCM_ARG1, __FUNCTION__, "music"); + Score *score = new Score; - score->set_music (music, parser); - scm_gc_unprotect_object (score->self_scm ()); - return score->self_scm (); + score->set_music (music); + + return score->unprotect (); +} + +LY_DEFINE (ly_score_output_defs, "ly:score-output-defs", + 1, 0, 0, (SCM score), + "All output defs in a score.") +{ + Score *sc = unsmob_score (score); + SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score"); + + SCM l = SCM_EOL; + for (vsize i = 0; i < sc->defs_.size (); i++) + l = scm_cons (sc->defs_[i]->self_scm(), l); + return scm_reverse_x (l, SCM_EOL); +} + + + +LY_DEFINE (ly_score_header, "ly:score-header", + 1, 0, 0, (SCM score), + "return score header.") +{ + Score *sc = unsmob_score (score); + SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score"); + return sc->header_; +} + + +LY_DEFINE (ly_score_music, "ly:score-music", + 1, 0, 0, (SCM score), + "return score music.") +{ + Score *sc = unsmob_score (score); + SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score"); + return sc->get_music (); +} + +LY_DEFINE (ly_score_error_p, "ly:score-error?", + 1, 0, 0, (SCM score), + "Was there an error in the score?") +{ + Score *sc = unsmob_score (score); + SCM_ASSERT_TYPE (sc, score, SCM_ARG1, __FUNCTION__, "score"); + return scm_from_bool (sc->error_found_); } LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format", - 2, 1, 0, (SCM score, SCM layout, SCM key), + 2, 0, 0, (SCM score, SCM layout), "Run @var{score} through @var{layout}, an output definition, " - "scaled to correct outputscale already, " + "scaled to correct output-scale already, " "return a list of layout-lines. " "\nTake optional Object_key argument.") { @@ -45,25 +92,23 @@ LY_DEFINE (ly_score_embedded_format, "ly:score-embedded-format", /* UGR, FIXME, these are default \layout blocks once again. They suck. */ - for (int i = 0; !score_def && i < sc->defs_.size (); i++) + for (vsize 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); + return SCM_BOOL_F; score_def = score_def->clone (); - SCM prot = score_def->self_scm (); - scm_gc_unprotect_object (prot); + SCM prot = score_def->unprotect (); /* 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 ("")); + SCM context = ly_run_translator (sc->get_music (), score_def->self_scm ()); + SCM output = ly_format_output (context); scm_remember_upto_here_1 (prot); - return lines; + return output; }