OLD | NEW |
1 /* | 1 /* |
2 This file is part of LilyPond, the GNU music typesetter. | 2 This file is part of LilyPond, the GNU music typesetter. |
3 | 3 |
4 Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> | 4 Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl> |
5 | 5 |
6 LilyPond is free software: you can redistribute it and/or modify | 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 | 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 | 8 the Free Software Foundation, either version 3 of the License, or |
9 (at your option) any later version. | 9 (at your option) any later version. |
10 | 10 |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 for (vsize i = 0; i < slurs_.size (); i++) | 163 for (vsize i = 0; i < slurs_.size (); i++) |
164 { | 164 { |
165 slurs_[i]->warning (_ ("unterminated phrasing slur")); | 165 slurs_[i]->warning (_ ("unterminated phrasing slur")); |
166 slurs_[i]->suicide (); | 166 slurs_[i]->suicide (); |
167 } | 167 } |
168 } | 168 } |
169 | 169 |
170 void | 170 void |
171 Phrasing_slur_engraver::process_music () | 171 Phrasing_slur_engraver::process_music () |
172 { | 172 { |
| 173 bool ended = false; |
173 for (vsize i = 0; i < stop_events_.size (); i++) | 174 for (vsize i = 0; i < stop_events_.size (); i++) |
174 { | 175 { |
175 Stream_event *ev = stop_events_[i]; | 176 Stream_event *ev = stop_events_[i]; |
176 string id = robust_scm2string (ev->get_property ("spanner-id"), ""); | 177 string id = robust_scm2string (ev->get_property ("spanner-id"), ""); |
177 | 178 |
178 // Find the slur that is ended with this event (by checking the spanner-id
) | 179 // Find the slur that is ended with this event (by checking the spanner-id
) |
179 bool ended = false; | |
180 for (vsize j = slurs_.size (); j--;) | 180 for (vsize j = slurs_.size (); j--;) |
181 { | 181 { |
182 if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), "
")) | 182 if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), "
")) |
183 { | 183 { |
184 ended = true; | 184 ended = true; |
185 end_slurs_.push_back (slurs_[j]); | 185 end_slurs_.push_back (slurs_[j]); |
186 slurs_.erase (slurs_.begin () + j); | 186 slurs_.erase (slurs_.begin () + j); |
187 } | 187 } |
188 } | 188 } |
189 if (!ended) | 189 if (!ended) |
190 ev->origin ()->warning (_ ("cannot end phrasing slur")); | 190 ev->origin ()->warning (_ ("cannot end phrasing slur")); |
191 } | 191 } |
192 | 192 |
| 193 vsize n_old_slurs = slurs_.size (); |
193 for (vsize i = 0; i < start_events_.size (); i++) | 194 for (vsize i = 0; i < start_events_.size (); i++) |
194 { | 195 { |
195 Stream_event *ev = start_events_[i]; | 196 Stream_event *ev = start_events_[i]; |
196 string id = robust_scm2string (ev->get_property ("spanner-id"), ""); | 197 string id = robust_scm2string (ev->get_property ("spanner-id"), ""); |
197 bool have_slur = false; | 198 bool have_slur = false; |
198 // Check if we already have a slur with the same spanner-id. | 199 // Check if we already have a slur with the same spanner-id. |
199 // In that case, don't create a new slur, but print a warning | 200 // In that case, don't create a new slur, but print a warning |
200 for (vsize i = 0; i < slurs_.size (); i++) | 201 for (vsize i = 0; i < n_old_slurs; i++) |
201 have_slur = have_slur || (id == robust_scm2string (slurs_[i]->get_proper
ty ("spanner-id"), "")); | 202 have_slur = have_slur || (id == robust_scm2string (slurs_[i]->get_proper
ty ("spanner-id"), "")); |
202 | 203 |
203 if (have_slur) | 204 if (have_slur) |
204 ev->origin ()->warning (_ ("already have phrasing slur")); | 205 ev->origin ()->warning (_ ("already have phrasing slur")); |
205 else | 206 else |
206 { | 207 { |
207 Grob *slur = make_spanner ("PhrasingSlur", ev->self_scm ()); | 208 Grob *slur = make_spanner ("PhrasingSlur", ev->self_scm ()); |
208 Direction updown = to_dir (ev->get_property ("direction")); | 209 Direction updown = to_dir (ev->get_property ("direction")); |
209 slur->set_property ("spanner-id", ly_string2scm (id)); | 210 slur->set_property ("spanner-id", ly_string2scm (id)); |
210 if (updown) | 211 if (updown) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 | 243 |
243 /* create */ | 244 /* create */ |
244 "PhrasingSlur ", | 245 "PhrasingSlur ", |
245 | 246 |
246 /* read */ | 247 /* read */ |
247 "", | 248 "", |
248 | 249 |
249 /* write */ | 250 /* write */ |
250 "" | 251 "" |
251 ); | 252 ); |
OLD | NEW |