mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-22 05:15:04 +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.h"
|
||||||
#include "xs_io.h"
|
#include "xs_io.h"
|
||||||
#include "xs_encdec.h"
|
#include "xs_unicode.h"
|
||||||
#include "xs_json.h"
|
#include "xs_json.h"
|
||||||
|
#include "xs_encdec.h"
|
||||||
#include "xs_curl.h"
|
#include "xs_curl.h"
|
||||||
#include "xs_openssl.h"
|
#include "xs_openssl.h"
|
||||||
#include "xs_socket.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_str *xs_base64_enc(const xs_val *data, int sz);
|
||||||
xs_val *xs_base64_dec(const xs_str *data, int *size);
|
xs_val *xs_base64_dec(const xs_str *data, int *size);
|
||||||
int xs_is_base64(const char *str);
|
int xs_is_base64(const char *str);
|
||||||
xs_str *xs_utf8_enc(xs_str *str, unsigned int cpoint);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef XS_IMPLEMENTATION
|
#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_IMPLEMENTATION */
|
||||||
|
|
||||||
#endif /* _XS_ENCDEC_H */
|
#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