X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpaper-outputter-scheme.cc;h=3c00d79308e40ec3f010349dd7da8d21ee968069;hb=c5a3f0c024f4cb629811cff9eb04abff36e94138;hp=2dd552889fd480db7940a29b2829c8d1e1f0abc8;hpb=b2bba8f2ecf6bd5e8b755c45b8f271d09ddaa79f;p=lilypond.git diff --git a/lily/paper-outputter-scheme.cc b/lily/paper-outputter-scheme.cc index 2dd552889f..3c00d79308 100644 --- a/lily/paper-outputter-scheme.cc +++ b/lily/paper-outputter-scheme.cc @@ -1,37 +1,40 @@ /* - paper-outputter-scheme.cc -- implement Paper_outputter bindings + paper-outputter-scheme.cc -- implement Paper_outputter bindings source file of the GNU LilyPond music typesetter - (c) 2005 Han-Wen Nienhuys - + (c) 2005--2007 Han-Wen Nienhuys */ #include "paper-outputter.hh" -#include "warn.hh" + +#include "international.hh" #include "stencil.hh" +#include "warn.hh" LY_DEFINE (ly_make_paper_outputter, "ly:make-paper-outputter", - 2, 0, 0, (SCM outname, SCM format), + 2, 0, 0, (SCM port, SCM format), "Create an outputter that evaluates within " - "@code{output-}@var{format}, writing to file @var{outname}.") + "@code{output-}@var{format}, writing to @var{port}.") { - 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); + LY_ASSERT_TYPE (ly_is_port, port, 1); + LY_ASSERT_TYPE (scm_is_string, format, 2); + + string f = ly_scm2string (format); + + string output_name = ""; + + SCM port_name = scm_port_filename (port); + if (scm_is_string (port_name)) + output_name = ly_scm2string (port_name); + + message (_f ("Layout output to `%s'...", + output_name.c_str ())); - progress_indication (_f ("Layout output to `%s'...", - outname_str == "-" - ? String ("") - : outname_str)); progress_indication ("\n"); - Paper_outputter *po = new Paper_outputter (outname_str, f); + Paper_outputter *po = new Paper_outputter (port, f); - scm_gc_unprotect_object (po->self_scm ()); + po->unprotect (); return po->self_scm (); } @@ -40,10 +43,13 @@ LY_DEFINE (ly_outputter_dump_stencil, "ly:outputter-dump-stencil", 2, 0, 0, (SCM outputter, SCM stencil), "Dump stencil @var{expr} onto @var{outputter}.") { + + LY_ASSERT_SMOB (Paper_outputter, outputter, 1); + LY_ASSERT_SMOB(Stencil, stencil, 2); + Paper_outputter *po = unsmob_outputter (outputter); Stencil *st = unsmob_stencil (stencil); - SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter"); - SCM_ASSERT_TYPE (st, stencil, SCM_ARG1, __FUNCTION__, "Paper_outputter"); + po->output_stencil (*st); return SCM_UNSPECIFIED; } @@ -52,21 +58,43 @@ LY_DEFINE (ly_outputter_dump_string, "ly:outputter-dump-string", 2, 0, 0, (SCM outputter, SCM str), "Dump @var{str} onto @var{outputter}.") { + LY_ASSERT_SMOB (Paper_outputter, outputter, 1); + LY_ASSERT_TYPE(scm_is_string, str, 2); + Paper_outputter *po = unsmob_outputter (outputter); - SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter"); - SCM_ASSERT_TYPE (scm_is_string (str), str, SCM_ARG1, __FUNCTION__, "Paper_outputter"); - + return po->dump_string (str); } +LY_DEFINE (ly_outputter_port, "ly:outputter-port", + 1, 0, 0, (SCM outputter), + "Return output port for @var{outputter}.") +{ + LY_ASSERT_SMOB (Paper_outputter, outputter, 1); + Paper_outputter *po = unsmob_outputter (outputter); + + return po->file (); +} LY_DEFINE (ly_outputter_close, "ly:outputter-close", 1, 0, 0, (SCM outputter), "Close port of @var{outputter}.") { + LY_ASSERT_SMOB (Paper_outputter, outputter, 1); Paper_outputter *po = unsmob_outputter (outputter); - SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter"); po->close (); return SCM_UNSPECIFIED; } + +LY_DEFINE (ly_outputter_output_scheme, "ly:outputter-output-scheme", + 2, 0, 0, (SCM outputter, SCM expr), + "Eval @var{expr} in module of @var{outputter}.") +{ + LY_ASSERT_SMOB (Paper_outputter, outputter, 1); + Paper_outputter *po = unsmob_outputter (outputter); + + po->output_scheme (expr); + + return SCM_UNSPECIFIED; +}