/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ft_unicode.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: bchanot +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/03/10 01:44:46 by bchanot #+# #+# */ /* Updated: 2018/10/14 03:29:20 by bchanot ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft.h" #include char *ft_widechar(wchar_t c) { char s[5]; ft_bzero(s, 5); if (c < 128) s[0] = (char)c; else if (c < 2048) { s[0] = (c >> 6) + 192; s[1] = (c & 63) + 128; } else if (c < 65536) { s[0] = (c >> 12) + 224; s[1] = ((c >> 6) & 63) + 128; s[2] = (c & 63) + 128; } else if (c < 1114112) { s[0] = (c >> 18) + 240; s[1] = ((c >> 12) & 63) + 128; s[2] = ((c >> 6) & 63) + 128; s[3] = (c & 63) + 128; } return (ft_strdup(s)); } char *ft_widestr(wchar_t *src) { char *s; char *ante; char *post; if (!(s = ft_strnew(0))) return (NULL); while (*src) { ante = s; if (!(post = ft_widechar(*src))) return (NULL); if (!(s = ft_strjoin(ante, post))) return (NULL); src++; ft_memdel((void **)&ante); ft_memdel((void **)&post); } return (s); }