From a42388d06108154fe424dc94cf1ed9f4842c5f2b Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 14 Jun 2013 03:10:27 -0400 Subject: [PATCH] ExpressionParser: Support bare words for simple control names Using backticks for all control names can get a bit grating, so support "A & B" instead of requiring "`A` & `B`". --- .../ControllerInterface/ExpressionParser.cpp | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp b/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp index 2cd7a59bf2..2023debd56 100644 --- a/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp +++ b/Source/Core/InputCommon/Src/ControllerInterface/ExpressionParser.cpp @@ -108,7 +108,7 @@ public: return false; } - Token GetControlQualifier() + Token GetFullyQualifiedControl() { ControlQualifier qualifier; std::string value; @@ -126,6 +126,24 @@ public: return Token(TOK_CONTROL, qualifier); } + Token GetBarewordsControl(char c) + { + std::string name; + name += c; + + while (it != expr.end()) { + c = *it; + if (!isalpha(c)) + break; + name += c; + it++; + } + + ControlQualifier qualifier; + qualifier.control_name = name; + return Token(TOK_CONTROL, qualifier); + } + Token NextToken() { if (it == expr.end()) @@ -152,9 +170,12 @@ public: case '+': return Token(TOK_ADD); case '`': - return GetControlQualifier(); + return GetFullyQualifiedControl(); default: - return Token(TOK_INVALID); + if (isalpha(c)) + return GetBarewordsControl(c); + else + return Token(TOK_INVALID); } }