]> git.donarmstrong.com Git - lilypond.git/blob - lily/paper-outputter-scheme.cc
4fa9cd285391fe64f98fdff1b99a99c0b6b1d8a5
[lilypond.git] / lily / paper-outputter-scheme.cc
1 /*
2   paper-outputter-scheme.cc -- implement Paper_outputter bindings
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9 #include "paper-outputter.hh"
10 #include "warn.hh"
11 #include "stencil.hh"
12
13 LY_DEFINE (ly_make_paper_outputter, "ly:make-paper-outputter",
14            2, 0, 0, (SCM outname, SCM format),
15            "Create an outputter that evaluates within "
16            "@code{output-}@var{format}, writing to file @var{outname}.")
17 {
18   SCM_ASSERT_TYPE (scm_is_string (outname), outname, SCM_ARG1, __FUNCTION__,
19                    "String");
20   SCM_ASSERT_TYPE (scm_is_string (format), format, SCM_ARG2, __FUNCTION__,
21                    "String");
22
23   String outname_str = ly_scm2string (outname);
24   String f = ly_scm2string (format);
25
26   progress_indication (_f ("Layout output to `%s'...",
27                            outname_str == "-"
28                            ? String ("<stdout>")
29                            : outname_str));
30   progress_indication ("\n");
31   Paper_outputter *po = new Paper_outputter (outname_str, f);
32
33   scm_gc_unprotect_object (po->self_scm ());
34   return po->self_scm ();
35 }
36
37 /* FIXME: why is output_* wrapper called dump?  */
38 LY_DEFINE (ly_outputter_dump_stencil, "ly:outputter-dump-stencil",
39            2, 0, 0, (SCM outputter, SCM stencil),
40            "Dump stencil @var{expr} onto @var{outputter}.")
41 {
42   Paper_outputter *po = unsmob_outputter (outputter);
43   Stencil *st = unsmob_stencil (stencil);
44   SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter");
45   SCM_ASSERT_TYPE (st, stencil, SCM_ARG1, __FUNCTION__, "Paper_outputter");
46   po->output_stencil (*st);
47   return SCM_UNSPECIFIED;
48 }
49
50 LY_DEFINE (ly_outputter_dump_string, "ly:outputter-dump-string",
51            2, 0, 0, (SCM outputter, SCM str),
52            "Dump @var{str} onto @var{outputter}.")
53 {
54   Paper_outputter *po = unsmob_outputter (outputter);
55   SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter");
56   SCM_ASSERT_TYPE (scm_is_string (str), str, SCM_ARG1, __FUNCTION__, "Paper_outputter");
57
58   return po->dump_string (str);
59 }
60
61 LY_DEFINE (ly_outputter_port, "ly:outputter-port",
62            1, 0, 0, (SCM outputter),
63            "Return output port for @var{outputter}.")
64 {
65   Paper_outputter *po = unsmob_outputter (outputter);
66   SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter");
67
68   return po->file ();
69 }
70
71 LY_DEFINE (ly_outputter_close, "ly:outputter-close",
72            1, 0, 0, (SCM outputter),
73            "Close port of @var{outputter}.")
74 {
75   Paper_outputter *po = unsmob_outputter (outputter);
76   SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter");
77
78   po->close ();
79   return SCM_UNSPECIFIED;
80 }
81
82 LY_DEFINE (ly_outputter_output_scheme, "ly:outputter-output-scheme",
83            2, 0, 0, (SCM outputter, SCM expr),
84            "Eval @var{expr} in module of @var{outputter}.")
85 {
86   Paper_outputter *po = unsmob_outputter (outputter);
87   SCM_ASSERT_TYPE (po, outputter, SCM_ARG1, __FUNCTION__, "Paper_outputter");
88
89   po->output_scheme (expr);
90
91   return SCM_UNSPECIFIED;
92 }