LEFT | RIGHT |
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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 void set_melisma (bool); | 64 void set_melisma (bool); |
65 | 65 |
66 protected: | 66 protected: |
67 DECLARE_TRANSLATOR_LISTENER (slur); | 67 DECLARE_TRANSLATOR_LISTENER (slur); |
68 DECLARE_ACKNOWLEDGER (inline_accidental); | 68 DECLARE_ACKNOWLEDGER (inline_accidental); |
69 DECLARE_ACKNOWLEDGER (fingering); | 69 DECLARE_ACKNOWLEDGER (fingering); |
70 DECLARE_ACKNOWLEDGER (note_column); | 70 DECLARE_ACKNOWLEDGER (note_column); |
71 DECLARE_ACKNOWLEDGER (script); | 71 DECLARE_ACKNOWLEDGER (script); |
72 DECLARE_ACKNOWLEDGER (dots); | 72 DECLARE_ACKNOWLEDGER (dots); |
73 DECLARE_ACKNOWLEDGER (text_script); | 73 DECLARE_ACKNOWLEDGER (text_script); |
74 DECLARE_ACKNOWLEDGER (tie); | 74 DECLARE_END_ACKNOWLEDGER (tie); |
75 DECLARE_ACKNOWLEDGER (tuplet_number); | 75 DECLARE_ACKNOWLEDGER (tuplet_number); |
76 | 76 |
77 void acknowledge_extra_object (Grob_info); | 77 void acknowledge_extra_object (Grob_info); |
78 void stop_translation_timestep (); | 78 void stop_translation_timestep (); |
79 void process_music (); | 79 void process_music (); |
80 | 80 |
81 virtual void finalize (); | 81 virtual void finalize (); |
82 virtual void derived_mark () const; | 82 virtual void derived_mark () const; |
83 | 83 |
84 public: | 84 public: |
(...skipping 28 matching lines...) Expand all Loading... |
113 | 113 |
114 void | 114 void |
115 Slur_engraver::set_melisma (bool m) | 115 Slur_engraver::set_melisma (bool m) |
116 { | 116 { |
117 context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F); | 117 context ()->set_property ("slurMelismaBusy", m ? SCM_BOOL_T : SCM_BOOL_F); |
118 } | 118 } |
119 | 119 |
120 void | 120 void |
121 Slur_engraver::acknowledge_note_column (Grob_info info) | 121 Slur_engraver::acknowledge_note_column (Grob_info info) |
122 { | 122 { |
| 123 /* |
| 124 * For every active slur, we create a slur stub. |
| 125 * As we do not yet know what vertical axis groups note columns belong to, |
| 126 * we create a stub for each note and then suicide duplicate stubs on |
| 127 * axis groups. |
| 128 * These slurs should be used ONLY to approximate cross-staff slurs |
| 129 * in vertical skylines. |
| 130 */ |
| 131 ·· |
123 Grob *e = info.grob (); | 132 Grob *e = info.grob (); |
124 for (vsize i = slur_infos_.size (); i--;) | 133 for (vsize i = slur_infos_.size (); i--;) |
125 { | 134 { |
126 Slur::add_column (slur_infos_[i].slur_, e); | 135 Slur::add_column (slur_infos_[i].slur_, e); |
127 Grob *stub = make_spanner ("SlurStub", info.grob ()->self_scm ()); | 136 Grob *stub = make_spanner ("SlurStub", slur_infos_[i].slur_->self_scm ()); |
128 slur_infos_[i].stubs_.push_back (stub); | 137 slur_infos_[i].stubs_.push_back (stub); |
129 } | 138 } |
130 for (vsize i = end_slur_infos_.size (); i--;) | 139 for (vsize i = end_slur_infos_.size (); i--;) |
131 { | 140 { |
132 Slur::add_column (end_slur_infos_[i].slur_, e); | 141 Slur::add_column (end_slur_infos_[i].slur_, e); |
133 Grob *stub = make_spanner ("SlurStub", info.grob ()->self_scm ()); | 142 Grob *stub = make_spanner ("SlurStub", slur_infos_[i].slur_->self_scm ()); |
134 end_slur_infos_[i].stubs_.push_back (stub); | 143 end_slur_infos_[i].stubs_.push_back (stub); |
135 } | 144 } |
136 } | 145 } |
137 | 146 |
138 void | 147 void |
139 Slur_engraver::acknowledge_extra_object (Grob_info info) | 148 Slur_engraver::acknowledge_extra_object (Grob_info info) |
140 { | 149 { |
141 objects_to_acknowledge_.push_back (info); | 150 objects_to_acknowledge_.push_back (info); |
142 } | 151 } |
143 | 152 |
(...skipping 28 matching lines...) Expand all Loading... |
172 acknowledge_extra_object (info); | 181 acknowledge_extra_object (info); |
173 } | 182 } |
174 | 183 |
175 void | 184 void |
176 Slur_engraver::acknowledge_text_script (Grob_info info) | 185 Slur_engraver::acknowledge_text_script (Grob_info info) |
177 { | 186 { |
178 acknowledge_extra_object (info); | 187 acknowledge_extra_object (info); |
179 } | 188 } |
180 | 189 |
181 void | 190 void |
182 Slur_engraver::acknowledge_tie (Grob_info info) | 191 Slur_engraver::acknowledge_end_tie (Grob_info info) |
183 { | 192 { |
184 acknowledge_extra_object (info); | 193 acknowledge_extra_object (info); |
185 } | 194 } |
186 | 195 |
187 void | 196 void |
188 Slur_engraver::finalize () | 197 Slur_engraver::finalize () |
189 { | 198 { |
190 for (vsize i = 0; i < slur_infos_.size (); i++) | 199 for (vsize i = 0; i < slur_infos_.size (); i++) |
191 { | 200 { |
192 slur_infos_[i].slur_->warning (_ ("unterminated slur")); | 201 slur_infos_[i].slur_->warning (_ ("unterminated slur")); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 if (!s->get_bound (RIGHT)) | 337 if (!s->get_bound (RIGHT)) |
329 s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn"))
); | 338 s->set_bound (RIGHT, unsmob_grob (get_property ("currentMusicalColumn"))
); |
330 announce_end_grob (s, SCM_EOL); | 339 announce_end_grob (s, SCM_EOL); |
331 } | 340 } |
332 | 341 |
333 for (vsize i = 0; i < objects_to_acknowledge_.size (); i++) | 342 for (vsize i = 0; i < objects_to_acknowledge_.size (); i++) |
334 Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slur_i
nfos_, end_slur_infos_); | 343 Slur::auxiliary_acknowledge_extra_object (objects_to_acknowledge_[i], slur_i
nfos_, end_slur_infos_); |
335 | 344 |
336 for (vsize i = 0; i < end_slur_infos_.size (); i++) | 345 for (vsize i = 0; i < end_slur_infos_.size (); i++) |
337 { | 346 { |
338 // There are likely SlurStubs we don't need. Get rid of them. | 347 // There are likely SlurStubs we don't need. Get rid of them |
| 348 // and only keep one per VerticalAxisGroup. |
339 vector<Grob *> vags; | 349 vector<Grob *> vags; |
340 vector<Grob *> stubs; | 350 vector<Grob *> stubs; |
341 for (vsize j = 0; j < end_slur_infos_[i].stubs_.size (); j++) | 351 for (vsize j = 0; j < end_slur_infos_[i].stubs_.size (); j++) |
342 { | 352 { |
343 Grob *stub = end_slur_infos_[i].stubs_[j]; | 353 Grob *stub = end_slur_infos_[i].stubs_[j]; |
344 Grob *vag = Grob::get_vertical_axis_group (stub); | 354 Grob *vag = Grob::get_vertical_axis_group (stub); |
345 if (vag) | 355 if (vag) |
346 { | 356 { |
347 vector<Grob *>::const_iterator it = | 357 vector<Grob *>::const_iterator it = |
348 find (vags.begin (), vags.end (), vag); | 358 find (vags.begin (), vags.end (), vag); |
(...skipping 20 matching lines...) Expand all Loading... |
369 start_events_.clear (); | 379 start_events_.clear (); |
370 stop_events_.clear (); | 380 stop_events_.clear (); |
371 } | 381 } |
372 | 382 |
373 ADD_ACKNOWLEDGER (Slur_engraver, inline_accidental); | 383 ADD_ACKNOWLEDGER (Slur_engraver, inline_accidental); |
374 ADD_ACKNOWLEDGER (Slur_engraver, fingering); | 384 ADD_ACKNOWLEDGER (Slur_engraver, fingering); |
375 ADD_ACKNOWLEDGER (Slur_engraver, note_column); | 385 ADD_ACKNOWLEDGER (Slur_engraver, note_column); |
376 ADD_ACKNOWLEDGER (Slur_engraver, script); | 386 ADD_ACKNOWLEDGER (Slur_engraver, script); |
377 ADD_ACKNOWLEDGER (Slur_engraver, text_script); | 387 ADD_ACKNOWLEDGER (Slur_engraver, text_script); |
378 ADD_ACKNOWLEDGER (Slur_engraver, dots); | 388 ADD_ACKNOWLEDGER (Slur_engraver, dots); |
379 ADD_ACKNOWLEDGER (Slur_engraver, tie); | 389 ADD_END_ACKNOWLEDGER (Slur_engraver, tie); |
380 ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number); | 390 ADD_ACKNOWLEDGER (Slur_engraver, tuplet_number); |
381 ADD_TRANSLATOR (Slur_engraver, | 391 ADD_TRANSLATOR (Slur_engraver, |
382 /* doc */ | 392 /* doc */ |
383 "Build slur grobs from slur events.", | 393 "Build slur grobs from slur events.", |
384 | 394 |
385 /* create */ | 395 /* create */ |
386 "Slur ", | 396 "Slur ", |
387 | 397 |
388 /* read */ | 398 /* read */ |
389 "slurMelismaBusy " | 399 "slurMelismaBusy " |
390 "doubleSlurs ", | 400 "doubleSlurs ", |
391 | 401 |
392 /* write */ | 402 /* write */ |
393 "" | 403 "" |
394 ); | 404 ); |
LEFT | RIGHT |