LibMusicXML  3.18
msrLigatures.h
1 /*
2  MusicXML Library
3  Copyright (C) Grame 2006-2013
4 
5  This Source Code Form is subject to the terms of the Mozilla Public
6  License, v. 2.0. If a copy of the MPL was not distributed with this
7  file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10  research@grame.fr
11 */
12 
13 #ifndef ___msrLigatures___
14 #define ___msrLigatures___
15 
16 #include "msrElements.h"
17 
18 #include "msrBasicTypes.h"
19 
20 
21 namespace MusicXML2
22 {
23 
24 //______________________________________________________________________________
25 class msrLigature;
26 typedef SMARTP<msrLigature> S_msrLigature;
27 
28 class msrLigature : public msrElement
29 {
30  public:
31 
32  // data types
33  // ------------------------------------------------------
34 
35  enum msrLigatureKind {
36  kLigatureNone,
37  kLigatureStart, kLigatureContinue, kLigatureStop};
38 
39  static string ligatureKindAsString (
40  msrLigatureKind ligatureKind);
41 
42  enum msrLigatureLineEndKind {
43  kLigatureLineEndNone,
44  kLigatureLineEndUp, kLigatureLineEndDown,
45  kLigatureLineEndBoth, kLigatureLineEndArrow };
46 
47  static string ligatureLineEndKindAsString (
48  msrLigatureLineEndKind ligatureLineEndKind);
49 
50  // creation from MusicXML
51  // ------------------------------------------------------
52 
53  static SMARTP<msrLigature> create (
54  int inputLineNumber,
55  int ligatureNumber,
56  msrLigatureKind ligatureKind,
57  msrLigatureLineEndKind ligatureLineEndKind,
58  msrLineTypeKind ligatureLineTypeKind,
59  msrPlacementKind ligaturePlacementKind);
60 
61  protected:
62 
63  // constructors/destructor
64  // ------------------------------------------------------
65 
66  msrLigature (
67  int inputLineNumber,
68  int ligatureNumber,
69  msrLigatureKind ligatureKind,
70  msrLigatureLineEndKind ligatureLineEndKind,
71  msrLineTypeKind ligatureLineTypeKind,
72  msrPlacementKind ligaturePlacementKind);
73 
74  virtual ~msrLigature ();
75 
76  public:
77 
78  // set and get
79  // ------------------------------------------------------
80 
81  // sideLinks
82  void setLigatureOtherEndSideLink (
83  S_msrLigature otherEndSideLink);
84 
85  S_msrLigature getLigatureOtherEndSideLink () const
86  { return fLigatureOtherEndSideLink; }
87 
88  int getLigatureNumber () const
89  { return fLigatureNumber; }
90 
91  msrLigatureKind getLigatureKind () const
92  { return fLigatureKind; }
93 
94  msrLigatureLineEndKind
95  getLigatureLineEndKind () const
96  { return fLigatureLineEndKind; }
97 
98  msrLineTypeKind getLigatureLineTypeKind () const
99  { return fLigatureLineTypeKind; }
100 
101  msrPlacementKind getLigaturePlacementKind () const
102  { return fLigaturePlacementKind; }
103 
104  void setLigaturePlacementKind (
105  msrPlacementKind placementKind)
106  { fLigaturePlacementKind = placementKind; }
107 
108  // services
109  // ------------------------------------------------------
110 
111  public:
112 
113  // visitors
114  // ------------------------------------------------------
115 
116  virtual void acceptIn (basevisitor* v);
117  virtual void acceptOut (basevisitor* v);
118 
119  virtual void browseData (basevisitor* v);
120 
121  public:
122 
123  // print
124  // ------------------------------------------------------
125 
126  string ligatureKindAsString () const;
127 
128  virtual void print (ostream& os) const;
129 
130  private:
131 
132  // sideLinks
133  // ------------------------------------------------------
134  S_msrLigature fLigatureOtherEndSideLink; // two-way
135 
136  // fields
137  // ------------------------------------------------------
138 
139  int fLigatureNumber;
140 
141  msrLigatureKind fLigatureKind;
142 
143  msrLigatureLineEndKind
144  fLigatureLineEndKind;
145 
146  msrLineTypeKind fLigatureLineTypeKind;
147 
148  msrPlacementKind fLigaturePlacementKind;
149 };
151 EXP ostream& operator<< (ostream& os, const S_msrLigature& elt);
152 
153 
154 } // namespace MusicXML2
155 
156 
157 #endif
MusicXML2::msrLigature
Definition: msrLigatures.h:29
MusicXML2::SMARTP< msrLigature >
MusicXML2::basevisitor
Definition: basevisitor.h:25
MusicXML2::msrElement
Definition: msrElements.h:26