get param dinamicly

This commit is contained in:
_N3m0 2024-01-04 14:56:56 +01:00
parent 466a76fcbc
commit d4d0cc1812
1 changed files with 23 additions and 13 deletions

36
lexer.c
View File

@ -1,6 +1,9 @@
#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
typedef struct Cursor { typedef struct Cursor {
int chunk; int chunk;
@ -100,17 +103,21 @@ char* getParam(const char* word, int len, char* cursor, int* size){
cursor = nextchar(); cursor = nextchar();
} }
char* begin = nextchar(); int cap = DA_LEN;
res = malloc(sizeof(char) * cap);
*size = 0; *size = 0;
do { do {
cursor = nextchar(); cursor = nextchar();
res[*size] = *cursor;
(*size)++; (*size)++;
if (*size >= cap){
cap *= 2;
res = realloc(res, cap);
}
} while (*cursor != '"'); } while (*cursor != '"');
res = malloc(sizeof(char) * ((*size)+1)); res[*size-1] = '\0';
strncpy(res, begin, *size);
res[*size] = '\0';
break; break;
} }
@ -153,18 +160,21 @@ Token* create_balise_token(Token* token, char* cursor){
if (token->type == A){ if (token->type == A){
token->value = getParam("href", sizeof("href"), cursor, &token->len); token->value = getParam("href", sizeof("href"), cursor, &token->len);
} /*else if (token->type == IMG){ } else if (token->type == IMG) {
int len, srclen, altlen; int srclen, altlen, totallen;
char* src = getParam("src", sizeof("src"), cursor, &srclen); char* src = getParam("src", sizeof("src"), cursor, &srclen);
char* alt = getParam("alt", sizeof("alt"), cursor, &altlen); char* alt = getParam("alt", sizeof("alt"), cursor, &altlen);
len = srclen + altlen; totallen = srclen * altlen + 1;
token->value = malloc(sizeof(char) * (len + 1)); printf("IMG: src = '%s', alt = '%s'.\n", src, alt);
strncat(token->value, src, srclen); token->value = malloc(sizeof(char) * (totallen));
strncpy(token->value + srclen + 1, alt, altlen); strncpy(token->value, src, srclen);
}*/ token->value[srclen-1] = ' ';
//go_back(); strncpy(token->value+srclen, alt, altlen);
else { token->value[totallen] = '\0';
token->len = totallen;
} else {
token->value = malloc(sizeof(char) * len); token->value = malloc(sizeof(char) * len);
strncpy(token->value, balise, len+1); strncpy(token->value, balise, len+1);
token->len = len; token->len = len;