- Score * sc = (Score*) SCM_CELL_WORD_1 (s);
- if (sc->header_)
- scm_gc_mark (sc->header_->self_scm ());
- for (int i = sc->defs_.size (); i--;)
- scm_gc_mark (sc->defs_[i]->self_scm ());
-
- return sc->music_;
+ SCM out = scm_makfrom0str (outname.to_str0 ());
+ SCM systems = SCM_EOL;
+ int outdef_count = defs_.size ();
+ for (int i = 0; !i || i < outdef_count; i++)
+ {
+ Music_output_def *def = outdef_count ? defs_[i] : default_def;
+ if (Paper_def * pd = dynamic_cast<Paper_def*> (def))
+ {
+ def = paperbook->scale_paper (pd);
+ }
+
+ if (!(no_paper_global_b && dynamic_cast<Paper_def*> (def)))
+ {
+ SCM context = ly_run_translator (music_, def->self_scm ());
+ if (Global_context *g = dynamic_cast<Global_context*>
+ (unsmob_context (context)))
+ {
+ SCM s = ly_format_output (context, out);
+ if (s != SCM_UNDEFINED)
+ {
+ systems = s;
+ /* Ugh. */
+ Music_output *output = g->get_output ();
+ if (Paper_score *ps = dynamic_cast<Paper_score*> (output))
+ *paper = ps->paper_;
+ }
+ }
+ }
+ }
+ return systems;