]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-outputter.cc
* scm/lily.scm (completize-formats): new function
[lilypond.git] / lily / paper-outputter.cc
index 72135b91389ca4cddd41892198861df5bff93b26..74b2a5b2d05faf053b259f30d789d5e8cad6ad71 100644 (file)
@@ -107,13 +107,28 @@ Paper_outputter::output_stencil (Stencil stil)
                                 (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?  */
@@ -140,6 +155,18 @@ LY_DEFINE (ly_outputter_dump_string, "ly:outputter-dump-string",
   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 ()
 {