From 181670f5d7bca20397bb9255c2ec346f621119c7 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 30 Jan 2014 12:53:02 -0800 Subject: [PATCH] Fixes for parsing FBX text encoding. --- interface/src/renderer/FBXReader.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/interface/src/renderer/FBXReader.cpp b/interface/src/renderer/FBXReader.cpp index 8a7f839b70..1a5171d100 100644 --- a/interface/src/renderer/FBXReader.cpp +++ b/interface/src/renderer/FBXReader.cpp @@ -170,6 +170,7 @@ public: const QByteArray& getDatum() const { return _datum; } void pushBackToken(int token) { _pushedBackToken = token; } + void ungetChar(char ch) { _device->ungetChar(ch); } private: @@ -221,7 +222,7 @@ int Tokenizer::nextToken() { _datum.append(ch); while (_device->getChar(&ch)) { if (QChar(ch).isSpace() || ch == ';' || ch == ':' || ch == '{' || ch == '}' || ch == ',' || ch == '\"') { - _device->ungetChar(ch); // read until we encounter a special character, then replace it + ungetChar(ch); // read until we encounter a special character, then replace it break; } _datum.append(ch); @@ -257,9 +258,17 @@ FBXNode parseTextFBXNode(Tokenizer& tokenizer) { expectingDatum = true; } else if (token == Tokenizer::DATUM_TOKEN && expectingDatum) { - node.properties.append(tokenizer.getDatum()); - expectingDatum = false; - + QByteArray datum = tokenizer.getDatum(); + if ((token = tokenizer.nextToken()) == ':') { + tokenizer.ungetChar(':'); + tokenizer.pushBackToken(Tokenizer::DATUM_TOKEN); + return node; + + } else { + tokenizer.pushBackToken(token); + node.properties.append(datum); + expectingDatum = false; + } } else { tokenizer.pushBackToken(token); return node; @@ -377,6 +386,9 @@ glm::mat4 createMat4(const QVector& doubleVector) { } QVector getIntVector(const QVariantList& properties, int index) { + if (index >= properties.size()) { + return QVector(); + } QVector vector = properties.at(index).value >(); if (!vector.isEmpty()) { return vector; @@ -388,6 +400,9 @@ QVector getIntVector(const QVariantList& properties, int index) { } QVector getDoubleVector(const QVariantList& properties, int index) { + if (index >= properties.size()) { + return QVector(); + } QVector vector = properties.at(index).value >(); if (!vector.isEmpty()) { return vector;