diff --git a/libs/parser/DefTokeniser.h b/libs/parser/DefTokeniser.h index 698a7a6595..323e1cbc48 100644 --- a/libs/parser/DefTokeniser.h +++ b/libs/parser/DefTokeniser.h @@ -347,7 +347,7 @@ class DefTokeniserFunc } }; -const char* const WHITESPACE = " \t\n\v\r"; +constexpr const char* const WHITESPACE = " \t\n\v\r"; /** * DefTokeniser abstract base class. This class provides a unified interface to diff --git a/radiantcore/shaders/MapExpression.cpp b/radiantcore/shaders/MapExpression.cpp index c2c2de09d5..30c9127499 100644 --- a/radiantcore/shaders/MapExpression.cpp +++ b/radiantcore/shaders/MapExpression.cpp @@ -16,6 +16,7 @@ #include "textures/HeightmapCreator.h" #include "textures/TextureManipulator.h" #include "string/predicate.h" +#include "ShaderTemplate.h" /* CONSTANTS */ namespace @@ -96,8 +97,12 @@ MapExpressionPtr MapExpression::createForString(const std::string& str) { try { - parser::BasicDefTokeniser token(str); - return createForToken(token); + parser::BasicDefTokeniser tokeniser( + str, + ShaderTemplate::DiscardedDelimiters, // delimiters (whitespace) + ShaderTemplate::KeptDelimiters + ); + return createForToken(tokeniser); } catch (const parser::ParseException&) { diff --git a/radiantcore/shaders/ShaderTemplate.cpp b/radiantcore/shaders/ShaderTemplate.cpp index c2cbf1847d..00b3757cc6 100644 --- a/radiantcore/shaders/ShaderTemplate.cpp +++ b/radiantcore/shaders/ShaderTemplate.cpp @@ -1187,8 +1187,8 @@ void ShaderTemplate::parseDefinition() // Construct a local deftokeniser to parse the unparsed block parser::BasicDefTokeniser tokeniser( _blockContents, - parser::WHITESPACE, // delimiters (whitespace) - "{}()," // add the comma character to the kept delimiters + DiscardedDelimiters, // delimiters (whitespace) + KeptDelimiters ); _parsed = true; // we're parsed from now on diff --git a/radiantcore/shaders/ShaderTemplate.h b/radiantcore/shaders/ShaderTemplate.h index 907c4053e7..3b70941b24 100644 --- a/radiantcore/shaders/ShaderTemplate.h +++ b/radiantcore/shaders/ShaderTemplate.h @@ -36,6 +36,10 @@ class ShaderTemplate final public: + // Shared parsing constants + constexpr static const char* DiscardedDelimiters = parser::WHITESPACE; + constexpr static const char* KeptDelimiters = "{}(),"; // add the comma character to the kept delimiters + // Vector of LayerTemplates representing each stage in the material std::vector _layers;