/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_split.c                                         :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: jayang <[email protected]>                      +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2022/02/13 19:40:15 by jayang            #+#    #+#             */
/*   Updated: 2022/02/13 21:23:33 by jayang           ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include <stdlib.h>

int	cmp_words(char c, char *charset)
{
	while (*charset)
	{
		if (c == *charset)
			return (1);
		charset++;
	}
	return (0);
}

int	count_words(char *str, char *charset)
{
	int	idx;
	int	cnt;

	idx = 0;
	cnt = 0;
	while (str[idx])
	{
		if (cmp_words(str[idx], charset) == 0 \\
			&& (cmp_words(str[idx + 1], charset) == 1 || str[idx + 1] == '\\0'))
			cnt++;
		idx++;
	}
	return (cnt);
}

void	save_words(char **answer, char *str, int size)
{
	int	idx;

	idx = 0;
	while (idx < size)
	{
		(*answer)[idx] = str[idx];
		idx++;
	}
	(*answer)[size] = '\\0';
}

void	separate_words(char *str, char *charset, char **answer)
{
	int	idx;
	int	size;
	int	tab;

	idx = 0;
	tab = 0;
	while (str[idx])
	{
		if (cmp_words(str[idx], charset) == 1)
			idx++;
		else
		{
			size = 0;
			while (cmp_words(str[idx + size], charset) == 0 && \\
				   	str[idx + size] != '\\0')
				size++;
			answer[tab] = (char *)malloc(sizeof (char) * (size + 1));
			save_words(answer + tab, str + idx, size);
			tab++;
			idx += size;
		}
	}
}

char	**ft_split(char *str, char *charset)
{
	int		nb_words;
	char	**answer;

	nb_words = count_words(str, charset);
	answer = (char **)malloc(sizeof (char *) * (nb_words + 1));
	answer[nb_words] = 0;
	separate_words(str, charset, answer);
	return (answer);
}