X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fio%2Ftoken.cpp;h=b462df778b593ee11927d6e80da46031b530b709;hb=33b37e7242e4cbfa76e4a0d6e5bb54223b541162;hp=db5c986fb32f5e53d71272d8cb21760f2ec67e0e;hpb=82ec71079e4763f2b2d66c0c210e37df40c89034;p=blank.git diff --git a/src/io/token.cpp b/src/io/token.cpp index db5c986..b462df7 100644 --- a/src/io/token.cpp +++ b/src/io/token.cpp @@ -4,6 +4,7 @@ #include #include #include +#include using namespace std; @@ -32,7 +33,7 @@ void Tokenizer::ReadToken() { istream::sentry s(in); if (!s) { - // TODO: error? + throw runtime_error("read past the end of stream"); return; } @@ -47,7 +48,7 @@ void Tokenizer::ReadToken() { 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); @@ -71,7 +72,7 @@ void Tokenizer::ReadToken() { namespace { bool is_num_char(istream::char_type c) { - return isdigit(c) + return isxdigit(c) || c == '.' || c == '-' || c == '+' @@ -173,7 +174,7 @@ void Tokenizer::ReadIdentifier() { istream::char_type c; while (in.get(c)) { - if (isalnum(c) || c == '_') { + if (isalnum(c) || c == '_' || c == '.') { current.value += c; } else { in.putback(c); @@ -330,6 +331,18 @@ void TokenStreamReader::ReadVec(glm::ivec4 &v) { 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();