/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2012 Stephen Kelly Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #include "cmGeneratorExpressionLexer.h" //---------------------------------------------------------------------------- cmGeneratorExpressionLexer::cmGeneratorExpressionLexer() : SawBeginExpression(false), SawGeneratorExpression(false) { } //---------------------------------------------------------------------------- static void InsertText(const char *upto, const char *c, std::vector &result) { if (upto != c) { result.push_back(cmGeneratorExpressionToken( cmGeneratorExpressionToken::Text, upto, c - upto)); } } //---------------------------------------------------------------------------- std::vector cmGeneratorExpressionLexer::Tokenize(const std::string& input) { std::vector result; const char *c = input.c_str(); const char *upto = c; for ( ; *c; ++c) { switch(*c) { case '$': if(c[1] == '<') { InsertText(upto, c, result); result.push_back(cmGeneratorExpressionToken( cmGeneratorExpressionToken::BeginExpression, c, 2)); upto = c + 2; ++c; SawBeginExpression = true; } break; case '>': InsertText(upto, c, result); result.push_back(cmGeneratorExpressionToken( cmGeneratorExpressionToken::EndExpression, c, 1)); upto = c + 1; SawGeneratorExpression = SawBeginExpression; break; case ':': InsertText(upto, c, result); result.push_back(cmGeneratorExpressionToken( cmGeneratorExpressionToken::ColonSeparator, c, 1)); upto = c + 1; break; case ',': InsertText(upto, c, result); result.push_back(cmGeneratorExpressionToken( cmGeneratorExpressionToken::CommaSeparator, c, 1)); upto = c + 1; break; default: break; } } InsertText(upto, c, result); return result; }