Blob


1 cat << EOF
2 .Dd ${MAN_DATE}
3 .Dt GRAPHEME_ENCODE_UTF8 3
4 .Os suckless.org
5 .Sh NAME
6 .Nm grapheme_encode_utf8
7 .Nd encode codepoint into UTF-8 string
8 .Sh SYNOPSIS
9 .In grapheme.h
10 .Ft size_t
11 .Fn grapheme_encode_utf8 "uint_least32_t cp" "char *str" "size_t len"
12 .Sh DESCRIPTION
13 The
14 .Fn grapheme_encode_utf8
15 function encodes the codepoint
16 .Va cp
17 into a UTF-8-string.
18 If
19 .Va str
20 is not
21 .Dv NULL
22 and
23 .Va len
24 is large enough it writes the UTF-8-string to the memory pointed to by
25 .Va str .
26 Otherwise no data is written.
27 .Sh RETURN VALUES
28 The
29 .Fn grapheme_encode_utf8
30 function returns the length (in bytes) of the UTF-8-string resulting
31 from encoding
32 .Va cp ,
33 even if
34 .Va len
35 is not large enough or
36 .Va str
37 is
38 .Dv NULL .
39 .Sh EXAMPLES
40 .Bd -literal
41 /* cc (-static) -o example example.c -lgrapheme */
42 #include <grapheme.h>
43 #include <stddef.h>
44 #include <stdlib.h>
46 size_t
47 cps_to_utf8(const uint_least32_t *cp, size_t cplen, char *str, size_t len)
48 {
49 size_t i, off, ret;
51 for (i = 0, off = 0; i < cplen; i++, off += ret) {
52 if ((ret = grapheme_encode_utf8(cp[i], str + off,
53 len - off)) > (len - off)) {
54 /* buffer too small */
55 break;
56 }
57 }
59 return off;
60 }
62 size_t
63 cps_bytelen(const uint_least32_t *cp, size_t cplen)
64 {
65 size_t i, len;
67 for (i = 0, len = 0; i < cplen; i++) {
68 len += grapheme_encode_utf8(cp[i], NULL, 0);
69 }
71 return len;
72 }
74 char *
75 cps_to_utf8_alloc(const uint_least32_t *cp, size_t cplen)
76 {
77 char *str;
78 size_t len, i, ret, off;
80 len = cps_bytelen(cp, cplen);
82 if (!(str = malloc(len))) {
83 return NULL;
84 }
86 for (i = 0, off = 0; i < cplen; i++, off += ret) {
87 if ((ret = grapheme_encode_utf8(cp[i], str + off,
88 len - off)) > (len - off)) {
89 /* buffer too small */
90 break;
91 }
92 }
93 str[off] = '\\\\0';
95 return str;
96 }
97 .Ed
98 .Sh SEE ALSO
99 .Xr grapheme_decode_utf8 3 ,
100 .Xr libgrapheme 7
101 .Sh AUTHORS
102 .An Laslo Hunhold Aq Mt dev@frign.de
103 EOF