]> git.donarmstrong.com Git - lilypond.git/blob - lily/repeat-tie-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / repeat-tie-engraver.cc
1 /*
2   repeat-engraver.cc -- implement Repeat_tie_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
7
8 */
9
10
11 #include "engraver.hh"
12 #include "item.hh"
13 #include "pointer-group-interface.hh"
14
15 #include "translator.icc"
16
17 class Repeat_tie_engraver : public Engraver
18 {
19   Music *event_;
20   Grob *semi_tie_column_;
21   vector<Grob*> semi_ties_;
22   
23   void stop_translation_timestep (); 
24   DECLARE_ACKNOWLEDGER (note_head);
25   
26   virtual bool try_music (Music *);
27 public:
28   TRANSLATOR_DECLARATIONS (Repeat_tie_engraver);
29 };
30
31 Repeat_tie_engraver::Repeat_tie_engraver ()
32 {
33   event_ = 0;
34   semi_tie_column_ = 0;
35 }
36
37 void
38 Repeat_tie_engraver::stop_translation_timestep ()
39 {
40   event_ = 0;
41   semi_tie_column_ = 0;
42   semi_ties_.clear ();
43 }
44
45 bool
46 Repeat_tie_engraver::try_music (Music *m)
47 {
48   event_ = m;
49   return true;
50 }
51
52 void
53 Repeat_tie_engraver::acknowledge_note_head (Grob_info inf)
54 {
55   if (!event_)
56     return;
57
58   if (!semi_tie_column_)
59     {
60       semi_tie_column_ = make_item ("RepeatTieColumn", event_->self_scm ());
61     }
62   
63   Grob *semi_tie = make_item ("RepeatTie", event_->self_scm ());
64   semi_tie->set_object ("note-head", inf.grob ()->self_scm ());
65   
66   Pointer_group_interface::add_grob (semi_tie_column_, ly_symbol2scm ("ties"),
67                                      semi_tie);
68   semi_tie->set_parent (semi_tie_column_, Y_AXIS);
69   semi_ties_.push_back (semi_tie);
70 }
71
72
73
74 ADD_ACKNOWLEDGER (Repeat_tie_engraver, note_head);
75 ADD_TRANSLATOR (Repeat_tie_engraver, 
76                 /* doc */ "Create Laissez vibrer items.",
77                 
78                 /* create */
79                 "RepeatTie "
80                 "RepeatTieColumn ",
81
82                 /* accept */ "repeat-tie-event",
83                 /* read */ "",
84                 /* write */ "");