/* $Id: html-l.l.txt,v 1.1.1.1 2002/08/14 22:28:26 dan Exp $ -*-C-*- */
%{
#include
#include
#include
#define NUM_TYPES 4
enum key_type {
TITLE = 0, DESCRIPTION = 1, KEYWORDS = 2, HERE = 3, BIG_NaN = 99999999
} current_key;
char *keys[NUM_TYPES];
int flag_lex = 0;
int flag_key = 0;
%}
%%
\ {
if (flag_lex == 1) flag_lex = 0;
else ECHO;
}
[a-z]+= {
if (flag_lex == 1 && flag_key == 0)
{
flag_key = 1;
if (! strcmp(yytext, "title=")) current_key = TITLE;
else if (! strcmp(yytext, "description=")) current_key = DESCRIPTION;
else if (! strcmp(yytext, "keywords=")) current_key = KEYWORDS;
else if (! strcmp(yytext, "here=")) current_key = HERE;
else
{
fprintf(stderr, "html-l: error: unrecognized keyword!\n");
exit(EXIT_FAILURE);
}
}
else ECHO;
}
\"header\" {
if (flag_lex == 1 && flag_key == 1 && current_key == HERE)
{
fprintf(yyout,
""
"{zhaoway} %s"
""
""
""
""
"\n",
keys[TITLE], keys[DESCRIPTION], keys[KEYWORDS]
);
flag_key = 0;
}
else ECHO;
}
\"footer\" {
if (flag_lex == 1 && flag_key == 1 && current_key == HERE)
{
fprintf(yyout,
"\n"
);
flag_key = 0;
}
else ECHO;
}
\"[^\"]*\" {
int len;
if (flag_lex == 1 && flag_key == 1)
{
flag_key = 0;
len = strlen(yytext) + 1;
keys[current_key] = (char *) malloc(len);
if (keys[current_key] == NULL) exit(EXIT_FAILURE);
memcpy(keys[current_key], yytext, len);
}
else ECHO;
}
%%
int main(void)
{
current_key = BIG_NaN;
yylex();
return(0);
}