]> git.donarmstrong.com Git - lilypond.git/blob - lily/beam-setting-scheme.cc
Update source file headers. Fixes using standard GNU package conventions.
[lilypond.git] / lily / beam-setting-scheme.cc
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 2009 Carl Sorensen <c_sorensen@byu.edu>
5
6   LilyPond is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   LilyPond is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "beam-settings.hh"
21 #include "context.hh"
22 #include "guile-compatibility.hh"
23
24 LY_DEFINE (ly_grouping_rules, "ly:grouping-rules",
25            3, 0, 0, (SCM settings, SCM time_signature, SCM rule_type),
26            "Return grouping rules for @var{time-signature} and"
27            " @var{rule-type} from @var{settings}.")
28 {
29   LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1);
30   LY_ASSERT_TYPE (scm_is_pair, time_signature, 2);
31   LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3);
32
33   SCM grouping_rules = SCM_EOL;
34   if (scm_is_pair (settings))
35     grouping_rules =
36         ly_assoc_get (scm_list_2 (time_signature, rule_type),
37                       settings,
38                       SCM_EOL);
39   return grouping_rules;
40 }
41
42 LY_DEFINE (ly_beam_grouping, "ly:beam-grouping",
43            4, 0, 0, (SCM settings, SCM time_signature, SCM rule_type,
44                      SCM beam_type),
45            "Return grouping for beams of @var{beam-type} in"
46            " @var{time-signature} for"
47            " @var{rule-type} from @var{settings}.")
48 {
49   LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1);
50   LY_ASSERT_TYPE (scm_is_pair, time_signature, 2);
51   LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3);
52   SCM_ASSERT_TYPE (scm_is_symbol(beam_type) || scm_is_pair(beam_type),
53                    beam_type, SCM_ARG4, __FUNCTION__, "symbol or pair");
54   SCM beam_grouping =
55         ly_assoc_get (beam_type,
56                       ly_grouping_rules (settings,time_signature,rule_type),
57                       SCM_EOL);
58   return beam_grouping;
59 }
60
61 LY_DEFINE (ly_beat_grouping, "ly:beat-grouping",
62            1, 0, 0, (SCM context),
63            "Return default beat grouping currently active in @var{context}.")
64 {
65   LY_ASSERT_SMOB (Context, context, 1);
66   Context *c = unsmob_context (context);
67   SCM time_signature =
68         c->get_property ("timeSignatureFraction");
69   SCM settings =
70         c->get_property("beamSettings");
71   SCM beat_grouping =
72         ly_beam_grouping (settings,
73                           time_signature,
74                           ly_symbol2scm ("end"),
75                           ly_symbol2scm ("*"));
76   return beat_grouping;
77 }
78