diff --git a/src/coders/commons.cpp b/src/coders/commons.cpp index d8d61873..c6f3d7c4 100644 --- a/src/coders/commons.cpp +++ b/src/coders/commons.cpp @@ -208,6 +208,14 @@ std::string_view BasicParser::readUntil(char c) { return source.substr(start, pos-start); } +std::string_view BasicParser::readUntilEOL() { + int start = pos; + while (hasNext() && source[pos] != '\r' && source[pos] != '\n') { + pos++; + } + return source.substr(start, pos-start); +} + std::string BasicParser::parseName() { char c = peek(); if (!is_identifier_start(c)) { diff --git a/src/coders/commons.hpp b/src/coders/commons.hpp index 7b6cb3c2..b5c99298 100644 --- a/src/coders/commons.hpp +++ b/src/coders/commons.hpp @@ -98,6 +98,7 @@ protected: public: std::string_view readUntil(char c); + std::string_view readUntilEOL(); std::string parseName(); bool hasNext(); char peek(); diff --git a/src/coders/obj.cpp b/src/coders/obj.cpp index 3ecea677..d7c1687d 100644 --- a/src/coders/obj.cpp +++ b/src/coders/obj.cpp @@ -88,7 +88,7 @@ public: while (hasNext()) { if (peek() != '#' && parseName() == "usemtl") { skipWhitespace(); - texture = readUntil('\n'); + texture = readUntilEOL(); break; } skipLine(); @@ -103,7 +103,7 @@ public: auto cmd = parseName(); if (cmd == "usemtl") { skipWhitespace(); - texture = readUntil('\n'); + texture = readUntilEOL(); mesh = &model->addMesh(texture); break; } else if (cmd == "f") {