]> git.donarmstrong.com Git - lilypond.git/blob - lily/hara-kiri-engraver.cc
* flower/file-path.cc (find): don't throw away file_name.dir, but
[lilypond.git] / lily / hara-kiri-engraver.cc
1 /*
2   hara-kiri-engraver.cc --  implement Hara_kiri_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005 Han-Wen Nienhuys <hanwen@xs4all.nl>
7
8 */
9
10 #include "axis-group-engraver.hh"
11 #include "hara-kiri-group-spanner.hh"
12 #include "rhythmic-head.hh"
13 #include "spanner.hh"
14
15 class Hara_kiri_engraver : public Axis_group_engraver
16 {
17 protected:
18   virtual Spanner *get_spanner ();
19   virtual void acknowledge_grob (Grob_info);
20   virtual void add_element (Grob *e);
21   virtual void start_translation_timestep ();
22
23   SCM interesting_;
24 public:
25   TRANSLATOR_DECLARATIONS (Hara_kiri_engraver);
26 };
27
28 void
29 Hara_kiri_engraver::start_translation_timestep ()
30 {
31   Axis_group_engraver::start_translation_timestep ();
32   interesting_ = get_property ("keepAliveInterfaces");
33 }
34
35
36 void
37 Hara_kiri_engraver::add_element (Grob *e)
38 {
39   Hara_kiri_group_spanner::add_element (staffline_, e);
40 }
41
42 Spanner *
43 Hara_kiri_engraver::get_spanner ()
44 {
45   Spanner *sp = make_spanner ("RemoveEmptyVerticalGroup", SCM_EOL);
46
47   return sp;
48 }
49
50 void
51 Hara_kiri_engraver::acknowledge_grob (Grob_info i)
52 {
53   Axis_group_engraver::acknowledge_grob (i);
54   if (staffline_)
55     {
56       for (SCM s = interesting_; scm_is_pair (s); s = scm_cdr (s))
57         {
58           if (i.grob ()->internal_has_interface (scm_car (s)))
59             Hara_kiri_group_spanner::add_interesting_item (staffline_, i.grob ());
60         }
61     }
62 }
63
64 Hara_kiri_engraver::Hara_kiri_engraver ()
65 {
66   interesting_ = SCM_EOL;
67 }
68
69 ADD_TRANSLATOR (Hara_kiri_engraver,
70                 /* descr */ "Like Axis_group_engraver, but make a hara-kiri spanner, and add "
71                 "interesting items (ie. note heads, lyric syllables and normal rests) ",
72                 /* creats*/ "RemoveEmptyVerticalGroup",
73                 /* accepts */ "",
74                 /* acks  */ "grob-interface",
75                 /* reads */ "keepAliveInterfaces",
76                 /* write */ "");
77