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
22namespace 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