-
Notifications
You must be signed in to change notification settings - Fork 0
/
auto_prop.c
101 lines (92 loc) · 2.53 KB
/
auto_prop.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* auto_prop.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: bfrochot <bfrochot@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2017/03/05 18:56:27 by bfrochot #+# #+# */
/* Updated: 2017/04/19 16:21:16 by bfrochot ### ########.fr */
/* */
/* ************************************************************************** */
#include "chell.h"
void ft_join_spaces(char **tmp, int i)
{
char *str;
int j;
str = palloc(ft_strlen(*tmp) + i + 1);
j = -1;
while ((*tmp)[++j])
str[j] = (*tmp)[j];
str[j] = 0;
while (i--)
str[j++] = ' ';
str[j] = 0;
free(*tmp);
*tmp = str;
}
char *ft_auto(char *str)
{
int i;
char *tmp;
i = 0;
while (str[i])
++i;
while (i > 0 && !bs_str(str, i, '/'))
--i;
tmp = ft_strdup(str + (i == 0 ? 0 : i + 1));
return (tmp);
}
static void auto_prop_core(t_var *var, int i, size_t (*ml)[4], char **tmp)
{
int k;
size_t j;
char *new;
(*ml)[3]++;
new = ft_auto(var->ac[i]);
j = ft_strlen(new);
*tmp = ft_strjoinfree(*tmp, new, 1);
var->i += j;
var->lenligne += 1;
k = 0;
while (j + k++ < (*ml)[0] + 2)
var->i += 1;
ft_join_spaces(tmp, k - 1);
(*ml)[2] += (*ml)[0] + 2;
if ((*ml)[2] - tgetnum("co") > -(*ml)[0])
{
k = 0;
while ((*ml)[2]++ < (size_t)tgetnum("co") && ++k)
var->i += 1;
ft_join_spaces(tmp, k);
(*ml)[2] = 0;
}
free(new);
}
void auto_prop(t_var *var, int p, int i)
{
size_t ml[4];
char *tmp;
int o;
static int m = -2;
m = (p == 1 ? -2 : m);
ml[2] = 0;
ml[1] = tgetnum("li");
tmp = ft_strdup("");
ml[0] = 0;
while (var->ac[++i])
ml[0] = ft_strlen(var->ac[i]) > ml[0] ? ft_strlen(var->ac[i]) : ml[0];
m = m == i - 2 ? -1 : m + 1;
o = tgetnum("co") / ml[0];
i = (i - m) / o + 2 < (int)ml[1] - var->inputlen /
tgetnum("co") ? i - ((int)ml[1] - 2) * o - var->inputlen / (int)ml[0] : m;
i = m == -1 ? m : i;
i = i < -1 ? -1 : i;
ml[3] = 1;
while (var->ac[++i] && ml[3] / o + 2 < ml[1]
- var->inputlen / tgetnum("co"))
auto_prop_core(var, i, &ml, &tmp);
ft_printf("%s ", tmp);
var->i += 1;
free(tmp);
}