(void*) this, Offset (0,0));
}
-Paper_outputter *
-get_paper_outputter (String outname, String f)
+LY_DEFINE (ly_make_paper_outputter, "ly:make-paper-outputter",
+ 2, 0, 0, (SCM outname, SCM format),
+ "Create an outputter that evaluates within "
+ "@code{output-}@var{format}, writing to file @var{outname}.")
{
+ SCM_ASSERT_TYPE(scm_is_string (outname), outname, SCM_ARG1, __FUNCTION__,
+ "String");
+ SCM_ASSERT_TYPE(scm_is_string (format), format, SCM_ARG2, __FUNCTION__,
+ "String");
+
+ String outname_str = ly_scm2string (outname);
+ String f = ly_scm2string (format);
+
progress_indication (_f ("Layout output to `%s'...",
- outname == "-" ? String ("<stdout>") : outname));
+ outname_str == "-"
+ ? String ("<stdout>")
+ : outname_str));
progress_indication ("\n");
- return new Paper_outputter (outname, f);
+ Paper_outputter *po = new Paper_outputter (outname_str, f);
+
+ scm_gc_unprotect_object (po->self_scm ());
+ return po->self_scm ();
}
/* FIXME: why is output_* wrapper called dump? */
return po->dump_string (str);
}
+
+LY_DEFINE (ly_outputter_close, "ly:outputter-close",
+ 1, 0, 0, (SCM outputter),
+ "Close port of @var{outputter}.")
+{
+ Paper_outputter *po = unsmob_outputter (outputter);
+ SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter");
+
+ po->close ();
+ return SCM_UNSPECIFIED;
+}
+
void
Paper_outputter::close ()
{