#include <cctype>
#include <istream>
#include <stdexcept>
+#include <glm/gtc/quaternion.hpp>
using namespace std;
istream::sentry s(in);
if (!s) {
- // TODO: error?
+ throw runtime_error("read past the end of stream");
return;
}
case ',': case '=':
current.type = Token::Type(c);
break;
- case '+': case '-':
+ case '+': case '-': case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
in.putback(c);
namespace {
bool is_num_char(istream::char_type c) {
- return isdigit(c)
+ return isxdigit(c)
|| c == '.'
|| c == '-'
|| c == '+'
istream::char_type c;
while (in.get(c)) {
- if (isalnum(c) || c == '_') {
+ if (isalnum(c) || c == '_' || c == '.') {
current.value += c;
} else {
in.putback(c);
bool TokenStreamReader::HasMore() {
+ if (cached) {
+ return true;
+ }
while (in.HasMore()) {
if (in.Next().type != Token::COMMENT) {
cached = true;
Skip(Token::BRACKET_CLOSE);
}
+void TokenStreamReader::ReadQuat(glm::quat &q) {
+ Skip(Token::BRACKET_OPEN);
+ ReadNumber(q.w);
+ Skip(Token::COMMA);
+ ReadNumber(q.x);
+ Skip(Token::COMMA);
+ ReadNumber(q.y);
+ Skip(Token::COMMA);
+ ReadNumber(q.z);
+ Skip(Token::BRACKET_CLOSE);
+}
+
bool TokenStreamReader::GetBool() {
Next();