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 ___bsr2BsrFinalizer___
14 #define ___bsr2BsrFinalizer___
15 
16 #include "bsr.h"
17 
18 #include "bsrOah.h"
19 
20 
21 namespace MusicXML2
22 {
23 
24 //________________________________________________________________________
25 class bsr2BsrFinalizer :
26 
27   public visitor<S_bsrScore>,
28 
29   public visitor<S_bsrSpaces>,
30 
31   public visitor<S_bsrBarline>,
32 
33   public visitor<S_bsrTranscriptionNotes>,
34   public visitor<S_bsrTranscriptionNotesElement>,
35 
36   public visitor<S_bsrPage>,
37 
38   public visitor<S_bsrPageHeading>,
39   public visitor<S_bsrMusicHeading>,
40 
41   public visitor<S_bsrFootNotes>,
42 
43   public visitor<S_bsrLine>,
44   public visitor<S_bsrLineContents>,
45 
46   public visitor<S_bsrMeasure>,
47 
48   public visitor<S_bsrNumber>,
49   public visitor<S_bsrWords>,
50 
51   public visitor<S_bsrClef>,
52   public visitor<S_bsrKey>,
53   public visitor<S_bsrTime>,
54 
55   public visitor<S_bsrTempo>,
56 
57   public visitor<S_bsrNote>
58 
59 {
60   public:
61 
62     bsr2BsrFinalizer (
63       S_bsrOah&    bsrOpts,
64       indentedOstream& logOstream,
65       S_bsrScore       bScore);
66 
67     virtual ~bsr2BsrFinalizer ();
68 
69     void generateFinalizedBsrScoreFromBsrScore ();
70 
getBsrScore()71     S_bsrScore getBsrScore () const
72         { return fBsrScore; }
73 
74   protected:
75 
76     virtual void visitStart (S_bsrScore& elt);
77     virtual void visitEnd   (S_bsrScore& elt);
78 
79     virtual void visitStart (S_bsrSpaces& elt);
80     virtual void visitEnd   (S_bsrSpaces& elt);
81 
82     virtual void visitStart (S_bsrBarline& elt);
83 
84     virtual void visitStart (S_bsrTranscriptionNotes& elt);
85     virtual void visitEnd   (S_bsrTranscriptionNotes& elt);
86 
87     virtual void visitStart (S_bsrTranscriptionNotesElement& elt);
88     virtual void visitEnd   (S_bsrTranscriptionNotesElement& elt);
89 
90     virtual void visitStart (S_bsrPage& elt);
91     virtual void visitEnd   (S_bsrPage& elt);
92 
93     virtual void visitStart (S_bsrPageHeading& elt);
94     virtual void visitEnd   (S_bsrPageHeading& elt);
95     virtual void visitStart (S_bsrMusicHeading& elt);
96     virtual void visitEnd   (S_bsrMusicHeading& elt);
97 
98     virtual void visitStart (S_bsrFootNotes& elt);
99     virtual void visitEnd   (S_bsrFootNotes& elt);
100 
101     virtual void visitStart (S_bsrLine& elt);
102     virtual void visitEnd   (S_bsrLine& elt);
103     virtual void visitStart (S_bsrLineContents& elt);
104     virtual void visitEnd   (S_bsrLineContents& elt);
105 
106     virtual void visitStart (S_bsrMeasure& elt);
107     virtual void visitEnd   (S_bsrMeasure& elt);
108 
109     virtual void visitStart (S_bsrNumber& elt);
110     virtual void visitEnd   (S_bsrNumber& elt);
111 
112     virtual void visitStart (S_bsrWords& elt);
113     virtual void visitEnd   (S_bsrWords& elt);
114 
115     virtual void visitStart (S_bsrClef& elt);
116     virtual void visitEnd   (S_bsrClef& elt);
117 
118     virtual void visitStart (S_bsrKey& elt);
119     virtual void visitEnd   (S_bsrKey& elt);
120 
121     virtual void visitStart (S_bsrTime& elt);
122     virtual void visitEnd   (S_bsrTime& elt);
123 
124     virtual void visitStart (S_bsrTempo& elt);
125     virtual void visitEnd   (S_bsrTempo& elt);
126 
127     virtual void visitStart (S_bsrNote& elt);
128     virtual void visitEnd   (S_bsrNote& elt);
129 
130   private:
131 
132     // the MSR score we're relying on
133     // ------------------------------------------------------
134     S_msrScore            fBaseMsrScore;
135 
136     // the BSR score we're visiting
137     // ------------------------------------------------------
138     S_bsrScore            fVisitedBsrScore;
139 
140     // the BSR score we're building
141     // ------------------------------------------------------
142     S_bsrScore            fBsrScore;
143 
144     // pages & lines
145     // ------------------------------------------------------
146 
147     S_bsrPage             fCurrentPage;
148     S_bsrLine             fCurrentLine;
149 
150     // headings
151     // ------------------------------------------------------
152 
153     S_bsrPageHeading      fCurrentPageHeading;
154     S_bsrMusicHeading     fCurrentMusicHeading;
155 
156     // foot notes
157     // ------------------------------------------------------
158 
159     S_bsrFootNotes        fCurrentFootNotes;
160 
161     // measures
162     // ------------------------------------------------------
163 
164     S_bsrMeasure          fCurrentMeasure;
165 
166     // options
167     // ------------------------------------------------------
168 
169     S_bsrOah          fBsrOah;
170 
171     // log output stream
172     // ------------------------------------------------------
173 
174     indentedOstream&      fLogOutputStream;
175 };
176 
177 
178 }
179 
180 
181 #endif
182