79 lines
1.7 KiB
C++
79 lines
1.7 KiB
C++
#ifndef _MUSIC_PARSER_HPP_
|
|
#define _MUSIC_PARSER_HPP_
|
|
#ifndef _COMMON_SMARTPOINTER_HPP_
|
|
#include <common/pointer.hpp>
|
|
#endif
|
|
#ifndef _MUSIC_NOTE_HPP_
|
|
#include <music/note.hpp>
|
|
#endif
|
|
#ifndef _MUSIC_CHORD_HPP_
|
|
#include <music/chord.hpp>
|
|
#endif
|
|
#ifndef _MUSIC_EMITTER_HPP_
|
|
#include <music/emitter.hpp>
|
|
#endif
|
|
#ifndef _MUSIC_SCANSYMBOLS_HPP_
|
|
#include <music/scansymbols.hpp>
|
|
#endif
|
|
|
|
namespace Music
|
|
{
|
|
|
|
class Parser
|
|
{
|
|
public:
|
|
Parser();
|
|
virtual ~Parser();
|
|
bool parse(Emitter &input,Music::Chord &chord);
|
|
private:
|
|
bool nextSymbol();
|
|
ScanSymbols::ScanSymbol peekSymbol(void);
|
|
void insertSymbols(ScanSymbols::ScanSymbol symbol);
|
|
void insertSymbols(Block<Byte> &symbols);
|
|
void removeSymbols(ScanSymbols::ScanSymbol symbol);
|
|
void removeSymbols(Block<Byte> &symbols);
|
|
bool symbolIn(Block<Byte> &symbols);
|
|
bool symbolIn(Byte &symbol);
|
|
bool symbolIn(ScanSymbols::ScanSymbol symbol);
|
|
bool checkSymbol(void);
|
|
bool expect(ScanSymbols::ScanSymbol symbol);
|
|
bool parseNote(void);
|
|
bool parseDegree(void);
|
|
bool parseAlteration(void);
|
|
bool parseMinor(void);
|
|
bool parseVerb(void);
|
|
bool parseMajorSeventh(void);
|
|
bool parseHalfDiminished(void);
|
|
bool parseDiminished(void);
|
|
bool parseMinorMajor(void);
|
|
bool haveNote(const Note ¬e);
|
|
bool isMinor(void)const;
|
|
|
|
Block<Byte> mNoteSymbols;
|
|
Block<Byte> mSharpFlatSymbols;
|
|
Block<Byte> mSymbols;
|
|
SmartPointer<Emitter> mEmitter;
|
|
ScanSymbols::ScanSymbol mKey;
|
|
Byte mByteValue;
|
|
String mStrValue;
|
|
Note mRootNote;
|
|
Notes mNotes;
|
|
int mIndex;
|
|
bool mIsInError;
|
|
};
|
|
|
|
inline
|
|
Parser::Parser()
|
|
{
|
|
mNoteSymbols.insert(&Byte(ScanSymbols::Note1));
|
|
mSharpFlatSymbols.insert(&Byte(ScanSymbols::Sharp1));
|
|
mSharpFlatSymbols.insert(&Byte(ScanSymbols::Flat1));
|
|
}
|
|
|
|
inline
|
|
Parser::~Parser()
|
|
{
|
|
}
|
|
};
|
|
#endif
|