]> git.donarmstrong.com Git - lilypond.git/blob - lily/thread-devnull-engraver.cc
4225b22399fa2138d0363038f25fa7b4416b3792
[lilypond.git] / lily / thread-devnull-engraver.cc
1 /*
2   thread-devnull-engraver.cc -- implement Thread_devnull_engraver
3
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2000--2002 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
8
9 #include "engraver.hh"
10 #include "item.hh"
11 #include "event.hh"
12 #include "translator-group.hh"
13
14 class Thread_devnull_engraver : public Engraver
15 {
16 public:
17   TRANSLATOR_DECLARATIONS(Thread_devnull_engraver);
18   
19 protected:
20   virtual void acknowledge_grob (Grob_info);
21 };
22
23
24
25 void
26 Thread_devnull_engraver::acknowledge_grob (Grob_info i)
27 {
28   SCM s = get_property ("devNullThread");
29
30 #if 0
31   /* No need, next if will never be true */
32   if (s == ly_symbol2scm ("never"))
33     return;
34 #endif
35
36   if (s == ly_symbol2scm ("always")
37       || (s == SCM_EOL
38           && to_boolean (get_property ("soloADue"))
39           && ((daddy_trans_->id_string_.left_string (3) == "two"
40                && (to_boolean (get_property ("unison"))
41                    || to_boolean (get_property ("unisilence"))))
42
43               /* Maybe this should be optional? */
44               || to_boolean (get_property ("othersolo")))))
45     {
46       i.grob_->suicide ();
47     }
48 }
49 Thread_devnull_engraver::Thread_devnull_engraver(){}
50
51 ENTER_DESCRIPTION(Thread_devnull_engraver,
52 /* descr */       "Kill elements whenever we are Voice called `two' and either
53 unison, unisilence or soloADue is set.@footnote{On unix systems, the
54 file @file{/dev/null} is special device: anything written to it is
55 discarded.}. This engraver works closely together with the part
56 combiner.  When the part combiner notices that two threads are
57 identical, it tells the @code{Thread_devnull_engraver} to discard
58 everything in the second thread.
59 ",
60 /* creats*/       "",
61 /* accepts */     "",
62 /* acks  */      "grob-interface",
63 /* reads */       "",
64 /* write */       "");