/* $Id: html-l.l.txt,v 1.1.1.1 2002/08/14 22:28:26 dan Exp $ -*-C-*- */

%{

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#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;

%}

%%

\<lex {
  if (flag_lex == 0) flag_lex = 1;
  else ECHO;
}

\/> {
  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,
	      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\""
	      "\"http://www.w3.org/TR/REC-html40/strict.dtd\">"
	      "<HTML><HEAD><title>{zhaoway} %s</title>"
	      "<link rel=\"stylesheet\" href=\"style.css\" type=\"text/css\">"
	      "<meta http-equiv=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\">"
	      "<meta name=\"description\" content=%s>"
	      "<meta name=\"keywords\" content=%s></HEAD><BODY>"
	      "<script type=\"text/javascript\" src=\"header.js\" charset=\"iso-8859-1\">"
	      "</script>\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,
	      "<script type=\"text/javascript\" src=\"footer.js\" charset=\"iso-8859-1\">"
	      "</script></BODY></HTML>\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);
}
