From b03364e3d92a9ab20943731a9a118847bba822ef Mon Sep 17 00:00:00 2001 From: _N3m0 Date: Sun, 31 Dec 2023 14:54:14 +0100 Subject: [PATCH] init lexer --- Makefile | 2 +- lexer.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ lexer.h | 30 ++++++++++++++++++++++++++ main.c | 8 +++++++ 4 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 lexer.c create mode 100644 lexer.h diff --git a/Makefile b/Makefile index b0e912a..bff4e71 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ BIN=webpage -SRCS=main.c config.c page.c +SRCS=main.c config.c page.c lexer.c INC=. LIB=curl FLAGS=-Wall -Wextra -Og -g diff --git a/lexer.c b/lexer.c new file mode 100644 index 0000000..c5da1d9 --- /dev/null +++ b/lexer.c @@ -0,0 +1,64 @@ +#include "lexer.h" +#include "page.h" +#include + +Cursor cursor = { + .chunk = 0, + .offset = 0, +}; + +char* nextchar(void){ + if (page.chunks[cursor.chunk][cursor.offset+1] == '\0'){ + cursor.chunk++; + cursor.offset = 0; + } else { + cursor.offset++; + } + + return &page.chunks[cursor.chunk][cursor.offset]; +} + +Token* nexttoken(void){ + Token* token = malloc(sizeof(Token)); + token->type = NO_TYPE; + + /* + while (nextchar() == '<'); + + char c = '\0'; + do { + c = nextchar(); + printf("%c", c);; + } while (c != '>'); + puts(""); + */ + + puts(""); + for (int i=0; i<200; i++){ + printf("%c", *nextchar()); + } + puts(""); + + return token; +} + +void printtoken(Token* token){ + switch (token->type) { + case END_BODY: + printf("END_BODY: "); + break; + case NO_TYPE: + printf("NO_TYPE: "); + break; + default: + printf("OTHER_TOKEN: "); + break; + } + + if (token->value == NULL){ + puts("NO VALUE FOUND"); + return; + } + + printf("%s\n", token->value); +} diff --git a/lexer.h b/lexer.h new file mode 100644 index 0000000..402b36d --- /dev/null +++ b/lexer.h @@ -0,0 +1,30 @@ +#ifndef LEXER_H +#define LEXER_H + +#include +#include + +typedef enum TokenType { + NO_TYPE, + TEXT, + BODY, + END_BODY, + UL, LI, + H1, H2, H3, H4, H5, H6, +} TokenType; + +typedef struct Token { + TokenType type; + char* value; +} Token; + +typedef struct Cursor { + int chunk; + int offset; +} Cursor; + +Token* nexttoken(void); + +void printtoken(Token* token); + +#endif // LEXER_H diff --git a/main.c b/main.c index 66bd484..1a8cbcd 100644 --- a/main.c +++ b/main.c @@ -1,5 +1,6 @@ #include "config.h" #include "page.h" +#include "lexer.h" int main(int argc, char* argv[]){ @@ -8,5 +9,12 @@ int main(int argc, char* argv[]){ printPage(); + Token* token; + do{ + token = nexttoken(); + printtoken(token); + //parse(token); + } while (token->type != NO_TYPE); + return 0; }