index.md - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       index.md (1976B)
       ---
            1 GRAPHEME\_ENCODE\_UTF8(3) - Library Functions Manual
            2 
            3 # NAME
            4 
            5 **grapheme\_encode\_utf8** - encode codepoint into UTF-8 string
            6 
            7 # SYNOPSIS
            8 
            9 **#include <grapheme.h>**
           10 
           11 *size\_t*  
           12 **grapheme\_encode\_utf8**(*uint\_least32\_t cp*, *char \*str*, *size\_t len*);
           13 
           14 # DESCRIPTION
           15 
           16 The
           17 **grapheme\_encode\_utf8**()
           18 function encodes the codepoint
           19 *cp*
           20 into a UTF-8-string.
           21 If
           22 *str*
           23 is not
           24 `NULL`
           25 and
           26 *len*
           27 is large enough it writes the UTF-8-string to the memory pointed to by
           28 *str*.
           29 Otherwise no data is written.
           30 
           31 # RETURN VALUES
           32 
           33 The
           34 **grapheme\_encode\_utf8**()
           35 function returns the length (in bytes) of the UTF-8-string resulting
           36 from encoding
           37 *cp*,
           38 even if
           39 *len*
           40 is not large enough or
           41 *str*
           42 is
           43 `NULL`.
           44 
           45 # EXAMPLES
           46 
           47         /* cc (-static) -o example example.c -lgrapheme */
           48         #include <grapheme.h>
           49         #include <stddef.h>
           50         #include <stdlib.h>
           51         
           52         size_t
           53         cps_to_utf8(const uint_least32_t *cp, size_t cplen, char *str, size_t len)
           54         {
           55                 size_t i, off, ret;
           56         
           57                 for (i = 0, off = 0; i < cplen; i++, off += ret) {
           58                         if ((ret = grapheme_encode_utf8(cp[i], str + off,
           59                                                         len - off)) > (len - off)) {
           60                                 /* buffer too small */
           61                                 break;
           62                         }
           63                 }
           64         
           65                 return off;
           66         }
           67         
           68         size_t
           69         cps_bytelen(const uint_least32_t *cp, size_t cplen)
           70         {
           71                 size_t i, len;
           72         
           73                 for (i = 0, len = 0; i < cplen; i++) {
           74                         len += grapheme_encode_utf8(cp[i], NULL, 0);
           75                 }
           76         
           77                 return len;
           78         }
           79         
           80         char *
           81         cps_to_utf8_alloc(const uint_least32_t *cp, size_t cplen)
           82         {
           83                 char *str;
           84                 size_t len, i, ret, off;
           85         
           86                 len = cps_bytelen(cp, cplen);
           87         
           88                 if (!(str = malloc(len))) {
           89                         return NULL;
           90                 }
           91         
           92                 for (i = 0, off = 0; i < cplen; i++, off += ret) {
           93                         if ((ret = grapheme_encode_utf8(cp[i], str + off,
           94                                                         len - off)) > (len - off)) {
           95                                 /* buffer too small */
           96                                 break;
           97                         }
           98                 }
           99                 str[off] = '\0';
          100         
          101                 return str;
          102         }
          103 
          104 # SEE ALSO
          105 
          106 grapheme\_decode\_utf8(3),
          107 libgrapheme(7)
          108 
          109 # AUTHORS
          110 
          111 Laslo Hunhold ([dev@frign.de](mailto:dev@frign.de))
          112 
          113 suckless.org - 2022-10-06