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