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 ___lpsrOah___
14 #define ___lpsrOah___
15 
16 #include "lpsrBasicTypes.h"
17 
18 #include "oahBasicTypes.h"
19 
20 #include "oahBasicTypes.h"
21 
22 namespace MusicXML2
23 {
24 
25 //______________________________________________________________________________
26 class lpsrScoreOutputKindAtom : public oahValuedAtom
27 {
28   public:
29 
30     // creation
31     // ------------------------------------------------------
32 
33     static SMARTP<lpsrScoreOutputKindAtom> create (
34       string               shortName,
35       string               longName,
36       string               description,
37       string               valueSpecification,
38       string               variableName,
39       lpsrScoreOutputKind& lpsrScoreOutputKindVariable);
40 
41   protected:
42 
43     // constructors/destructor
44     // ------------------------------------------------------
45 
46     lpsrScoreOutputKindAtom (
47       string               shortName,
48       string               longName,
49       string               description,
50       string               valueSpecification,
51       string               variableName,
52       lpsrScoreOutputKind& lpsrScoreOutputKindVariable);
53 
54     virtual ~lpsrScoreOutputKindAtom ();
55 
56   public:
57 
58     // set and get
59     // ------------------------------------------------------
60 
setLpsrScoreOutputKindVariable(lpsrScoreOutputKind value)61     void                  setLpsrScoreOutputKindVariable (
62                             lpsrScoreOutputKind value)
63                               { fLpsrScoreOutputKindVariable = value; }
64 
65   public:
66 
67     // services
68     // ------------------------------------------------------
69 
70     S_oahValuedAtom       handleOptionUnderName (
71                             string   optionName,
72                             ostream& os);
73 
74     void                  handleValue (
75                             string   theString,
76                             ostream& os);
77 
78   public:
79 
80     // visitors
81     // ------------------------------------------------------
82 
83     virtual void          acceptIn  (basevisitor* v);
84     virtual void          acceptOut (basevisitor* v);
85 
86     virtual void          browseData (basevisitor* v);
87 
88   public:
89 
90     // print
91     // ------------------------------------------------------
92 
93     string                asShortNamedOptionString () const;
94     string                asActualLongNamedOptionString () const;
95 
96     void                  print (ostream& os) const;
97 
98     void                  printAtomOptionsValues (
99                             ostream& os,
100                             int      valueFieldWidth) const;
101 
102   private:
103 
104     // fields
105     // ------------------------------------------------------
106 
107     lpsrScoreOutputKind&  fLpsrScoreOutputKindVariable;
108 };
109 typedef SMARTP<lpsrScoreOutputKindAtom> S_lpsrScoreOutputKindAtom;
110 EXP ostream& operator<< (ostream& os, const S_lpsrScoreOutputKindAtom& elt);
111 
112 //______________________________________________________________________________
113 class lpsrPitchesLanguageAtom : public oahValuedAtom
114 {
115   public:
116 
117     // creation
118     // ------------------------------------------------------
119 
120     static SMARTP<lpsrPitchesLanguageAtom> create (
121       string             shortName,
122       string             longName,
123       string             description,
124       string             valueSpecification,
125       string             variableName,
126       msrQuarterTonesPitchesLanguageKind&
127                          lpsrPitchesLanguageKindVariable);
128 
129   protected:
130 
131     // constructors/destructor
132     // ------------------------------------------------------
133 
134     lpsrPitchesLanguageAtom (
135       string             shortName,
136       string             longName,
137       string             description,
138       string             valueSpecification,
139       string             variableName,
140       msrQuarterTonesPitchesLanguageKind&
141                          lpsrPitchesLanguageKindVariable);
142 
143     virtual ~lpsrPitchesLanguageAtom ();
144 
145   public:
146 
147     // set and get
148     // ------------------------------------------------------
149 
setMsrQuarterTonesPitchesLanguageKindVariable(msrQuarterTonesPitchesLanguageKind value)150     void                  setMsrQuarterTonesPitchesLanguageKindVariable (
151                             msrQuarterTonesPitchesLanguageKind value)
152                               {
153                                 fMsrQuarterTonesPitchesLanguageKindVariable = value;
154                               }
155 
156   public:
157 
158     // services
159     // ------------------------------------------------------
160 
161     S_oahValuedAtom       handleOptionUnderName (
162                             string   optionName,
163                             ostream& os);
164 
165     void                  handleValue (
166                             string   theString,
167                             ostream& os);
168 
169   public:
170 
171     // visitors
172     // ------------------------------------------------------
173 
174     virtual void          acceptIn  (basevisitor* v);
175     virtual void          acceptOut (basevisitor* v);
176 
177     virtual void          browseData (basevisitor* v);
178 
179   public:
180 
181     // print
182     // ------------------------------------------------------
183 
184     string                asShortNamedOptionString () const;
185     string                asActualLongNamedOptionString () const;
186 
187     void                  print (ostream& os) const;
188 
189     void                  printAtomOptionsValues (
190                             ostream& os,
191                             int      valueFieldWidth) const;
192 
193   private:
194 
195     // fields
196     // ------------------------------------------------------
197 
198     msrQuarterTonesPitchesLanguageKind&
199                           fMsrQuarterTonesPitchesLanguageKindVariable;
200 };
201 typedef SMARTP<lpsrPitchesLanguageAtom> S_lpsrPitchesLanguageAtom;
202 EXP ostream& operator<< (ostream& os, const S_lpsrPitchesLanguageAtom& elt);
203 
204 //______________________________________________________________________________
205 class lpsrChordsLanguageAtom : public oahValuedAtom
206 {
207   public:
208 
209     // creation
210     // ------------------------------------------------------
211 
212     static SMARTP<lpsrChordsLanguageAtom> create (
213       string             shortName,
214       string             longName,
215       string             description,
216       string             valueSpecification,
217       string             variableName,
218       lpsrChordsLanguageKind&
219                          lpsrChordsLanguageKindVariable);
220 
221   protected:
222 
223     // constructors/destructor
224     // ------------------------------------------------------
225 
226     lpsrChordsLanguageAtom (
227       string             shortName,
228       string             longName,
229       string             description,
230       string             valueSpecification,
231       string             variableName,
232       lpsrChordsLanguageKind&
233                          lpsrChordsLanguageKindVariable);
234 
235     virtual ~lpsrChordsLanguageAtom ();
236 
237   public:
238 
239     // set and get
240     // ------------------------------------------------------
241 
setLpsrChordsLanguageKindVariable(lpsrChordsLanguageKind value)242     void                  setLpsrChordsLanguageKindVariable (
243                             lpsrChordsLanguageKind value)
244                               {
245                                 fLpsrChordsLanguageKindVariable = value;
246                               }
247 
248   public:
249 
250     // services
251     // ------------------------------------------------------
252 
253     S_oahValuedAtom       handleOptionUnderName (
254                             string   optionName,
255                             ostream& os);
256 
257     void                  handleValue (
258                             string   theString,
259                             ostream& os);
260 
261   public:
262 
263     // visitors
264     // ------------------------------------------------------
265 
266     virtual void          acceptIn  (basevisitor* v);
267     virtual void          acceptOut (basevisitor* v);
268 
269     virtual void          browseData (basevisitor* v);
270 
271   public:
272 
273     // print
274     // ------------------------------------------------------
275 
276     string                asShortNamedOptionString () const;
277     string                asActualLongNamedOptionString () const;
278 
279     void                  print (ostream& os) const;
280 
281     void                  printAtomOptionsValues (
282                             ostream& os,
283                             int      valueFieldWidth) const;
284 
285   private:
286 
287     // fields
288     // ------------------------------------------------------
289 
290     lpsrChordsLanguageKind&
291                           fLpsrChordsLanguageKindVariable;
292 };
293 typedef SMARTP<lpsrChordsLanguageAtom> S_lpsrChordsLanguageAtom;
294 EXP ostream& operator<< (ostream& os, const S_lpsrChordsLanguageAtom& elt);
295 
296 //______________________________________________________________________________
297 class lpsrTransposeAtom : public oahValuedAtom
298 {
299   public:
300 
301     // creation
302     // ------------------------------------------------------
303 
304     static SMARTP<lpsrTransposeAtom> create (
305       string  shortName,
306       string  longName,
307       string  description,
308       string  valueSpecification,
309       string  variableName,
310       S_msrSemiTonesPitchAndOctave&
311               lpsrTransposeVariable);
312 
313   protected:
314 
315     // constructors/destructor
316     // ------------------------------------------------------
317 
318     lpsrTransposeAtom (
319       string  shortName,
320       string  longName,
321       string  description,
322       string  valueSpecification,
323       string  variableName,
324       S_msrSemiTonesPitchAndOctave&
325               lpsrTransposeVariable);
326 
327     virtual ~lpsrTransposeAtom ();
328 
329   public:
330 
331     // set and get
332     // ------------------------------------------------------
333 
setMsrSemiTonesPitchAndOctaveVariable(S_msrSemiTonesPitchAndOctave value)334     void                  setMsrSemiTonesPitchAndOctaveVariable (
335                             S_msrSemiTonesPitchAndOctave value)
336                               {
337                                 fMsrSemiTonesPitchAndOctaveVariable = value;
338                               }
339 
340   public:
341 
342     // services
343     // ------------------------------------------------------
344 
345     S_oahValuedAtom       handleOptionUnderName (
346                             string   optionName,
347                             ostream& os);
348 
349     void                  handleValue (
350                             string   theString,
351                             ostream& os);
352 
353   public:
354 
355     // visitors
356     // ------------------------------------------------------
357 
358     virtual void          acceptIn  (basevisitor* v);
359     virtual void          acceptOut (basevisitor* v);
360 
361     virtual void          browseData (basevisitor* v);
362 
363   public:
364 
365     // print
366     // ------------------------------------------------------
367 
368     string                asShortNamedOptionString () const;
369     string                asActualLongNamedOptionString () const;
370 
371     void                  print (ostream& os) const;
372 
373     void                  printAtomOptionsValues (
374                             ostream& os,
375                             int      valueFieldWidth) const;
376 
377   private:
378 
379     // fields
380     // ------------------------------------------------------
381 
382     S_msrSemiTonesPitchAndOctave&
383                           fMsrSemiTonesPitchAndOctaveVariable;
384 };
385 typedef SMARTP<lpsrTransposeAtom> S_lpsrTransposeAtom;
386 EXP ostream& operator<< (ostream& os, const S_lpsrTransposeAtom& elt);
387 
388 //______________________________________________________________________________
389 class lpsrOah : public oahGroup
390 {
391   public:
392 
393     static SMARTP<lpsrOah> create (
394       S_oahHandler handlerUpLink);
395 
396     SMARTP<lpsrOah>       createCloneWithDetailedTrace ();
397 
398   public:
399 
400     // initialisation
401     // ------------------------------------------------------
402 
403     void                  initializeLpsrOah (
404                             bool boolOptionsInitialValue);
405 
406   public:
407 
408     // constructors/destructor
409     // ------------------------------------------------------
410 
411     lpsrOah (
412       S_oahHandler handlerUpLink);
413 
414     virtual ~lpsrOah ();
415 
416     // set and get
417     // ------------------------------------------------------
418 
419     bool                  setLpsrQuarterTonesPitchesLanguage (
420                             string language);
421 
422     bool                  setLpsrChordsLanguage (
423                             string language);
424 
425   public:
426 
427     // quiet mode
428     // ------------------------------------------------------
429 
430     void                  enforceQuietness ();
431 
432   public:
433 
434     // consistency check
435     // ------------------------------------------------------
436 
437     virtual void          checkOptionsConsistency ();
438 
439   public:
440 
441     // public services
442     // ------------------------------------------------------
443 
444     void                  crackLilypondVersionNumber (
445                             string theString,
446                             int&   generationNumber,
447                             int&   majorNumber,
448                             int&   minorNumber);
449 
450     bool                  versionNumberGreaterThanOrEqualTo (
451                             string otherVersionNumber);
452 
453   private:
454 
455     // private
456     // ------------------------------------------------------
457 
458 #ifdef TRACE_OAH
459     void                  initializeLpsrTraceOah (
460                             bool boolOptionsInitialValue);
461 #endif
462 
463     void                  initializeLpsrDisplayOptions (
464                             bool boolOptionsInitialValue);
465 
466     void                  initializeLpsrScoreOutputOptions (
467                             bool boolOptionsInitialValue);
468 
469     void                  initializeLpsrGlobalStaffSizeOptions (
470                             bool boolOptionsInitialValue);
471 
472     void                  initializeLpsrPaperOptions (
473                             bool boolOptionsInitialValue);
474 
475     void                  initializeLpsrMeasuresOptions (
476                             bool boolOptionsInitialValue);
477 
478     void                  initializeLpsrWordsOptions (
479                             bool boolOptionsInitialValue);
480 
481     void                  initializeLpsrLanguagesOptions (
482                             bool boolOptionsInitialValue);
483 
484     void                  initializeLpsrTransposeOptions (
485                             bool boolOptionsInitialValue);
486 
487     void                  initializeLpsrExitAfterSomePassesOptions (
488                             bool boolOptionsInitialValue);
489 
490   public:
491 
492     // visitors
493     // ------------------------------------------------------
494 
495     virtual void          acceptIn  (basevisitor* v);
496     virtual void          acceptOut (basevisitor* v);
497 
498     virtual void          browseData (basevisitor* v);
499 
500   public:
501 
502     // print
503     // ------------------------------------------------------
504 
505     void                  printLpsrOahHelp ();
506 
507     void                  printLpsrOahValues (int fieldWidth);
508 
509   public:
510 
511     // trace
512     // --------------------------------------
513 
514 #ifdef TRACE_OAH
515     bool                  fTraceLpsr;
516 
517     bool                  fTraceLilypondVersion;
518 
519     bool                  fTraceLpsrVisitors;
520 
521     bool                  fTraceLpsrBlocks;
522 
523     bool                  fTraceSchemeFunctions;
524 #endif
525 
526     // display
527     // --------------------------------------
528 
529     bool                  fDisplayLpsr;
530 
531     // LilyPond version
532     // --------------------------------------
533 
534     string                fLilyPondVersion;
535 
536     // score output kind
537     // --------------------------------------
538 
539     lpsrScoreOutputKind   fScoreOutputKind;
540 
541     // global staff size
542     // --------------------------------------
543 
544     float                 fGlobalStaffSize;
545     float                 fStaffGlobalSizeDefaultValue;
546 
547     // paper
548     // --------------------------------------
549 
550     msrLengthUnitKind     fLengthUnitKind;
551     msrLengthUnitKind     fLengthUnitKindDefaultValue;
552 
553     msrLength             fPaperHeight;
554     msrLength             fPaperWidth;
555 
556     // indents
557     msrLength             fPaperHorizontalShift;
558     msrLength             fPaperIndent;
559     msrLength             fPaperShortIndent;
560 
561     msrLength             fMarkupSystemSpacingPadding;
562 
563     bool                  fRaggedBottom;
564     bool                  fRaggedLastBottom;
565 
566     bool                  fTagline;
567 
568     int                   fPageCount;   // negative if not specified
569     int                   fSystemCount; // negative if not specified
570 
571 
572     // measures
573     // --------------------------------------
574 
575     // replicate empty measure JMI ???
576     string                fReplicateEmptyMeasureNumber;
577     int                   fReplicateEmptyMeasureReplicas;
578 
579     // add empty measures
580     map<string,int>       fAddEmptyMeasuresStringToIntMap;
581 
582     // words
583     // --------------------------------------
584 
585     // convert words to tempo
586     bool                  fConvertWordsToTempo;
587     // add words from the lyrics
588     bool                  fAddWordsFromTheLyrics;
589 
590     // rehearsal marks
591     // --------------------------------------
592 
593     // convert tempos to rehearsal marks
594     bool                  fConvertTemposToRehearsalMarks;
595     // convert words to rehearsal marks
596     bool                  fConvertWordsToRehearsalMarks;
597 
598     // languages
599     // --------------------------------------
600 
601     msrQuarterTonesPitchesLanguageKind
602                           fLpsrQuarterTonesPitchesLanguageKind;
603 
604     lpsrChordsLanguageKind
605                           fLpsrChordsLanguageKind;
606 
607     // transpose
608     // --------------------------------------
609 
610     S_msrSemiTonesPitchAndOctave
611                           fTransposeSemiTonesPitchAndOctave;
612 
613     // exit after some passes
614     // --------------------------------------
615 
616     bool                  fExit3;
617 };
618 typedef SMARTP<lpsrOah> S_lpsrOah;
619 EXP ostream& operator<< (ostream& os, const S_lpsrOah& elt);
620 
621 EXP extern S_lpsrOah gLpsrOah;
622 EXP extern S_lpsrOah gLpsrOahUserChoices;
623 EXP extern S_lpsrOah gLpsrOahWithDetailedTrace;
624 
625 //______________________________________________________________________________
626 EXP  void initializeLpsrOahHandling (
627   S_oahHandler handler);
628 
629 
630 }
631 
632 
633 #endif
634