From e22c17340fee7ba50f60bd4174c2c544e47f364d Mon Sep 17 00:00:00 2001
From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com>
Date: Fri, 24 Jun 2022 12:12:30 +0200
Subject: [PATCH] Add 'UTF8CharLength(..)' to utility.cpp

---
 r5dev/public/include/utility.h |  1 +
 r5dev/public/utility.cpp       | 17 +++++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/r5dev/public/include/utility.h b/r5dev/public/include/utility.h
index 6ba952db..2e9c1559 100644
--- a/r5dev/public/include/utility.h
+++ b/r5dev/public/include/utility.h
@@ -32,6 +32,7 @@ string Base64Decode(const string& svInput);
 
 string UTF8Encode(const wstring& wsvInput);
 string UTF8Decode(const string& svInput);
+size_t UTF8CharLength(const uint8_t cInput);
 
 bool StringIsDigit(const string& svInput);
 bool CompareStringAlphabetically(const string& svA, const string& svB);
diff --git a/r5dev/public/utility.cpp b/r5dev/public/utility.cpp
index 955fa100..b8b8037b 100644
--- a/r5dev/public/utility.cpp
+++ b/r5dev/public/utility.cpp
@@ -485,6 +485,23 @@ string UTF8Decode(const string& svInput)
     return "";
 }
 
+///////////////////////////////////////////////////////////////////////////////
+// For obtaining UTF8 character length.
+size_t UTF8CharLength(const uint8_t cInput)
+{
+    if ((cInput & 0xFE) == 0xFC)
+        return 6;
+    if ((cInput & 0xFC) == 0xF8)
+        return 5;
+    if ((cInput & 0xF8) == 0xF0)
+        return 4;
+    else if ((cInput & 0xF0) == 0xE0)
+        return 3;
+    else if ((cInput & 0xE0) == 0xC0)
+        return 2;
+    return 1;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // For checking if a string is a number.
 bool StringIsDigit(const string& svInput)