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

int main(int argc, char **argv){
	FILE *infile;
	char linestring[1024];
	char buff[16];
	int num1;
	int cur_char = 0;
	int delimiter_count = 0;
	int longest_num = 0;
	int longest_name = 0;
	int entities = 0;

        if( ( infile = fopen("./Entities.txt", "r" ) ) == NULL ) {
                fprintf( stderr, "Error opening %s\n", "./Entities.txt" );
                return 1;
        }
        memset((void*) linestring, '\0', 1024);

                if(linestring[0] != '\n')

//	<tr title="U+000C6 LATIN CAPITAL LETTER AE" data-block="C1 Controls and Latin-1 Supplement" data-category="Lu" data-set="xhtml1-lat1 9573-2003-isolat1"><td class="character"> &#x000C6;<td class="named"><code>&amp;AElig;</code><td class="hex"><code>&amp;#x000C6;</code><td class="dec"><code>&amp;#198;</code><td class="desc">LATIN CAPITAL LETTER AE
	while( fgets(linestring, 1024, infile) != NULL){
		//while(cur_char != '\n'
		//cur_char = 0;
		memset((void*)buff, '\0', 16);
		delimiter_count = 0;
		cur_char = 0;
		if(linestring[cur_char++] != '<')
			continue;
		if(linestring[cur_char++] != 't')
			continue;
		if(linestring[cur_char++] != 'r')
			continue;
		delimiter_count++;

		while(linestring[cur_char] != '\n' && linestring[cur_char] != '\0'){
			if(linestring[cur_char++] != '<')
				continue;
			delimiter_count++;
			//output format {"AElig", 198},
			//name field <code>&amp;AElig;
			if(delimiter_count == 4){
				while(linestring[cur_char] != '\n' && linestring[cur_char] != '\0' && linestring[cur_char] != ';'){
					cur_char++;
				}
				if(linestring[cur_char] == '\n' || linestring[cur_char] == '\0')
					break;
				cur_char++;

				num1=0;
				while(linestring[cur_char] != '\n' && linestring[cur_char] != '\0' && linestring[cur_char] != ';'){
					buff[num1++] = linestring[cur_char++];
				}
				if(linestring[cur_char] == '\n' || linestring[cur_char] == '\0')
					break;
				if(num1>longest_name)
					longest_name = num1;
				buff[num1] = '\0';
				//printf("\t\t\t\t{\"%s\", ", buff);
				printf("&%s;\n", buff);
			}
			//number field <code>&amp;#198;
			if(delimiter_count == 10){
				while(linestring[cur_char] != '\n' && linestring[cur_char] != '\0' && linestring[cur_char] != ';'){
					cur_char++;
				}
				if(linestring[cur_char] == '\n' || linestring[cur_char] == '\0')
					break;
				cur_char++;
				num1=0;
				while(linestring[cur_char] != '\n' && linestring[cur_char] != '\0' && linestring[cur_char] != ';'){
					if(linestring[cur_char] == '#'){
						cur_char++;
						continue;
					}
					buff[num1++] = linestring[cur_char++];
				}
				if(linestring[cur_char] == '\n' || linestring[cur_char] == '\0')
					break;
				if(num1>longest_num)
					longest_num = num1;
				buff[num1] = '\0';
				//printf("%s},\n", buff);
				entities++;
			}
		}


	}
//	printf("longest name: %d longest num: %d\n", longest_name, longest_num);
//	printf("entities: %d\n", entities);
	fclose(infile);
	return 0;
}
