aboutsummaryrefslogtreecommitdiff
path: root/extract.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-10-14 16:26:31 +0200
committerCharles <sircharlesaze@gmail.com>2019-10-14 16:26:31 +0200
commit60733a2298c7a93fe681f78af9b69e1639a791b5 (patch)
treeb1097d7596a7e369ecd12059533da4173967411e /extract.c
parent374a9c43da4c2ee0ac19798abc840cd57cb7cf15 (diff)
downloadft_printf-60733a2298c7a93fe681f78af9b69e1639a791b5.tar.gz
ft_printf-60733a2298c7a93fe681f78af9b69e1639a791b5.tar.bz2
ft_printf-60733a2298c7a93fe681f78af9b69e1639a791b5.zip
WIP: format parsing arguments extraction
Changed pformat struct, everything is broken
Diffstat (limited to 'extract.c')
-rw-r--r--extract.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/extract.c b/extract.c
new file mode 100644
index 0000000..a6a3bba
--- /dev/null
+++ b/extract.c
@@ -0,0 +1,99 @@
+#include "header.h"
+
+char *extract_ap_index(t_pformat *pformat, char *fmt)
+{
+ int i;
+ int tmp;
+ char *fmt_dup;
+
+ if (!ft_isdigit(*fmt) || *fmt == '0')
+ return (fmt);
+ tmp = ft_atoi(fmt);
+ i = 0;
+ while (ft_isdigit(fmt[i]))
+ i++;
+ if (fmt[i] == '$')
+ {
+ pformat->ap_index = tmp;
+ fmt_dup = ft_strdup(&fmt[++i]);
+ free(fmt);
+ return (fmt_dup);
+ }
+ return (fmt);
+}
+
+char *extract_standalone_flags(t_pformat *pformat, char *fmt)
+{
+ int i;
+ char *fmt_dup;
+
+ i = -1;
+ while (IS_STANDALONE_FLAG(fmt[++i]))
+ {
+ if (!pformat->zero_padding)
+ pformat->zero_padding = fmt[i] == '0';
+ if (!pformat->left_adjusted)
+ pformat->left_adjusted = fmt[i] == '-';
+ }
+ fmt_dup = ft_strdup(&fmt[i]);
+ free(fmt);
+ return (fmt_dup);
+}
+
+char *extract_min_width(t_pformat *pformat, char *fmt)
+{
+ int i;
+ int tmp;
+ char fmt_dup;
+
+
+ i = 0;
+ if (*fmt == '*')
+ {
+ pformat->min_width->wildcard->exist = TRUE;
+ i++;
+ }
+ if (ft_isdigit(fmt[i]))
+ {
+ tmp = ft_atoi(fmt[i]);
+ while (ft_isdigit(fmt[i]))
+ i++;
+ if (fmt[i] == '$')
+ pformat->min_width->wildcard->ap_index = tmp;
+ else
+ {
+ pformat->min_width->hardcoded = tmp;
+ pformat->min_width->wildcard->exist = FALSE;
+ }
+ }
+ fmt_dup = ft_strdup(&fmt[i]);
+ free(fmt);
+ return (fmt_dup);
+}
+
+char *extract_precision(t_pformat *pformat, char *fmt)
+{
+ int i;
+ char *fmt_dup;
+
+ if (*fmt != '.')
+ return (fmt);
+ i = 1;
+ if (fmt[i] == '*')
+ {
+ pformat->precision->wildcard->exist = TRUE;
+ i++;
+ }
+ else if (!ft_isdigit(fmt[i]))
+ pformat->precision->hardcoded = 0;
+ tmp = ft_atoi(fmt[i]);
+ while (ft_isdigit(fmt[i]))
+ i++;
+ if (pformat->precision->wildcard->exist && fmt[i] == '$')
+ pformat->precision->wilcard->ap_index = tmp;
+ else
+ pformat->precision->hardcoded = tmp;
+ fmt_dup = ft_strdup(&fmt[i]);
+ free(fmt);
+ return (fmt);
+}