2 output-def-scheme.cc -- implement Output_def bindings
4 source file of the GNU LilyPond music typesetter
6 (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
10 #include "font-metric.hh"
11 #include "output-def.hh"
12 #include "ly-module.hh"
13 #include "context-def.hh"
15 LY_DEFINE (ly_layout_lookup, "ly:output-def-lookup",
16 2, 0, 0, (SCM pap, SCM sym),
17 "Lookup @var{sym} in @var{pap}. "
18 "Return the value or @code{'()} if undefined.")
20 Output_def *op = unsmob_output_def (pap);
21 SCM_ASSERT_TYPE (op, pap, SCM_ARG1, __FUNCTION__, "Output_def");
22 SCM_ASSERT_TYPE (scm_is_symbol (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
24 return op->lookup_variable (sym);
27 LY_DEFINE (ly_output_def_scope, "ly:output-def-scope",
29 "Get the variable scope inside @var{def}.")
31 Output_def *op = unsmob_output_def (def);
32 SCM_ASSERT_TYPE (op, def, SCM_ARG1, __FUNCTION__, "Output definition");
36 LY_DEFINE (ly_output_def_parent, "ly:output-def-parent",
38 "Get the parent output-def of @var{def}.")
40 Output_def *op = unsmob_output_def (def);
41 SCM_ASSERT_TYPE (op, def, SCM_ARG1, __FUNCTION__, "Output definition");
42 return op->parent_ ? op->parent_->self_scm () : SCM_EOL;
45 LY_DEFINE (ly_output_def_clone, "ly:output-def-clone",
49 Output_def *op = unsmob_output_def (def);
50 SCM_ASSERT_TYPE (op, def, SCM_ARG1, __FUNCTION__, "Output definition");
51 SCM s = op->clone ()->self_scm ();
52 scm_gc_unprotect_object (s);
56 LY_DEFINE (ly_output_description, "ly:output-description",
57 1, 0, 0, (SCM output_def),
58 "Return the description of translators in @var{output-def}.")
60 Output_def *id = unsmob_output_def (output_def);
62 SCM al = ly_module2alist (id->scope_);
65 for (SCM s = al; scm_is_pair (s); s = scm_cdr (s))
67 Context_def * td = unsmob_context_def (scm_cdar (s));
68 SCM key = scm_caar (s);
69 if (td && key == td->get_context_name ())
70 ell = scm_cons (scm_cons (key, td->to_alist ()), ell);
75 LY_DEFINE (ly_layout_def_p, "ly:layout-def?",
77 "Is @var{def} a layout definition?")
79 return ly_bool2scm (unsmob_output_def (def));
82 LY_DEFINE (ly_paper_outputscale, "ly:paper-outputscale",
84 "Get outputscale for BP.")
86 Output_def *b = unsmob_output_def (bp);
87 SCM_ASSERT_TYPE (b, bp, SCM_ARG1, __FUNCTION__, "paper");
88 return scm_make_real (output_scale (b));
91 LY_DEFINE (ly_make_output_def, "ly:make-output-def",
95 Output_def *bp = new Output_def ;
96 return scm_gc_unprotect_object (bp->self_scm ());
99 LY_DEFINE (ly_paper_get_font, "ly:paper-get-font", 2, 0, 0,
100 (SCM paper_smob, SCM chain),
102 "Return a font metric satisfying the font-qualifiers "
103 "in the alist chain @var{chain}.\n"
104 "(An alist chain is a list of alists, "
105 "containing grob properties).\n")
107 Output_def *paper = unsmob_output_def (paper_smob);
108 SCM_ASSERT_TYPE (paper, paper_smob, SCM_ARG1,
109 __FUNCTION__, "paper definition");
111 Font_metric *fm = select_font (paper, chain);
112 return fm->self_scm ();
115 LY_DEFINE (ly_paper_get_number, "ly:paper-get-number", 2, 0, 0,
116 (SCM layout_smob, SCM name),
117 "Return the layout variable @var{name}.")
119 Output_def *layout = unsmob_output_def (layout_smob);
120 SCM_ASSERT_TYPE (layout, layout_smob, SCM_ARG1,
121 __FUNCTION__, "layout definition");
122 return scm_make_real (layout->get_dimension (name));