%option noyywrap %option yylineno %option nounput %option nodefault %{ #include "urlscanner.h" #include "string.h" yystype yylval; %} %x ATAG_HREF %x ATAG_BETWEEN %x ATAG_DESC %% [^<]* { } "]*"href=\"" { BEGIN(ATAG_HREF); } [^\"]+ { yylval = strdup(yytext); BEGIN(ATAG_BETWEEN); return TOKEN_URL; } \" { yylval = ""; BEGIN(ATAG_BETWEEN); return TOKEN_URL; } [^>]* { } ">" { BEGIN(ATAG_DESC); } [^<]* { yylval = strdup(yytext); BEGIN(INITIAL); return TOKEN_TEXT; } . { /* skip */ } <> { return MYEOF; } %% void scan_string(const char* str) { yy_switch_to_buffer(yy_scan_string(str)); }