mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-12-25 16:53:37 +00:00
Backport from xs.
This commit is contained in:
parent
510477cf39
commit
d562c3cfed
4 changed files with 49 additions and 35 deletions
3
snac.c
3
snac.c
|
@ -5,8 +5,9 @@
|
|||
|
||||
#include "xs.h"
|
||||
#include "xs_io.h"
|
||||
#include "xs_encdec.h"
|
||||
#include "xs_unicode.h"
|
||||
#include "xs_json.h"
|
||||
#include "xs_encdec.h"
|
||||
#include "xs_curl.h"
|
||||
#include "xs_openssl.h"
|
||||
#include "xs_socket.h"
|
||||
|
|
33
xs_encdec.h
33
xs_encdec.h
|
@ -14,7 +14,6 @@
|
|||
xs_str *xs_base64_enc(const xs_val *data, int sz);
|
||||
xs_val *xs_base64_dec(const xs_str *data, int *size);
|
||||
int xs_is_base64(const char *str);
|
||||
xs_str *xs_utf8_enc(xs_str *str, unsigned int cpoint);
|
||||
|
||||
|
||||
#ifdef XS_IMPLEMENTATION
|
||||
|
@ -383,38 +382,6 @@ int xs_is_base64(const char *str)
|
|||
}
|
||||
|
||||
|
||||
/** utf-8 **/
|
||||
|
||||
xs_str *xs_utf8_enc(xs_str *str, unsigned int cpoint)
|
||||
/* encodes an Unicode codepoint to utf8 */
|
||||
{
|
||||
unsigned char tmp[4];
|
||||
int n = 0;
|
||||
|
||||
if (cpoint < 0x80)
|
||||
tmp[n++] = cpoint & 0xff;
|
||||
else
|
||||
if (cpoint < 0x800) {
|
||||
tmp[n++] = 0xc0 | (cpoint >> 6);
|
||||
tmp[n++] = 0x80 | (cpoint & 0x3f);
|
||||
}
|
||||
else
|
||||
if (cpoint < 0x10000) {
|
||||
tmp[n++] = 0xe0 | (cpoint >> 12);
|
||||
tmp[n++] = 0x80 | ((cpoint >> 6) & 0x3f);
|
||||
tmp[n++] = 0x80 | (cpoint & 0x3f);
|
||||
}
|
||||
else
|
||||
if (cpoint < 0x200000) {
|
||||
tmp[n++] = 0xf0 | (cpoint >> 18);
|
||||
tmp[n++] = 0x80 | ((cpoint >> 12) & 0x3f);
|
||||
tmp[n++] = 0x80 | ((cpoint >> 6) & 0x3f);
|
||||
tmp[n++] = 0x80 | (cpoint & 0x3f);
|
||||
}
|
||||
|
||||
return xs_append_m(str, (char *)tmp, n);
|
||||
}
|
||||
|
||||
#endif /* XS_IMPLEMENTATION */
|
||||
|
||||
#endif /* _XS_ENCDEC_H */
|
||||
|
|
46
xs_unicode.h
Normal file
46
xs_unicode.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/* copyright (c) 2022 - 2023 grunfink / MIT license */
|
||||
|
||||
#ifndef _XS_UNICODE_H
|
||||
|
||||
#define _XS_UNICODE_H
|
||||
|
||||
xs_str *xs_utf8_enc(xs_str *str, unsigned int cpoint);
|
||||
|
||||
|
||||
#ifdef XS_IMPLEMENTATION
|
||||
|
||||
/** utf-8 **/
|
||||
|
||||
xs_str *xs_utf8_enc(xs_str *str, unsigned int cpoint)
|
||||
/* encodes an Unicode codepoint to utf8 */
|
||||
{
|
||||
unsigned char tmp[4];
|
||||
int n = 0;
|
||||
|
||||
if (cpoint < 0x80)
|
||||
tmp[n++] = cpoint & 0xff;
|
||||
else
|
||||
if (cpoint < 0x800) {
|
||||
tmp[n++] = 0xc0 | (cpoint >> 6);
|
||||
tmp[n++] = 0x80 | (cpoint & 0x3f);
|
||||
}
|
||||
else
|
||||
if (cpoint < 0x10000) {
|
||||
tmp[n++] = 0xe0 | (cpoint >> 12);
|
||||
tmp[n++] = 0x80 | ((cpoint >> 6) & 0x3f);
|
||||
tmp[n++] = 0x80 | (cpoint & 0x3f);
|
||||
}
|
||||
else
|
||||
if (cpoint < 0x200000) {
|
||||
tmp[n++] = 0xf0 | (cpoint >> 18);
|
||||
tmp[n++] = 0x80 | ((cpoint >> 12) & 0x3f);
|
||||
tmp[n++] = 0x80 | ((cpoint >> 6) & 0x3f);
|
||||
tmp[n++] = 0x80 | (cpoint & 0x3f);
|
||||
}
|
||||
|
||||
return xs_append_m(str, (char *)tmp, n);
|
||||
}
|
||||
|
||||
#endif /* XS_IMPLEMENTATION */
|
||||
|
||||
#endif /* _XS_UNICODE_H */
|
|
@ -1 +1 @@
|
|||
/* b4f118990f3b8327a033a28bd9ca687c75b23dee */
|
||||
/* d8ec27efc55ba67403e88bfbe7d2ce9905364d6d */
|
||||
|
|
Loading…
Reference in a new issue