From 8135f22b2fed56eb18eea4b0f4585fc3700cf1ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Thu, 11 Mar 2021 18:03:25 +0100 Subject: [PATCH] Shader: Add attribute and square bracket tokens (first step for attribute support) --- include/Nazara/Shader/ShaderLangTokenList.hpp | 4 ++++ src/Nazara/Shader/ShaderLangLexer.cpp | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/Nazara/Shader/ShaderLangTokenList.hpp b/include/Nazara/Shader/ShaderLangTokenList.hpp index d8eb56139..959c5df31 100644 --- a/include/Nazara/Shader/ShaderLangTokenList.hpp +++ b/include/Nazara/Shader/ShaderLangTokenList.hpp @@ -13,8 +13,10 @@ NAZARA_SHADERLANG_TOKEN(Assign) NAZARA_SHADERLANG_TOKEN(BoolFalse) NAZARA_SHADERLANG_TOKEN(BoolTrue) +NAZARA_SHADERLANG_TOKEN(ClosingAttribute) NAZARA_SHADERLANG_TOKEN(ClosingParenthesis) NAZARA_SHADERLANG_TOKEN(ClosingCurlyBracket) +NAZARA_SHADERLANG_TOKEN(ClosingSquareBracket) NAZARA_SHADERLANG_TOKEN(Colon) NAZARA_SHADERLANG_TOKEN(Comma) NAZARA_SHADERLANG_TOKEN(Divide) @@ -29,7 +31,9 @@ NAZARA_SHADERLANG_TOKEN(Let) NAZARA_SHADERLANG_TOKEN(Multiply) NAZARA_SHADERLANG_TOKEN(Minus) NAZARA_SHADERLANG_TOKEN(Plus) +NAZARA_SHADERLANG_TOKEN(OpenAttribute) NAZARA_SHADERLANG_TOKEN(OpenCurlyBracket) +NAZARA_SHADERLANG_TOKEN(OpenSquareBracket) NAZARA_SHADERLANG_TOKEN(OpenParenthesis) NAZARA_SHADERLANG_TOKEN(Semicolon) NAZARA_SHADERLANG_TOKEN(Return) diff --git a/src/Nazara/Shader/ShaderLangLexer.cpp b/src/Nazara/Shader/ShaderLangLexer.cpp index 666b0d8d6..3ffd284f4 100644 --- a/src/Nazara/Shader/ShaderLangLexer.cpp +++ b/src/Nazara/Shader/ShaderLangLexer.cpp @@ -221,6 +221,28 @@ namespace Nz::ShaderLang break; } + case '[': + { + char next = Peek(); + if (next == '[') + tokenType = TokenType::OpenAttribute; + else + tokenType = TokenType::OpenSquareBracket; + + break; + } + + case ']': + { + char next = Peek(); + if (next == ']') + tokenType = TokenType::ClosingAttribute; + else + tokenType = TokenType::ClosingSquareBracket; + + break; + } + case '=': tokenType = TokenType::Assign; break; case '+': tokenType = TokenType::Plus; break; case '*': tokenType = TokenType::Multiply; break;