int ft_printf(const char *format, ...) { va_list args; t_env *env; va_start(args, format); env = init_env(); while (format[env->i]) { if (format[env->i] == '%' && env->flag == 0) init_flags(env); if (env->flag == 1 && check_flag(format[env->i]) != 0) add_flag(env, format[env->i], env->i); else if (ft_isdigit(format[env->i]) == 1 && env->flag == 1) env->i = get_width(format, env->i, env); else if (format[env->i] == '.' && env->flag == 1 && ft_isdigit(format[++(env->i)]) == 1) env->i = get_precision(format, env->i, env); else if (env->flag == 1 && check_length(format[env->i]) != 0) add_length(env, format, &(env->i)); else if (env->flag == 1 && check_specifier(format[env->i]) != 0) process(args, env, format[env->i]); else env->size += ft_putchar(format[env->i]); env->i++; } return (env->size); }
std::string read_format_with_args(const std::string &fmt, size_t &index, bool &width_arg, bool &precision_arg, Format &format) { size_t start = index++, len = fmt.length(); while (index < len && check_flags(fmt[index])) { index++; } if (fmt[index] == '*' || isdigit(fmt[index])) { width_arg = has_arg(fmt, index); } if (fmt[index] == '.') { precision_arg = has_arg(fmt, ++index); } check_specifier(fmt, index); format = get_format(fmt, index); return fmt.substr(start, index - start); }