| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#include "cmGeneratorExpressionLexer.h"cmGeneratorExpressionLexer::cmGeneratorExpressionLexer() = default;static void InsertText(const char* upto, const char* c,                       std::vector<cmGeneratorExpressionToken>& result){  if (upto != c) {    result.emplace_back(cmGeneratorExpressionToken::Text, upto, c - upto);  }}std::vector<cmGeneratorExpressionToken> cmGeneratorExpressionLexer::Tokenize(  const std::string& input){  std::vector<cmGeneratorExpressionToken> result;  if (input.find('$') == std::string::npos) {    result.emplace_back(cmGeneratorExpressionToken::Text, input.c_str(),                        input.size());    return 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.emplace_back(cmGeneratorExpressionToken::BeginExpression, c,                              2);          upto = c + 2;          ++c;          SawBeginExpression = true;        }        break;      case '>':        InsertText(upto, c, result);        result.emplace_back(cmGeneratorExpressionToken::EndExpression, c, 1);        upto = c + 1;        SawGeneratorExpression = SawBeginExpression;        break;      case ':':        InsertText(upto, c, result);        result.emplace_back(cmGeneratorExpressionToken::ColonSeparator, c, 1);        upto = c + 1;        break;      case ',':        InsertText(upto, c, result);        result.emplace_back(cmGeneratorExpressionToken::CommaSeparator, c, 1);        upto = c + 1;        break;      default:        break;    }  }  InsertText(upto, c, result);  return result;}
 |