]> git.donarmstrong.com Git - lilypond.git/blob - lily/paper-outputter-scheme.cc
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
[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--2007 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   LY_ASSERT_TYPE (ly_is_port, port, 1);
21   LY_ASSERT_TYPE (scm_is_string, format, 2);
22
23   string f = ly_scm2string (format);
24
25   string output_name = "<unknown>";
26
27   SCM port_name = scm_port_filename (port);
28   if (scm_is_string (port_name))
29     output_name = ly_scm2string (port_name);
30
31   message (_f ("Layout output to `%s'...",
32                output_name.c_str ()));
33
34   progress_indication ("\n");
35   Paper_outputter *po = new Paper_outputter (port, f);
36
37   po->unprotect ();
38   return po->self_scm ();
39 }
40
41 /* FIXME: why is output_* wrapper called dump?  */
42 LY_DEFINE (ly_outputter_dump_stencil, "ly:outputter-dump-stencil",
43            2, 0, 0, (SCM outputter, SCM stencil),
44            "Dump stencil @var{expr} onto @var{outputter}.")
45 {
46   
47   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
48   LY_ASSERT_SMOB (Stencil, stencil, 2);
49
50   Paper_outputter *po = unsmob_outputter (outputter);
51   Stencil *st = unsmob_stencil (stencil);
52
53   po->output_stencil (*st);
54   return SCM_UNSPECIFIED;
55 }
56
57 LY_DEFINE (ly_outputter_dump_string, "ly:outputter-dump-string",
58            2, 0, 0, (SCM outputter, SCM str),
59            "Dump @var{str} onto @var{outputter}.")
60 {
61   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
62   LY_ASSERT_TYPE (scm_is_string, str, 2);
63
64   Paper_outputter *po = unsmob_outputter (outputter);
65
66   return po->dump_string (str);
67 }
68
69 LY_DEFINE (ly_outputter_port, "ly:outputter-port",
70            1, 0, 0, (SCM outputter),
71            "Return output port for @var{outputter}.")
72 {
73   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
74   Paper_outputter *po = unsmob_outputter (outputter);
75
76   return po->file ();
77 }
78
79 LY_DEFINE (ly_outputter_close, "ly:outputter-close",
80            1, 0, 0, (SCM outputter),
81            "Close port of @var{outputter}.")
82 {
83   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
84   Paper_outputter *po = unsmob_outputter (outputter);
85
86   po->close ();
87   return SCM_UNSPECIFIED;
88 }
89
90 LY_DEFINE (ly_outputter_output_scheme, "ly:outputter-output-scheme",
91            2, 0, 0, (SCM outputter, SCM expr),
92            "Eval @var{expr} in module of @var{outputter}.")
93 {
94   LY_ASSERT_SMOB (Paper_outputter, outputter, 1);
95   Paper_outputter *po = unsmob_outputter (outputter);
96
97   po->output_scheme (expr);
98
99   return SCM_UNSPECIFIED;
100 }