]> git.donarmstrong.com Git - lilypond.git/blob - lily/spanner-scheme.cc
move Spanner bindings to separate file.
[lilypond.git] / lily / spanner-scheme.cc
1 /* 
2   spanner-scheme.cc -- implement Spanner bindings.
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2007 Han-Wen Nienhuys <hanwen@lilypond.org>
7   
8 */
9
10 #include "spanner.hh"
11 #include "item.hh"
12
13 LY_DEFINE (ly_spanner_get_bound, "ly:spanner-bound",
14            2, 0, 0, (SCM slur, SCM dir),
15            "Get one of the bounds of @var{spanner}. @var{dir} is @code{-1} "
16            "for left, and @code{1} for right.")
17 {
18   Spanner *sl = dynamic_cast<Spanner *> (unsmob_grob (slur));
19   SCM_ASSERT_TYPE (sl, slur, SCM_ARG1, __FUNCTION__, "spanner grob");
20   SCM_ASSERT_TYPE (is_direction (dir), slur, SCM_ARG2, __FUNCTION__, "dir");
21   return sl->get_bound (to_dir (dir))->self_scm ();
22 }
23
24 /* TODO: maybe we should return a vector -- random access is more
25    logical for this list? */
26 LY_DEFINE (ly_spanner_broken_into, "ly:spanner-broken-into",
27            1, 0, 0, (SCM spanner),
28            "Return broken-into list for @var{spanner}.")
29 {
30   Spanner *me = dynamic_cast<Spanner *> (unsmob_grob (spanner));
31   SCM_ASSERT_TYPE (me, spanner, SCM_ARG1, __FUNCTION__, "spanner");
32
33   SCM s = SCM_EOL;
34   for (vsize i = me->broken_intos_.size (); i--;)
35     s = scm_cons (me->broken_intos_[i]->self_scm (), s);
36   return s;
37 }
38
39 LY_DEFINE (ly_spanner_p, "ly:spanner?",
40            1, 0, 0, (SCM g),
41            "Is  @var{g} a spanner object?")
42 {
43   Grob *me = unsmob_grob (g);
44   bool b = dynamic_cast<Spanner *> (me);
45
46   return ly_bool2scm (b);
47 }