diff --git a/Makefile b/Makefile index cb04d50..046f71b 100644 --- a/Makefile +++ b/Makefile @@ -82,6 +82,7 @@ srcs = \ src/parser/wordlist/wordlist_idx.c \ src/parser/wordlist/wordlist_quicksort.c \ src/parser/wordlist/wordlist_utils.c \ + src/parser/wordsplit/get_token_type.c \ src/parser/wordsplit/rule_utils.c \ src/parser/wordsplit/tokenizing_1_5.c \ src/parser/wordsplit/tokenizing_6_10.c \ diff --git a/src/parser/wordsplit/get_token_type.c b/src/parser/wordsplit/get_token_type.c new file mode 100644 index 0000000..1c819e4 --- /dev/null +++ b/src/parser/wordsplit/get_token_type.c @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_token_type.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: khais +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/09 15:52/43 by khais #+# #+# */ +/* Updated: 2025/04/09 15:52:43 by khais ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" +#include "get_token_type.h" + +t_token_type get_token_type(t_token_build *builder) +{ + t_token_type ret; + + ret = WORD_TOKEN; + if (builder->currently_in_operator) + { + if (ft_strcmp("(", builder->cur_token->buffer) == 0) + ret = OPEN_PARENTH_TOKEN; + if (ft_strcmp(")", builder->cur_token->buffer) == 0) + ret = CLOSE_PARENTH_TOKEN; + if (ft_strcmp("|", builder->cur_token->buffer) == 0) + ret = PIPE_TOKEN; + if (ft_strcmp("||", builder->cur_token->buffer) == 0) + ret = OR_TOKEN; + if (ft_strcmp("&&", builder->cur_token->buffer) == 0) + ret = AND_TOKEN; + if (ft_strcmp(">", builder->cur_token->buffer) == 0) + ret = OUT_TRUNC_REDIR_TOKEN; + if (ft_strcmp(">>", builder->cur_token->buffer) == 0) + ret = OUT_APPEND_REDIR_TOKEN; + if (ft_strcmp("<", builder->cur_token->buffer) == 0) + ret = IN_REDIR_TOKEN; + if (ft_strcmp("<<", builder->cur_token->buffer) == 0) + ret = HERE_DOC_REDIR_TOKEN; + } + return (ret); +} diff --git a/src/parser/wordsplit/get_token_type.h b/src/parser/wordsplit/get_token_type.h new file mode 100644 index 0000000..5f6dfb2 --- /dev/null +++ b/src/parser/wordsplit/get_token_type.h @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_token_type.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: khais +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/09 13:34:15 by khais #+# #+# */ +/* Updated: 2025/04/09 13:34:55 by khais ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_TOKEN_TYPE_H +# define GET_TOKEN_TYPE_H + +# include "../worddesc/worddesc.h" +# include "wordsplit.h" + +t_token_type get_token_type(t_token_build *builder); + +#endif // GET_TOKEN_TYPE_H diff --git a/src/parser/wordsplit/wordsplit.h b/src/parser/wordsplit/wordsplit.h index c219d20..5ebf4e1 100644 --- a/src/parser/wordsplit/wordsplit.h +++ b/src/parser/wordsplit/wordsplit.h @@ -6,7 +6,7 @@ /* By: khais +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/20 14:00:45 by khais #+# #+# */ -/* Updated: 2025/03/06 15:18:41 by khais ### ########.fr */ +/* Updated: 2025/04/09 13:26:33 by khais ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,14 +19,14 @@ typedef struct s_token_build { - t_wordlist *wordlist; - t_buffer *cur_token; - t_buffer *cur_marker; - char cur_flags; - bool currently_in_word; - bool currently_in_operator; - char quote; - size_t idx; + t_wordlist *wordlist; + t_buffer *cur_token; + t_buffer *cur_marker; + char cur_flags; + bool currently_in_word; + bool currently_in_operator; + char quote; + size_t idx; } t_token_build; void delimit(t_token_build *builder); diff --git a/src/parser/wordsplit/wordsplit_utils.c b/src/parser/wordsplit/wordsplit_utils.c index 5664343..d0fdeac 100644 --- a/src/parser/wordsplit/wordsplit_utils.c +++ b/src/parser/wordsplit/wordsplit_utils.c @@ -6,20 +6,21 @@ /* By: khais +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/20 14:02:29 by khais #+# #+# */ -/* Updated: 2025/04/08 16:29:49 by khais ### ########.fr */ +/* Updated: 2025/04/09 13:34:02 by khais ### ########.fr */ /* */ /* ************************************************************************** */ #include "wordsplit.h" #include +#include "get_token_type.h" void delimit(t_token_build *builder) { t_token_type type; - type = WORD_TOKEN; if (builder->cur_token == NULL) return ; + type = get_token_type(builder); builder->wordlist = wordlist_push(builder->wordlist, worddesc_create(builder->cur_token->buffer, builder->cur_flags, builder->cur_marker->buffer, type)); diff --git a/test.sh b/test.sh index d209bad..df4ec85 100755 --- a/test.sh +++ b/test.sh @@ -607,4 +607,181 @@ expecting <>><<< +EOF +expecting <>] + │ │ ├─ marker = [ ] + │ │ ├─ flags = 0 + │ │ ╰─ t_token_type = OUT_APPEND_REDIR_TOKEN + │ ├─ t_worddesc + │ │ ├─ word = [>] + │ │ ├─ marker = [ ] + │ │ ├─ flags = 0 + │ │ ╰─ t_token_type = OUT_TRUNC_REDIR_TOKEN + │ ├─ t_worddesc + │ │ ├─ word = [<<] + │ │ ├─ marker = [ ] + │ │ ├─ flags = 0 + │ │ ╰─ t_token_type = HERE_DOC_REDIR_TOKEN + │ ╰─ t_worddesc + │ ├─ word = [<] + │ ├─ marker = [ ] + │ ├─ flags = 0 + │ ╰─ t_token_type = IN_REDIR_TOKEN + ╰─ redirections = (empty redir list) +EOF + +when_run <" ">>" "<" "<<" +EOF +expecting <"] + │ │ ├─ marker = [ " ] + │ │ ├─ flags = 34 + │ │ ╰─ t_token_type = WORD_TOKEN + │ ├─ t_worddesc + │ │ ├─ word = [">>"] + │ │ ├─ marker = [ "" ] + │ │ ├─ flags = 34 + │ │ ╰─ t_token_type = WORD_TOKEN + │ ├─ t_worddesc + │ │ ├─ word = ["<"] + │ │ ├─ marker = [ " ] + │ │ ├─ flags = 34 + │ │ ╰─ t_token_type = WORD_TOKEN + │ ╰─ t_worddesc + │ ├─ word = ["<<"] + │ ├─ marker = [ "" ] + │ ├─ flags = 34 + │ ╰─ t_token_type = WORD_TOKEN + ╰─ redirections = (empty redir list) +EOF + +when_run <' '>>' '<' '<<' +EOF +expecting <'] + │ │ ├─ marker = [ ' ] + │ │ ├─ flags = 2 + │ │ ╰─ t_token_type = WORD_TOKEN + │ ├─ t_worddesc + │ │ ├─ word = ['>>'] + │ │ ├─ marker = [ '' ] + │ │ ├─ flags = 2 + │ │ ╰─ t_token_type = WORD_TOKEN + │ ├─ t_worddesc + │ │ ├─ word = ['<'] + │ │ ├─ marker = [ ' ] + │ │ ├─ flags = 2 + │ │ ╰─ t_token_type = WORD_TOKEN + │ ╰─ t_worddesc + │ ├─ word = ['<<'] + │ ├─ marker = [ '' ] + │ ├─ flags = 2 + │ ╰─ t_token_type = WORD_TOKEN + ╰─ redirections = (empty redir list) +EOF + finalize