From 11a29fed413fde9341868c86f0f3afbfafba47fb Mon Sep 17 00:00:00 2001 From: Cameron Ball Date: Fri, 7 Nov 2014 17:38:57 +0800 Subject: [PATCH] Beginnings of SM parser. --- Services/ISimfileParser.php | 14 ++++++++++ Services/SimfileParser.php | 64 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 Services/ISimfileParser.php create mode 100644 Services/SimfileParser.php diff --git a/Services/ISimfileParser.php b/Services/ISimfileParser.php new file mode 100644 index 0000000..a7e2208 --- /dev/null +++ b/Services/ISimfileParser.php @@ -0,0 +1,14 @@ + 'Novice', +// 'beginner' => 'Novice', +// 'easy' => 'Easy', +// 'medium' => 'Medium', +// 'hard' => 'Hard', +// 'challenge' => 'Expert', +// 'edit' => 'Edit' + + private $_smFileLines; + + public function __construct($simfileData) + { + $this->_smFileLines = explode("\n", $simfileData); + } + + public function title() + { + $title = $this->extractKey('TITLE'); + if(!$title) throw new Exception ('Invalid SM file. Title missing'); + + return $title; + } + + public function stops() + { + return $this->extractKey('STOPS') ? 'Yes' : 'No'; + } + + public function steps($mode, $difficulty) + { + $steps = array(); + + foreach ($this->_smFileLines as $index => $line) { + if (strpos($line, '#NOTES') !== false) { + $mode = substr(trim($lines[$index + 1]), 0, -1) == 'dance-single' ? 'single' : null; + $notes[$mode][] = array( + 'artist' => substr(trim($lines[$index + 2]), 0, -1), + 'difficulty' => substr(trim($lines[$index + 3]), 0, -1), + 'rating' => substr(trim($lines[$index + 4]), 0, -1) + ); + } + } + + return $steps; + } + + private function extractKey($key) { + foreach ($lines as $line) { + $pos = strpos($line, '#' . $key . ':'); + if($pos !== false) return substr(trim($line), strlen($key) + 2, -1); + } + } + +} -- 2.11.0