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 ___lilypondOah___
14 #define ___lilypondOah___
15 
16 #include "oahBasicTypes.h"
17 
18 
19 namespace MusicXML2
20 {
21 
22 //______________________________________________________________________________
23 class lilypondScoreOutputKindAtom : public oahValuedAtom
24 {
25   public:
26 
27     // creation
28     // ------------------------------------------------------
29 
30     static SMARTP<lilypondScoreOutputKindAtom> create (
31       string               shortName,
32       string               longName,
33       string               description,
34       string               valueSpecification,
35       string               variableName,
36       lpsrScoreOutputKind& lilypondScoreOutputKindVariable);
37 
38   protected:
39 
40     // constructors/destructor
41     // ------------------------------------------------------
42 
43     lilypondScoreOutputKindAtom (
44       string               shortName,
45       string               longName,
46       string               description,
47       string               valueSpecification,
48       string               variableName,
49       lpsrScoreOutputKind& lilypondScoreOutputKindVariable);
50 
51     virtual ~lilypondScoreOutputKindAtom ();
52 
53   public:
54 
55     // set and get
56     // ------------------------------------------------------
57 
setScoreOutputKindVariableValue(lpsrScoreOutputKind value)58     void                  setScoreOutputKindVariableValue (
59                             lpsrScoreOutputKind value)
60                               {  fLpsrScoreOutputKindVariable = value; }
61 
62   public:
63 
64     // services
65     // ------------------------------------------------------
66 
67     S_oahValuedAtom       handleOptionUnderName (
68                             string   optionName,
69                             ostream& os);
70 
71     void                  handleValue (
72                             string   theString,
73                             ostream& os);
74 
75   public:
76 
77     // visitors
78     // ------------------------------------------------------
79 
80     virtual void          acceptIn  (basevisitor* v);
81     virtual void          acceptOut (basevisitor* v);
82 
83     virtual void          browseData (basevisitor* v);
84 
85     // print
86     // ------------------------------------------------------
87 
88     string                asShortNamedOptionString () const;
89     string                asActualLongNamedOptionString () const;
90 
91     void                  print (ostream& os) const;
92 
93     void                  printAtomOptionsValues (
94                             ostream& os,
95                             int      valueFieldWidth) const;
96 
97   private:
98 
99     // fields
100     // ------------------------------------------------------
101 
102     lpsrScoreOutputKind&  fLpsrScoreOutputKindVariable;
103 };
104 typedef SMARTP<lilypondScoreOutputKindAtom> S_lilypondScoreOutputKindAtom;
105 EXP ostream& operator<< (ostream& os, const S_lilypondScoreOutputKindAtom& elt);
106 
107 //______________________________________________________________________________
108 class lilypondAbsoluteOctaveEntryAtom : public oahAtomWithVariableName
109 {
110   public:
111 
112     // creation
113     // ------------------------------------------------------
114 
115     static SMARTP<lilypondAbsoluteOctaveEntryAtom> create (
116       string               shortName,
117       string               longName,
118       string               description,
119       string               variableName,
120       lpsrOctaveEntryKind& lpsrOctaveEntryKindVariable);
121 
122   protected:
123 
124     // constructors/destructor
125     // ------------------------------------------------------
126 
127     lilypondAbsoluteOctaveEntryAtom (
128       string               shortName,
129       string               longName,
130       string               description,
131       string               variableName,
132       lpsrOctaveEntryKind& lpsrOctaveEntryKindVariable);
133 
134     virtual ~lilypondAbsoluteOctaveEntryAtom ();
135 
136   public:
137 
138     // set and get
139     // ------------------------------------------------------
140 
141   public:
142 
143     // services
144     // ------------------------------------------------------
145 
146     S_oahValuedAtom       handleOptionUnderName (
147                             string   optionName,
148                             ostream& os);
149 
150   public:
151 
152     // visitors
153     // ------------------------------------------------------
154 
155     virtual void          acceptIn  (basevisitor* v);
156     virtual void          acceptOut (basevisitor* v);
157 
158     virtual void          browseData (basevisitor* v);
159 
160   public:
161 
162     // print
163     // ------------------------------------------------------
164 
165     void                  print (ostream& os) const;
166 
167     void                  printAtomOptionsValues (
168                             ostream& os,
169                             int      valueFieldWidth) const;
170 
171   private:
172 
173     // fields
174     // ------------------------------------------------------
175 
176     lpsrOctaveEntryKind&  fLpsrOctaveEntryKindVariable;
177 };
178 typedef SMARTP<lilypondAbsoluteOctaveEntryAtom> S_lilypondAbsoluteOctaveEntryAtom;
179 EXP ostream& operator<< (ostream& os, const S_lilypondAbsoluteOctaveEntryAtom& elt);
180 
181 //______________________________________________________________________________
182 class lilypondRelativeOctaveEntryAtom : public oahValuedAtom
183 {
184   public:
185 
186     // creation
187     // ------------------------------------------------------
188 
189     static SMARTP<lilypondRelativeOctaveEntryAtom> create (
190       string                        shortName,
191       string                        longName,
192       string                        description,
193       string                        valueSpecification,
194       string                        variableName,
195       lpsrOctaveEntryKind&          lpsrOctaveEntryKindVariable,
196       S_msrSemiTonesPitchAndOctave& lilypondRelativeOctaveEntryVariable);
197 
198   protected:
199 
200     // constructors/destructor
201     // ------------------------------------------------------
202 
203     lilypondRelativeOctaveEntryAtom (
204       string                        shortName,
205       string                        longName,
206       string                        description,
207       string                        valueSpecification,
208       string                        variableName,
209       lpsrOctaveEntryKind&          lpsrOctaveEntryKindVariable,
210       S_msrSemiTonesPitchAndOctave& lilypondRelativeOctaveEntryVariable);
211 
212     virtual ~lilypondRelativeOctaveEntryAtom ();
213 
214   public:
215 
216     // set and get
217     // ------------------------------------------------------
218 
setRelativeOctaveEntryVariableValue(S_msrSemiTonesPitchAndOctave value)219     void                  setRelativeOctaveEntryVariableValue (
220                             S_msrSemiTonesPitchAndOctave value)
221                               {
222                                 fMsrSemiTonesPitchAndOctaveVariable = value;
223                               }
224 
225   public:
226 
227     // services
228     // ------------------------------------------------------
229 
230     S_oahValuedAtom       handleOptionUnderName (
231                             string   optionName,
232                             ostream& os);
233 
234     void                  handleValue (
235                             string   theString,
236                             ostream& os);
237 
238   public:
239 
240     // visitors
241     // ------------------------------------------------------
242 
243     virtual void          acceptIn  (basevisitor* v);
244     virtual void          acceptOut (basevisitor* v);
245 
246     virtual void          browseData (basevisitor* v);
247 
248   public:
249 
250     // print
251     // ------------------------------------------------------
252 
253     string                asShortNamedOptionString () const;
254     string                asActualLongNamedOptionString () const;
255 
256     void                  print (ostream& os) const;
257 
258     void                  printAtomOptionsValues (
259                             ostream& os,
260                             int      valueFieldWidth) const;
261 
262   private:
263 
264     // fields
265     // ------------------------------------------------------
266 
267     lpsrOctaveEntryKind&  fLpsrOctaveEntryKindVariable;
268 
269     S_msrSemiTonesPitchAndOctave&
270                           fMsrSemiTonesPitchAndOctaveVariable;
271 };
272 typedef SMARTP<lilypondRelativeOctaveEntryAtom> S_lilypondRelativeOctaveEntryAtom;
273 EXP ostream& operator<< (ostream& os, const S_lilypondRelativeOctaveEntryAtom& elt);
274 
275 //______________________________________________________________________________
276 class lilypondFixedOctaveEntryAtom : public oahValuedAtom
277 {
278   public:
279 
280     // creation
281     // ------------------------------------------------------
282 
283     static SMARTP<lilypondFixedOctaveEntryAtom> create (
284       string                        shortName,
285       string                        longName,
286       string                        description,
287       string                        valueSpecification,
288       string                        variableName,
289       lpsrOctaveEntryKind&          lpsrOctaveEntryKindVariable,
290       S_msrSemiTonesPitchAndOctave& lilypondFixedOctaveEntryVariable);
291 
292   protected:
293 
294     // constructors/destructor
295     // ------------------------------------------------------
296 
297     lilypondFixedOctaveEntryAtom (
298       string                        shortName,
299       string                        longName,
300       string                        description,
301       string                        valueSpecification,
302       string                        variableName,
303       lpsrOctaveEntryKind&          lpsrOctaveEntryKindVariable,
304       S_msrSemiTonesPitchAndOctave& lilypondFixedOctaveEntryVariable);
305 
306     virtual ~lilypondFixedOctaveEntryAtom ();
307 
308   public:
309 
310     // set and get
311     // ------------------------------------------------------
312 
setFixedOctaveEntryVariableValue(S_msrSemiTonesPitchAndOctave value)313     void                  setFixedOctaveEntryVariableValue (
314                             S_msrSemiTonesPitchAndOctave value)
315                               {
316                                 fMsrSemiTonesPitchAndOctaveVariable = value;
317                               }
318 
319   public:
320 
321     // services
322     // ------------------------------------------------------
323 
324     S_oahValuedAtom       handleOptionUnderName (
325                             string   optionName,
326                             ostream& os);
327 
328     void                  handleValue (
329                             string   theString,
330                             ostream& os);
331 
332   public:
333 
334     // visitors
335     // ------------------------------------------------------
336 
337     virtual void          acceptIn  (basevisitor* v);
338     virtual void          acceptOut (basevisitor* v);
339 
340     virtual void          browseData (basevisitor* v);
341 
342   public:
343 
344     // print
345     // ------------------------------------------------------
346 
347     string                asShortNamedOptionString () const;
348     string                asActualLongNamedOptionString () const;
349 
350     void                  print (ostream& os) const;
351 
352     void                  printAtomOptionsValues (
353                             ostream& os,
354                             int      valueFieldWidth) const;
355 
356   private:
357 
358     // fields
359     // ------------------------------------------------------
360 
361     lpsrOctaveEntryKind&  fLpsrOctaveEntryKindVariable;
362 
363     S_msrSemiTonesPitchAndOctave&
364                           fMsrSemiTonesPitchAndOctaveVariable;
365 };
366 typedef SMARTP<lilypondFixedOctaveEntryAtom> S_lilypondFixedOctaveEntryAtom;
367 EXP ostream& operator<< (ostream& os, const S_lilypondFixedOctaveEntryAtom& elt);
368 
369 //______________________________________________________________________________
370 class lilypondAccidentalStyleKindAtom : public oahValuedAtom
371 {
372   public:
373 
374     // creation
375     // ------------------------------------------------------
376 
377     static SMARTP<lilypondAccidentalStyleKindAtom> create (
378       string             shortName,
379       string             longName,
380       string             description,
381       string             valueSpecification,
382       string             variableName,
383       lpsrAccidentalStyleKind&
384                          lilypondAccidentalStyleKindVariable);
385 
386   protected:
387 
388     // constructors/destructor
389     // ------------------------------------------------------
390 
391     lilypondAccidentalStyleKindAtom (
392       string             shortName,
393       string             longName,
394       string             description,
395       string             valueSpecification,
396       string             variableName,
397       lpsrAccidentalStyleKind&
398                          lilypondAccidentalStyleKindVariable);
399 
400     virtual ~lilypondAccidentalStyleKindAtom ();
401 
402   public:
403 
404     // set and get
405     // ------------------------------------------------------
406 
setLpsrAccidentalStyleKindVariable(lpsrAccidentalStyleKind value)407     void                  setLpsrAccidentalStyleKindVariable (
408                             lpsrAccidentalStyleKind value)
409                               {
410                                 fLpsrAccidentalStyleKindVariable = value;
411                               }
412 
413   public:
414 
415     // services
416     // ------------------------------------------------------
417 
418     S_oahValuedAtom       handleOptionUnderName (
419                             string   optionName,
420                             ostream& os);
421 
422     void                  handleValue (
423                             string   theString,
424                             ostream& os);
425 
426   public:
427 
428     // visitors
429     // ------------------------------------------------------
430 
431     virtual void          acceptIn  (basevisitor* v);
432     virtual void          acceptOut (basevisitor* v);
433 
434     virtual void          browseData (basevisitor* v);
435 
436   public:
437 
438     // print
439     // ------------------------------------------------------
440 
441     string                asShortNamedOptionString () const;
442     string                asActualLongNamedOptionString () const;
443 
444     void                  print (ostream& os) const;
445 
446     void                  printAtomOptionsValues (
447                             ostream& os,
448                             int      valueFieldWidth) const;
449 
450   private:
451 
452     // fields
453     // ------------------------------------------------------
454 
455     lpsrAccidentalStyleKind&
456                           fLpsrAccidentalStyleKindVariable;
457 };
458 typedef SMARTP<lilypondAccidentalStyleKindAtom> S_lilypondAccidentalStyleKindAtom;
459 EXP ostream& operator<< (ostream& os, const S_lilypondAccidentalStyleKindAtom& elt);
460 
461 //______________________________________________________________________________
462 class lilypondChordsDisplayAtom : public oahValuedAtom
463 {
464   public:
465 
466     // creation
467     // ------------------------------------------------------
468 
469     static SMARTP<lilypondChordsDisplayAtom> create (
470       string                shortName,
471       string                longName,
472       string                description,
473       string                valueSpecification,
474       string                variableName,
475       list<pair<string, string> >&
476                             lilypondChordsDisplayVariable);
477 
478   protected:
479 
480     // constructors/destructor
481     // ------------------------------------------------------
482 
483     lilypondChordsDisplayAtom (
484       string                shortName,
485       string                longName,
486       string                description,
487       string                valueSpecification,
488       string                variableName,
489       list<pair<string, string> >&
490                             lilypondChordsDisplayVariable);
491 
492     virtual ~lilypondChordsDisplayAtom ();
493 
494   public:
495 
496     // set and get
497     // ------------------------------------------------------
498 
setStringsPairListVariable(pair<string,string> value)499     void                  setStringsPairListVariable (
500                             pair<string, string> value)
501                               {
502                                 fStringsPairListVariable.push_back (value);
503                               }
504 
505     const list<pair<string, string> >&
getStringsPairListVariable()506                           getStringsPairListVariable ()
507                               { return fStringsPairListVariable; }
508 
509   public:
510 
511     // services
512     // ------------------------------------------------------
513 
514     S_oahValuedAtom       handleOptionUnderName (
515                             string   optionName,
516                             ostream& os);
517 
518     void                  handleValue (
519                             string  theString,
520                             ostream& os);
521 
522   public:
523 
524     // visitors
525     // ------------------------------------------------------
526 
527     string                asShortNamedOptionString () const;
528     string                asActualLongNamedOptionString () const;
529 
530     virtual void          acceptIn  (basevisitor* v);
531     virtual void          acceptOut (basevisitor* v);
532 
533     virtual void          browseData (basevisitor* v);
534 
535   public:
536 
537     // print
538     // ------------------------------------------------------
539 
540     void                  print (ostream& os) const;
541 
542     void                  printAtomOptionsValues (
543                             ostream& os,
544                             int      valueFieldWidth) const;
545 
546   private:
547 
548     // fields
549     // ------------------------------------------------------
550 
551     list<pair<string, string> >&
552                           fStringsPairListVariable;
553 };
554 typedef SMARTP<lilypondChordsDisplayAtom> S_lilypondChordsDisplayAtom;
555 EXP ostream& operator<< (ostream& os, const S_lilypondChordsDisplayAtom& elt);
556 
557 //______________________________________________________________________________
558 class lilypondLyricsDurationsKindAtom : public oahValuedAtom
559 {
560   public:
561 
562     // creation
563     // ------------------------------------------------------
564 
565     static SMARTP<lilypondLyricsDurationsKindAtom> create (
566       string             shortName,
567       string             longName,
568       string             description,
569       string             valueSpecification,
570       string             variableName,
571       lpsrLyricsDurationsKind&
572                          lilypondLyricsDurationsKindVariable);
573 
574   protected:
575 
576     // constructors/destructor
577     // ------------------------------------------------------
578 
579     lilypondLyricsDurationsKindAtom (
580       string             shortName,
581       string             longName,
582       string             description,
583       string             valueSpecification,
584       string             variableName,
585       lpsrLyricsDurationsKind&
586                          lilypondLyricsDurationsKindVariable);
587 
588     virtual ~lilypondLyricsDurationsKindAtom ();
589 
590   public:
591 
592     // set and get
593     // ------------------------------------------------------
594 
setLpsrLyricsDurationsKindVariable(lpsrLyricsDurationsKind value)595     void                  setLpsrLyricsDurationsKindVariable (
596                             lpsrLyricsDurationsKind value)
597                               {
598                                 fLpsrLyricsDurationsKindVariable = value;
599                               }
600 
601   public:
602 
603     // services
604     // ------------------------------------------------------
605 
606     S_oahValuedAtom       handleOptionUnderName (
607                             string   optionName,
608                             ostream& os);
609 
610     void                  handleValue (
611                             string   theString,
612                             ostream& os);
613 
614   public:
615 
616     // visitors
617     // ------------------------------------------------------
618 
619     virtual void          acceptIn  (basevisitor* v);
620     virtual void          acceptOut (basevisitor* v);
621 
622     virtual void          browseData (basevisitor* v);
623 
624   public:
625 
626     // print
627     // ------------------------------------------------------
628 
629     string                asShortNamedOptionString () const;
630     string                asActualLongNamedOptionString () const;
631 
632     void                  print (ostream& os) const;
633 
634     void                  printAtomOptionsValues (
635                             ostream& os,
636                             int      valueFieldWidth) const;
637 
638   private:
639 
640     // fields
641     // ------------------------------------------------------
642 
643     lpsrLyricsDurationsKind&
644                           fLpsrLyricsDurationsKindVariable;
645 };
646 typedef SMARTP<lilypondLyricsDurationsKindAtom> S_lilypondLyricsDurationsKindAtom;
647 EXP ostream& operator<< (ostream& os, const S_lilypondLyricsDurationsKindAtom& elt);
648 
649 //______________________________________________________________________________
650 class lilypondOah : public oahGroup
651 {
652   public:
653 
654     // data types
655     // ------------------------------------------------------
656 
657     enum scoreNotationKind {
658       kWesternNotation, kJianpuNotation, kABCNotation };
659 
660     static string scoreNotationKindAsString (
661       scoreNotationKind notationKind);
662 
663   public:
664 
665     // creation
666     // ------------------------------------------------------
667 
668     static SMARTP<lilypondOah> create (
669       S_oahHandler handlerUpLink);
670 
671     SMARTP<lilypondOah>   createCloneWithDetailedTrace ();
672 
673   public:
674 
675     // initialisation
676     // ------------------------------------------------------
677 
678     void                  initializeLilypondOah (
679                             bool boolOptionsInitialValue);
680 
681   public:
682 
683     // constructors/destructor
684     // ------------------------------------------------------
685 
686     lilypondOah (
687       S_oahHandler handlerUpLink);
688 
689     virtual ~lilypondOah ();
690 
691     // set and get
692     // ------------------------------------------------------
693 
694  // JMI   bool                  setAccidentalStyleKind (
695   //                          lpsrAccidentalStyleKind accidentalStyleKind);
696 
697     bool                  setScoreOutputKind (
698                             string outputKind);
699 
700   public:
701 
702     // quiet mode
703     // ------------------------------------------------------
704 
705     void                  enforceQuietness ();
706 
707   public:
708 
709     // consistency check
710     // ------------------------------------------------------
711 
712     virtual void          checkOptionsConsistency ();
713 
714   public:
715 
716     // public services
717     // ------------------------------------------------------
718 
719   private:
720 
721     // private services
722     // ------------------------------------------------------
723 
724     void                  initializeIdentificationOptions (
725                             bool boolOptionsInitialValue);
726 
727     void                  initializeEngraversOptions (
728                             bool boolOptionsInitialValue);
729 
730     void                  initializeClefsKeysTimesOptions (
731                             bool boolOptionsInitialValue);
732 
733     void                  initializeNotesOptions (
734                             bool boolOptionsInitialValue);
735 
736     void                  initializeBarsOptions (
737                             bool boolOptionsInitialValue);
738 
739     void                  initializeLineBreaksOptions (
740                             bool boolOptionsInitialValue);
741 
742     void                  initializePageBreaksOptions (
743                             bool boolOptionsInitialValue);
744 
745     void                  initializeStavesOptions (
746                             bool boolOptionsInitialValue);
747 
748     void                  initializeChordsOptions (
749                             bool boolOptionsInitialValue);
750 
751     void                  initializeTupletsOptions (
752                             bool boolOptionsInitialValue);
753 
754     void                  initializeRepeatOptions (
755                             bool boolOptionsInitialValue);
756 
757     void                  initializeOrnamentsOptions (
758                             bool boolOptionsInitialValue);
759 
760     void                  initializeChordsDisplayOptions (
761                             bool boolOptionsInitialValue);
762 
763     void                  initializeLyricsOptions (
764                             bool boolOptionsInitialValue);
765 
766     void                  initializeFontsOptions (
767                             bool boolOptionsInitialValue);
768 
769     void                  initializeCodeGenerationOptions (
770                             bool boolOptionsInitialValue);
771 
772     void                  initializeScoreNotationOptions (
773                             bool boolOptionsInitialValue);
774 
775     void                  initializeMidiOptions (
776                             bool boolOptionsInitialValue);
777 
setOctaveEntryKindToAbsolute()778     void                  setOctaveEntryKindToAbsolute () // JMI ???
779                               {
780                                 fOctaveEntryKind =
781                                   kOctaveEntryAbsolute;
782                               }
783 
784   public:
785 
786     // visitors
787     // ------------------------------------------------------
788 
789     virtual void          acceptIn  (basevisitor* v);
790     virtual void          acceptOut (basevisitor* v);
791 
792     virtual void          browseData (basevisitor* v);
793 
794   public:
795 
796     // print
797     // ------------------------------------------------------
798 
799     void                  printLilypondOahHelp ();
800 
801     void                  printLilypondOahValues (int fieldWidth);
802 
803     virtual void          printAtomOptionsValues (
804                             ostream& os,
805                             int      valueFieldWidth) const;
806 
807   public:
808 
809     // identification
810     // --------------------------------------
811 
812     // MusicXML informations
813     string                fRights;
814     string                fComposer;
815     string                fArranger;
816     string                fPoet;
817     string                fLyricist;
818     string                fSoftware;
819 
820     // LilyPond informations
821     string                fDedication;
822     string                fPiece;
823     string                fOpus;
824     string                fTitle;
825     string                fSubTitle;
826     string                fSubSubTitle;
827     string                fInstrument;
828     string                fMeter;
829     string                fTagline;
830     string                fCopyright;
831 
832 
833     // names
834     // --------------------------------------
835 
836 
837     // engravers
838     // --------------------------------------
839 
840     bool                  fAmbitusEngraver;
841     bool                  fCustosEngraver;
842 
843 
844     // clefs, keys, times
845     // --------------------------------------
846 
847     bool                  fCommentClefChanges;
848 
849     bool                  fNumericalTime;
850 
851     // notes
852     // --------------------------------------
853 
854     lpsrOctaveEntryKind   fOctaveEntryKind;
855 
856     // this is relevant only for relative octave entry kinds
857     S_msrSemiTonesPitchAndOctave
858                           fRelativeOctaveEntrySemiTonesPitchAndOctave;
859     // this is relevant only for fixed octave entry kinds
860     S_msrSemiTonesPitchAndOctave
861                           fFixedOctaveEntrySemiTonesPitchAndOctave;
862 
863     S_msrSemiTonesPitchAndOctave
864                           fSemiTonesPitchAndOctaveDefaultValue;
865 
866 
867     bool                  fAllDurations;
868 
869     bool                  fStems;
870 
871     bool                  fNoAutoBeaming;
872     bool                  fNoBeams;
873 
874     bool                  fRomanStringNumbers;
875     bool                  fAvoidOpenStrings;
876 
877     lpsrAccidentalStyleKind
878                           fAccidentalStyleKind;
879 
880     bool                  fCompressFullMeasureRests;
881 
882     bool                  fInputLineNumbers;
883     bool                  fOriginalMeasureNumbers;
884     bool                  fPositionsInMeasures;
885 
886 
887     // bars and measures
888     // --------------------------------------
889 
890     bool                  fShowAllBarNumbers;
891 
892     map<string, int>      fResetMeasureElementMeasureNumberMap;
893     map<string, int>      fAddEmptyMeasuresAfterMeasureNumberMap;
894 
895     set<int>              fBoxAroundBarNumberSet;
896 
897 
898     // line breaks
899     // --------------------------------------
900 
901     bool                  fIgnoreMusicXMLLineBreaks;
902 
903     bool                  fBreakLinesAtIncompleteRightMeasures;
904 
905     int                   fSeparatorLineEveryNMeasures;
906 
907     set<string>           fBreakLineAfterMeasureNumberSet;
908 
909     // page breaks
910     // --------------------------------------
911 
912     bool                  fIgnoreMusicXMLPageBreaks;
913 
914     set<string>           fBreakPageAfterMeasureNumberSet;
915 
916 
917     // staves
918     // --------------------------------------
919 
920     bool                  fModernTab;
921     bool                  fTabFullNotation;
922 
923     bool                  fKeepStaffSize;
924 
925     msrRGBColor           fLedgerLinesRGBColor; // #(rgb-color 1.0 0.9 0.5)
926     bool                  fLedgerLinesRGBColorHasBeenSet;
927 
928     // chords
929     // --------------------------------------
930 
931     bool                  fConnectArpeggios;
932 
933 
934     // tuplets
935     // --------------------------------------
936 
937     bool                  fIndentTuplets;
938 
939 
940     // repeats
941     // --------------------------------------
942 
943     bool                  fKeepRepeatBarlines;  // otherwise let LilyPond do the job
944     bool                  fRepeatBrackets;
945     bool                  fIgnoreRepeatNumbers; // and let LilyPond do the job
946 
947 
948     // ornaments
949     // --------------------------------------
950 
951     rational              fDelayedOrnamentsFraction;
952 
953 
954     // chords display
955     // --------------------------------------
956 
957     list<pair<string, string> >
958                           fChordsDisplayList;
959     bool                  fJazzChordsDisplay;
960     string                fJazzChordsDisplayLilypondcode;
961 
962 
963     // fonts
964     // --------------------------------------
965 
966     bool                  fJazzFonts;
967 
968 
969     // code generation
970     // --------------------------------------
971 
972     bool                  fXml2lyInfos;
973 
974     bool                  fComments;
975 
976     bool                  fGlobal;
977 
978     bool                  fDisplayMusic;
979 
980     bool                  fNoLilypondCode;
981 
982     bool                  fNoLilypondLyrics;
983 
984     bool                  fLilypondCompileDate;
985 
986     bool                  fPointAndClickOff;
987 
988     bool                  fDraftMode;
989 
990     bool                  fWhiteNoteHeads;
991 
992 
993     // score notation
994     // --------------------------------------
995 
996     // scoreNotationKind     fScoreNotationKind; JMI ???
997     bool                  fJianpu;
998 
999 
1000     // lyrics alignment
1001     // --------------------------------------
1002 
1003     lpsrLyricsDurationsKind
1004                           fLyricsDurationsKind;
1005 
1006     // midi
1007     // --------------------------------------
1008 
1009     msrMidiTempo          fMidiTempo;
1010 
1011     bool                  fNoMidi;
1012 };
1013 typedef SMARTP<lilypondOah> S_lilypondOah;
1014 EXP ostream& operator<< (ostream& os, const S_lilypondOah& elt);
1015 
1016 EXP extern S_lilypondOah gLilypondOah;
1017 EXP extern S_lilypondOah gLilypondOahUserChoices;
1018 EXP extern S_lilypondOah gLilypondOahWithDetailedTrace;
1019 
1020 // JMI typedef void (lilypondOah::*lilypondOahMethodPtr)(); //MyTypedef is a type!
1021 
1022 /*
1023   It's worth noting that, as of C++11, you could write this expression
1024   as a more legible using statement:
1025     using lilypondOahMethodPtr = void (lilypondOah::*)();
1026 */
1027 
1028 //______________________________________________________________________________
1029 void initializeLilypondOahHandling (
1030   S_oahHandler handler);
1031 
1032 
1033 }
1034 
1035 
1036 #endif
1037 
1038     /* JMI ???
1039       workNumber
1040       workTitle
1041       movementNumber,
1042       movementTitle,
1043       scoreInstrument
1044       miscellaneousField
1045 
1046       partGroupName
1047       partGroupNameDisplayText
1048       partGroupAbbrevation
1049       partGroupInstrumentName
1050 
1051       partID
1052       partMsrName
1053       partName
1054       partAbbrevation
1055       partInstrumentName
1056       partInstrumentAbbreviation
1057 
1058       staffInstrumentName
1059       staffInstrumentAbbreviation
1060 
1061       pickDedication
1062       pickTitle
1063       pickSubTitle
1064       pickSubSubTitle
1065 
1066       pickInstrument
1067 
1068       pickTagline
1069       pickCopyright
1070     */
1071 
1072 
1073 /* JMI
1074 //______________________________________________________________________________
1075 class lilypondBreakPageAfterMeasureNumberAtom : public oahValuedAtom
1076 {
1077   public:
1078 
1079     // creation
1080     // ------------------------------------------------------
1081 
1082     static SMARTP<lilypondBreakPageAfterMeasureNumberAtom> create (
1083       string       shortName,
1084       string       longName,
1085       string       description,
1086       string       valueSpecification,
1087       string       variableName,
1088       set<string>& S_lilypondAbsoluteOctaveEntryAtomtringSetVariable);
1089 
1090   protected:
1091 
1092     // constructors/destructor
1093     // ------------------------------------------------------
1094 
1095     lilypondBreakPageAfterMeasureNumberAtom (
1096       string       shortName,
1097       string       longName,
1098       string       description,
1099       string       valueSpecification,
1100       string       variableName,
1101       set<string>& fStringSetVariable);
1102 
1103     virtual ~lilypondBreakPageAfterMeasureNumberAtom ();
1104 
1105   public:
1106 
1107     // set and get
1108     // ------------------------------------------------------
1109 
1110     const set<string>&    getStringSetVariable ()
1111                               { return fStringSetVariable; }
1112 
1113     // services
1114     // ------------------------------------------------------
1115 
1116     S_oahValuedAtom       handleOptionUnderName (
1117                             string   optionName,
1118                             ostream& os);
1119 
1120     void                  handleValue (
1121                             string   theString,
1122                             ostream& os);
1123 
1124     // print
1125     // ------------------------------------------------------
1126 
1127     void                  print (ostream& os) const;
1128 
1129     void                  printAtomOptionsValues (
1130                             ostream& os,
1131                             int      valueFieldWidth) const;
1132 
1133   private:
1134 
1135     // fields
1136     // ------------------------------------------------------
1137 
1138     set<string>&          fStringSetVariable;
1139 };
1140 typedef SMARTP<lilypondBreakPageAfterMeasureNumberAtom> S_lilypondBreakPageAfterMeasureNumberAtom;
1141 EXP ostream& operator<< (ostream& os, const S_lilypondBreakPageAfterMeasureNumberAtom& elt);
1142 */
1143 
1144 /*
1145     enum {
1146       workNumber
1147       workTitle
1148       movementNumber,
1149       movementTitle,
1150       scoreInstrument
1151       miscellaneousField
1152 
1153       partGroupName
1154       partGroupNameDisplayText
1155       partGroupAbbrevation
1156       partGroupInstrumentName
1157 
1158       partID
1159       partMsrName
1160       partName
1161       partAbbrevation
1162       partInstrumentName
1163       partInstrumentAbbreviation
1164 
1165       staffInstrumentName
1166       staffInstrumentAbbreviation
1167       };
1168 */
1169 
1170