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> +#+ */
/* +#+ */
/* 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"
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)
{
char c;
@ -23,8 +33,7 @@ static int match_quotes(t_minishell *msh, t_lexer *lexer)
c = lexer->input[i];
d_qts = 0;
s_qts = 0;
//TODO: Normalize this validation. Happens a lot
while (ft_isprint(c) && c != '<' && c != '>' && c != '|' && c != '\0' && !ft_isspace(c))
while (is_word_char(c))
{
if (lexer->input[i] == '\'')
s_qts++;
@ -43,9 +52,9 @@ static int calculate_word_len(t_minishell *msh, t_lexer *lexer)
len = 1;
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++;
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)
{
//int start;
int len;
char *word;
char c;
//start = lexer->pos;
if (lexer->current_char == '"' || lexer->current_char == '\'')
{
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);
c = lexer->current_char;
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;
lexer_readchar(lexer);
c = lexer->current_char;