LibMusicXML  3.18
msr2LpsrTranslator.h
1 /*
2  MusicXML Library
3  Copyright (C) Grame 2006-2013
4 
5  This Source Code Form is subject to the terms of the Mozilla Public
6  License, v. 2.0. If a copy of the MPL was not distributed with this
7  file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10  research@grame.fr
11 */
12 
13 #ifndef ___msr2LpsrTranslator___
14 #define ___msr2LpsrTranslator___
15 
16 #include <map>
17 #include <vector>
18 
19 #include "lpsr.h"
20 
21 
22 namespace MusicXML2
23 {
24 
25 //________________________________________________________________________
27 
28  public visitor<S_msrScore>,
29 
30  // rights
31 
32  public visitor<S_msrIdentification>,
33 
34  public visitor<S_msrCredit>,
35  public visitor<S_msrCreditWords>,
36 
37  // variable-value associations
38 
39  public visitor<S_msrVarValAssoc>,
40  public visitor<S_msrVarValsListAssoc>,
41 
42  // scaling
43 
44  public visitor<S_msrScaling>,
45 
46  // layout
47 
48  public visitor<S_msrPageLayout>,
49 
50  // parts & part groups
51 
52  public visitor<S_msrPartGroup>,
53 
54  public visitor<S_msrPart>,
55 
56  // staff details
57 
58  public visitor<S_msrStaffTuning>,
59  public visitor<S_msrStaffDetails>,
60 
61  public visitor<S_msrStaff>,
62 
63  public visitor<S_msrVoice>,
64 
65  public visitor<S_msrVoiceStaffChange>,
66 
67  // lyrics
68 
69  public visitor<S_msrStanza>,
70  public visitor<S_msrSyllable>,
71 
72  // clefs
73 
74  public visitor<S_msrClef>,
75 
76  // keys
77 
78  public visitor<S_msrKey>,
79 
80  // times
81 
82  public visitor<S_msrTime>,
83 
84  // transpose
85 
86  public visitor<S_msrTranspose>,
87 
88  // print
89 
90  public visitor<S_msrPartNameDisplay>,
91  public visitor<S_msrPartAbbreviationDisplay>,
92 
93  // words
94 
95  public visitor<S_msrWords>,
96 
97  // tempo
98 
99  public visitor<S_msrTempo>,
100 
101  public visitor<S_msrSegment>,
102 
103  // rehearsal
104 
105  public visitor<S_msrRehearsal>,
106 
107  // harmonies
108 
109  public visitor<S_msrHarmony>,
110  public visitor<S_msrHarmonyDegree>,
111 
112  // frames
113 
114  public visitor<S_msrFrame>,
115 
116  // figured bass
117 
118  public visitor<S_msrFiguredBass>,
119  public visitor<S_msrFigure>,
120 
121  // measures
122 
123  public visitor<S_msrMeasure>,
124 
125  // articulations
126 
127  public visitor<S_msrArticulation>,
128 
129  public visitor<S_msrFermata>,
130 
131  public visitor<S_msrArpeggiato>,
132  public visitor<S_msrNonArpeggiato>,
133 
134  // technicals
135 
136  public visitor<S_msrTechnical>,
137  public visitor<S_msrTechnicalWithInteger>,
138  public visitor<S_msrTechnicalWithFloat>,
139  public visitor<S_msrTechnicalWithString>,
140 
141  // ornaments
142 
143  public visitor<S_msrOrnament>,
144 
145  // spanners
146 
147  public visitor<S_msrSpanner>,
148 
149  // glissandos
150 
151  public visitor<S_msrGlissando>,
152 
153  // slides
154 
155  public visitor<S_msrSlide>,
156 
157  // tremolos
158 
159  public visitor<S_msrSingleTremolo>,
160 
161  public visitor<S_msrDoubleTremolo>,
162 
163  // dynamics
164 
165  public visitor<S_msrDynamics>,
166 
167  public visitor<S_msrOtherDynamics>,
168 
169  public visitor<S_msrSlash>,
170 
171  public visitor<S_msrSlur>,
172  public visitor<S_msrLigature>,
173  public visitor<S_msrWedge>,
174 
175  // grace notes
176 
177  public visitor<S_msrGraceNotesGroup>,
178 
179  // notes
180 
181  public visitor<S_msrNote>,
182  public visitor<S_msrOctaveShift>,
183 
184  // accordion registration
185 
186  public visitor<S_msrAccordionRegistration>,
187 
188  // harp pedals tuning
189 
190  public visitor<S_msrHarpPedalsTuning>,
191 
192  public visitor<S_msrStem>,
193 
194  // chords
195 
196  public visitor<S_msrChord>,
197 
198  // tuplets
199 
200  public visitor<S_msrTuplet>,
201 
202  // ties, slurs, brackets & beams
203 
204  public visitor<S_msrTie>,
205 
206  public visitor<S_msrBeam>,
207 
208  // ?
209 
210  public visitor<S_msrBarline>,
211 
212  public visitor<S_msrSegno>,
213  public visitor<S_msrCoda>,
214 
215  public visitor<S_msrEyeGlasses>,
216  public visitor<S_msrPedal>,
217  public visitor<S_msrDamp>,
218  public visitor<S_msrDampAll>,
219  public visitor<S_msrScordatura>,
220 
221  public visitor<S_msrBarCheck>,
222  public visitor<S_msrBarNumberCheck>,
223 
224  public visitor<S_msrLineBreak>,
225 
226  public visitor<S_msrPageBreak>,
227 
228  // repeats
229 
230  public visitor<S_msrRepeat>,
231  public visitor<S_msrRepeatCommonPart>,
232  public visitor<S_msrRepeatEnding>,
233 
234  public visitor<S_msrMeasuresRepeat>,
235  public visitor<S_msrMeasuresRepeatPattern>,
236  public visitor<S_msrMeasuresRepeatReplicas>,
237 
238  public visitor<S_msrRestMeasures>,
239  public visitor<S_msrRestMeasuresContents>,
240 
241  // midi
242 
243  public visitor<S_msrMidiTempo>
244 
245 {
246  public:
247 
249  indentedOstream& ios,
250  S_msrScore mScore);
251 
252  virtual ~msr2LpsrTranslator ();
253 
254  void buildLpsrScoreFromMsrScore ();
255 
256  S_lpsrScore getLpsrScore () const
257  { return fLpsrScore; }
258 
259  protected:
260 
261  virtual void visitStart (S_msrScore& elt);
262  virtual void visitEnd (S_msrScore& elt);
263 
264  virtual void visitStart (S_msrIdentification& elt);
265  virtual void visitEnd (S_msrIdentification& elt);
266 
267  virtual void visitStart (S_msrCredit& elt);
268  virtual void visitEnd (S_msrCredit& elt);
269  virtual void visitStart (S_msrCreditWords& elt);
270  virtual void visitEnd (S_msrCreditWords& elt);
271 
272  // parts & part groups
273 
274  virtual void visitStart (S_msrPartGroup& elt);
275  virtual void visitEnd (S_msrPartGroup& elt);
276 
277  virtual void visitStart (S_msrPart& elt);
278  virtual void visitEnd (S_msrPart& elt);
279 
280  virtual void visitStart (S_msrStaffTuning& elt);
281  virtual void visitStart (S_msrStaffDetails& elt);
282  virtual void visitEnd (S_msrStaffDetails& elt);
283 
284  virtual void visitStart (S_msrStaff& elt);
285  virtual void visitEnd (S_msrStaff& elt);
286 
287  virtual void visitStart (S_msrVoice& elt);
288  virtual void visitEnd (S_msrVoice& elt);
289 
290  virtual void visitStart (S_msrVoiceStaffChange& elt);
291 
292  virtual void visitStart (S_msrStanza& elt);
293  virtual void visitEnd (S_msrStanza& elt);
294 
295  virtual void visitStart (S_msrSyllable& elt);
296  virtual void visitEnd (S_msrSyllable& elt);
297 
298  virtual void visitStart (S_msrClef& elt);
299  virtual void visitEnd (S_msrClef& elt);
300 
301  virtual void visitStart (S_msrKey& elt);
302  virtual void visitEnd (S_msrKey& elt);
303 
304  virtual void visitStart (S_msrTime& elt);
305  virtual void visitEnd (S_msrTime& elt);
306 
307  virtual void visitStart (S_msrTranspose& elt);
308  virtual void visitEnd (S_msrTranspose& elt);
309 
310  virtual void visitStart (S_msrPartNameDisplay& elt);
311  virtual void visitStart (S_msrPartAbbreviationDisplay& elt);
312 
313  virtual void visitStart (S_msrWords& elt);
314  virtual void visitEnd (S_msrWords& elt);
315 
316  virtual void visitStart (S_msrTempo& elt);
317  virtual void visitEnd (S_msrTempo& elt);
318 
319  virtual void visitStart (S_msrRehearsal& elt);
320  virtual void visitEnd (S_msrRehearsal& elt);
321 
322  virtual void visitStart (S_msrSegment& elt);
323  virtual void visitEnd (S_msrSegment& elt);
324 
325  virtual void visitStart (S_msrHarmony& elt);
326  virtual void visitEnd (S_msrHarmony& elt);
327  virtual void visitStart (S_msrHarmonyDegree& elt);
328 
329  virtual void visitStart (S_msrFrame& elt);
330 
331  virtual void visitStart (S_msrFiguredBass& elt);
332  virtual void visitEnd (S_msrFiguredBass& elt);
333  virtual void visitStart (S_msrFigure& elt);
334 
335  virtual void visitStart (S_msrMeasure& elt);
336  virtual void visitEnd (S_msrMeasure& elt);
337 
338  virtual void visitStart (S_msrArticulation& elt);
339  virtual void visitEnd (S_msrArticulation& elt);
340 
341  virtual void visitStart (S_msrFermata& elt);
342 
343  virtual void visitStart (S_msrArpeggiato& elt);
344  virtual void visitStart (S_msrNonArpeggiato& elt);
345 
346  virtual void visitStart (S_msrTechnical& elt);
347  virtual void visitEnd (S_msrTechnical& elt);
348 
349  virtual void visitStart (S_msrTechnicalWithInteger& elt);
350  virtual void visitEnd (S_msrTechnicalWithInteger& elt);
351 
352  virtual void visitStart (S_msrTechnicalWithFloat& elt);
353  virtual void visitEnd (S_msrTechnicalWithFloat& elt);
354 
355  virtual void visitStart (S_msrTechnicalWithString& elt);
356  virtual void visitEnd (S_msrTechnicalWithString& elt);
357 
358  virtual void visitStart (S_msrOrnament& elt);
359  virtual void visitEnd (S_msrOrnament& elt);
360 
361  virtual void visitStart (S_msrSpanner& elt);
362  virtual void visitEnd (S_msrSpanner& elt);
363 
364  virtual void visitStart (S_msrGlissando& elt);
365  virtual void visitEnd (S_msrGlissando& elt);
366 
367  virtual void visitStart (S_msrSlide& elt);
368  virtual void visitEnd (S_msrSlide& elt);
369 
370  virtual void visitStart (S_msrSingleTremolo& elt);
371  virtual void visitEnd (S_msrSingleTremolo& elt);
372 
373  virtual void visitStart (S_msrDoubleTremolo& elt);
374  virtual void visitEnd (S_msrDoubleTremolo& elt);
375 
376  virtual void visitStart (S_msrDynamics& elt);
377  virtual void visitEnd (S_msrDynamics& elt);
378 
379  virtual void visitStart (S_msrOtherDynamics& elt);
380  virtual void visitEnd (S_msrOtherDynamics& elt);
381 
382  virtual void visitStart (S_msrSlash& elt);
383 
384  virtual void visitStart (S_msrWedge& elt);
385  virtual void visitEnd (S_msrWedge& elt);
386 
387  virtual void visitStart (S_msrGraceNotesGroup& elt);
388  virtual void visitEnd (S_msrGraceNotesGroup& elt);
389 
390  virtual void visitStart (S_msrNote& elt);
391  virtual void visitEnd (S_msrNote& elt);
392 
393  virtual void visitStart (S_msrOctaveShift& elt);
394  virtual void visitEnd (S_msrOctaveShift& elt);
395 
396  virtual void visitStart (S_msrAccordionRegistration& elt);
397 
398  virtual void visitStart (S_msrHarpPedalsTuning& elt);
399 
400  virtual void visitStart (S_msrStem& elt);
401  virtual void visitEnd (S_msrStem& elt);
402 
403  virtual void visitStart (S_msrBeam& elt);
404  virtual void visitEnd (S_msrBeam& elt);
405 
406  virtual void visitStart (S_msrChord& elt);
407  virtual void visitEnd (S_msrChord& elt);
408 
409  virtual void visitStart (S_msrTuplet& elt);
410  virtual void visitEnd (S_msrTuplet& elt);
411 
412  virtual void visitStart (S_msrTie& elt);
413  virtual void visitEnd (S_msrTie& elt);
414 
415  virtual void visitStart (S_msrSlur& elt);
416  virtual void visitEnd (S_msrSlur& elt);
417 
418  virtual void visitStart (S_msrLigature& elt);
419  virtual void visitEnd (S_msrLigature& elt);
420 
421  virtual void visitStart (S_msrBarline& elt);
422  virtual void visitEnd (S_msrBarline& elt);
423 
424  virtual void visitStart (S_msrSegno& elt);
425  virtual void visitStart (S_msrCoda& elt);
426 
427  virtual void visitStart (S_msrEyeGlasses& elt);
428  virtual void visitStart (S_msrPedal& elt);
429  virtual void visitStart (S_msrDamp& elt);
430  virtual void visitStart (S_msrDampAll& elt);
431  virtual void visitStart (S_msrScordatura& elt);
432 
433  virtual void visitStart (S_msrBarCheck& elt);
434  virtual void visitEnd (S_msrBarCheck& elt);
435  virtual void visitStart (S_msrBarNumberCheck& elt);
436  virtual void visitEnd (S_msrBarNumberCheck& elt);
437 
438  virtual void visitStart (S_msrLineBreak& elt);
439  virtual void visitEnd (S_msrLineBreak& elt);
440 
441  virtual void visitStart (S_msrPageBreak& elt);
442  virtual void visitEnd (S_msrPageBreak& elt);
443 
444  virtual void visitStart (S_msrRepeat& elt);
445  virtual void visitEnd (S_msrRepeat& elt);
446  virtual void visitStart (S_msrRepeatCommonPart& elt);
447  virtual void visitEnd (S_msrRepeatCommonPart& elt);
448  virtual void visitStart (S_msrRepeatEnding& elt);
449  virtual void visitEnd (S_msrRepeatEnding& elt);
450 
451  virtual void visitStart (S_msrMeasuresRepeat& elt);
452  virtual void visitEnd (S_msrMeasuresRepeat& elt);
453  virtual void visitStart (S_msrMeasuresRepeatPattern& elt);
454  virtual void visitEnd (S_msrMeasuresRepeatPattern& elt);
455  virtual void visitStart (S_msrMeasuresRepeatReplicas& elt);
456  virtual void visitEnd (S_msrMeasuresRepeatReplicas& elt);
457 
458  virtual void visitStart (S_msrRestMeasures& elt);
459  virtual void visitEnd (S_msrRestMeasures& elt);
460  virtual void visitStart (S_msrRestMeasuresContents& elt);
461  virtual void visitEnd (S_msrRestMeasuresContents& elt);
462 
463  virtual void visitStart (S_msrVarValAssoc& elt);
464  virtual void visitEnd (S_msrVarValAssoc& elt);
465  virtual void visitStart (S_msrVarValsListAssoc& elt);
466  virtual void visitEnd (S_msrVarValsListAssoc& elt);
467 
468  virtual void visitStart (S_msrScaling& elt);
469  virtual void visitEnd (S_msrScaling& elt);
470 
471  virtual void visitStart (S_msrPageLayout& elt);
472  virtual void visitEnd (S_msrPageLayout& elt);
473 
474  virtual void visitStart (S_msrMidiTempo& elt);
475  virtual void visitEnd (S_msrMidiTempo& elt);
476 
477  private:
478 
479  indentedOstream& fLogOutputStream;
480 
481 
482  // the MSR score we're visiting
483  // ------------------------------------------------------
484  S_msrScore fVisitedMsrScore;
485 
486 
487  // the LPSR score we're building (it is always built)
488  // ------------------------------------------------------
489  S_lpsrScore fLpsrScore;
490  S_lpsrScoreBlock fCurrentScoreBlock;
491 
492 
493  // its header
494  // ------------------------------------------------------
495  S_lpsrHeader fCurrentLpsrScoreHeader;
496 
497 
498  // score
499  // ------------------------------------------------------
500  S_msrScore fCurrentMsrScoreClone;
501 
502 
503  // identification
504  // ------------------------------------------------------
505  bool fOnGoingIdentification;
506  S_msrIdentification fCurrentIdentification;
507 
508 
509  // header
510  // ------------------------------------------------------
511  bool fWorkNumberKnown;
512  bool fWorkTitleKnown;
513  bool fMovementNumberKnown;
514  bool fMovementTitleKnown;
515 
516 
517  // paper
518  // ------------------------------------------------------
519  void setPaperIndentsIfNeeded (
520  S_msrScaling scaling);
521 
522  // credits
523  // ------------------------------------------------------
524  S_msrCredit fCurrentCredit;
525 
526 
527  // books
528  // ------------------------------------------------------
529  S_lpsrBookBlock fCurrentLpsrBookBlock;
530 
531  // part groups
532  // ------------------------------------------------------
533  // S_msrPartGroup fCurrentPartGroupClone; JMI
534 
535  // partGroup's can be nested, hence this stack
536  // the current partGroup is the top of the stack
537  stack<S_msrPartGroup> fPartGroupsStack;
538 
539  // part groups block are nested as the partGroup's are
540  // the current partGroup block is the top of the stack
541  stack<S_lpsrPartGroupBlock>
542  fPartGroupBlocksStack;
543 
544  S_lpsrBookPartBlock fCurrentBookPartBlock;
545 
546  // parts
547  // ------------------------------------------------------
548  S_msrPart fCurrentPartClone;
549  S_lpsrPartBlock fCurrentPartBlock;
550 
551 
552  // staff details
553  // ------------------------------------------------------
554 
555  S_msrStaffTuning fCurrentStaffTuningClone;
556 
557 
558  // staves
559  // ------------------------------------------------------
560  S_msrStaff fCurrentStaffClone;
561  S_lpsrStaffBlock fCurrentStaffBlock;
562  // prevent clef, key and time from being handled twice
563  bool fOnGoingStaff;
564 
565 
566  // voices
567  // ------------------------------------------------------
568  S_msrVoice fCurrentVoiceClone;
569  S_msrVoice fCurrentVoiceOriginal;
570  map<S_msrNote, S_msrNote> fVoiceNotesMap; // JMI
571 
572 
573  // harmonies
574  // ------------------------------------------------------
575  bool fOnGoingHarmonyVoice;
576 
577  S_msrHarmony fCurrentHarmonyClone;
578 
579  list<S_msrHarmony> fPendingHarmoniesList;
580 
581 
582  // figured bass
583  // ------------------------------------------------------
584  bool fOnGoingFiguredBassVoice;
585  S_msrFiguredBass fCurrentFiguredBassClone;
586 
587 
588  // segments
589  // ------------------------------------------------------
590  // the current segment clone is the one at the top of the stack
591  S_msrSegment fCurrentSegmentClone;
592 
593 
594  // measures
595  // ------------------------------------------------------
596  S_msrMeasure fCurrentMeasureClone;
597 
598  // full measure rests compression
599  S_msrMeasure fCurrentRestMeasure;
600  S_msrRestMeasures fCurrentRestMeasures;
601 
602  // bar checks
603  // ------------------------------------------------------
604  S_msrBarCheck fLastBarCheck;
605 
606 
607  // notes
608  // ------------------------------------------------------
609  bool fOnGoingNonGraceNote;
610 
611  // fCurrentNonGraceNoteClone is not used for grace notes,
612  // which are visited while the note they're attached to
613  // is being visited too
614  S_msrNote fCurrentNonGraceNoteClone;
615 
616  // to help workaround LilyPond issue 34
617  S_msrNote fFirstNoteCloneInVoice;
618 
619  S_msrGraceNotesGroup fCurrentSkipGraceNotesGroup;
620 
621 
622  // glissandos
623  // ------------------------------------------------------
624 
625 
626  // slides
627  // ------------------------------------------------------
628 
629 
630  // double tremolos
631  // ------------------------------------------------------
632  S_msrDoubleTremolo fCurrentDoubleTremoloClone;
633  bool fOnGoingDoubleTremolo;
634 
635 
636  // stems
637  // ------------------------------------------------------
638  S_msrStem fCurrentStem;
639 
640 
641  // grace notes
642  // ------------------------------------------------------
643  S_msrGraceNotesGroup fCurrentGraceNotesGroupClone;
644  S_msrNote fCurrentGraceNoteClone;
645  bool fOnGoingGraceNotesGroup;
646 
647  // afterGraceNotes optimisation
648  S_msrAfterGraceNotesGroup fPendingAfterGraceNotesGroup;
649  S_msrElement fCurrentAfterGraceNotesGroupElement;
650 
651  /* JMI
652  void prependSkipGraceNotesGroupToPartOtherVoices (
653  S_msrPart partClone,
654  S_msrVoice voiceClone,
655  S_msrGraceNotesGroup skipGraceNotesGroup);
656  */
657 
658 
659  // chords
660  // ------------------------------------------------------
661  bool fOnGoingChord;
662  S_msrChord fCurrentChordClone;
663 
664 
665  // tuplets
666  // ------------------------------------------------------
667 // S_msrTuplet fCurrentTupletClone;
668  // bool fOnGoingTuplet;
669  stack<S_msrTuplet> fTupletClonesStack;
670 
671 
672  // stanzas
673  // ------------------------------------------------------
674  S_msrStanza fCurrentStanzaClone;
675  bool fOnGoingStanza;
676 
677 
678  // syllables
679  // ------------------------------------------------------
680  S_msrSyllable fCurrentSyllableClone;
681  bool fOnGoingSyllableExtend;
682 
683 
684  // current ongoing values display
685  // ------------------------------------------------------
686  void displayCurrentOnGoingValues ();
687 };
688 
689 
690 }
691 
692 
693 #endif
Definition: utilities.h:213
Definition: msr2LpsrTranslator.h:245
Definition: visitor.h:27