|
From: Tapio V. <aa...@us...> - 2009-11-14 07:37:14
|
Module: performous
Branch: dance
Commit: 3c820258ad3d4a361ec4372ba2db1455c54d7d9d
Author: Tapio Vierros <tap...@gm...>
Date: Sat Nov 14 09:32:55 2009 +0200
A couple of fixes for the songparser to call sm-parser.
---
game/songparser-sm.cc | 7 ++++++-
game/songparser-txt.cc | 4 +++-
game/songparser.hh | 6 ++++--
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/game/songparser-sm.cc b/game/songparser-sm.cc
index c501e57..3618bab 100644
--- a/game/songparser-sm.cc
+++ b/game/songparser-sm.cc
@@ -34,7 +34,12 @@ namespace {
-bool SongParser::smCheck(std::vector<char> const& data) { return data[0] == '#' && data[1] >= 'A' && data[1] <= 'Z' && data.back() == ';'; }
+bool SongParser::smCheck(std::vector<char> const& data) {
+ if (data[0] != '#' || data[1] < 'A' || data[1] > 'Z') return false;
+ for (std::vector<char>::const_iterator it = data.begin(); it != data.end(); ++it)
+ if (*it == ';') return true;
+ return false;
+}
void SongParser::smParse() {
Song& s = m_song;
diff --git a/game/songparser-txt.cc b/game/songparser-txt.cc
index 5204204..2b2fdb9 100644
--- a/game/songparser-txt.cc
+++ b/game/songparser-txt.cc
@@ -31,7 +31,9 @@ namespace {
}
}
-bool SongParser::txtCheck(std::vector<char> const& data) { return data[0] == '#' && data[1] >= 'A' && data[1] <= 'Z'; }
+bool SongParser::txtCheck(std::vector<char> const& data) {
+ return data[0] == '#' && data[1] >= 'A' && data[1] <= 'Z';
+}
void SongParser::txtParse() {
Song& s = m_song;
diff --git a/game/songparser.hh b/game/songparser.hh
index b95e93c..fdcd0c6 100644
--- a/game/songparser.hh
+++ b/game/songparser.hh
@@ -22,7 +22,7 @@ class SongParser {
m_relativeShift(),
m_maxScore()
{
- enum { NONE, TXT, INI } type = NONE;
+ enum { NONE, TXT, INI, SM } type = NONE;
// Read the file, determine the type and do some initial validation checks
{
std::ifstream f((s.path + s.filename).c_str());
@@ -33,7 +33,8 @@ class SongParser {
f.seekg(0);
std::vector<char> data(size);
if (!f.read(&data[0], size)) throw SongParserException("Unexpected I/O error", 0);
- if (txtCheck(data)) type = TXT;
+ if (smCheck(data)) type = SM;
+ else if (txtCheck(data)) type = TXT;
else if (iniCheck(data)) type = INI;
else throw SongParserException("Does not look like a song file (wrong header)", 1, true);
m_ss.write(&data[0], size);
@@ -42,6 +43,7 @@ class SongParser {
try {
if (type == TXT) txtParse();
if (type == INI) iniParse();
+ if (type == SM) smParse();
} catch (std::runtime_error& e) {
throw SongParserException(e.what(), m_linenum);
}
|