VERY basic UTF8 parser

This commit is contained in:
udo
2022-01-28 20:23:14 +00:00
parent 939009f9a1
commit 18ca2368bc
9 changed files with 350 additions and 2 deletions
+34
View File
@@ -154,6 +154,40 @@ String join(StringList l, String delim)
return(result);
}
StringList split_utf8(String s)
{
StringList result;
auto len = s.size();
String codepoint = "";
for(s64 i = 0; i < len; i++)
{
u8 c = s[i];
if(is_bit_set(c, 7))
{
codepoint = "";
codepoint.append(1, c);
if(is_bit_set(c, 6))
{
codepoint.append(1, s[++i]);
if(is_bit_set(c, 5))
{
codepoint.append(1, s[++i]);
if(is_bit_set(c, 4))
{
codepoint.append(1, s[++i]);
}
}
}
result.push_back(codepoint);
}
else
{
result.push_back(String().append(1, c));
}
}
return(result);
}
String html_escape(String s)
{
String result;
+2
View File
@@ -12,6 +12,7 @@ StringList split(String str, String delim);
String join(StringList l, String delim = "\n");
String nibble(String& haystack, String delim);
void json_consume_space(String s, u32& i);
StringList split_utf8(String s);
template<typename T>
std::vector<T> filter(std::vector<T> items, std::function<bool (T)> f)
@@ -50,3 +51,4 @@ void ob_clear();
String ob_get_clear();
String ob_get();
#define is_bit_set(var,pos) ((var) & (1<<(pos)))