is_word_char normalized check

This commit is contained in:
whaffman 2025-02-28 14:04:53 +01:00
parent de2acbe1e0
commit 3404d05bc5

View File

@ -6,12 +6,22 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/05 19:03:47 by qmennen #+# #+# */ /* Created: 2025/02/05 19:03:47 by qmennen #+# #+# */
/* Updated: 2025/02/28 01:17:42 by whaffman ######## odam.nl */ /* Updated: 2025/02/28 14:04:22 by whaffman ######## odam.nl */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "minishell.h" #include "minishell.h"
static int is_word_char(char c)
{
return (ft_isprint(c)
&& c != '<'
&& c != '>'
&& c != '|'
&& c != '\0'
&& !ft_isspace(c));
}
static int match_quotes(t_minishell *msh, t_lexer *lexer) static int match_quotes(t_minishell *msh, t_lexer *lexer)
{ {
char c; char c;
@ -23,8 +33,7 @@ static int match_quotes(t_minishell *msh, t_lexer *lexer)
c = lexer->input[i]; c = lexer->input[i];
d_qts = 0; d_qts = 0;
s_qts = 0; s_qts = 0;
//TODO: Normalize this validation. Happens a lot while (is_word_char(c))
while (ft_isprint(c) && c != '<' && c != '>' && c != '|' && c != '\0' && !ft_isspace(c))
{ {
if (lexer->input[i] == '\'') if (lexer->input[i] == '\'')
s_qts++; s_qts++;
@ -43,9 +52,9 @@ static int calculate_word_len(t_minishell *msh, t_lexer *lexer)
len = 1; len = 1;
i = lexer->pos; i = lexer->pos;
while (ft_isprint(lexer->input[i]) && lexer->input[i] != '<' && lexer->input[i]!= '>' && lexer->input[i] != '|' && lexer->input[i] != '\0' && !ft_isspace(lexer->input[i])) while (is_word_char(lexer->input[i]))
{ {
if(lexer->input[i] != '\'' && lexer->input[i] != '"') if (lexer->input[i] != '\'' && lexer->input[i] != '"')
len++; len++;
i++; i++;
} }
@ -54,12 +63,10 @@ static int calculate_word_len(t_minishell *msh, t_lexer *lexer)
char *lexer_readword(t_minishell *msh, t_lexer *lexer) char *lexer_readword(t_minishell *msh, t_lexer *lexer)
{ {
//int start;
int len; int len;
char *word; char *word;
char c; char c;
//start = lexer->pos;
if (lexer->current_char == '"' || lexer->current_char == '\'') if (lexer->current_char == '"' || lexer->current_char == '\'')
{ {
return (lexer_parse_quotes(msh, lexer)); return (lexer_parse_quotes(msh, lexer));
@ -71,9 +78,9 @@ char *lexer_readword(t_minishell *msh, t_lexer *lexer)
word = malloc_safe(msh, sizeof(char) * len); word = malloc_safe(msh, sizeof(char) * len);
c = lexer->current_char; c = lexer->current_char;
len = 0; len = 0;
while (ft_isprint(c) && c != '<' && c != '>' && c != '|' && c != '\0' && !ft_isspace(c)) while (is_word_char(c))
{ {
if(c != '\'' && c != '"') if (c != '\'' && c != '"')
word[len++] = lexer->current_char; word[len++] = lexer->current_char;
lexer_readchar(lexer); lexer_readchar(lexer);
c = lexer->current_char; c = lexer->current_char;