]> git.donarmstrong.com Git - lilypond.git/blob - lily/slash-repeat-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[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 "repeated-music.hh"
10 #include "global-context.hh"
11 #include "warn.hh"
12 #include "misc.hh"
13 #include "spanner.hh"
14 #include "item.hh"
15 #include "percent-repeat-iterator.hh"
16 #include "bar-line.hh"
17 #include "score-engraver.hh"
18
19 /**
20    This acknowledges repeated music with "percent" style.  It typesets
21    a slash sign.
22 */
23 class Slash_repeat_engraver : public Engraver
24 {
25 public:
26   TRANSLATOR_DECLARATIONS (Slash_repeat_engraver);
27 protected:
28   Music *slash_;
29 protected:
30   virtual bool try_music (Music *);
31   void process_music ();
32 };
33
34 Slash_repeat_engraver::Slash_repeat_engraver ()
35 {
36   slash_ = 0;
37 }
38
39 bool
40 Slash_repeat_engraver::try_music (Music *m)
41 {
42   /*todo: separate events for percent and slash */
43   if (m->is_mus_type ("percent-event"))
44     {
45       Moment meas_length
46         = robust_scm2moment (get_property ("measureLength"), Moment (0));
47
48       if (m->get_length () < meas_length)
49         slash_ = m;
50       else
51         return false;
52
53       return true;
54     }
55
56   return false;
57 }
58
59 void
60 Slash_repeat_engraver::process_music ()
61 {
62   if (slash_)
63     {
64       make_item ("RepeatSlash", slash_->self_scm ());
65       slash_ = 0;
66     }
67 }
68
69 #include "translator.icc"
70
71 ADD_TRANSLATOR (Slash_repeat_engraver,
72                 /* doc */ "Make beat repeats.",
73                 /* create */ "RepeatSlash",
74                 /* accept */ "percent-event",
75                 /* read */ "measureLength",
76                 /* write */ "");