]> git.donarmstrong.com Git - lilypond.git/blob - lily/lyric-performer.cc
Issue 4550 (1/2) Avoid "using namespace std;" in included files
[lilypond.git] / lily / lyric-performer.cc
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 1997--2015 Jan Nieuwenhuizen <janneke@gnu.org>
5
6   LilyPond is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   LilyPond is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "audio-item.hh"
21 #include "performer.hh"
22 #include "stream-event.hh"
23 #include "translator.icc"
24
25 using std::vector;
26
27 class Lyric_performer : public Performer
28 {
29 public:
30   TRANSLATOR_DECLARATIONS (Lyric_performer);
31 protected:
32
33   void stop_translation_timestep ();
34   void process_music ();
35   DECLARE_TRANSLATOR_LISTENER (lyric);
36 private:
37   vector<Stream_event *> events_;
38   Audio_text *audio_;
39 };
40
41 Lyric_performer::Lyric_performer ()
42 {
43   audio_ = 0;
44 }
45
46 void
47 Lyric_performer::process_music ()
48 {
49   // FIXME: won't work with fancy lyrics
50   if (events_.size ()
51       && scm_is_string (events_[0]->get_property ("text"))
52       && ly_scm2string (events_[0]->get_property ("text")).length ())
53     {
54       audio_ = new Audio_text (Audio_text::LYRIC,
55                                ly_scm2string (events_[0]->get_property ("text")));
56       Audio_element_info info (audio_, events_[0]);
57       announce_element (info);
58     }
59   events_.clear ();
60 }
61
62 void
63 Lyric_performer::stop_translation_timestep ()
64 {
65   if (audio_)
66     {
67       audio_ = 0;
68     }
69   events_.clear ();
70 }
71
72 IMPLEMENT_TRANSLATOR_LISTENER (Lyric_performer, lyric);
73 void
74 Lyric_performer::listen_lyric (Stream_event *event)
75 {
76   events_.push_back (event);
77 }
78
79 ADD_TRANSLATOR (Lyric_performer,
80                 /* doc */
81                 "",
82
83                 /* create */
84                 "",
85
86                 /* read */
87                 "",
88
89                 /* write */
90                 ""
91                );