| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include "ft_printf_internal.h"
- int consumeFlags(struct printf_data* params)
- {
- int flags;
- int status;
- status = 1;
- flags = 0;
- while (*params->inputBuffer && status)
- {
- if (*params->inputBuffer == '#')
- flags |= PRINTF_FLAG_ALTERNATE_FORM;
- else if (*params->inputBuffer == '0')
- flags |= PRINTF_FLAG_ZERO_PAD;
- else if (*params->inputBuffer == '-')
- flags |= PRINTF_FLAG_LEFT_PADDING;
- else if (*params->inputBuffer == ' ')
- flags |= PRINTF_FLAG_SIGNED_PAD;
- else if (*params->inputBuffer == '+')
- flags |= PRINTF_FLAG_SIGNED_SIGN;
- else if (*params->inputBuffer == '\'')
- flags |= PRINTF_FLAG_THD_GROUP;
- else
- status = 0;
- if (status)
- params->inputBuffer++;
- }
- return flags;
- }
- int consumeNumber(struct printf_data* params)
- {
- int result;
- result = 0;
- while (*params->inputBuffer >= '0' && *params->inputBuffer <= '9')
- {
- result = result * 10 + (*params->inputBuffer - '0');
- params->inputBuffer++;
- }
- return result;
- }
- printf_typeName consumeTypename(struct printf_data* data)
- {
- if (*data->inputBuffer == '%')
- return printf_percent;
- if (*data->inputBuffer == 'd' || *data->inputBuffer == 'i')
- return printf_di;
- if (*data->inputBuffer == 'u')
- return printf_u;
- if (*data->inputBuffer == 'o')
- return printf_o;
- if (*data->inputBuffer == 'x')
- return printf_x;
- if (*data->inputBuffer == 'X')
- return printf_X;
- if (*data->inputBuffer == 'c')
- return printf_c;
- if (*data->inputBuffer == 'p')
- return printf_p;
- if (*data->inputBuffer == 'n')
- return printf_n;
- if (*data->inputBuffer == 'm')
- return printf_m;
- if (*data->inputBuffer == 's')
- return printf_s;
- if (*data->inputBuffer == 'f')
- return printf_f;
- if (*data->inputBuffer == 'F')
- return printf_F;
- if (*data->inputBuffer == 'a')
- return printf_a;
- if (*data->inputBuffer == 'A')
- return printf_A;
- return NULL;
- }
- int expandParams(struct printf_data* params, va_list args)
- {
- struct printf_format_params format;
- char* buffer = params->inputBuffer;
- format.flags = consumeFlags(params);
- format.width = -1;
- format.precision = -1;
- if (*params->inputBuffer >= '0' && *params->inputBuffer <= '9')
- format.width = consumeNumber(params);
- if (*params->inputBuffer == '.')
- {
- ++params->inputBuffer;
- format.precision = consumeNumber(params);
- }
- /* LENGTH MODIFIERS NOT SUPPORTED */
- format.typeName = consumeTypename(params);
- if (format.typeName)
- {
- params->inputBuffer++;
- return format.typeName(params, &format, args);
- }
- params->inputBuffer = buffer;
- return printf_percent(params, &format, args);
- }
|