diff --git a/src/parsing/tokenizer/__to_redir.c b/src/parsing/tokenizer/__to_redir.c new file mode 100644 index 0000000..db78650 --- /dev/null +++ b/src/parsing/tokenizer/__to_redir.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* __to_redir.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/25 15:06:15 by adjoly #+# #+# */ +/* Updated: 2024/05/26 16:39:27 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "tokenizer.h" + +t_redirection *__to_redir(char *redir_s) +{ + t_redirection *redir; + char *tmp; + + redir = ft_calloc(sizeof(t_redirection), 1); + redir->sign = __to_redir_sign(redir_s); + if (redir->sign == HEREDOC || redir->sign == OUT_APPEND) + redir_s += 2; + else + redir_s++; + while (*redir_s && *redir_s == ' ') + redir_s++; + tmp = redir_s; + while (*tmp && ft_isalnum(*tmp)) + tmp++; + redir->file_name = ft_calloc(tmp - redir_s + 1, sizeof(char)); + ft_strlcpy(redir->file_name, redir_s, tmp - redir_s + 1); + if (redir->sign != HEREDOC) + redir_s += (tmp - redir_s); + return (redir); +} diff --git a/src/parsing/tokenizer/__to_redir_sign.c b/src/parsing/tokenizer/__to_redir_sign.c new file mode 100644 index 0000000..448ec0d --- /dev/null +++ b/src/parsing/tokenizer/__to_redir_sign.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* __to_redir_sign.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/25 15:06:40 by adjoly #+# #+# */ +/* Updated: 2024/05/25 15:06:49 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "tokenizer.h" + +t_redirection_sign __to_redir_sign(char *redir_sign) +{ + if (redir_sign[0] == '<' && redir_sign[1] != '<') + return (INFILE); + else if (redir_sign[0] == '<' && redir_sign[1] == '<') + return (HEREDOC); + else if (redir_sign[0] == '>' && redir_sign[1] == '>') + return (OUT_APPEND); + else if (redir_sign[0] == '>' && redir_sign[1] != '>') + return (OUTFILE); + return (0); +} diff --git a/src/parsing/tokenizer/__to_token.c b/src/parsing/tokenizer/__to_token.c index 4dc011d..02e477c 100644 --- a/src/parsing/tokenizer/__to_token.c +++ b/src/parsing/tokenizer/__to_token.c @@ -6,67 +6,57 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/20 21:05:04 by adjoly #+# #+# */ -/* Updated: 2024/05/25 14:05:02 by adjoly ### ########.fr */ +/* Updated: 2024/05/26 17:39:37 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "tokenizer.h" #include "parsing.h" -t_redirection_sign __to_redir_sign(char *redir_sign) +size_t __get_sizeof_redir(char *redir_s, t_redirection *redir) { - if (redir_sign[0] == '<' && redir_sign[1] != '<') - return (INFILE); - else if (redir_sign[0] == '<' && redir_sign[1] == '<') - return (HEREDOC); - else if (redir_sign[0] == '>' && redir_sign[1] == '>') - return (OUT_APPEND); - else if (redir_sign[0] == '>' && redir_sign[1] != '>') - return (OUTFILE); - return (0); -} + size_t i; + char *tmp; -t_redirection *__to_redir(char *redir_s) -{ - t_redirection *redir; - char *tmp; - - redir = ft_calloc(sizeof(t_redirection), 1); - redir->sign = __to_redir_sign(redir_s); - if (redir->sign == HEREDOC || redir->sign == OUT_APPEND) - redir_s += 2; + if (!redir_s || !redir) + return (0); + if (redir->sign == HEREDOC) + return (1); + else if (redir->sign == OUT_APPEND) + i = 1; else - redir_s++; - while (*redir_s && *redir_s == ' ') - redir_s++; + i = 0; + if (!redir->file_name) + return (i); tmp = redir_s; - while (*tmp && ft_isalnum(*tmp)) - tmp++; - redir->file_name = ft_calloc(tmp - redir_s + 1, sizeof(char)); - ft_strlcpy(redir->file_name, redir_s, tmp - redir_s + 1); - return (redir); + if (!i) + i++; + if (*tmp && *tmp == ' ') + i++; + i += ft_strlen(redir->file_name); + return (i); } -/*t_token *__to_token(char *cmd) +t_token *__to_token(char *cmd) { - char *tmp; t_token *token; t_redirection *tmp_redir; - char *argv; + char *tmp; - tmp = cmd; - argv = NULL; token = ft_calloc(sizeof(t_token), 1); + token->argv = ft_calloc(sizeof(t_token), 1); + tmp = cmd; while (*tmp) { if (*tmp == '<' || *tmp == '>') { tmp_redir = __to_redir(tmp); - ft_lstadd_back(&(token->redirection), ft_lstnew((void *)&tmp_redir)); + ft_lstadd_back(&(token->redirection), ft_lstnew((void*)tmp_redir)); + tmp += __get_sizeof_redir(tmp, tmp_redir); } else - ft_strjoin_free_s1(argv, &(*tmp)); + token->argv = ft_strjoin(token->argv, ft_substr(tmp, 0, 1)); tmp++; } return (token); -}*/ +} diff --git a/src/parsing/tokenizer/tokenizer.c b/src/parsing/tokenizer/tokenizer.c index f00191a..56434b0 100644 --- a/src/parsing/tokenizer/tokenizer.c +++ b/src/parsing/tokenizer/tokenizer.c @@ -6,20 +6,25 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/18 20:13:50 by adjoly #+# #+# */ -/* Updated: 2024/05/20 22:51:45 by adjoly ### ########.fr */ +/* Updated: 2024/05/26 17:59:27 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "tokenizer.h" -/*t_list *tokenizer(char *readline) +t_list *tokenizer(char *readline) { t_list *token; t_list *piped; + t_list *tmp; piped = __split_pipe(readline); - while (piped && *piped) + token = NULL; + tmp = piped; + while (tmp) { - + ft_lstadd_back(&token, ft_lstnew((void*)__to_token(tmp->content))); + tmp = tmp->next; } -}*/ + return (token); +}