1 /*============================================================================
2 CMake - Cross Platform Makefile Generator
3 Copyright 2012 Stephen Kelly <steveire@gmail.com>
5 Distributed under the OSI-approved BSD License (the "License");
6 see accompanying file Copyright.txt for details.
8 This software is distributed WITHOUT ANY WARRANTY; without even the
9 implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 See the License for more information.
11 ============================================================================*/
12 #include "cmGeneratorExpressionLexer.h"
15 //----------------------------------------------------------------------------
16 cmGeneratorExpressionLexer::cmGeneratorExpressionLexer()
17 : SawBeginExpression(false), SawGeneratorExpression(false)
22 //----------------------------------------------------------------------------
23 static void InsertText(const char *upto, const char *c,
24 std::vector<cmGeneratorExpressionToken> &result)
28 result.push_back(cmGeneratorExpressionToken(
29 cmGeneratorExpressionToken::Text, upto, c - upto));
33 //----------------------------------------------------------------------------
34 std::vector<cmGeneratorExpressionToken>
35 cmGeneratorExpressionLexer::Tokenize(const char *input)
37 std::vector<cmGeneratorExpressionToken> result;
41 const char *c = input;
46 if(c[0] == '$' && c[1] == '<')
48 InsertText(upto, c, result);
50 result.push_back(cmGeneratorExpressionToken(
51 cmGeneratorExpressionToken::BeginExpression, upto, 2));
54 SawBeginExpression = true;
58 InsertText(upto, c, result);
60 result.push_back(cmGeneratorExpressionToken(
61 cmGeneratorExpressionToken::EndExpression, upto, 1));
63 SawGeneratorExpression = SawBeginExpression;
67 InsertText(upto, c, result);
69 result.push_back(cmGeneratorExpressionToken(
70 cmGeneratorExpressionToken::ColonSeparator, upto, 1));
75 InsertText(upto, c, result);
77 result.push_back(cmGeneratorExpressionToken(
78 cmGeneratorExpressionToken::CommaSeparator, upto, 1));
82 InsertText(upto, c, result);