rework of parsing
This commit is contained in:
@@ -6,59 +6,48 @@
|
|||||||
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/11/19 15:35:15 by dgaillet #+# #+# */
|
/* Created: 2025/11/19 15:35:15 by dgaillet #+# #+# */
|
||||||
/* Updated: 2025/11/20 14:36:01 by dgaillet ### ########lyon.fr */
|
/* Updated: 2025/11/20 18:07:52 by dgaillet ### ########lyon.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "ft_printf_bonus.h"
|
#include "ft_printf_bonus.h"
|
||||||
#include "libft.h"
|
#include "libft.h"
|
||||||
|
|
||||||
static int next_not_digit(char *str)
|
static void get_padding(t_arg *arg, char *str)
|
||||||
{
|
{
|
||||||
int i;
|
str--;
|
||||||
|
while (ft_isdigit(*str) && *str != '%')
|
||||||
i = 0;
|
str--;
|
||||||
while (ft_isdigit(str[i]))
|
str++;
|
||||||
i++;
|
arg->padding = ft_atoi(str);
|
||||||
return (i);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int nb_to_skip(char *str)
|
|
||||||
{
|
|
||||||
if (*str == '-')
|
|
||||||
return (1 + next_not_digit(&str[1]));
|
|
||||||
else if (*str == '0')
|
|
||||||
return (1 + next_not_digit(&str[1]));
|
|
||||||
else if (*str == '.')
|
|
||||||
return (1 + next_not_digit(&str[1]));
|
|
||||||
else if (*str == ' ')
|
|
||||||
return (1 + next_not_digit(&str[1]));
|
|
||||||
return (1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ft_parse_str(t_arg *arg, char *str, char main_arg)
|
static void ft_parse_str(t_arg *arg, char *str, char main_arg)
|
||||||
{
|
{
|
||||||
if (*str != '0' && ft_isdigit(*str))
|
while (*str != main_arg && *str != '.')
|
||||||
{
|
|
||||||
arg->padding = ft_atoi(str);
|
|
||||||
str += nb_to_skip(str);
|
|
||||||
}
|
|
||||||
while (*str != main_arg)
|
|
||||||
{
|
{
|
||||||
if (*str == '-')
|
if (*str == '-')
|
||||||
arg->minus = ft_atoi(&str[1]);
|
arg->minus = ft_atoi(&str[1]);
|
||||||
else if (*str == '0')
|
else if (*str == '0' && !ft_isdigit(str[-1]))
|
||||||
arg->zero = ft_atoi(&str[1]);
|
arg->zero = ft_atoi(&str[1]);
|
||||||
else if (*str == '.')
|
|
||||||
arg->dot = ft_atoi(&str[1]);
|
|
||||||
else if (*str == '#')
|
else if (*str == '#')
|
||||||
arg->hash = 1;
|
arg->hash = 1;
|
||||||
else if (*str == ' ')
|
else if (*str == ' ')
|
||||||
arg->space = ft_atoi(&str[1]);
|
arg->space = ft_atoi(&str[1]);
|
||||||
else if (*str == '+')
|
else if (*str == '+')
|
||||||
arg->plus = 1;
|
arg->plus = 1;
|
||||||
str += nb_to_skip(str);
|
str++;
|
||||||
}
|
}
|
||||||
|
if (*str == '.')
|
||||||
|
{
|
||||||
|
arg->dot = ft_atoi(str + 1);
|
||||||
|
if (!(arg->minus >= 0 || arg->zero >= 0 || arg->hash >= 0
|
||||||
|
|| arg->space >= 0 || arg->plus >= 0))
|
||||||
|
get_padding(arg, str);
|
||||||
|
}
|
||||||
|
else if (!(arg->minus >= 0 || arg->zero >= 0 || arg->hash >= 0
|
||||||
|
|| arg->space >= 0 || arg->plus >= 0))
|
||||||
|
get_padding(arg, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
t_arg *ft_parsing(char *str)
|
t_arg *ft_parsing(char *str)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */
|
/* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */
|
||||||
/* Updated: 2025/11/20 16:52:30 by dgaillet ### ########lyon.fr */
|
/* Updated: 2025/11/20 17:26:09 by dgaillet ### ########lyon.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
static int padding_size(int space, int plus, t_arg *arg, int nbr)
|
static int padding_size(int space, int plus, t_arg *arg, int nbr)
|
||||||
{
|
{
|
||||||
int padding;
|
int padding;
|
||||||
int dot;
|
|
||||||
int nbr_size;
|
int nbr_size;
|
||||||
|
|
||||||
if (arg->padding < 0)
|
if (arg->padding < 0)
|
||||||
@@ -27,7 +26,7 @@ static int padding_size(int space, int plus, t_arg *arg, int nbr)
|
|||||||
else
|
else
|
||||||
nbr_size = nbr_size_base(nbr, 10);
|
nbr_size = nbr_size_base(nbr, 10);
|
||||||
if (arg->dot > nbr_size)
|
if (arg->dot > nbr_size)
|
||||||
nbr_size = dot;
|
nbr_size = arg->dot;
|
||||||
padding = padding - nbr_size;
|
padding = padding - nbr_size;
|
||||||
if (arg->zero >= 0)
|
if (arg->zero >= 0)
|
||||||
padding = padding - arg->zero;
|
padding = padding - arg->zero;
|
||||||
@@ -45,6 +44,8 @@ static int print_nb_flags(t_arg *arg, int nbr)
|
|||||||
|
|
||||||
if (arg->plus >= 0 && nbr > 0)
|
if (arg->plus >= 0 && nbr > 0)
|
||||||
plus = 1;
|
plus = 1;
|
||||||
|
else
|
||||||
|
plus = 0;
|
||||||
if (arg->plus >= 0 || arg->space < 0)
|
if (arg->plus >= 0 || arg->space < 0)
|
||||||
space = 0;
|
space = 0;
|
||||||
else
|
else
|
||||||
|
|||||||
6
test.c
6
test.c
@@ -6,7 +6,7 @@
|
|||||||
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
/* By: dgaillet <dgaillet@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2025/11/20 16:11:53 by dgaillet #+# #+# */
|
/* Created: 2025/11/20 16:11:53 by dgaillet #+# #+# */
|
||||||
/* Updated: 2025/11/20 16:19:29 by dgaillet ### ########lyon.fr */
|
/* Updated: 2025/11/20 18:01:15 by dgaillet ### ########lyon.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@@ -17,6 +17,6 @@
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
printf("===\t-\t===\n\n");
|
printf("===\t-\t===\n\n");
|
||||||
printf("%d - ", printf("...%8.5i...\n", 34));
|
printf("%d - ", printf("...%10.s...\n", NULL));
|
||||||
printf("%d\n\n", ft_printf("...%8.5i...\n", 34));
|
printf("%d\n\n", ft_printf("...%10.s...\n", NULL));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user