2 request.cc -- implement all musical requests.
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "musical-request.hh"
12 #include "music-list.hh"
15 Tremolo_req::Tremolo_req ()
19 LY_DEFINE(music_duration_length, "music-duration-length", 1, 0,0,
21 "Extract the duration field from @var{mus}, and return the length.")
23 Music* m = unsmob_music(mus);
24 SCM_ASSERT_TYPE(m, mus, SCM_ARG1, __FUNCTION__, "Music");
26 Duration *d = unsmob_duration (m->get_mus_property ("duration"));
35 programming_error("Rhythmic_req has no duration");
36 return l.smobbed_copy();
41 LY_DEFINE(music_duration_compress, "music-duration-compress", 2, 0,0,
42 (SCM mus, SCM factor),
43 "Extract the duration field from @var{mus}, and compress it.")
45 Music* m = unsmob_music(mus);
46 Moment * f = unsmob_moment (factor);
47 SCM_ASSERT_TYPE(m, mus, SCM_ARG1, __FUNCTION__, "Music");
48 SCM_ASSERT_TYPE(f, factor, SCM_ARG2, __FUNCTION__, "Moment");
50 Duration *d = unsmob_duration (m->get_mus_property ("duration"));
52 m->set_mus_property ("duration", d->compressed (f->main_part_).smobbed_copy());
53 return SCM_UNSPECIFIED;
58 Rhythmic_req::length_mom () const
60 Duration *d = unsmob_duration (get_mus_property ("duration"));
64 programming_error("Rhythmic_req has no duration");
67 return d->length_mom ();
71 Rhythmic_req::compress (Moment m)
73 Duration *d = unsmob_duration (get_mus_property ("duration"));
75 set_mus_property ("duration", d ->compressed (m.main_part_).smobbed_copy ());
81 Span_req::do_equal_b (Request const*r) const
83 Span_req const* s = dynamic_cast <Span_req const*> (r);
84 return s && get_span_dir () == s->get_span_dir ();
93 Text_script_req::do_equal_b (Request const* r) const
95 Text_script_req const* t = dynamic_cast<Text_script_req const*> (r);
96 return t && gh_equal_p (get_mus_property ("text"),
97 t->get_mus_property ("text"));
101 Articulation_req::do_equal_b (Request const* r) const
103 Articulation_req const* a = dynamic_cast<Articulation_req const*> (r);
105 return a && gh_equal_p (get_mus_property ("articulation-type"),
106 r->get_mus_property ("articulation-type"))
107 && get_direction () == a->get_direction ();