diff --git a/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.cpp b/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.cpp index bb985ba9..e6833691 100644 --- a/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.cpp +++ b/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.cpp @@ -1,5 +1,7 @@ #include "MenuMatcherFactory.h" +#include + #include "MenuExpressionMatchers.h" using namespace menu; @@ -9,9 +11,30 @@ MenuMatcherFactory::MenuMatcherFactory(const IMatcherForLabelSupplier MenuMatcherFactory::StringChain() const +{ + return Or({ + And({ + String(), + Loop(String()) + }).Transform([](const token_list_t& tokens) -> SimpleParserValue + { + std::ostringstream ss; + + for (const auto& token : tokens) + { + ss << token.get().StringValue(); + } + + return SimpleParserValue::String(tokens[0].get().GetPos(), new std::string(ss.str())); + }), + String() + }); +} + MatcherFactoryWrapper MenuMatcherFactory::Text() const { - return MatcherFactoryWrapper(Or({String(), Identifier()})); + return MatcherFactoryWrapper(Or({StringChain(), Identifier()})); } MatcherFactoryWrapper MenuMatcherFactory::Numeric() const diff --git a/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.h b/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.h index ceefb06b..d21838f4 100644 --- a/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.h +++ b/src/ObjLoading/Parsing/Menu/Matcher/MenuMatcherFactory.h @@ -18,6 +18,7 @@ namespace menu public: explicit MenuMatcherFactory(const IMatcherForLabelSupplier* labelSupplier); + _NODISCARD MatcherFactoryWrapper StringChain() const; _NODISCARD MatcherFactoryWrapper Text() const; _NODISCARD MatcherFactoryWrapper Numeric() const;