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