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 ___msrBasicTypes___
14 #define ___msrBasicTypes___
15 
16 #include <vector>
17 #include <map>
18 
19 #include "smartpointer.h"
20 
21 #include "rational.h"
22 
23 
24 namespace MusicXML2
25 {
26 
27 // input line numbers
28 //______________________________________________________________________________
29 
30 #define K_NO_INPUT_LINE_NUMBER 0
31 
32 // names lists max length
33 // ------------------------------------------------------
34 
35 #define K_NAMES_LIST_MAX_LENGTH 50
36 
37 // XMLLang
38 //______________________________________________________________________________
39 enum msrXMLLangKind {
40   kXMLLangIt, kXMLLangEn, kXMLLangDe, kXMLLangFr, kXMLLangJa, kXMLLangLa };
41 
42 msrXMLLangKind msrXMLLangKindFromString (
43   int    inputLineNumber,
44   string XMLLangString);
45 
46 string msrXMLLangKindAsString (
47   msrXMLLangKind XMLLangKind);
48 
49 // diatonic pitches
50 //______________________________________________________________________________
51 enum msrDiatonicPitchKind {
52   // starting at C for LilyPond relative octave calculations
53   kC, kD, kE, kF, kG, kA, kB,
54   k_NoDiatonicPitch };
55 
56 msrDiatonicPitchKind msrDiatonicPitchKindFromString (
57   char diatonicNoteName);
58 
59 string msrDiatonicPitchKindAsString (
60   msrDiatonicPitchKind diatonicPitchKind);
61 
62 // alterations
63 //______________________________________________________________________________
64 enum msrAlterationKind {
65   k_NoAlteration,
66 
67   kTripleFlat, kDoubleFlat, kSesquiFlat, kFlat, kSemiFlat,
68   kNatural,
69   kSemiSharp, kSharp, kSesquiSharp, kDoubleSharp, kTripleSharp };
70 
71 msrAlterationKind msrAlterationKindFromMusicXMLAlter (
72   float alter);
73 
74 string msrAlterationKindAsString (
75   msrAlterationKind alterationKind);
76 
77 // semi tones pitches
78 //______________________________________________________________________________
79 enum msrSemiTonesPitchKind {
80   k_NoSemiTonesPitch_STP,
81 
82   kC_TripleFlat_STP,
83   kC_DoubleFlat_STP, kC_Flat_STP,
84   kC_Natural_STP,
85   kC_Sharp_STP, kC_DoubleSharp_STP,
86   kC_TripleSharp_STP,
87 
88   kD_TripleFlat_STP,
89   kD_DoubleFlat_STP, kD_Flat_STP,
90   kD_Natural_STP,
91   kD_Sharp_STP, kD_DoubleSharp_STP,
92   kD_TripleSharp_STP,
93 
94   kE_TripleFlat_STP,
95   kE_DoubleFlat_STP, kE_Flat_STP,
96   kE_Natural_STP,
97   kE_Sharp_STP, kE_DoubleSharp_STP,
98   kE_TripleSharp_STP,
99 
100   kF_TripleFlat_STP,
101   kF_DoubleFlat_STP, kF_Flat_STP,
102   kF_Natural_STP,
103   kF_Sharp_STP, kF_DoubleSharp_STP,
104   kF_TripleSharp_STP,
105 
106   kG_TripleFlat_STP,
107   kG_DoubleFlat_STP, kG_Flat_STP,
108   kG_Natural_STP,
109   kG_Sharp_STP, kG_DoubleSharp_STP,
110   kG_TripleSharp_STP,
111 
112   kA_TripleFlat_STP,
113   kA_DoubleFlat_STP, kA_Flat_STP,
114   kA_Natural_STP,
115   kA_Sharp_STP, kA_DoubleSharp_STP,
116   kA_TripleSharp_STP,
117 
118   kB_TripleFlat_STP,
119   kB_DoubleFlat_STP, kB_Flat_STP,
120   kB_Natural_STP,
121   kB_Sharp_STP, kB_DoubleSharp_STP,
122   kB_TripleSharp_STP };
123 
124 string msrSemiTonesPitchKindAsString (
125   msrSemiTonesPitchKind semiTonesPitchKind);
126 
127 // quarter tones pitches
128 //______________________________________________________________________________
129 enum msrQuarterTonesPitchKind {
130   k_NoQuarterTonesPitch_QTP,
131 
132   k_Rest_QTP,
133 
134   kA_TripleFlat_QTP,
135   kA_DoubleFlat_QTP, kA_SesquiFlat_QTP, kA_Flat_QTP, kA_SemiFlat_QTP,
136   kA_Natural_QTP,
137   kA_SemiSharp_QTP, kA_Sharp_QTP, kA_SesquiSharp_QTP, kA_DoubleSharp_QTP,
138   kA_TripleSharp_QTP,
139 
140   kB_TripleFlat_QTP,
141   kB_DoubleFlat_QTP, kB_SesquiFlat_QTP, kB_Flat_QTP, kB_SemiFlat_QTP,
142   kB_Natural_QTP,
143   kB_SemiSharp_QTP, kB_Sharp_QTP, kB_SesquiSharp_QTP, kB_DoubleSharp_QTP,
144   kB_TripleSharp_QTP,
145 
146   kC_TripleFlat_QTP,
147   kC_DoubleFlat_QTP, kC_SesquiFlat_QTP, kC_Flat_QTP, kC_SemiFlat_QTP,
148   kC_Natural_QTP,
149   kC_SemiSharp_QTP, kC_Sharp_QTP, kC_SesquiSharp_QTP, kC_DoubleSharp_QTP,
150   kC_TripleSharp_QTP,
151 
152   kD_TripleFlat_QTP,
153   kD_DoubleFlat_QTP, kD_SesquiFlat_QTP, kD_Flat_QTP, kD_SemiFlat_QTP,
154   kD_Natural_QTP,
155   kD_SemiSharp_QTP, kD_Sharp_QTP, kD_SesquiSharp_QTP, kD_DoubleSharp_QTP,
156   kD_TripleSharp_QTP,
157 
158   kE_TripleFlat_QTP,
159   kE_DoubleFlat_QTP, kE_SesquiFlat_QTP, kE_Flat_QTP, kE_SemiFlat_QTP,
160   kE_Natural_QTP,
161   kE_SemiSharp_QTP, kE_Sharp_QTP, kE_SesquiSharp_QTP, kE_DoubleSharp_QTP,
162   kE_TripleSharp_QTP,
163 
164   kF_TripleFlat_QTP,
165   kF_DoubleFlat_QTP, kF_SesquiFlat_QTP, kF_Flat_QTP, kF_SemiFlat_QTP,
166   kF_Natural_QTP,
167   kF_SemiSharp_QTP, kF_Sharp_QTP, kF_SesquiSharp_QTP, kF_DoubleSharp_QTP,
168   kF_TripleSharp_QTP,
169 
170   kG_TripleFlat_QTP,
171   kG_DoubleFlat_QTP, kG_SesquiFlat_QTP, kG_Flat_QTP, kG_SemiFlat_QTP,
172   kG_Natural_QTP,
173   kG_SemiSharp_QTP, kG_Sharp_QTP, kG_SesquiSharp_QTP, kG_DoubleSharp_QTP,
174   kG_TripleSharp_QTP };
175 
176 void setDiatonicPitchKindAndAlterationKind (
177   msrQuarterTonesPitchKind quarterTonesPitchKind,
178   msrDiatonicPitchKind&    diatonicPitchKind,
179   msrAlterationKind&       alterationKind);
180 
181 msrQuarterTonesPitchKind quarterTonesPitchKindFromDiatonicPitchAndAlteration (
182   int                  inputLineNumber,
183   msrDiatonicPitchKind diatonicPitchKind,
184   msrAlterationKind    alterationKind);
185 
186 msrDiatonicPitchKind diatonicPitchKindFromQuarterTonesPitchKind (
187   int                      inputLineNumber,
188   msrQuarterTonesPitchKind quarterTonesPitchKind);
189 
190 msrQuarterTonesPitchKind quarterTonesPitchKindFromSemiTonesPitchKind (
191   msrSemiTonesPitchKind semiTonesPitchKind);
192 
193 msrSemiTonesPitchKind semiTonesPitchKindFromQuarterTonesPitchKind (
194   msrQuarterTonesPitchKind quarterTonesPitchKind);
195 
196 msrSemiTonesPitchKind semiTonesPitchKindFromString (
197   string theString);
198 
199 // alterations preferences
200 //______________________________________________________________________________
201 enum msrAlterationPreferenceKind {
202   kPreferFlat, kPreferNatural, kPreferSharp };
203 
204 msrQuarterTonesPitchKind msrSemiTonesPitchKindAsQuarterTonesPitchKind (
205   msrSemiTonesPitchKind       semiTonesPitchKind,
206   msrAlterationPreferenceKind alterationPreferenceKind);
207 
208 // intervals
209 //______________________________________________________________________________
210 enum msrIntervalKind {
211   k_NoIntervalKind,
212 
213   kDiminishedUnisson, kPerfectUnison, kAugmentedUnison,
214 
215   kDiminishedSecond, kMinorSecond, kMajorSecond, kAugmentedSecond,
216 
217   kDiminishedThird, kMinorThird, kMajorThird, kAugmentedThird,
218 
219   kDiminishedFourth, kPerfectFourth, kAugmentedFourth,
220 
221   kDiminishedFifth, kPerfectFifth, kAugmentedFifth,
222 
223   kDiminishedSixth, kMinorSixth, kMajorSixth, kAugmentedSixth,
224 
225   kDiminishedSeventh, kMinorSeventh, kMajorSeventh, kAugmentedSeventh,
226 
227   kDiminishedOctave, kPerfectOctave, kAugmentedOctave,
228 
229   kDiminishedNinth, kMinorNinth, kMajorNinth, kAugmentedNinth,
230 
231   kDiminishedTenth, kMinorTenth, kMajorTenth, kAugmentedTenth,
232 
233   kDiminishedEleventh, kPerfectEleventh, kAugmentedEleventh,
234 
235   kDiminishedTwelfth, kPerfectTwelfth, kAugmentedTwelfth,
236 
237   kDiminishedThirteenth, kMinorThirteenth, kMajorThirteenth, kAugmentedThirteenth };
238 
239 int msrIntervalKindAsSemiTones (
240   msrIntervalKind intervalKind);
241 
242 int msrIntervalKindAsQuarterTones (
243   msrIntervalKind intervalKind);
244 
245 string msrIntervalKindAsString (
246   msrIntervalKind intervaKindl);
247 
248 string msrIntervalKindAsShortString (
249   msrIntervalKind intervalKind);
250 
251 msrIntervalKind invertIntervalKind (
252   msrIntervalKind intervalKind);
253 
254 int intervalKindAsSemitones (
255   msrIntervalKind intervalKind);
256 
257 /* JMI
258 msrSemiTonesPitchKind noteAtIntervalKindFromNote (
259   msrIntervalKind             intervalKind,
260   msrSemiTonesPitchKind       semiTonesPitchKind,
261   msrAlterationPreferenceKind alterationPreferenceKind);
262 */
263 
264 msrSemiTonesPitchKind noteAtIntervalFromSemiTonesPitch (
265   int                   inputLineNumber,
266   msrIntervalKind       intervalKind,
267   msrSemiTonesPitchKind semiTonesPitchKind);
268 
269 msrQuarterTonesPitchKind noteAtIntervalFromQuarterTonesPitch (
270   int                      inputLineNumber,
271   msrIntervalKind          intervalKind,
272   msrQuarterTonesPitchKind quarterTonesPitchKind);
273 
274 msrIntervalKind intervalBetweenSemiTonesPitches (
275   msrSemiTonesPitchKind semiTonesPitch1,
276   msrSemiTonesPitchKind semiTonesPitch2);
277 
278 // harmonies
279 //______________________________________________________________________________
280 enum msrHarmonyKind {
281   k_NoHarmony,
282 
283   // MusicXML chords
284 
285   kMajorHarmony, kMinorHarmony,
286   kAugmentedHarmony, kDiminishedHarmony,
287 
288   kDominantHarmony,
289   kMajorSeventhHarmony, kMinorSeventhHarmony,
290   kDiminishedSeventhHarmony, kAugmentedSeventhHarmony,
291   kHalfDiminishedHarmony,
292   kMinorMajorSeventhHarmony,
293 
294   kMajorSixthHarmony, kMinorSixthHarmony,
295 
296   kDominantNinthHarmony,
297   kMajorNinthHarmony, kMinorNinthHarmony,
298 
299   kDominantEleventhHarmony, kMajorEleventhHarmony, kMinorEleventhHarmony,
300 
301   kDominantThirteenthHarmony, kMajorThirteenthHarmony, kMinorThirteenthHarmony,
302 
303   kSuspendedSecondHarmony, kSuspendedFourthHarmony,
304 
305   kNeapolitanHarmony, kItalianHarmony, kFrenchHarmony, kGermanHarmony,
306 
307   kPedalHarmony, kPowerHarmony, kTristanHarmony,
308 
309   // jazz-specific chords
310 
311   kMinorMajorNinth,                              // -maj9, minmaj9
312 
313   kDominantSuspendedFourthHarmony,               // 7sus4, domsus4
314   kDominantAugmentedFifthHarmony,                // 7#5, domaug5
315   kDominantMinorNinthHarmony,                    // 7b9, dommin9
316   kDominantAugmentedNinthDiminishedFifthHarmony, // 7#9b5, domaug9dim5
317   kDominantAugmentedNinthAugmentedFifthHarmony,  // 7#9#5, domaug9aug5
318   kDominantAugmentedEleventhHarmony,             // 7#11, domaug11
319 
320   kMajorSeventhAugmentedEleventhHarmony,         // maj7#11, maj7aug11
321 
322   // other
323 
324   kOtherHarmony,
325 
326   kNoneHarmony };
327 
328 string msrHarmonyKindAsString (
329   msrHarmonyKind harmonyKind);
330 
331 string msrHarmonyKindAsShortString (
332   msrHarmonyKind harmonyKind);
333 
334 string msrHarmonyKindShortName (
335   msrHarmonyKind harmonyKind);
336 
337 msrHarmonyKind msrHarmonyKindFromString (
338   string theString);
339 
340 string existingHarmonyKinds (int namesListMaxLength);
341 string existingHarmonyKindsNames (int namesListMaxLength);
342 
343 // constant
344 const int K_HARMONY_NO_INVERSION = -1;
345 
346 extern map<string, msrHarmonyKind>
347   gHarmonyKindsMap;
348 
349 //extern list<string>
350 //  gHarmonyKindsNamesList;
351 
352 void initializeHarmonyKinds ();
353 
354 // quarter tones pitches languages
355 //______________________________________________________________________________
356 enum msrQuarterTonesPitchesLanguageKind {
357   kNederlands, kCatalan, kDeutsch, kEnglish, kEspanol, kFrancais,
358   kItaliano, kNorsk, kPortugues, kSuomi, kSvenska, kVlaams };
359 
360 string msrQuarterTonesPitchesLanguageKindAsString (
361   msrQuarterTonesPitchesLanguageKind languageKind);
362 
363 string msrDiatonicPitchKindAsString ( // JMI
364   msrQuarterTonesPitchesLanguageKind languageKind,
365   msrDiatonicPitchKind               diatonicPitchKind);
366 
367 string msrQuarterTonesPitchKindAsString (
368   msrQuarterTonesPitchesLanguageKind languageKind,
369   msrQuarterTonesPitchKind           quarterTonesPitchKind);
370 
371 msrQuarterTonesPitchKind msrQuarterTonesPitchKindFromString (
372   msrQuarterTonesPitchesLanguageKind languageKind,
373   string                             quarterTonesPitchName);
374 
375 /* JMI
376 string msrSemiTonesPitchKindAsString (
377   msrQuarterTonesPitchesLanguageKind languageKind,
378   msrSemiTonesPitchKind              semiTonesPitchKind);
379   */
380 
381 string msrSemiTonesPitchKindAsFlatsAndSharps (
382   msrQuarterTonesPitchesLanguageKind languageKind,
383   msrSemiTonesPitchKind              semiTonesPitchKind);
384 
385 /* JMI
386 string msrQuarterTonesPitchKindAsFlatsAndSharps (
387   msrQuarterTonesPitchesLanguageKind languageKind,
388   msrQuarterTonesPitchKind           quarterTonesPitchKind);
389 */
390 
391 // enharmonies
392 //______________________________________________________________________________
393 msrSemiTonesPitchKind enharmonicSemiTonesPitch (
394   msrSemiTonesPitchKind       semiTonesPitchKind,
395   msrAlterationPreferenceKind alterationPreferenceKind);
396 
397 // durations
398 //______________________________________________________________________________
399 enum msrDurationKind {
400   // from longest to shortest for the algorithms
401   kMaxima, kLong, kBreve, kWhole, kHalf,
402   kQuarter,
403   kEighth, k16th, k32nd, k64th, k128th, k256th, k512th, k1024th,
404   k_NoDuration };
405 
406 msrDurationKind msrDurationKindFromString (
407   int    inputLineNumber,
408   string durationString);
409 
410 rational msrDurationKindAsWholeNotes (
411   msrDurationKind durationKind);
412 
413 msrDurationKind wholeNotesAsDurationKind (rational wholeNotes);
414 
415 string msrDurationKindAsString (msrDurationKind durationKind);
416 
417 // whole notes
418 //______________________________________________________________________________
419 string wholeNotesAsMsrString (
420   int      inputLineNumber,
421   rational wholeNotes,
422   int&     dotsNumber);
423 
424 string wholeNotesAsMsrString (
425   int      inputLineNumber,
426   rational wholeNotes);
427 
428 string multipleRestMeasuresWholeNotesAsMsrString (
429   int      inputLineNumber, // JMI
430   rational wholeNotes);
431 
432 // dotted durations
433 //______________________________________________________________________________
434 class msrDottedDuration
435 {
436 // JMI  protected:
437   public:
438 
439     // constructors/destructor
440     // ------------------------------------------------------
441 
442     msrDottedDuration ();
443 
444     msrDottedDuration (
445       msrDurationKind durationKind,
446       int             dotsNumber);
447 
448     virtual ~msrDottedDuration ();
449 
450   public:
451 
452     // set and get
453     // ------------------------------------------------------
454 
getDurationKind()455     msrDurationKind       getDurationKind () const
456                               { return fDurationKind; }
457 
getDotsNumber()458     int                   getDotsNumber () const
459                               { return fDotsNumber; }
460 
461     // services
462     // ------------------------------------------------------
463 
incrDotsNumber()464     void                  incrDotsNumber ()
465                               { fDotsNumber++; }
466 
467     rational              dottedDurationAsWholeNotes (
468                             int inputLineNumber) const;
469 
470     // visitors
471     // ------------------------------------------------------
472 
473 /* JMI
474     virtual void          acceptIn  (basevisitor* v);
475     virtual void          acceptOut (basevisitor* v);
476 
477     virtual void          browseData (basevisitor* v);
478 */
479 
480   public:
481 
482     // ------------------------------------------------------
483 
484     //virtual
485     void                  print (ostream& os) const;
486 
487   private:
488 
489     // fields
490     // ------------------------------------------------------
491 
492     msrDurationKind       fDurationKind;
493     int                   fDotsNumber;
494 };
495 EXP ostream& operator<< (ostream& os, const msrDottedDuration& elt);
496 
497 // semitone pitches and octave
498 // can be used as absolute, relative or fixed reference
499 //______________________________________________________________________________
500 class msrSemiTonesPitchAndOctave : public smartable
501 {
502   public:
503 
504     // creation from MusicXML
505     // ------------------------------------------------------
506 
507     static SMARTP<msrSemiTonesPitchAndOctave> create (
508       msrSemiTonesPitchKind semiTonesPitchKind,
509       int                   octave);
510 
511     SMARTP<msrSemiTonesPitchAndOctave> createSemiTonesPitchAndOctaveNewbornClone ();
512 
513     // creation from  a string
514     // ------------------------------------------------------
515 
516     static SMARTP<msrSemiTonesPitchAndOctave> createFromString (
517       int    inputLineNumber,
518       string theString);
519 
520   protected:
521 
522     // constructors/destructor
523     // ------------------------------------------------------
524 
525     msrSemiTonesPitchAndOctave (
526       msrSemiTonesPitchKind semiTonesPitchKind,
527       int                   octave);
528 
529     virtual ~msrSemiTonesPitchAndOctave ();
530 
531   public:
532 
533     // set and get
534     // ------------------------------------------------------
535 
getSemiTonesPitchKind()536     msrSemiTonesPitchKind getSemiTonesPitchKind () const
537                               { return fSemiTonesPitchKind; }
538 
incrementOctave()539     void                  incrementOctave ()
540                               { fOctave++; }
541 
decrementOctave()542     void                  decrementOctave ()
543                               { fOctave--; }
544 
getOctave()545     int                   getOctave () const
546                               { return fOctave; }
547 
548   public:
549 
550     // services
551     // ------------------------------------------------------
552 
553     string                semiTonesPitchKindAsString () const;
554     string                semiTonesPitchKindAsShortString () const;
555 
556     string                asString () const;
557 
558   public:
559 
560     // print
561     // ------------------------------------------------------
562 
563     virtual void          print (ostream& os) const;
564 
565   private:
566 
567     // fields
568     // ------------------------------------------------------
569 
570     msrSemiTonesPitchKind fSemiTonesPitchKind;
571     int                   fOctave;
572 };
573 typedef SMARTP<msrSemiTonesPitchAndOctave> S_msrSemiTonesPitchAndOctave;
574 EXP ostream& operator<< (ostream& os, const S_msrSemiTonesPitchAndOctave& elt);
575 
576 // length units
577 //______________________________________________________________________________
578 
579 enum msrLengthUnitKind {
580   kInchUnit, kCentimeterUnit, kMillimeterUnit };
581 
582 string msrLengthUnitKindAsString (
583   msrLengthUnitKind lengthUnitKind);
584 
585 string existingMsrLengthUnitKinds (int namesListMaxLength);
586 
587 extern map<string, msrLengthUnitKind>
588   gMsrLengthUnitKindsMap;
589 
590 void initializeMsrLengthUnitKindsMap ();
591 
592 // lengths
593 //______________________________________________________________________________
594 
595 class msrLength : public smartable
596 {
597   public:
598 
599     // creation
600     // ------------------------------------------------------
601 
602     static SMARTP<msrLength> create (
603       msrLengthUnitKind lengthUnitKind,
604       float             lengthValue);
605 
606   public:
607 
608     // constructors/destructor
609     // ------------------------------------------------------
610 
611     msrLength (
612       msrLengthUnitKind lengthUnitKind,
613       float             lengthValue);
614 
615     msrLength ();
616 
617     virtual ~msrLength ();
618 
619   public:
620 
621     // set and get
622     // ------------------------------------------------------
623 
setLengthUnitKind(msrLengthUnitKind value)624     void                  setLengthUnitKind (msrLengthUnitKind value)
625                               { fLengthUnitKind = value; }
626 
getLengthUnitKind()627     msrLengthUnitKind     getLengthUnitKind () const
628                               { return fLengthUnitKind; }
629 
setLengthValue(float value)630     void                  setLengthValue (float value)
631                               { fLengthValue = value; }
632 
getLengthValue()633     float                 getLengthValue () const
634                               { return fLengthValue; };
635 
636   public:
637 
638     // services
639     // ------------------------------------------------------
640 
641                           bool operator== (
642                             const msrLength& other) const
643                               {
644                                 return
645                                   fLengthUnitKind == other.fLengthUnitKind
646                                    &&
647                                   fLengthValue == other.fLengthValue;
648                               }
649 
650                           bool operator!= (
651                             const msrLength& other) const
652                               { return ! ((*this) == other); }
653 
654     void                  convertToLengthUnit (
655                             msrLengthUnitKind lengthUnitKind);
656 
657   public:
658 
659     // print
660     // ------------------------------------------------------
661 
662     string                asString () const;
663 
664     virtual void          print (ostream& os) const;
665 
666   private:
667 
668     // fields
669     // ------------------------------------------------------
670 
671     msrLengthUnitKind     fLengthUnitKind;
672 
673     float                 fLengthValue;
674 };
675 typedef SMARTP<msrLength> S_msrLength;
676 EXP ostream& operator<< (ostream& os, const S_msrLength& elt);
677 
678 // margins types
679 //______________________________________________________________________________
680 
681 enum msrMarginTypeKind {
682   kOddMargin, kEvenMargin, kBothMargins };
683 
684 string msrMarginTypeKindAsString (
685   msrMarginTypeKind marginTypeKind);
686 
687 string existingMsrMarginTypeKinds (int namesListMaxLength);
688 
689 extern map<string, msrMarginTypeKind>
690   gMsrMarginTypeKindsMap;
691 
692 void initializeMsrMarginTypeKindsMap ();
693 
694 // margins
695 //______________________________________________________________________________
696 
697 class msrMargin : public smartable
698 {
699   public:
700 
701     // creation
702     // ------------------------------------------------------
703 
704     static SMARTP<msrMargin> create (
705       msrMarginTypeKind marginTypeKind,
706       msrLength         marginLength);
707 
708   public:
709 
710     // constructors/destructor
711     // ------------------------------------------------------
712 
713     msrMargin (
714       msrMarginTypeKind marginTypeKind,
715       msrLength         marginLength);
716 
717     msrMargin ();
718 
719     virtual ~msrMargin ();
720 
721   public:
722 
723     // set and get
724     // ------------------------------------------------------
725 
setMarginTypeKind(msrMarginTypeKind & value)726     void                  setMarginTypeKind (msrMarginTypeKind& value)
727                               { fMarginTypeKind = value; }
728 
getMarginTypeKind()729     msrMarginTypeKind     getMarginTypeKind () const
730                               { return fMarginTypeKind; }
731 
setMarginLength(msrLength & value)732     void                  setMarginLength (msrLength& value)
733                               { fMarginLength = value; }
734 
getMarginLength()735     msrLength             getMarginLength () const
736                               { return fMarginLength; };
737 
738   public:
739 
740     // services
741     // ------------------------------------------------------
742 
743                           bool operator== (
744                             const msrMargin& other) const
745                               {
746                                 return
747                                   fMarginTypeKind == other.fMarginTypeKind
748                                    &&
749                                   fMarginLength == other.fMarginLength;
750                               }
751 
752                           bool operator!= (
753                             const msrMargin& other) const
754                               { return ! ((*this) == other); }
755 
756   public:
757 
758     // print
759     // ------------------------------------------------------
760 
761     string                asString () const;
762 
763     virtual void          print (ostream& os) const;
764 
765   private:
766 
767     // fields
768     // ------------------------------------------------------
769 
770 
771     msrMarginTypeKind     fMarginTypeKind;
772     msrLength             fMarginLength;
773 };
774 typedef SMARTP<msrMargin> S_msrMargin;
775 EXP ostream& operator<< (ostream& os, const S_msrMargin& elt);
776 
777 // fonts
778 //______________________________________________________________________________
779 class msrFontSize : public smartable
780 {
781   public:
782 
783     // data types
784     // ------------------------------------------------------
785 
786     enum msrFontSizeKind {
787       kFontSizeNone,
788       kFontSizeXXSmall, kFontSizeXSmall, kFontSizeSmall,
789       kFontSizeMedium,
790       kFontSizeLarge, kFontSizeXLarge, kFontSizeXXLarge,
791       kFontSizeNumeric };
792 
793     static string fontSizeKindAsString (
794       msrFontSizeKind fontSizeKind);
795 
796     // creation from MusicXML
797     // ------------------------------------------------------
798 
799     static SMARTP<msrFontSize> create (
800       msrFontSizeKind fontSizeKind);
801 
802     static SMARTP<msrFontSize> create (
803       float fontNumericSize);
804 
805   protected:
806 
807     // constructors/destructor
808     // ------------------------------------------------------
809 
810     msrFontSize (
811       msrFontSizeKind fontSizeKind);
812 
813     msrFontSize (
814       float numericFontSize);
815 
816     virtual ~msrFontSize ();
817 
818   public:
819 
820     // set and get
821     // ------------------------------------------------------
822 
getFontSizeKind()823     msrFontSizeKind       getFontSizeKind () const
824                               { return fFontSizeKind; }
825 
826     float                 getFontNumericSize ();
827 
828     // services
829     // ------------------------------------------------------
830 
831     string                fontSizeKindAsString () const;
832 
833     string                fontSizeAsString () const;
834 
835   public:
836 
837     // ------------------------------------------------------
838 
839     virtual void          print (ostream& os) const;
840 
841   private:
842 
843     // fields
844     // ------------------------------------------------------
845 
846     msrFontSizeKind       fFontSizeKind;
847 
848     float                 fFontNumericSize;
849                             // only relevant when
850                             // fFontSizeKind == kNumericFontSize
851 };
852 typedef SMARTP<msrFontSize> S_msrFontSize;
853 EXP ostream& operator<< (ostream& os, const S_msrFontSize& elt);
854 
855 enum msrFontStyleKind {
856   kFontStyleNone,
857   kFontStyleNormal, KFontStyleItalic };
858 
859 msrFontStyleKind msrFontStyleKindFromString (
860   int    inputLineNumber,
861   string fontStyleString);
862 
863 string msrFontStyleKindAsString (
864   msrFontStyleKind fontStyleKind);
865 
866 enum msrFontWeightKind {
867   kFontWeightNone,
868   kFontWeightNormal, kFontWeightBold };
869 
870 msrFontWeightKind msrFontWeightKindFromString (
871   int    inputLineNumber,
872   string fontWeightString);
873 
874 string msrFontWeightKindAsString (
875   msrFontWeightKind fontWeightKind);
876 
877 // alignement
878 //______________________________________________________________________________
879 /*
880   The justify entity is used to indicate left, center, or
881   right justification. The default value varies for different
882   elements. For elements where the justify attribute is present
883   but the halign attribute is not, the justify attribute
884   indicates horizontal alignment as well as justification.
885 */
886 
887 enum msrJustifyKind {
888   kJustifyNone,
889   kJustifyLeft, kJustifyCenter, kJustifyRight };
890 
891 msrJustifyKind msrJustifyKindFromString (
892   int    inputLineNumber,
893   string justifyString);
894 
895 string msrJustifyKindAsString (
896   msrJustifyKind justifyKind);
897 
898 enum msrHorizontalAlignmentKind {
899   kHorizontalAlignmentNone,
900   kHorizontalAlignmentLeft, kHorizontalAlignmentCenter, kHorizontalAlignmentRight };
901 
902 msrHorizontalAlignmentKind msrHorizontalAlignmentKindFromString (
903   int    inputLineNumber,
904   string horizontalAlignString);
905 
906 string msrHorizontalAlignmentKindAsString (
907   msrHorizontalAlignmentKind horizontalAlignmentKind);
908 
909 enum msrVerticalAlignmentKind {
910   kVerticalAlignmentNone,
911   kVerticalAlignmentTop, kVerticalAlignmentMiddle, kVerticalAlignmentBottom };
912 
913 msrVerticalAlignmentKind msrVerticalAlignmentKindFromString (
914   int    inputLineNumber,
915   string verticalAlignmentString);
916 
917 string msrVerticalAlignmentKindAsString (
918   msrVerticalAlignmentKind verticalAlignmentKind);
919 
920 // direction
921 //______________________________________________________________________________
922 enum msrDirectionKind {
923   kDirectionNone,
924   kDirectionUp, kDirectionDown };
925 
926 string msrDirectionKindAsString (
927   msrDirectionKind directionKind);
928 
929 // print object
930 //______________________________________________________________________________
931 enum msrPrintObjectKind {
932   kPrintObjectNone,
933   kPrintObjectYes, kPrintObjectNo};
934 
935 msrPrintObjectKind msrPrintObjectKindFromString (
936   int    inputLineNumber,
937   string printObjectString);
938 
939 string msrPrintObjectKindAsString (
940   msrPrintObjectKind printObjectKind);
941 
942 // placement
943 //______________________________________________________________________________
944 enum msrPlacementKind {
945   kPlacementNone,
946   kPlacementAbove, kPlacementBelow };
947 
948 msrPlacementKind msrPlacementKindFromString (
949   int    inputLineNumber,
950   string placementString);
951 
952 string msrPlacementKindAsString (
953   msrPlacementKind placementKind);
954 
955 // measure style
956 //______________________________________________________________________________
957 enum msrSlashTypeKind {
958   k_NoSlashType,
959   kSlashTypeStart, kSlashTypeStop };
960 
961 string msrSlashTypeKindAsString (
962   msrSlashTypeKind slashTypeKind);
963 
964 enum msrUseDotsKind {
965   k_NoUseDots,
966   kUseDotsYes, kUseDotsNo };
967 
968 msrUseDotsKind msrUseDotsFromString (
969   int    inputLineNumber,
970   string useDotsString);
971 
972 string msrUseDotsKindAsString (
973   msrUseDotsKind useDotsKind);
974 
975 enum msrSlashUseStemsKind {
976   k_NoSlashUseStems,
977   kSlashUseStemsYes, kSlashUseStemsNo };
978 
979 string msrSlashUseStemsKindAsString (
980   msrSlashUseStemsKind slashUseStemsKind);
981 
982 // line types
983 //______________________________________________________________________________
984 enum msrLineTypeKind {
985   kLineTypeSolid, kLineTypeDashed,
986   kLineTypeDotted, kLineTypeWavy };
987 
988 string msrLineTypeKindAsString (
989   msrLineTypeKind lineTypeKind);
990 
991 // tremolo types
992 //______________________________________________________________________________
993 enum msrTremoloTypeKind {
994   k_NoTremoloType,
995   kTremoloTypeSingle, kTremoloTypeStart, kTremoloTypeStop };
996 
997 string msrTremoloTypeKindAsString (
998   msrTremoloTypeKind tremoloTypeKind);
999 
1000 // technical types
1001 //______________________________________________________________________________
1002 enum msrTechnicalTypeKind { // JMI ???
1003   k_NoTechnicalType,
1004   kTechnicalTypeStart, kTechnicalTypeStop };
1005 
1006 string msrTechnicalTypeKindAsString (
1007   msrTechnicalTypeKind technicalTypeKind);
1008 
1009 // spanner types
1010 //______________________________________________________________________________
1011 enum msrSpannerTypeKind {
1012   k_NoSpannerType,
1013   kSpannerTypeStart, kSpannerTypeContinue, kSpannerTypeStop };
1014 
1015 string msrSpannerTypeKindAsString (
1016   msrSpannerTypeKind spannerTypeKind);
1017 
1018 // tuplet factors
1019 //______________________________________________________________________________
1020 class msrTupletFactor
1021 {
1022   public:
1023 
1024     // constructors/destructor
1025     // ------------------------------------------------------
1026 
1027     msrTupletFactor ();
1028 
1029     msrTupletFactor (
1030       int tupletActualNotes,
1031       int tupletNormalNotes);
1032 
1033     msrTupletFactor (
1034       rational rationalTupletFactor);
1035 
1036     virtual ~msrTupletFactor ();
1037 
1038   public:
1039 
1040     // set and get
1041     // ------------------------------------------------------
1042 
setTupletActualNotes(int actualNotes)1043     void                  setTupletActualNotes (int actualNotes)
1044                               { fTupletActualNotes = actualNotes; }
1045 
getTupletActualNotes()1046     int                   getTupletActualNotes () const
1047                               { return fTupletActualNotes; }
1048 
setTupletNormalNotes(int normalNotes)1049     void                  setTupletNormalNotes (int normalNotes)
1050                               { fTupletNormalNotes = normalNotes; }
1051 
getTupletNormalNotes()1052     int                   getTupletNormalNotes () const
1053                               { return fTupletNormalNotes; }
1054 
1055     // services
1056     // ------------------------------------------------------
1057 
isEqualToOne()1058     bool                  isEqualToOne () const
1059                               {
1060                                 return
1061                                   fTupletActualNotes == fTupletNormalNotes;
1062                               }
1063 
asRational()1064     rational              asRational () const
1065                             {
1066                               return
1067                                 rational (
1068                                   fTupletActualNotes,
1069                                   fTupletNormalNotes);
1070                             }
1071 
1072     // visitors
1073     // ------------------------------------------------------
1074 
1075 /* JMI
1076     virtual void          acceptIn  (basevisitor* v);
1077     virtual void          acceptOut (basevisitor* v);
1078 
1079     virtual void          browseData (basevisitor* v);
1080 */
1081 
1082   public:
1083 
1084     // ------------------------------------------------------
1085 
1086     string                asString () const;
1087 
1088     virtual void          print (ostream& os) const;
1089 
1090   private:
1091 
1092     // fields
1093     // ------------------------------------------------------
1094 
1095     int                   fTupletActualNotes;
1096     int                   fTupletNormalNotes;
1097 };
1098 EXP ostream& operator<< (ostream& os, const msrTupletFactor& elt);
1099 
1100 // chords intervals
1101 //______________________________________________________________________________
1102 class msrChordInterval;
1103 typedef SMARTP<msrChordInterval> S_msrChordInterval;
1104 
1105 class msrChordInterval : public smartable
1106 {
1107   public:
1108 
1109     // creation from MusicXML
1110     // ------------------------------------------------------
1111 
1112     static SMARTP<msrChordInterval> create (
1113       msrIntervalKind chordIntervalIntervalKind,
1114       int             chordIntervalRelativeOctave = 0);
1115                         // 0: up to the thirteenth,
1116                         // no relative octave is needed
1117 
1118     SMARTP<msrChordInterval> createChordIntervalNewbornClone ();
1119 
1120   protected:
1121 
1122     // constructors/destructor
1123     // ------------------------------------------------------
1124 
1125     msrChordInterval (
1126       msrIntervalKind chordIntervalIntervalKind,
1127       int             chordIntervalRelativeOctave);
1128 
1129     virtual ~msrChordInterval ();
1130 
1131   public:
1132 
1133     // set and get
1134     // ------------------------------------------------------
1135 
getChordIntervalIntervalKind()1136     msrIntervalKind       getChordIntervalIntervalKind () const
1137                               { return fChordIntervalIntervalKind; }
1138 
incrementChordIntervalRelativeOctave()1139     void                  incrementChordIntervalRelativeOctave ()
1140                               { fChordIntervalRelativeOctave++; }
1141 
decrementChordIntervalRelativeOctave()1142     void                  decrementChordIntervalRelativeOctave ()
1143                               { fChordIntervalRelativeOctave--; }
1144 
getChordIntervalRelativeOctave()1145     int                   getChordIntervalRelativeOctave () const
1146                               { return fChordIntervalRelativeOctave; }
1147 
1148     // services
1149     // ------------------------------------------------------
1150 
chordIntervalAsSemitones()1151     int                   chordIntervalAsSemitones () const
1152                               {
1153                                 return
1154                                   msrIntervalKindAsSemiTones (
1155                                     fChordIntervalIntervalKind);
1156                               }
1157 
1158     string                chordIntervalIntervalKindAsString () const;
1159     string                chordIntervalIntervalKindAsShortString () const;
1160 
1161     string                chordIntervalAsString () const;
1162     string                chordIntervalAsShortString () const;
1163 
1164     /*
1165       we handle intervals up to the thirteenth in chords,
1166       but operations on intervals are easier to compute
1167       in a normal form limited to an octave, hence:
1168     */
1169     void                  normalizeInterval ();
1170     void                  deNormalizeInterval ();
1171 
1172     S_msrChordInterval    intervalDifference (
1173                             S_msrChordInterval otherChordInterval);
1174     S_msrChordInterval    intervalSum (
1175                             S_msrChordInterval otherChordInterval);
1176 
1177     string                asString () const;
1178     string                asShortString () const;
1179 
1180     // visitors
1181     // ------------------------------------------------------
1182 
1183 /* JMI
1184     virtual void          acceptIn  (basevisitor* v);
1185     virtual void          acceptOut (basevisitor* v);
1186 
1187     virtual void          browseData (basevisitor* v);
1188 */
1189 
1190   public:
1191 
1192     // ------------------------------------------------------
1193 
1194     virtual void          print (ostream& os) const;
1195 
1196   private:
1197 
1198     // fields
1199     // ------------------------------------------------------
1200 
1201     msrIntervalKind       fChordIntervalIntervalKind;
1202 
1203     int                   fChordIntervalRelativeOctave;
1204 };
1205 typedef SMARTP<msrChordInterval> S_msrChordInterval;
1206 EXP ostream& operator<< (ostream& os, const S_msrChordInterval& elt);
1207 
1208 // chords structure
1209 //______________________________________________________________________________
1210 class msrChordStructure;
1211 typedef SMARTP<msrChordStructure> S_msrChordStructure;
1212 
1213 class msrChordStructure : public smartable
1214 {
1215   public:
1216 
1217     // creation from MusicXML
1218     // ------------------------------------------------------
1219 
1220     static SMARTP<msrChordStructure> createBare (
1221       msrHarmonyKind chordStructureHarmonyKind);
1222 
1223     static SMARTP<msrChordStructure> create (
1224       msrHarmonyKind chordStructureHarmonyKind);
1225 
1226     SMARTP<msrChordStructure> createChordStructureNewbornClone ();
1227 
1228   protected:
1229 
1230     // constructors/destructor
1231     // ------------------------------------------------------
1232 
1233     msrChordStructure (
1234       msrHarmonyKind chordStructureHarmonyKind);
1235 
1236     virtual ~msrChordStructure ();
1237 
1238   private:
1239 
1240     // initialization
1241     // ------------------------------------------------------
1242 
1243   public:
1244 
1245     // set and get
1246     // ------------------------------------------------------
1247 
getChordStructureHarmonyKind()1248     msrHarmonyKind        getChordStructureHarmonyKind () const
1249                               { return fChordStructureHarmonyKind; }
1250 
1251     const vector <S_msrChordInterval>&
getChordStructureIntervals()1252                           getChordStructureIntervals () const
1253                               { return fChordStructureIntervals; }
1254 
1255     // services
1256     // ------------------------------------------------------
1257 
1258     void                  appendChordIntervalToChordStructure (
1259                             S_msrChordInterval chordInterval);
1260 
1261     void                  populateChordStructure ();
1262 
1263     string                chordStructureAsString () const;
1264     string                chordStructureAsShortString () const;
1265 
1266     S_msrChordInterval    bassChordIntervalForChordInversion (
1267                             int inputLineNumber,
1268                             int inversionNumber);
1269 
1270     S_msrChordStructure   invertChordStructure (int inversion);
1271 
1272     static void           printAllChordsStructures (ostream& os);
1273 
1274     // visitors
1275     // ------------------------------------------------------
1276 /* JMI
1277     virtual void          acceptIn  (basevisitor* v);
1278     virtual void          acceptOut (basevisitor* v);
1279 
1280     virtual void          browseData (basevisitor* v);
1281 */
1282 
1283   public:
1284 
1285     // ------------------------------------------------------
1286 
1287     virtual void          print (ostream& os) const;
1288 
1289   private:
1290 
1291     // fields
1292     // ------------------------------------------------------
1293 
1294     msrHarmonyKind        fChordStructureHarmonyKind;
1295     vector<S_msrChordInterval>
1296                           fChordStructureIntervals;
1297 };
1298 typedef SMARTP<msrChordStructure> S_msrChordStructure;
1299 EXP ostream& operator<< (ostream& os, const S_msrChordStructure& elt);
1300 
1301 // chords contents
1302 //______________________________________________________________________________
1303 class msrChordContents : public smartable
1304 {
1305   public:
1306 
1307     // creation from MusicXML
1308     // ------------------------------------------------------
1309 
1310     static SMARTP<msrChordContents> create (
1311  // JMI     int                   inputLineNumber,
1312       msrSemiTonesPitchKind chordContentsRootNote,
1313       msrHarmonyKind        chordContentsHarmonyKind);
1314 
1315   protected:
1316 
1317     // constructors/destructor
1318     // ------------------------------------------------------
1319 
1320     msrChordContents (
1321  // JMI     int                   inputLineNumber,
1322       msrSemiTonesPitchKind chordContentsRootNote,
1323       msrHarmonyKind        chordContentsHarmonyKind);
1324 
1325     virtual ~msrChordContents ();
1326 
1327   public:
1328 
1329     // set and get
1330     // ------------------------------------------------------
1331 
1332     msrSemiTonesPitchKind
getChordContentsRootNote()1333                           getChordContentsRootNote () const
1334                               { return fChordContentsRootNote; }
1335 
getChordContentsHarmonyKind()1336     msrHarmonyKind        getChordContentsHarmonyKind () const
1337                               { return fChordContentsHarmonyKind; }
1338 
1339     const vector<S_msrSemiTonesPitchAndOctave>&
getChordElementsVector()1340                           getChordElementsVector () const
1341                               { return fChordElementsVector; }
1342 
1343     // services
1344     // ------------------------------------------------------
1345 
1346     string                chordContentsAsString () const;
1347     string                chordContentsAsShortString () const;
1348 
1349     msrSemiTonesPitchKind bassSemiTonesPitchKindForChordInversion (
1350                             int inputLineNumber,
1351                             int inversionNumber);
1352 
1353     static void           printAllChordsContents (
1354                             ostream&              os,
1355                             msrSemiTonesPitchKind semiTonesPitchKind);
1356 
1357     // visitors
1358     // ------------------------------------------------------
1359 /* JMI
1360     virtual void          acceptIn  (basevisitor* v);
1361     virtual void          acceptOut (basevisitor* v);
1362 
1363     virtual void          browseData (basevisitor* v);
1364 */
1365 
1366   public:
1367 
1368     // ------------------------------------------------------
1369 
1370     virtual void          print (ostream& os) const;
1371 
1372   private:
1373 
1374     // fields
1375     // ------------------------------------------------------
1376 
1377     msrSemiTonesPitchKind fChordContentsRootNote;
1378     msrHarmonyKind        fChordContentsHarmonyKind;
1379 
1380     vector<S_msrSemiTonesPitchAndOctave>
1381                           fChordElementsVector;
1382 };
1383 typedef SMARTP<msrChordContents> S_msrChordContents;
1384 EXP ostream& operator<< (ostream& os, const S_msrChordContents& elt);
1385 
1386 // chords details and analysis
1387 //______________________________________________________________________________
1388 void printChordDetails (
1389   ostream&              os,
1390   msrSemiTonesPitchKind rootSemiTonesPitchKind,
1391   msrHarmonyKind        harmonyKind);
1392 
1393 void printChordAnalysis (
1394   ostream&              os,
1395   msrSemiTonesPitchKind rootSemiTonesPitchKind,
1396   msrHarmonyKind        harmonyKind,
1397   int                   inversion);
1398 
1399 // RGB colors
1400 //______________________________________________________________________________
1401 class msrRGBColor {
1402   public:
1403 
1404     // constructors/destructor
1405     // ------------------------------------------------------
1406 
1407     msrRGBColor ();
1408 
1409     msrRGBColor (
1410       float theR,
1411       float theG,
1412       float theB);
1413 
1414     msrRGBColor (
1415       std::string theString);
1416 
1417     // set and get
1418     // ------------------------------------------------------
1419 
getR()1420     float                 getR () const
1421                               { return fR; }
1422 
getG()1423     float                 getG () const
1424                               { return fG; }
1425 
getB()1426     float                 getB () const
1427                               { return fB; }
1428 
1429   public:
1430 
1431     // services
1432     // ------------------------------------------------------
1433 
isEmpty()1434     bool                  isEmpty () const
1435                               {
1436                                 return
1437                                   fR < 0.0
1438                                     &&
1439                                   fG < 0.0
1440                                     &&
1441                                   fB < 0.0;
1442                               }
1443 
1444   public:
1445 
1446     // print
1447     // ------------------------------------------------------
1448 
1449     std::string           asString () const;
1450 
1451     void                  print (ostream& os) const;
1452 
1453   private:
1454 
1455     // fields
1456     // ------------------------------------------------------
1457 
1458     float                 fR;
1459     float                 fG;
1460     float                 fB;
1461 };
1462 EXP ostream& operator<< (ostream& os, const msrRGBColor& elt);
1463 
1464 // AlphaRGB colors
1465 //______________________________________________________________________________
1466 class msrAlphaRGBColor
1467 {
1468   public:
1469 
1470     // constructors/destructor
1471     // ------------------------------------------------------
1472 
1473     msrAlphaRGBColor (
1474       string colorRGB,
1475       string colorAlpha);
1476 
1477     msrAlphaRGBColor (
1478       string colorRGB);
1479 
1480     virtual ~msrAlphaRGBColor ();
1481 
1482   public:
1483 
1484     // set and get
1485     // ------------------------------------------------------
1486 
getColorRGB()1487     string                getColorRGB () const
1488                               { return fColorRGB; }
1489 
getColorAlpha()1490     string                getColorAlpha () const
1491                               { return fColorAlpha; }
1492 
1493     // services
1494     // ------------------------------------------------------
1495 
isEmpty()1496     bool                  isEmpty () const
1497                               {
1498                                 return
1499                                   fColorRGB.size () == 0
1500                                     &&
1501                                   fColorAlpha.size () == 0;
1502                               }
1503 
1504   public:
1505 
1506     // print
1507     // ------------------------------------------------------
1508 
1509     string                asString () const;
1510 
1511     void                  print (ostream& os) const;
1512 
1513   private:
1514 
1515     // fields
1516     // ------------------------------------------------------
1517 
1518     string                fColorRGB;   // hexadecimal, 6 digits
1519     string                fColorAlpha; // hexadecimal, 2 digits
1520 };
1521 EXP ostream& operator<< (ostream& os, const msrAlphaRGBColor& elt);
1522 
1523 // score notation kinds
1524 //______________________________________________________________________________
1525 enum msrScoreNotationKind {
1526   kScoreNotationWestern,
1527   kScoreNotationJianpu,
1528   kScoreNotationDiatonicAccordion };
1529 
1530 string msrScoreNotationKindAsString (
1531   msrScoreNotationKind scoreNotationKind);
1532 
1533 // global variables
1534 //______________________________________________________________________________
1535 extern map<msrHarmonyKind, S_msrChordStructure>
1536   gChordStructuresMap;
1537 
1538 void initializeChordStructuresMap ();
1539 
1540 void printChordStructuresMap ();
1541 
1542 extern map<string, msrQuarterTonesPitchesLanguageKind>
1543   gQuarterTonesPitchesLanguageKindsMap;
1544 
1545 extern map<msrQuarterTonesPitchKind, string> gNederlandsPitchNamesMap;
1546 extern map<msrQuarterTonesPitchKind, string> gCatalanPitchNamesMap;
1547 extern map<msrQuarterTonesPitchKind, string> gDeutschPitchNamesMap;
1548 extern map<msrQuarterTonesPitchKind, string> gEnglishPitchNamesMap;
1549 extern map<msrQuarterTonesPitchKind, string> gEspanolPitchNamesMap;
1550 extern map<msrQuarterTonesPitchKind, string> gFrancaisPitchNamesMap;
1551 extern map<msrQuarterTonesPitchKind, string> gItalianoPitchNamesMap;
1552 extern map<msrQuarterTonesPitchKind, string> gNorskPitchNamesMap;
1553 extern map<msrQuarterTonesPitchKind, string> gPortuguesPitchNamesMap;
1554 extern map<msrQuarterTonesPitchKind, string> gSuomiPitchNamesMap;
1555 extern map<msrQuarterTonesPitchKind, string> gSvenskaPitchNamesMap;
1556 extern map<msrQuarterTonesPitchKind, string> gVlaamsPitchNamesMap;
1557 
1558 void initializeQuarterTonesPitchesLanguageKinds ();
1559 
1560 string existingQuarterTonesPitchesLanguageKinds (int namesListMaxLength);
1561 
1562 // initialization
1563 //______________________________________________________________________________
1564 void initializeMSRBasicTypes ();
1565 
1566 
1567 } // namespace MusicXML2
1568 
1569 
1570 #endif
1571