eval my balls
This commit is contained in:
parent
25f9d42e9f
commit
8619caa1b6
8
Makefile
8
Makefile
|
@ -1,5 +1,5 @@
|
||||||
BIN=webpage
|
BIN=webpage
|
||||||
SRCS=main.c config.c page.c lexer.c
|
SRCS=main.c config.c page.c lexer.c eval.c
|
||||||
INC=.
|
INC=.
|
||||||
LIB=curl
|
LIB=curl
|
||||||
FLAGS=-Wall -Wextra -Og -g -ggdb -fvar-tracking
|
FLAGS=-Wall -Wextra -Og -g -ggdb -fvar-tracking
|
||||||
|
@ -12,7 +12,11 @@ $(BIN) : $(SRCS)
|
||||||
run : $(BIN)
|
run : $(BIN)
|
||||||
./$(BIN) $(input)
|
./$(BIN) $(input)
|
||||||
|
|
||||||
|
check :
|
||||||
|
cppcheck --enable=all --suppress=missingIncludeSystem -I$(INC) .
|
||||||
|
flawfinder .
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
rm -f $(BIN) *.o
|
rm -f $(BIN) *.o
|
||||||
|
|
||||||
.PHONY : run clean
|
.PHONY : run check clean
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
#include "eval.h"
|
||||||
|
#include "format.h"
|
||||||
|
#include "lexer.h"
|
||||||
|
#include "form.h"
|
||||||
|
|
||||||
|
#define PAGE_WIDTH 80
|
||||||
|
|
||||||
|
#define EXPAND_LIT(x) x, sizeof(x)
|
||||||
|
|
||||||
|
PageState state = {0};
|
||||||
|
|
||||||
|
void print_text(const char* text, int len){
|
||||||
|
for (int i=0; i<len; i++){
|
||||||
|
if (state.beginLine) printf("\n");
|
||||||
|
|
||||||
|
printf("%c", text[i]);
|
||||||
|
state.y++;
|
||||||
|
state.beginLine = 0;
|
||||||
|
|
||||||
|
if (state.y >= PAGE_WIDTH || text[i] == '\n'){
|
||||||
|
state.y = 0;
|
||||||
|
state.x++;
|
||||||
|
state.beginLine = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
state.beginLine = state.beginLine || text[len] == '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
void break_line(void){
|
||||||
|
state.y = 0;
|
||||||
|
state.x++;
|
||||||
|
state.beginLine = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void evaluate(Token* token){
|
||||||
|
if (token->type == TITLE)
|
||||||
|
{
|
||||||
|
printf(FC_BOLD);
|
||||||
|
print_text(EXPAND_LIT("--- "));
|
||||||
|
}
|
||||||
|
else if (token->type == END_TITLE)
|
||||||
|
{
|
||||||
|
print_text(EXPAND_LIT(" ---"));
|
||||||
|
printf(FC_nBOLD);
|
||||||
|
break_line();
|
||||||
|
}
|
||||||
|
else if (token->type == LI)
|
||||||
|
{
|
||||||
|
print_text(EXPAND_LIT("- "));
|
||||||
|
}
|
||||||
|
else if (token->type == END_LI)
|
||||||
|
{
|
||||||
|
//print_text(EXPAND_LIT("\n"));
|
||||||
|
}
|
||||||
|
else if (token->type == STRONG || token->type == B)
|
||||||
|
{
|
||||||
|
printf(FC_BOLD);
|
||||||
|
}
|
||||||
|
else if (token->type == END_STRONG || token->type == END_B)
|
||||||
|
{
|
||||||
|
printf(FC_nBOLD);
|
||||||
|
print_text(EXPAND_LIT(" "));
|
||||||
|
}
|
||||||
|
else if (token->type == EM || token->type == I)
|
||||||
|
{
|
||||||
|
printf(FC_ITA);
|
||||||
|
}
|
||||||
|
else if (token->type == END_EM || token->type == END_I)
|
||||||
|
{
|
||||||
|
printf(FC_nITA);
|
||||||
|
}
|
||||||
|
else if (token->type == IMG)
|
||||||
|
{
|
||||||
|
print_text(EXPAND_LIT("["));
|
||||||
|
print_text(EXPAND_LIT("IMG"));
|
||||||
|
print_text(EXPAND_LIT("]"));
|
||||||
|
}
|
||||||
|
else if (token->type == A)
|
||||||
|
{
|
||||||
|
print_text(EXPAND_LIT("["));
|
||||||
|
char* s = malloc(sizeof(int)*2);
|
||||||
|
sprintf(s, "%d", state.nbLink);
|
||||||
|
print_text(s, strlen(s));
|
||||||
|
state.nbLink++;
|
||||||
|
free(s);
|
||||||
|
print_text(EXPAND_LIT("]"));
|
||||||
|
printf(FC_UDL);
|
||||||
|
}
|
||||||
|
else if (token->type == END_A)
|
||||||
|
{
|
||||||
|
printf(FC_nUDL);
|
||||||
|
print_text(EXPAND_LIT(" "));
|
||||||
|
}
|
||||||
|
else if (token->type == END_P)
|
||||||
|
{
|
||||||
|
break_line();
|
||||||
|
}
|
||||||
|
else if (token->type == TEXT)
|
||||||
|
{
|
||||||
|
print_text(token->value, token->len);
|
||||||
|
}
|
||||||
|
else if (token->type == H1 || token->type == H2 || token->type == H3 || token->type == H4 || token->type == H5 || token->type == H6)
|
||||||
|
{
|
||||||
|
break_line();
|
||||||
|
printf(FC_BOLD);
|
||||||
|
}
|
||||||
|
else if (token->type == END_H1 || token->type == END_H2 || token->type == END_H3 || token->type == END_H4 || token->type == END_H5 || token->type == END_H6)
|
||||||
|
{
|
||||||
|
printf(FC_nBOLD);
|
||||||
|
}
|
||||||
|
else if (token->type == HR)
|
||||||
|
{
|
||||||
|
printf(FC_nUDL);
|
||||||
|
break_line();
|
||||||
|
print_text(EXPAND_LIT("-------------------------------------------------------------------------------"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#ifndef EVAL_H
|
||||||
|
#define EVAL_H
|
||||||
|
|
||||||
|
#include "lexer.h"
|
||||||
|
|
||||||
|
typedef struct PageState {
|
||||||
|
int nbLink;
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int beginLine;
|
||||||
|
} PageState;
|
||||||
|
|
||||||
|
void evaluate(Token* token);
|
||||||
|
|
||||||
|
#endif // EVAL_H
|
|
@ -0,0 +1,60 @@
|
||||||
|
#ifndef FORMAT_H
|
||||||
|
#define FORMAT_H
|
||||||
|
|
||||||
|
// COLOR
|
||||||
|
|
||||||
|
#define FC_RES "\033[0m"
|
||||||
|
#define FC_BOLD "\033[1m"
|
||||||
|
#define FC_ITA "\033[3m"
|
||||||
|
#define FC_UDL "\033[4m"
|
||||||
|
#define FC_BIK "\033[5m"
|
||||||
|
#define FC_SWAP "\033[7m"
|
||||||
|
#define FC_HID "\033[8m"
|
||||||
|
#define FC_STR "\033[9m"
|
||||||
|
#define FC_DEF "\033[39m"
|
||||||
|
#define FC_nBOLD "\033[22m"
|
||||||
|
#define FC_nITA "\033[23m"
|
||||||
|
#define FC_nUDL "\033[24m"
|
||||||
|
#define FC_nBIK "\033[25m"
|
||||||
|
#define FC_nSWAP "\033[27m"
|
||||||
|
#define FC_nHID "\033[28m"
|
||||||
|
#define FC_nSTR "\033[29m"
|
||||||
|
#define FC_bDEF "\033[49m"
|
||||||
|
|
||||||
|
#define FC_BLK "\033[30m"
|
||||||
|
#define FC_RED "\033[31m"
|
||||||
|
#define FC_GRN "\033[32m"
|
||||||
|
#define FC_YEL "\033[33m"
|
||||||
|
#define FC_BLU "\033[34m"
|
||||||
|
#define FC_MAG "\033[35m"
|
||||||
|
#define FC_CYA "\033[36m"
|
||||||
|
#define FC_WHI "\033[37m"
|
||||||
|
|
||||||
|
#define FC_lBLK "\033[90m"
|
||||||
|
#define FC_lRED "\033[91m"
|
||||||
|
#define FC_lGRN "\033[92m"
|
||||||
|
#define FC_lYEL "\033[93m"
|
||||||
|
#define FC_lBLU "\033[94m"
|
||||||
|
#define FC_lMAG "\033[95m"
|
||||||
|
#define FC_lCYA "\033[96m"
|
||||||
|
#define FC_lWHI "\033[97m"
|
||||||
|
|
||||||
|
#define FC_bBLK "\033[40m"
|
||||||
|
#define FC_bRED "\033[41m"
|
||||||
|
#define FC_bGRN "\033[42m"
|
||||||
|
#define FC_bYEL "\033[43m"
|
||||||
|
#define FC_bBLU "\033[44m"
|
||||||
|
#define FC_bMAG "\033[45m"
|
||||||
|
#define FC_bCYA "\033[46m"
|
||||||
|
#define FC_bWHI "\033[47m"
|
||||||
|
|
||||||
|
#define FC_blBLK "\033[100m"
|
||||||
|
#define FC_blRED "\033[101m"
|
||||||
|
#define FC_blGRN "\033[102m"
|
||||||
|
#define FC_blYEL "\033[103m"
|
||||||
|
#define FC_blBLU "\033[104m"
|
||||||
|
#define FC_blMAG "\033[105m"
|
||||||
|
#define FC_blCYA "\033[106m"
|
||||||
|
#define FC_blWHI "\033[107m"
|
||||||
|
|
||||||
|
#endif // FORMAT_H
|
21
lexer.c
21
lexer.c
|
@ -1,6 +1,4 @@
|
||||||
#include "lexer.h"
|
#include "lexer.h"
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define HTML_BALISE_LEN 12
|
#define HTML_BALISE_LEN 12
|
||||||
#define DA_LEN 64
|
#define DA_LEN 64
|
||||||
|
@ -173,7 +171,6 @@ Token* create_balise_token(Token* token, char* cursor){
|
||||||
char* alt = getParam("alt", sizeof("alt"), cursor, &altlen);
|
char* alt = getParam("alt", sizeof("alt"), cursor, &altlen);
|
||||||
totallen = srclen * altlen + 1;
|
totallen = srclen * altlen + 1;
|
||||||
|
|
||||||
printf("IMG: src = '%s', alt = '%s'.\n", src, alt);
|
|
||||||
token->value = malloc(sizeof(char) * (totallen));
|
token->value = malloc(sizeof(char) * (totallen));
|
||||||
strncpy(token->value, src, srclen);
|
strncpy(token->value, src, srclen);
|
||||||
token->value[srclen-1] = ' ';
|
token->value[srclen-1] = ' ';
|
||||||
|
@ -224,6 +221,10 @@ TokenType token_by_name(const char name[HTML_BALISE_LEN]){
|
||||||
return END_BODY;
|
return END_BODY;
|
||||||
} else if (strncmp(name, "/html", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "/html", HTML_BALISE_LEN) == 0){
|
||||||
return END_HTML;
|
return END_HTML;
|
||||||
|
} else if (strncmp(name, "title", HTML_BALISE_LEN) == 0){
|
||||||
|
return TITLE;
|
||||||
|
} else if (strncmp(name, "/title", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_TITLE;
|
||||||
} else if (strncmp(name, "em", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "em", HTML_BALISE_LEN) == 0){
|
||||||
return EM;
|
return EM;
|
||||||
} else if (strncmp(name, "/em", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "/em", HTML_BALISE_LEN) == 0){
|
||||||
|
@ -244,6 +245,8 @@ TokenType token_by_name(const char name[HTML_BALISE_LEN]){
|
||||||
return HR;
|
return HR;
|
||||||
} else if (strncmp(name, "br", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "br", HTML_BALISE_LEN) == 0){
|
||||||
return BR;
|
return BR;
|
||||||
|
} else if (strncmp(name, "/p", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_P;
|
||||||
} else if (strncmp(name, "a", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "a", HTML_BALISE_LEN) == 0){
|
||||||
return A;
|
return A;
|
||||||
} else if (strncmp(name, "/a", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "/a", HTML_BALISE_LEN) == 0){
|
||||||
|
@ -284,6 +287,18 @@ TokenType token_by_name(const char name[HTML_BALISE_LEN]){
|
||||||
return H5;
|
return H5;
|
||||||
} else if (strncmp(name, "h6", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "h6", HTML_BALISE_LEN) == 0){
|
||||||
return H6;
|
return H6;
|
||||||
|
} else if (strncmp(name, "/h1", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_H1;
|
||||||
|
} else if (strncmp(name, "/h2", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_H2;
|
||||||
|
} else if (strncmp(name, "/h3", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_H3;
|
||||||
|
} else if (strncmp(name, "/h4", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_H4;
|
||||||
|
} else if (strncmp(name, "/h5", HTML_BALISE_LEN) == 0){
|
||||||
|
return END_H5;
|
||||||
|
} else if (strncmp(name, "/h6", HTML_BALISE_LEN) == 0){
|
||||||
|
return H6;
|
||||||
} else if (strncmp(name, "table", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "table", HTML_BALISE_LEN) == 0){
|
||||||
return TABLE;
|
return TABLE;
|
||||||
} else if (strncmp(name, "/table", HTML_BALISE_LEN) == 0){
|
} else if (strncmp(name, "/table", HTML_BALISE_LEN) == 0){
|
||||||
|
|
4
lexer.h
4
lexer.h
|
@ -11,13 +11,14 @@
|
||||||
typedef enum TokenType {
|
typedef enum TokenType {
|
||||||
UNDEFINED_TYPE,
|
UNDEFINED_TYPE,
|
||||||
DONT_CARE,
|
DONT_CARE,
|
||||||
|
TITLE, END_TITLE,
|
||||||
TEXT, END_HTML,
|
TEXT, END_HTML,
|
||||||
BODY, END_BODY,
|
BODY, END_BODY,
|
||||||
A, END_A,
|
A, END_A,
|
||||||
IMG, END_IMG,
|
IMG, END_IMG,
|
||||||
BLOCKQUOTE, END_BLOCKQUOTE,
|
BLOCKQUOTE, END_BLOCKQUOTE,
|
||||||
CODE, END_CODE,
|
CODE, END_CODE,
|
||||||
HR, BR,
|
HR, BR, END_P,
|
||||||
PROGRESS, END_PROGRESS,
|
PROGRESS, END_PROGRESS,
|
||||||
STRONG, B, I, EM,
|
STRONG, B, I, EM,
|
||||||
END_STRONG, END_B, END_I, END_EM,
|
END_STRONG, END_B, END_I, END_EM,
|
||||||
|
@ -26,6 +27,7 @@ typedef enum TokenType {
|
||||||
END_THEAD, TBODY, END_TBODY,
|
END_THEAD, TBODY, END_TBODY,
|
||||||
TR, TH, END_TR, END_TH,
|
TR, TH, END_TR, END_TH,
|
||||||
H1, H2, H3, H4, H5, H6,
|
H1, H2, H3, H4, H5, H6,
|
||||||
|
END_H1, END_H2, END_H3, END_H4, END_H5, END_H6,
|
||||||
} TokenType;
|
} TokenType;
|
||||||
|
|
||||||
typedef struct Token {
|
typedef struct Token {
|
||||||
|
|
6
main.c
6
main.c
|
@ -1,6 +1,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "page.h"
|
#include "page.h"
|
||||||
#include "lexer.h"
|
#include "lexer.h"
|
||||||
|
#include "eval.h"
|
||||||
|
|
||||||
int main(int argc, char* argv[]){
|
int main(int argc, char* argv[]){
|
||||||
|
|
||||||
|
@ -10,9 +11,10 @@ int main(int argc, char* argv[]){
|
||||||
Token* token = NULL;
|
Token* token = NULL;
|
||||||
do {
|
do {
|
||||||
token = nexttoken();
|
token = nexttoken();
|
||||||
printtoken(token);
|
evaluate(token);
|
||||||
//evaluate(token);
|
|
||||||
} while (token != NULL && token->type != END_HTML);
|
} while (token != NULL && token->type != END_HTML);
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue