mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 21:35:10 +00:00
[MOD/FIX] Licensewerk, start counting by codepoint
XEP-0426 came out of the blue, and it *hit* me!
This commit is contained in:
parent
dba3dcc85f
commit
c2ea3807ec
7 changed files with 100 additions and 8 deletions
45
src/Unistr.c
45
src/Unistr.c
|
|
@ -3,8 +3,10 @@
|
|||
#include <Cytoplasm/Memory.h>
|
||||
#include <Cytoplasm/Str.h>
|
||||
#include <Cytoplasm/Log.h>
|
||||
#include <Cytoplasm/Log.h>
|
||||
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
struct Unistr {
|
||||
size_t length;
|
||||
|
|
@ -222,3 +224,46 @@ UnistrFilter(Unistr *str, UnistrFilterFunc filter)
|
|||
|
||||
return unistr;
|
||||
}
|
||||
|
||||
Unistr *
|
||||
UnistrConcat(size_t n, ...)
|
||||
{
|
||||
va_list list;
|
||||
size_t i;
|
||||
Unistr *ret = UnistrCreate("");
|
||||
|
||||
va_start(list, n);
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
Unistr *to_concat = va_arg(list, Unistr *);
|
||||
size_t j;
|
||||
for (j = 0; j < UnistrSize(to_concat); j++)
|
||||
{
|
||||
UnistrAddch(ret, UnistrGetch(to_concat, j));
|
||||
}
|
||||
}
|
||||
|
||||
va_end(list);
|
||||
return ret;
|
||||
}
|
||||
size_t
|
||||
UnistrGetOffset(Unistr *str, uint32_t sep)
|
||||
{
|
||||
size_t i;
|
||||
uint32_t prev = 0x0A;
|
||||
if (!str || !sep)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < str->length; i++)
|
||||
{
|
||||
uint32_t curr = str->codepoints[i];
|
||||
if (prev == 0x0A && curr != sep)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
prev = curr;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue