%{
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */

/* IWYU pragma: no_forward_declare yyguts_t */

#ifndef __clang_analyzer__ /* Suppress clang-analyzer warnings */

#include <cmGccDepfileLexerHelper.h>
#include <string>
%}

%option prefix="cmGccDepfile_yy"
%option noyywrap
%option reentrant
%pointer

WSPACE [ \t]
NEWLINE \r?\n

%%
\${2}                  {
                         // Unescape the dollar sign.
                         yyextra->addToCurrentPath("$");
                       }
\\#                    {
                         // Unescape the hash.
                         yyextra->addToCurrentPath("#");
                       }
(\\\\)*\\[ ]           {
                         // 2N+1 backslashes plus space -> N backslashes plus space.
                         size_t c = (strlen(yytext) - 1) / 2;
                         std::string s(c, '\\');
                         s.push_back(' ');
                         yyextra->addToCurrentPath(s.c_str());
                       }
(\\\\)+[ ]             {
                         // 2N backslashes plus space -> 2N backslashes, end of filename.
                         yytext[strlen(yytext) - 1] = 0;
                         yyextra->addToCurrentPath(yytext);
                         yyextra->newDependency();
                       }
{WSPACE}*\\{NEWLINE}   {
                         // A line continuation ends the current file name.
                         yyextra->newRuleOrDependency();
                       }
{NEWLINE}              {
                         // A newline ends the current file name and the current rule.
                         yyextra->newEntry();
                       }
:{WSPACE}+             {
                         // A colon followed by space ends the rules and starts a new dependency.
                         yyextra->newDependency();
                       }
{WSPACE}+              {
                         // Rules and dependencies are separated by blocks of whitespace.
                         yyextra->newRuleOrDependency();
                       }
[a-zA-Z0-9+,/_.~()}{%=@\x5B\x5D!\x80-\xFF-]+ {
                         // Got a span of plain text.
                         yyextra->addToCurrentPath(yytext);
                       }
.                      {
                         // Got an otherwise unmatched character.
                         yyextra->addToCurrentPath(yytext);
                       }

%%

/*--------------------------------------------------------------------------*/

#endif /* __clang_analyzer__ */
