nicolas-arnaud
2 years ago
12 changed files with 270 additions and 315 deletions
@ -0,0 +1,108 @@ |
|||||
|
#include "ft_printf.h" |
||||
|
|
||||
|
char *zero_fill(char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
int len; |
||||
|
char *fill; |
||||
|
|
||||
|
fill = NULL; |
||||
|
if (opts->zero) |
||||
|
len = opts->width - ft_strlen(nbr); |
||||
|
else if (opts->dot) |
||||
|
len = opts->precision - ft_strlen(nbr); |
||||
|
else |
||||
|
return (NULL); |
||||
|
if (len < 0 || (opts->zero && len == 0)) |
||||
|
return (NULL); |
||||
|
if ((nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') && opts->dot) |
||||
|
fill = ft_strnew(len + 1, '0'); |
||||
|
else |
||||
|
fill = ft_strnew(len, '0'); |
||||
|
if (nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') |
||||
|
{ |
||||
|
fill[0] = nbr[0]; |
||||
|
nbr[0] = '0'; |
||||
|
} |
||||
|
return (fill); |
||||
|
} |
||||
|
|
||||
|
char *int_opts_transform(int n, char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
if (opts->plus && n >= 0) |
||||
|
nbr = ft_strjoin("+", nbr); |
||||
|
else if (opts->space && n >= 0) |
||||
|
nbr = ft_strjoin(" ", nbr); |
||||
|
else if (opts->precision == 0 && opts->dot && n == 0 |
||||
|
&& opts->len) |
||||
|
nbr = ft_strdup(""); |
||||
|
else |
||||
|
nbr = ft_strdup(nbr); |
||||
|
if (opts->precision > 0) |
||||
|
nbr = ft_append(zero_fill(nbr, opts), nbr); |
||||
|
else if (opts->zero && !opts->dot) |
||||
|
nbr = ft_append(zero_fill(nbr, opts), nbr); |
||||
|
return (nbr); |
||||
|
} |
||||
|
|
||||
|
char *uint_opts_transform(unsigned int n, char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
if (opts->plus) |
||||
|
nbr = ft_strjoin("+", nbr); |
||||
|
else if (opts->space) |
||||
|
nbr = ft_strjoin(" ", nbr); |
||||
|
else if (opts->precision == 0 && opts->dot && n == 0 |
||||
|
&& opts->len) |
||||
|
nbr = ft_strdup(""); |
||||
|
else |
||||
|
nbr = ft_strdup(nbr); |
||||
|
if (opts->precision > 0) |
||||
|
nbr = ft_append(zero_fill(nbr, opts), nbr); |
||||
|
else if (opts->zero && !opts->dot) |
||||
|
nbr = ft_append(zero_fill(nbr, opts), nbr); |
||||
|
return (nbr); |
||||
|
} |
||||
|
|
||||
|
char *ptr_opts_transform(char *nbr, t_opts *opts) |
||||
|
{ |
||||
|
if (opts->plus) |
||||
|
nbr = ft_strjoin("+", nbr); |
||||
|
else if (opts->space) |
||||
|
nbr = ft_strjoin(" ", nbr); |
||||
|
else if (opts->precision == 0 && opts->dot |
||||
|
&& opts->len) |
||||
|
nbr = ft_strdup(""); |
||||
|
else |
||||
|
nbr = ft_strdup(nbr); |
||||
|
if (opts->precision > 0) |
||||
|
nbr = ft_append(zero_fill(nbr, opts), nbr); |
||||
|
else if (opts->zero && !opts->dot) |
||||
|
nbr = ft_append(zero_fill(nbr, opts), nbr); |
||||
|
return (nbr); |
||||
|
} |
||||
|
|
||||
|
char *str_opts_transform(char *str, t_opts *opts) |
||||
|
{ |
||||
|
int len; |
||||
|
char *tmp; |
||||
|
char *sub; |
||||
|
|
||||
|
tmp = NULL; |
||||
|
sub = NULL; |
||||
|
if (opts->dot) |
||||
|
sub = ft_substr(str, 0, opts->precision); |
||||
|
if (sub) |
||||
|
str = sub; |
||||
|
len = opts->width - (int)ft_strlen(str); |
||||
|
tmp = ft_strnew(len, ' '); |
||||
|
if (!opts->minus && len > 0) |
||||
|
str = ft_strjoin(tmp, str); |
||||
|
else if (opts->minus && len > 0) |
||||
|
str = ft_strjoin(str, tmp); |
||||
|
else |
||||
|
str = ft_strdup(str); |
||||
|
if (tmp) |
||||
|
free(tmp); |
||||
|
if (sub) |
||||
|
free(sub); |
||||
|
return (str); |
||||
|
} |
@ -1 +1 @@ |
|||||
Subproject commit 840a26935181c35cd8416853f1aad9a0bf99621f |
Subproject commit 91542393af2673f7cba570fc4b868294810f1abc |
@ -1,8 +0,0 @@ |
|||||
#include "ft_printf.h" |
|
||||
|
|
||||
|
|
||||
int main(void) |
|
||||
{ |
|
||||
ft_printf("%.4s\n", "Hello world!\n"); |
|
||||
return 0; |
|
||||
} |
|
@ -1,87 +0,0 @@ |
|||||
#include "ft_printf.h" |
|
||||
|
|
||||
char *int_opts_transform(int n, char *nbr, t_opts *opts) |
|
||||
{ |
|
||||
if (opts->plus && n>=0) |
|
||||
nbr = ft_strjoin("+", nbr); |
|
||||
else if (opts->space && n>=0) |
|
||||
nbr = ft_strjoin(" ", nbr); |
|
||||
else if (opts->precision == 0 && opts->dot && n == 0 && |
|
||||
opts->len) |
|
||||
nbr = ft_strdup(""); |
|
||||
else |
|
||||
nbr = ft_strdup(nbr); |
|
||||
|
|
||||
if (opts->precision > 0) |
|
||||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|
||||
else if (opts->zero && !opts->dot) |
|
||||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|
||||
|
|
||||
return (nbr); |
|
||||
} |
|
||||
|
|
||||
char *uint_opts_transform(unsigned int n, char *nbr, t_opts *opts) |
|
||||
{ |
|
||||
if (opts->plus) |
|
||||
nbr = ft_strjoin("+", nbr); |
|
||||
else if (opts->space) |
|
||||
nbr = ft_strjoin(" ", nbr); |
|
||||
else if (opts->precision == 0 && opts->dot && n == 0 && |
|
||||
opts->len) |
|
||||
nbr = ft_strdup(""); |
|
||||
else |
|
||||
nbr = ft_strdup(nbr); |
|
||||
|
|
||||
if (opts->precision > 0) |
|
||||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|
||||
else if (opts->zero && !opts->dot) |
|
||||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|
||||
|
|
||||
return (nbr); |
|
||||
} |
|
||||
|
|
||||
char *ptr_opts_transform(char *nbr, t_opts *opts) |
|
||||
{ |
|
||||
if (opts->plus) |
|
||||
nbr = ft_strjoin("+", nbr); |
|
||||
else if (opts->space) |
|
||||
nbr = ft_strjoin(" ", nbr); |
|
||||
else if (opts->precision == 0 && opts->dot && |
|
||||
opts->len) |
|
||||
nbr = ft_strdup(""); |
|
||||
else |
|
||||
nbr = ft_strdup(nbr); |
|
||||
|
|
||||
if (opts->precision > 0) |
|
||||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|
||||
else if (opts->zero && !opts->dot) |
|
||||
nbr = ft_append(ft_zero_fill(nbr, '0', opts), nbr); |
|
||||
|
|
||||
return (nbr); |
|
||||
} |
|
||||
|
|
||||
char *str_opts_transform(char *str, t_opts *opts) |
|
||||
{ |
|
||||
int len; |
|
||||
char *tmp = NULL; |
|
||||
char *sub = NULL; |
|
||||
|
|
||||
if (opts->dot) |
|
||||
sub = ft_substr(str, 0, opts->precision); |
|
||||
if (sub) |
|
||||
str = sub; |
|
||||
len = opts->width - (int)ft_strlen(str); |
|
||||
tmp = ft_strnew(len, ' '); |
|
||||
if (!opts->minus && len > 0) |
|
||||
str = ft_strjoin(tmp, str); |
|
||||
else if (opts->minus && len > 0) |
|
||||
str = ft_strjoin(str, tmp); |
|
||||
else |
|
||||
str = ft_strdup(str); |
|
||||
if (tmp) |
|
||||
free(tmp); |
|
||||
if (sub) |
|
||||
free(sub); |
|
||||
|
|
||||
return (str); |
|
||||
} |
|
@ -1,57 +0,0 @@ |
|||||
#include "ft_printf.h" |
|
||||
|
|
||||
char *ft_strnew(int n, char c) |
|
||||
{ |
|
||||
char *str = NULL; |
|
||||
|
|
||||
if (n < 0) |
|
||||
return (NULL); |
|
||||
str = malloc(n + 1); |
|
||||
if (!str) |
|
||||
return (NULL); |
|
||||
str[n] = '\0'; |
|
||||
while (--n >= 0) |
|
||||
str[n] = c; |
|
||||
return (str); |
|
||||
} |
|
||||
|
|
||||
char *ft_zero_fill(char *nbr, char c, t_opts *opts) |
|
||||
{ |
|
||||
int len; |
|
||||
char *fill = NULL; |
|
||||
|
|
||||
if (opts->zero) |
|
||||
len = opts->width - ft_strlen(nbr); |
|
||||
else if (opts->dot) |
|
||||
len = opts->precision - ft_strlen(nbr); |
|
||||
else |
|
||||
return (NULL); |
|
||||
|
|
||||
if (len < 0 || (opts->zero && len == 0)) |
|
||||
return (NULL); |
|
||||
|
|
||||
if ((nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') && opts->dot) |
|
||||
fill = ft_strnew(len + 1, c); |
|
||||
else |
|
||||
fill = ft_strnew(len , c); |
|
||||
|
|
||||
if (nbr[0] == '-' || nbr[0] == '+' || nbr[0] == ' ') |
|
||||
{ |
|
||||
fill[0] = nbr[0]; |
|
||||
nbr[0] = '0'; |
|
||||
} |
|
||||
|
|
||||
return (fill); |
|
||||
} |
|
||||
|
|
||||
char *ft_append(char *s1, char *s2) { |
|
||||
char *ret = NULL; |
|
||||
if (!s1) |
|
||||
return (s2); |
|
||||
if (!s2) |
|
||||
return (s1); |
|
||||
ret = ft_strjoin(s1, s2); |
|
||||
free(s1); |
|
||||
free(s2); |
|
||||
return (ret); |
|
||||
} |
|
Loading…
Reference in new issue