LibMusicXML 3.18
mxmlTree2MsrSkeletonBuilder.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 ___mxmlTree2MsrSkeletonBuilder___
14#define ___mxmlTree2MsrSkeletonBuilder___
15
16
17namespace MusicXML2
18{
19
20//________________________________________________________________________
22{
23/*
24 * positions represent the order in which the parts appear in <part-list />
25*/
26
27 public:
28
29 // creation
30 // ------------------------------------------------------
31
32 static SMARTP<mxmlPartGroupDescr> create (
33 int startInputLineNumber,
34 int partGroupNumber,
36 int startPosition);
37
38 protected:
39
40 // constructors/destructor
41 // ------------------------------------------------------
42
44 int startInputLineNumber,
45 int partGroupNumber,
47 int startPosition);
48
49 virtual ~mxmlPartGroupDescr ();
50
51 public:
52
53 // set and get
54 // ------------------------------------------------------
55
56 int getStartInputLineNumber () const
57 { return fStartInputLineNumber; }
58
59 int getStopInputLineNumber () const
60 { return fStopInputLineNumber; }
61
62 int getPartGroupNumber () const
63 { return fPartGroupNumber; }
64
65 S_msrPartGroup getPartGroup () const
66 { return fPartGroup; }
67
68 int getStartPosition () const
69 { return fStartPosition; }
70
71 void setStopPosition (
72 int stopInputLineNumber,
73 int stopPosition)
74 {
75 fStopInputLineNumber = stopInputLineNumber;
76 fStopPosition = stopPosition;
77 }
78
79 int getStopPosition () const
80 { return fStopPosition; }
81
82 // services
83 // ------------------------------------------------------
84
85 string partGroupDescrAsString () const;
86
87 string getPartGroupCombinedName () const
88 {
89 return
90 fPartGroup->
91 getPartGroupCombinedName ();
92 }
93
94 // print
95 // ------------------------------------------------------
96
97 virtual void print (ostream& os) const;
98
99 private:
100
101 // fields
102 // ------------------------------------------------------
103
104 int fStartInputLineNumber;
105 int fStopInputLineNumber;
106
107 int fPartGroupNumber; // may be reused later
108
109 S_msrPartGroup fPartGroup;
110
111 int fStartPosition;
112 int fStopPosition;
113};
115EXP ostream& operator<< (ostream& os, const S_mxmlPartGroupDescr& elt);
116
117//________________________________________________________________________
119
120 // score partwise
121
122 public visitor<S_score_partwise>,
123
124 // rights
125 // ------------------------------------------------------
126
127 public visitor<S_work_number>,
128 public visitor<S_work_title>,
129 public visitor<S_movement_number>,
130 public visitor<S_movement_title>,
131
132 // identification
133 // ------------------------------------------------------
134
135 public visitor<S_identification>,
136 public visitor<S_creator>,
137 public visitor<S_rights>,
138 public visitor<S_source>,
139 public visitor<S_relation>,
140
141 // encoding
142 // ------------------------------------------------------
143
144 public visitor<S_encoding>,
145 public visitor<S_encoding_date>,
146 public visitor<S_encoder>,
147 public visitor<S_software>,
148 public visitor<S_encoding_description>,
149 public visitor<S_supports>,
150
151 // miscellaneous
152 // ------------------------------------------------------
153
154 public visitor<S_miscellaneous>,
155 public visitor<S_miscellaneous_field>,
156
157 // scaling
158 // ------------------------------------------------------
159
160 public visitor<S_millimeters>,
161 public visitor<S_tenths>,
162 public visitor<S_scaling>,
163
164 // print
165 // ------------------------------------------------------
166
167 public visitor<S_system_layout>,
168 public visitor<S_system_margins>,
169 public visitor<S_system_distance>,
170 public visitor<S_top_system_distance>,
171
172 public visitor<S_system_dividers>,
173 public visitor<S_left_divider>,
174 public visitor<S_right_divider>,
175
176 // layout
177 // ------------------------------------------------------
178
179 public visitor<S_page_layout>,
180 public visitor<S_page_height>,
181 public visitor<S_page_width>,
182 public visitor<S_page_margins>,
183 public visitor<S_left_margin>,
184 public visitor<S_right_margin>,
185 public visitor<S_top_margin>,
186 public visitor<S_bottom_margin>,
187
188 // credits
189 // ------------------------------------------------------
190
191 public visitor<S_credit>,
192 public visitor<S_credit_words>,
193
194 // parts & part groups
195 // ------------------------------------------------------
196
197 public visitor<S_part_list>,
198
199 public visitor<S_display_text>,
200
201 public visitor<S_part_group>,
202
203 public visitor<S_group_name>,
204 public visitor<S_group_name_display>,
205
206 public visitor<S_accidental_text>,
207 public visitor<S_group_abbreviation>,
208 public visitor<S_group_symbol>,
209 public visitor<S_group_barline>,
210
211 public visitor<S_score_part>,
212
213 public visitor<S_part_name>,
214 public visitor<S_part_name_display>,
215
216 public visitor<S_part_abbreviation>,
217 public visitor<S_part_abbreviation_display>,
218
219 public visitor<S_instrument_name>,
220 public visitor<S_instrument_abbreviation>,
221
222 public visitor<S_part>,
223
224 // staves
225 // ------------------------------------------------------
226
227 public visitor<S_staves>,
228 public visitor<S_staff>,
229
230 // voices
231 // ------------------------------------------------------
232
233 public visitor<S_voice>,
234
235 // measures
236 // ------------------------------------------------------
237
238 public visitor<S_measure>,
239
240 // notes
241 // ------------------------------------------------------
242
243 public visitor<S_note>,
244
245 // lyrics
246 // ------------------------------------------------------
247
248 public visitor<S_lyric>,
249 public visitor<S_syllabic>,
250 public visitor<S_text>,
251 public visitor<S_elision>,
252 public visitor<S_extend>,
253
254 // harmonies
255 // ------------------------------------------------------
256
257 public visitor<S_harmony>,
258
259 // figured bass
260 // ------------------------------------------------------
261
262 public visitor<S_figured_bass>
263
264{
265 public:
266
267 // constructors/destructor
268 // ------------------------------------------------------
269
271 indentedOstream& ios);
272
274
275 // set and get
276 // ------------------------------------------------------
277
278 S_msrScore getMsrScore () const
279 { return fMsrScore; }
280
281
282 // services
283 // ------------------------------------------------------
284
285 // visitors
286 // ------------------------------------------------------
287
288 void browseMxmlTree (
289 const Sxmlelement& xmlTree);
290
291 protected:
292
293 // score partwise
294 // ------------------------------------------------------
295
296 virtual void visitStart ( S_score_partwise& elt);
297 virtual void visitEnd ( S_score_partwise& elt);
298
299 // identification
300 // ------------------------------------------------------
301
302 virtual void visitStart ( S_identification& elt);
303 virtual void visitEnd ( S_identification& elt);
304 virtual void visitStart ( S_creator& elt);
305 virtual void visitStart ( S_rights& elt);
306 virtual void visitStart ( S_source& elt);
307 virtual void visitStart ( S_relation& elt);
308
309 // encoding
310 // ------------------------------------------------------
311
312 virtual void visitStart ( S_encoding& elt);
313 virtual void visitEnd ( S_encoding& elt);
314 virtual void visitStart ( S_encoding_date& elt);
315 virtual void visitStart ( S_encoder& elt);
316 virtual void visitStart ( S_software& elt);
317 virtual void visitStart ( S_encoding_description& elt);
318 virtual void visitStart ( S_supports& elt);
319
320
321
322 virtual void visitStart ( S_work_number& elt);
323 virtual void visitStart ( S_work_title& elt);
324 virtual void visitStart ( S_movement_number& elt);
325 virtual void visitStart ( S_movement_title& elt);
326
327 // miscellaneous
328 // ------------------------------------------------------
329
330 virtual void visitStart ( S_miscellaneous& elt);
331 virtual void visitEnd ( S_miscellaneous& elt);
332 virtual void visitStart ( S_miscellaneous_field& elt);
333
334 // rights
335 // ------------------------------------------------------
336
337
338 // scaling
339 // ------------------------------------------------------
340
341 // scaling, margins, layout, divider JMI
342
343 virtual void visitStart ( S_millimeters& elt);
344 virtual void visitStart ( S_tenths& elt);
345 virtual void visitEnd ( S_scaling& elt);
346
347 virtual void visitStart ( S_system_layout& elt);
348 virtual void visitEnd ( S_system_layout& elt);
349
350 virtual void visitStart ( S_system_margins& elt);
351 virtual void visitEnd ( S_system_margins& elt);
352 virtual void visitStart ( S_system_distance& elt);
353 virtual void visitStart ( S_top_system_distance& elt);
354
355 virtual void visitStart ( S_system_dividers& elt);
356 virtual void visitStart ( S_left_divider& elt);
357 virtual void visitStart ( S_right_divider& elt);
358
359 // print
360 // ------------------------------------------------------
361
362 // JMI bool fOnGoingPrint;
363
364 // layout
365 // ------------------------------------------------------
366
367 virtual void visitStart ( S_page_layout& elt);
368 virtual void visitEnd ( S_page_layout& elt);
369 virtual void visitStart ( S_page_height& elt);
370 virtual void visitStart ( S_page_width& elt);
371 virtual void visitStart ( S_page_margins& elt);
372 virtual void visitEnd ( S_page_margins& elt);
373 virtual void visitStart ( S_left_margin& elt);
374 virtual void visitStart ( S_right_margin& elt);
375 virtual void visitStart ( S_top_margin& elt);
376 virtual void visitStart ( S_bottom_margin& elt);
377
378 // credits
379 // ------------------------------------------------------
380
381 virtual void visitStart ( S_credit& elt);
382 virtual void visitEnd ( S_credit& elt);
383 virtual void visitStart ( S_credit_words& elt);
384
385 // parts & part groups
386 // ------------------------------------------------------
387
388 virtual void visitStart ( S_part_list& elt);
389 virtual void visitEnd ( S_part_list& elt);
390
391 virtual void visitStart ( S_display_text& elt);
392
393 virtual void visitStart ( S_part_group& elt);
394 virtual void visitEnd ( S_part_group& elt);
395
396 virtual void visitStart ( S_group_name& elt);
397 virtual void visitStart ( S_group_name_display& elt);
398 virtual void visitEnd ( S_group_name_display& elt);
399
400 virtual void visitStart ( S_accidental_text& elt);
401 virtual void visitStart ( S_group_abbreviation& elt);
402 virtual void visitStart ( S_group_symbol& elt);
403 virtual void visitStart ( S_group_barline& elt);
404
405 virtual void visitStart ( S_score_part& elt);
406 virtual void visitEnd ( S_score_part& elt);
407
408 virtual void visitStart ( S_part_name& elt);
409 virtual void visitStart ( S_part_name_display& elt);
410 virtual void visitEnd ( S_part_name_display& elt);
411
412 virtual void visitStart ( S_part_abbreviation& elt);
413 virtual void visitStart ( S_part_abbreviation_display& elt);
414 virtual void visitEnd ( S_part_abbreviation_display& elt);
415
416 virtual void visitStart ( S_instrument_name& elt);
417 virtual void visitStart ( S_instrument_abbreviation& elt);
418
419 virtual void visitStart ( S_part& elt);
420 virtual void visitEnd ( S_part& elt);
421
422 // staves
423 // ------------------------------------------------------
424
425 virtual void visitStart ( S_staves& elt);
426
427 virtual void visitStart ( S_staff& elt);
428
429 // voices
430 // ------------------------------------------------------
431
432 virtual void visitStart ( S_voice& elt );
433
434 // measures
435 // ------------------------------------------------------
436
437 virtual void visitStart ( S_measure& elt);
438 virtual void visitEnd ( S_measure& elt);
439
440 // notes
441 // ------------------------------------------------------
442
443 virtual void visitStart ( S_note& elt);
444 virtual void visitEnd ( S_note& elt);
445
446 // lyrics
447 // ------------------------------------------------------
448
449 virtual void visitStart ( S_lyric& elt);
450 virtual void visitEnd ( S_lyric& elt);
451
452 // harmonies
453 // ------------------------------------------------------
454
455 virtual void visitStart ( S_harmony& elt);
456
457 // figured bass
458 // ------------------------------------------------------
459
460 virtual void visitStart ( S_figured_bass& elt);
461
462 private:
463
464 indentedOstream& fLogOutputStream;
465
466
467 // the MSR score we're building
468 // ------------------------------------------------------
469
470 S_msrScore fMsrScore;
471
472
473 // scaling handling
474 // ------------------------------------------------------
475
476 float fCurrentMillimeters;
477 int fCurrentTenths;
478
479 bool fOnGoingPageLayout;
480
481 bool fOnGoingPageMargins;
482 msrMarginTypeKind fCurrentMarginTypeKind;
483
484 bool fOnGoingSystemLayout;
485
486 bool fOnGoingSystemMargins;
487
488
489 // credits handling
490 // ------------------------------------------------------
491
492 S_msrCredit fCurrentCredit;
493
494
495 // part groups handling
496 // ------------------------------------------------------
497
498 int fCurrentPartGroupNumber;
499 msrPartGroup::msrPartGroupTypeKind
500 fCurrentPartGroupTypeKind;
501 string fCurrentPartGroupName;
502 string fCurrentPartGroupAbbreviation;
503
504 bool fOnGoingPartGroupNameDisplay;
505 string fCurrentPartGroupNameDisplayText;
506
507 string fCurrentPartGroupAccidentalText;
508 msrPartGroup::msrPartGroupSymbolKind
509 fCurrentPartGroupSymbolKind;
510 msrPartGroup::msrPartGroupBarlineKind
511 fCurrentPartGroupBarlineKind;
512 int fCurrentPartGroupSymbolDefaultX;
513
514 // an implicit part group has to be created to contain everything,
515 // since there can be parts out of any explicit part group
516 S_mxmlPartGroupDescr fImplicitPartGroupDescr;
517 S_msrPartGroup fImplicitPartGroup;
518
519 void createImplicitPartGroup ();
520
521 // part groups numbers can be re-used, they're no identifier
522 // we use a map to access them by part group number
523 int fPartGroupsCounter;
524 vector<S_mxmlPartGroupDescr>
525 fPartGroupDescsVector;
526 map<int, S_mxmlPartGroupDescr>
527 fAllPartGroupDescrsMap;
528 map<int, S_mxmlPartGroupDescr>
529 fStartedPartGroupDescrsMap;
530
531 void showPartGroupDescrsVector (
532 int inputLineNumber);
533
534 void showAllPartGroupDescrsMap (
535 int inputLineNumber);
536
537 void showStartedPartGroupDescrsMap (
538 int inputLineNumber);
539
540 S_mxmlPartGroupDescr fetchStartedPartGroupDescr (
541 int partGroupNumber);
542
543 list<S_mxmlPartGroupDescr>
544 fPartGroupsDescrStack;
545
546 void showPartGroupsStack (
547 int inputLineNumber);
548
549 S_mxmlPartGroupDescr fetchPartGroupDescrStackTop ();
550
551 void registerPartGroupDescrAsStarted (
552 int inputLineNumber,
553 S_mxmlPartGroupDescr partGroupDescr);
554
555 void registerPartGroupDescrAsStopped (
556 int inputLineNumber,
557 S_mxmlPartGroupDescr partGroupDescr);
558
559 void showPartGroupsData (
560 int inputLineNumber,
561 string context);
562
563 void handlePartGroupStart (
564 int inputLineNumber);
565
566 void handlePartGroupStop (
567 int inputLineNumber);
568
569 vector<list<S_mxmlPartGroupDescr> >
570 fPositionStartingPartGroupDescrsVector;
571 vector<list<S_mxmlPartGroupDescr> >
572 fPositionStoppingPartGroupDescrsVector;
573
574 void showPositionStartingPartGroupDescrsVector (
575 int inputLineNumber);
576
577 void showPositionStoppingPartGroupDescrsVector (
578 int inputLineNumber);
579
580 void insertPartGroupDescInStartingList (
581 int inputLineNumber,
582 S_mxmlPartGroupDescr partGroupDescr,
583 list<S_mxmlPartGroupDescr>&
584 startingPartGroupDescrsList);
585
586 void insertPartGroupDescInStoppingList (
587 int inputLineNumber,
588 S_mxmlPartGroupDescr partGroupDescr,
589 list<S_mxmlPartGroupDescr>&
590 stoppingPartGroupDescrsList);
591
592 void registerPartGroupDescrAsStoppingAtCurrentPosition (
593 int inputLineNumber,
594 S_mxmlPartGroupDescr partGroupDescr);
595
596 void registerPart (
597 int inputLineNumber,
598 int partPosition,
599 S_msrPart part);
600
601 void doNestPartGroupDescrInItsContainer (
602 int inputLineNumber,
603 S_mxmlPartGroupDescr partGroupDescrToBeStopped,
604 S_mxmlPartGroupDescr containingPartGroupDescr);
605
606 void doPartGroupsNestingAndPartsAllocation (
607 int inputLineNumber);
608
609
610
611 // parts handling
612 // ------------------------------------------------------
613
614 string fCurrentPartID; // used throughout
615
616 string fCurrentPartName;
617 string fCurrentPartNameDisplayText;
618 bool fOnGoingPartNameDisplay;
619
620
621 string fCurrentPartAbbreviation;
622 string fCurrentPartAbbreviationDisplayText;
623 bool fOnGoingPartAbbreviationDisplay;
624
625 string fCurrentPartInstrumentName;
626 string fCurrentPartInstrumentAbbreviation;
627
628 map<string, S_msrPart> fPartsMap;
629
630 int fCurrentNoIDPartNumber;
631
632 // handling the part, each one incrementing the 'position'
633 // of the part groups, used for handling nesting/overlapping
634 int fCurrentPartsPosition;
635 vector<S_msrPart> fPartsVector;
636
637 void showPartsVector (
638 int inputLineNumber);
639
640 S_msrPart fCurrentPart; // used throughout
641
642
643 // staff handling
644 // ------------------------------------------------------
645
646 int fCurrentStaffMusicXMLNumber; // used throughout
647
648 S_msrStaff createStaffInCurrentPartIfNotYetDone (
649 int inputLineNumber,
650 int staffNumber);
651
652
653 // voice handling
654 // ------------------------------------------------------
655
656 int fCurrentVoiceMusicXMLNumber; // used throughout
657
658 S_msrVoice createRegularVoiceInStaffIfNotYetDone (
659 int inputLineNumber,
660 int staffNumber,
661 int voiceNumber);
662
663 S_msrVoice fetchFirstRegularVoiceFromStaff (
664 int inputLineNumber,
665 int staffNumber);
666
667
668 // measures
669 // ------------------------------------------------------
670
671 string fCurrentMeasureNumber;
672
673 int fScoreNumberOfMeasures;
674 int fPartNumberOfMeasures;
675
676 // notes handling
677 // ------------------------------------------------------
678
679 bool fOnGoingNote;
680
681
682 // lyrics handling
683 // ------------------------------------------------------
684
685 string fCurrentStanzaNumber;
686 string fCurrentStanzaName;
687
688
689 // harmonies handling
690 // ------------------------------------------------------
691
692 bool fThereAreHarmoniesToBeAttachedToCurrentNote;
693 int fHarmonyVoicesCounter;
694
695 S_msrVoice createHarmonyVoiceForVoiceIfNotYetDone (
696 int inputLineNumber,
697 S_msrVoice voice);
698
699
700 // figured bass handling
701 // ------------------------------------------------------
702
703 bool fThereAreFiguredBassToBeAttachedToCurrentNote;
704 int fFiguredBassVoicesCounter;
705
706 S_msrVoice createFiguredBassVoiceForVoiceIfNotYetDone (
707 int inputLineNumber,
708 S_msrVoice voice);
709};
710
711
712}
713
714#endif
Definition: utilities.h:213
Definition: mxmlTree2MsrSkeletonBuilder.h:264
Definition: partlistvisitor.h:29
the base class for smart pointers implementation
Definition: smartpointer.h:29
Definition: visitor.h:27
Definition: mxmlTree2MsrSkeletonBuilder.h:22