]> git.donarmstrong.com Git - lilypond.git/blob - lily/slash-repeat-engraver.cc
*** empty log message ***
[lilypond.git] / lily / slash-repeat-engraver.cc
1 /*
2   slash-repeat-engraver.cc -- implement Slash_repeat_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
7 */
8
9 #include "bar-line.hh"
10 #include "global-context.hh"
11 #include "item.hh"
12 #include "misc.hh"
13 #include "percent-repeat-iterator.hh"
14 #include "repeated-music.hh"
15 #include "score-engraver.hh"
16 #include "spanner.hh"
17 #include "stream-event.hh"
18 #include "warn.hh"
19
20 #include "translator.icc"
21
22 /**
23    This acknowledges repeated music with "percent" style.  It typesets
24    a slash sign.
25 */
26 class Slash_repeat_engraver : public Engraver
27 {
28 public:
29   TRANSLATOR_DECLARATIONS (Slash_repeat_engraver);
30 protected:
31   Stream_event *slash_;
32 protected:
33   DECLARE_TRANSLATOR_LISTENER (percent);
34   void process_music ();
35 };
36
37 Slash_repeat_engraver::Slash_repeat_engraver ()
38 {
39   slash_ = 0;
40 }
41
42 IMPLEMENT_TRANSLATOR_LISTENER (Slash_repeat_engraver, percent);
43 void
44 Slash_repeat_engraver::listen_percent (Stream_event *ev)
45 {
46   /*todo: separate events for percent and slash */
47   Moment meas_length
48     = robust_scm2moment (get_property ("measureLength"), Moment (0));
49   
50   if (get_event_length (ev) < meas_length)
51     slash_ = ev;
52 }
53
54 void
55 Slash_repeat_engraver::process_music ()
56 {
57   if (slash_)
58     {
59       make_item ("RepeatSlash", slash_->self_scm ());
60       slash_ = 0;
61     }
62 }
63
64 ADD_TRANSLATOR (Slash_repeat_engraver,
65                 /* doc */ "Make beat repeats.",
66                 /* create */ "RepeatSlash",
67                 /* accept */ "percent-event",
68                 /* read */ "measureLength",
69                 /* write */ "");