update: split into different functions
This commit is contained in:
parent
b5556b9063
commit
575fa10040
1 changed files with 46 additions and 52 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2024/09/30 19:39:39 by maiboyer #+# #+# */
|
/* Created: 2024/09/30 19:39:39 by maiboyer #+# #+# */
|
||||||
/* Updated: 2024/09/30 20:19:06 by maiboyer ### ########.fr */
|
/* Updated: 2024/10/02 17:50:31 by maiboyer ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -27,6 +27,48 @@ static void push_token_and_create_new(t_vec_token *tokens, t_token *tok, enum e_
|
||||||
vec_token_push(tokens, tmp);
|
vec_token_push(tokens, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void handle_quote(t_vec_token *ret, char chr, t_token *tok, char *quote)
|
||||||
|
{
|
||||||
|
if (chr == *quote)
|
||||||
|
{
|
||||||
|
*quote = '\0';
|
||||||
|
if (tok->type != TOK_NONE)
|
||||||
|
vec_token_push(ret, *tok);
|
||||||
|
*tok = token_new_none();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
string_push_char(&tok->string, chr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handle_noquote(t_vec_token *ret, char chr, t_token *tok, char *quote)
|
||||||
|
{
|
||||||
|
*quote = '\0';
|
||||||
|
if (chr == '$')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_DOLLAR, "$");
|
||||||
|
else if (chr == '>')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_RCARRET, ">");
|
||||||
|
else if (chr == '<')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_LCARRET, "<");
|
||||||
|
else if (chr == '&')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_AMP, "&");
|
||||||
|
else if (chr == '|')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_PIPE, "|");
|
||||||
|
else if (chr == '(')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_LPAREN, "(");
|
||||||
|
else if (chr == ')')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_RPAREN, ")");
|
||||||
|
else if (chr == ';')
|
||||||
|
push_token_and_create_new(ret, tok, TOK_RPAREN, ";");
|
||||||
|
else if (me_isspace(chr))
|
||||||
|
push_token_and_create_new(ret, tok, TOK_WHITESPACE, " ");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tok->type == TOK_NONE)
|
||||||
|
*tok = token_new(TOK_NQUOTE);
|
||||||
|
string_push_char(&tok->string, chr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
t_error tokenize(t_const_str s, t_vec_token *out)
|
t_error tokenize(t_const_str s, t_vec_token *out)
|
||||||
{
|
{
|
||||||
t_usize i;
|
t_usize i;
|
||||||
|
|
@ -50,58 +92,10 @@ t_error tokenize(t_const_str s, t_vec_token *out)
|
||||||
else if (s[i] == '\'')
|
else if (s[i] == '\'')
|
||||||
push_token_and_create_new(&ret, &tok, TOK_SQUOTE, "");
|
push_token_and_create_new(&ret, &tok, TOK_SQUOTE, "");
|
||||||
else
|
else
|
||||||
{
|
handle_noquote(&ret, s[i], &tok, "e);
|
||||||
quote = '\0';
|
|
||||||
if (s[i] == '$')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_DOLLAR, "$");
|
|
||||||
else if (s[i] == '>')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_RCARRET, ">");
|
|
||||||
else if (s[i] == '<')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_LCARRET, "<");
|
|
||||||
else if (s[i] == '&')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_AMP, "&");
|
|
||||||
else if (s[i] == '|')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_PIPE, "|");
|
|
||||||
else if (s[i] == '(')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_LPAREN, "(");
|
|
||||||
else if (s[i] == ')')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_RPAREN, ")");
|
|
||||||
else if (s[i] == ';')
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_RPAREN, ";");
|
|
||||||
else if (me_isspace(s[i]))
|
|
||||||
push_token_and_create_new(&ret, &tok, TOK_WHITESPACE, " ");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (tok.type == TOK_NONE)
|
|
||||||
tok = token_new(TOK_NQUOTE);
|
|
||||||
string_push_char(&tok.string, s[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (quote == '\'')
|
|
||||||
{
|
|
||||||
if (s[i] == '\'')
|
|
||||||
{
|
|
||||||
quote = '\0';
|
|
||||||
if (tok.type != TOK_NONE)
|
|
||||||
vec_token_push(&ret, tok);
|
|
||||||
tok = token_new_none();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
string_push_char(&tok.string, s[i]);
|
|
||||||
}
|
|
||||||
else if (quote == '\"')
|
|
||||||
{
|
|
||||||
if (s[i] == '\"')
|
|
||||||
{
|
|
||||||
quote = '\0';
|
|
||||||
if (tok.type != TOK_NONE)
|
|
||||||
vec_token_push(&ret, tok);
|
|
||||||
tok = token_new_none();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
string_push_char(&tok.string, s[i]);
|
|
||||||
}
|
}
|
||||||
|
else if (quote == '\'' || quote == '\"')
|
||||||
|
handle_quote(&ret, s[i], &tok, "e);
|
||||||
else
|
else
|
||||||
me_abort("invalid quote type");
|
me_abort("invalid quote type");
|
||||||
i++;
|
i++;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue