]> git.donarmstrong.com Git - lilypond.git/blob - lily/hara-kiri-engraver.cc
(parse_symbol_list): Bugfix.
[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 #include "axis-group-engraver.hh"
10 #include "hara-kiri-group-spanner.hh"
11 #include "rhythmic-head.hh"
12 #include "spanner.hh"
13
14 #include "translator.icc"
15
16 class Hara_kiri_engraver : public Axis_group_engraver
17 {
18 protected:
19   virtual Spanner *get_spanner ();
20   DECLARE_ACKNOWLEDGER (grob);
21   virtual void add_element (Grob *e);
22   void start_translation_timestep ();
23   virtual void derived_mark () const;
24   SCM interesting_;
25 public:
26   TRANSLATOR_DECLARATIONS (Hara_kiri_engraver);
27 };
28
29 void
30 Hara_kiri_engraver::derived_mark () const
31 {
32   scm_gc_mark (interesting_);
33 }
34
35 void
36 Hara_kiri_engraver::start_translation_timestep ()
37 {
38   Axis_group_engraver::start_translation_timestep ();
39   interesting_ = get_property ("keepAliveInterfaces");
40 }
41
42 void
43 Hara_kiri_engraver::add_element (Grob *e)
44 {
45   Hara_kiri_group_spanner::add_element (staffline_, e);
46 }
47
48 Spanner *
49 Hara_kiri_engraver::get_spanner ()
50 {
51   Spanner *sp = make_spanner ("RemoveEmptyVerticalGroup", SCM_EOL);
52
53   return sp;
54 }
55
56 void
57 Hara_kiri_engraver::acknowledge_grob (Grob_info i)
58 {
59   Axis_group_engraver::acknowledge_grob (i);
60   if (staffline_)
61     {
62       for (SCM s = interesting_; scm_is_pair (s); s = scm_cdr (s))
63         {
64           if (i.grob ()->internal_has_interface (scm_car (s)))
65             Hara_kiri_group_spanner::add_interesting_item (staffline_, i.grob ());
66         }
67     }
68 }
69
70 Hara_kiri_engraver::Hara_kiri_engraver ()
71 {
72   interesting_ = SCM_EOL;
73 }
74
75 ADD_ACKNOWLEDGER (Hara_kiri_engraver, grob);
76 ADD_TRANSLATOR (Hara_kiri_engraver,
77                 /* doc */ "Like Axis_group_engraver, but make a hara-kiri spanner, and add "
78                 "interesting items (ie. note heads, lyric syllables and normal rests) ",
79                 /* create */ "RemoveEmptyVerticalGroup",
80                 /* accept */ "",
81                 /* read */ "keepAliveInterfaces",
82                 /* write */ "");
83