]> git.donarmstrong.com Git - lilypond.git/blob - lily/dot-column-engraver.cc
update for the lily-wins.py script.
[lilypond.git] / lily / dot-column-engraver.cc
1 /*   
2   dot-column-engraver.cc -- implement Dot_column_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10
11 #include "rhythmic-head.hh"
12 #include "dot-column.hh"
13 #include "side-position-interface.hh"
14 #include "engraver.hh"
15 #include "stem.hh"
16
17 class Dot_column_engraver : public Engraver
18 {
19   Grob *dotcol_ ;
20   Grob * stem_;
21   Link_array<Item> heads_;
22 public:
23   TRANSLATOR_DECLARATIONS (Dot_column_engraver );
24   
25 protected:
26   virtual void acknowledge_grob (Grob_info);
27   virtual void stop_translation_timestep ();  
28 };
29
30
31 Dot_column_engraver::Dot_column_engraver ()
32 {
33   dotcol_ =0;
34   stem_ = 0;
35 }
36
37 void
38 Dot_column_engraver::stop_translation_timestep ()
39 {
40   if (dotcol_)
41     {
42
43       /*
44         Add the stem to the support so dots stay clear of flags.
45
46         See [Ross, p 171]
47        */
48       if (stem_)
49         dotcol_->set_property ("stem", stem_->self_scm ());
50       
51       typeset_grob (dotcol_);
52       dotcol_ =0;
53     }
54   heads_.clear ();
55   stem_ =0;
56 }
57
58 void
59 Dot_column_engraver::acknowledge_grob (Grob_info info)
60 {
61   Grob *d = unsmob_grob (info.grob_->get_property ("dot"));
62   if (d)
63     {
64       if (!dotcol_)
65         {
66           dotcol_ = make_item ("DotColumn", SCM_EOL);
67           
68         }
69
70       Dot_column::add_head (dotcol_, info.grob_);
71     }
72   else if (Stem::has_interface (info.grob_))
73     {
74       stem_ = info.grob_;
75     }
76 }
77
78
79
80
81 ENTER_DESCRIPTION (Dot_column_engraver,
82 /* descr */       " Engraves dots on dotted notes shifted to the right of the note.\n"
83 "If omitted, then dots appear on top of the notes.",
84 /* creats*/       "DotColumn",
85 /* accepts */     "",
86 /* acks  */      "rhythmic-head-interface dot-column-interface stem-interface",
87 /* reads */       "",
88 /* write */       "");