Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package hyprutils for openSUSE:Factory 
checked in at 2026-10-28 17:54:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/hyprutils (Old)
 and      /work/SRC/openSUSE:Factory/.hyprutils.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "hyprutils"

Wed Oct 28 17:54:45 2026 rev:16 rq:1393447 version:0.14.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/hyprutils/hyprutils.changes      2026-09-11 
18:05:34.673484765 +0200
+++ /work/SRC/openSUSE:Factory/.hyprutils.new.2252680/hyprutils.changes 
2026-10-28 17:54:45.749708660 +0100
@@ -1,0 +2,7 @@
+Sat Oct 24 09:40:19 UTC 2026 - Nassim Lhadj <[email protected]>
+
+- Update to version 0.14.3:
+  * i18n: support LC_MESSAGES
+  * string/utf8: init utf8 header
+
+-------------------------------------------------------------------

Old:
----
  hyprutils-0.14.2.tar.xz

New:
----
  hyprutils-0.14.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ hyprutils.spec ++++++
--- /var/tmp/diff_new_pack.DquT5P/_old  2026-10-28 17:54:46.470738865 +0100
+++ /var/tmp/diff_new_pack.DquT5P/_new  2026-10-28 17:54:46.472738949 +0100
@@ -20,7 +20,7 @@
 %define sover 13
 
 Name:           hyprutils
-Version:        0.14.2
+Version:        0.14.3
 Release:        0
 Summary:        Utilities used across the Hypr* ecosystem
 License:        BSD-3-Clause

++++++ hyprutils-0.14.2.tar.xz -> hyprutils-0.14.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyprutils-0.14.2/VERSION new/hyprutils-0.14.3/VERSION
--- old/hyprutils-0.14.2/VERSION        2026-09-05 16:51:23.000000000 +0200
+++ new/hyprutils-0.14.3/VERSION        2026-10-22 14:50:40.000000000 +0200
@@ -1 +1 @@
-0.14.2
+0.14.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyprutils-0.14.2/include/hyprutils/string/UTF8.hpp 
new/hyprutils-0.14.3/include/hyprutils/string/UTF8.hpp
--- old/hyprutils-0.14.2/include/hyprutils/string/UTF8.hpp      1970-01-01 
01:00:00.000000000 +0100
+++ new/hyprutils-0.14.3/include/hyprutils/string/UTF8.hpp      2026-10-22 
14:50:40.000000000 +0200
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <string>
+#include <string_view>
+
+namespace Hyprutils::String::UTF8 {
+    size_t      codepointLen(const std::string_view sv);
+    size_t      codepointLenBefore(const std::string& s, size_t offset);
+    size_t      length(const std::string&);
+    size_t      offsetToUTF8Len(const std::string&, size_t offset);
+    size_t      utf8ToOffset(const std::string&, size_t utf8);
+    std::string substr(const std::string&, size_t start, size_t len = 
std::string::npos);
+    size_t      findFirstOf(const std::string&, const std::string ch, size_t 
offset = 0);
+    size_t      findLastOf(const std::string&, const std::string ch, size_t 
offset = std::string::npos);
+    size_t      findFirstNotOf(const std::string&, const std::string ch, 
size_t offset = 0);
+    size_t      findLastNotOf(const std::string&, const std::string ch, size_t 
offset = std::string::npos);
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyprutils-0.14.2/src/i18n/I18nLocale.cpp 
new/hyprutils-0.14.3/src/i18n/I18nLocale.cpp
--- old/hyprutils-0.14.2/src/i18n/I18nLocale.cpp        2026-09-05 
16:51:23.000000000 +0200
+++ new/hyprutils-0.14.3/src/i18n/I18nLocale.cpp        2026-10-22 
14:50:40.000000000 +0200
@@ -16,11 +16,13 @@
     if (locale == "*")
         return "en_US";
 
-    if (locale.contains('='))
-        locale = locale.substr(locale.find('=') + 1);
+    if (size_t pos = locale.find("LC_MESSAGES="); pos != std::string::npos)
+        locale = locale.substr(pos + 12);
+    else if (size_t pos = locale.find('='); pos != std::string::npos)
+        locale = locale.substr(pos + 1);
 
-    if (locale.contains('.'))
-        locale = locale.substr(0, locale.find('.'));
+    if (size_t pos = locale.find('.'); pos != std::string::npos)
+        locale = locale.substr(0, pos);
 
     return locale;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyprutils-0.14.2/src/string/UTF8.cpp 
new/hyprutils-0.14.3/src/string/UTF8.cpp
--- old/hyprutils-0.14.2/src/string/UTF8.cpp    1970-01-01 01:00:00.000000000 
+0100
+++ new/hyprutils-0.14.3/src/string/UTF8.cpp    2026-10-22 14:50:40.000000000 
+0200
@@ -0,0 +1,163 @@
+#include <hyprutils/string/UTF8.hpp>
+#include <string_view>
+
+using namespace Hyprutils::String::UTF8;
+using namespace Hyprutils::String;
+using namespace Hyprutils;
+
+size_t UTF8::codepointLen(const std::string_view sv) {
+    size_t len = 1;
+    while (len < sv.size()) {
+        if (((*(&sv[0] + len)) & 0xC0) == 0x80) {
+            len++;
+            continue;
+        }
+
+        break;
+    }
+
+    return len;
+}
+
+size_t UTF8::codepointLenBefore(const std::string& s, size_t offset) {
+    const auto initialOffset = offset;
+    while (true) {
+        if (offset == 0)
+            return 0;
+        offset--;
+        if ((s[offset] & 0xC0) != 0x80)
+            break;
+    }
+    return initialOffset - offset;
+}
+
+size_t UTF8::length(const std::string& s) {
+    if (s.empty())
+        return 0;
+
+    const char* c    = s.c_str();
+    size_t      len  = 0;
+    auto        endp = s.c_str() + s.length();
+    while (c < endp) {
+        c += codepointLen({c, (endp - c)});
+        len++;
+    }
+    return len;
+}
+
+/// Converts a byte index to a codepoint index.
+size_t UTF8::offsetToUTF8Len(const std::string& s, size_t offset) {
+    if (s.empty())
+        return 0;
+
+    const char* c    = s.c_str();
+    size_t      len  = 0;
+    auto        endp = std::min(s.c_str() + s.length(), s.c_str() + offset);
+    while (c < endp) {
+        c += codepointLen({c, (endp - c)});
+        len++;
+    }
+    return len;
+}
+
+/// Converts a codepoint index to a byte index.
+size_t UTF8::utf8ToOffset(const std::string& s, size_t utf8) {
+    if (s.empty())
+        return 0;
+
+    const char* c    = s.c_str();
+    size_t      len  = 0;
+    auto        endp = s.c_str() + s.length();
+    while (c < endp) {
+        if (len >= utf8)
+            return c - s.c_str();
+
+        c += codepointLen({c, (endp - c)});
+        len++;
+    }
+    return s.size();
+}
+
+std::string UTF8::substr(const std::string& s, size_t start, size_t length) {
+    if (s.empty() || length == 0)
+        return "";
+
+    bool        started   = false;
+    size_t      byteStart = 0, byteEnd = std::string::npos;
+
+    const char* c    = s.c_str();
+    size_t      len  = 0;
+    auto        endp = s.c_str() + s.length();
+    while (c < endp) {
+        if (len >= start && !started) {
+            started   = true;
+            byteStart = c - s.c_str();
+
+            if (length == std::string::npos)
+                break;
+
+            len = 0;
+        }
+
+        c += codepointLen({c, endp - c});
+
+        len++;
+
+        if (len >= length && started) {
+            byteEnd = c - s.c_str();
+            break;
+        }
+    }
+
+    if (len == 0 || !started)
+        return "";
+
+    if (byteEnd == std::string::npos)
+        return s.substr(byteStart);
+
+    return s.substr(byteStart, byteEnd - byteStart);
+}
+
+size_t UTF8::findFirstOf(const std::string& s, const std::string ch, size_t 
offset) {
+    while (offset < s.length()) {
+        const auto c     = s.data() + offset;
+        const auto cpLen = codepointLen({c, s.length() - offset});
+        if (std::string_view{c, cpLen} == ch)
+            return offset;
+        offset += cpLen;
+    }
+    return std::string::npos;
+}
+
+size_t UTF8::findLastOf(const std::string& s, const std::string ch, size_t 
offset) {
+    offset = std::min(offset, s.length());
+    while (offset > 0) {
+        const auto cpLen = codepointLenBefore(s, offset);
+        offset -= cpLen;
+        if (std::string_view{&s[offset], cpLen} == ch)
+            return offset;
+    }
+    return std::string::npos;
+}
+
+size_t UTF8::findFirstNotOf(const std::string& s, const std::string ch, size_t 
offset) {
+    while (offset < s.length()) {
+        const auto c     = s.data() + offset;
+        const auto cpLen = codepointLen({c, s.length() - offset});
+        if (std::string_view{c, cpLen} != ch)
+            return offset;
+        offset += cpLen;
+    }
+    return std::string::npos;
+}
+
+size_t UTF8::findLastNotOf(const std::string& s, const std::string ch, size_t 
offset) {
+    offset = std::min(offset, s.length());
+    while (offset > 0) {
+        const auto cpLen = codepointLenBefore(s, offset);
+        offset -= cpLen;
+        if (std::string_view{&s[offset], cpLen} != ch)
+            return offset;
+    }
+    return std::string::npos;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/hyprutils-0.14.2/tests/string/UTF8.cpp 
new/hyprutils-0.14.3/tests/string/UTF8.cpp
--- old/hyprutils-0.14.2/tests/string/UTF8.cpp  1970-01-01 01:00:00.000000000 
+0100
+++ new/hyprutils-0.14.3/tests/string/UTF8.cpp  2026-10-22 14:50:40.000000000 
+0200
@@ -0,0 +1,121 @@
+#include <hyprutils/string/UTF8.hpp>
+
+#include <gtest/gtest.h>
+
+using namespace Hyprutils::String;
+
+TEST(UTF8, codepointLen) {
+    const auto str = std::string("δΈ– hello πŸ§‘β€πŸŒΎ");
+    EXPECT_EQ(UTF8::codepointLen({&str[0], str.length()}), 3);
+    EXPECT_EQ(UTF8::codepointLen({&str[3], str.length() - 3}), 1);
+    EXPECT_EQ(UTF8::codepointLen({&str[10], str.length() - 10}), 4);
+}
+
+TEST(UTF8, codepointLenBefore) {
+    const auto str = std::string("δΈ– hello πŸ§‘β€πŸŒΎ");
+    EXPECT_EQ(UTF8::codepointLenBefore(str, 0), 0);
+    EXPECT_EQ(UTF8::codepointLenBefore(str, 3), 3);
+    EXPECT_EQ(UTF8::codepointLenBefore(str, 10), 1);
+    EXPECT_EQ(UTF8::codepointLenBefore(str, 14), 4);
+}
+
+TEST(UTF8, length) {
+    EXPECT_EQ(UTF8::length(""), 0);
+    EXPECT_EQ(UTF8::length("Hello"), 5);
+    EXPECT_EQ(UTF8::length("δΈ–η•Œ"), 2);
+    EXPECT_EQ(UTF8::length("δΈ–η•Œisι…·θ–„"), 6);
+}
+
+TEST(UTF8, substr) {
+    EXPECT_EQ(UTF8::substr("", 0, 0), "");
+    EXPECT_EQ(UTF8::substr("ζ­»", 1), "");
+    EXPECT_EQ(UTF8::substr("ζ­»", 0, 0), "");
+    EXPECT_EQ(UTF8::substr("Hello", 0, 3), "Hel");
+    EXPECT_EQ(UTF8::substr("δΈ–η•Œ", 1, 1), "η•Œ");
+    EXPECT_EQ(UTF8::substr("δΈ–η•Œisι…·θ–„", 1), "η•Œisι…·θ–„");
+    EXPECT_EQ(UTF8::substr("ハむパーランド", 1, 2), "むパ");
+}
+
+TEST(UTF8, utf8ToOffset) {
+    EXPECT_EQ(UTF8::utf8ToOffset("", 0), 0);
+    EXPECT_EQ(UTF8::utf8ToOffset("Hello", 20000), 5);
+    EXPECT_EQ(UTF8::utf8ToOffset("Hello", 3), 3);
+    EXPECT_EQ(UTF8::utf8ToOffset("ι­‘ι­…ι­ι­Ž", 3), 9);
+    EXPECT_EQ(UTF8::utf8ToOffset("aι­‘ι­…ι­ι­Ž", 3), 7);
+}
+
+TEST(UTF8, offsetToUTF8Len) {
+    EXPECT_EQ(UTF8::offsetToUTF8Len("", 0), 0);
+    EXPECT_EQ(UTF8::offsetToUTF8Len("Hello", 3), 3);
+    EXPECT_EQ(UTF8::offsetToUTF8Len("ι­‘ι­…ι­ι­Ž", 3), 1);
+    EXPECT_EQ(UTF8::offsetToUTF8Len("aι­‘ι­…ι­ι­Ž", 4), 2);
+    EXPECT_EQ(UTF8::offsetToUTF8Len("ι­‘aι­…", 1), 1);
+}
+
+TEST(UTF8, findFirstOf) {
+    // weird values
+    EXPECT_EQ(UTF8::findFirstOf("", ""), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf("", "aba"), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf("", "aba", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf("aba", ""), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf("aba", "", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf("aba", "a", 1000), std::string::npos);
+
+    const auto str = "is πŸ§‘β€πŸŒΎ the same as πŸ§‘πŸŒΎ?";
+    EXPECT_EQ(UTF8::findFirstOf(str, "i", 2), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf(str, "I"), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstOf(str, "i"), 0);
+    EXPECT_EQ(UTF8::findFirstOf(str, "?"), 35);
+    EXPECT_EQ(UTF8::findFirstOf(str, "πŸ§‘"), 3);
+}
+
+TEST(UTF8, findLastOf) {
+    // weird values
+    EXPECT_EQ(UTF8::findLastOf("", ""), std::string::npos);
+    EXPECT_EQ(UTF8::findLastOf("", "aba"), std::string::npos);
+    EXPECT_EQ(UTF8::findLastOf("", "aba", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findLastOf("aba", ""), std::string::npos);
+    EXPECT_EQ(UTF8::findLastOf("aba", "", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findLastOf("aba", "a", 1000), 2);
+
+    const auto str = "is πŸ§‘β€πŸŒΎ the same as πŸ§‘πŸŒΎ?";
+    EXPECT_EQ(UTF8::findLastOf(str, "i", 2), 0);
+    EXPECT_EQ(UTF8::findLastOf(str, "I"), std::string::npos);
+    EXPECT_EQ(UTF8::findLastOf(str, "i"), 0);
+    EXPECT_EQ(UTF8::findLastOf(str, "?"), 35);
+    EXPECT_EQ(UTF8::findLastOf(str, "πŸ§‘"), 27);
+}
+
+TEST(UTF8, findFirstNotOf) {
+    // weird values
+    EXPECT_EQ(UTF8::findFirstNotOf("", ""), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstNotOf("", "aba"), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstNotOf("", "aba", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstNotOf("aba", "", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstNotOf("aba", "a", 1000), std::string::npos);
+
+    EXPECT_EQ(UTF8::findFirstNotOf("aba", ""), 0);
+    EXPECT_EQ(UTF8::findFirstNotOf("is?", "i", 2), 2);
+    EXPECT_EQ(UTF8::findFirstNotOf("is?", "i"), 1);
+    EXPECT_EQ(UTF8::findFirstNotOf("is?", "?", 2), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstNotOf("is?", "?"), 0);
+    EXPECT_EQ(UTF8::findFirstNotOf("bbbbb", "b"), std::string::npos);
+    EXPECT_EQ(UTF8::findFirstNotOf("πŸ§‘πŸ§‘πŸŒΎπŸŒΎπŸ§‘", "πŸ§‘"), 8);
+}
+
+TEST(UTF8, findLastNotOf) {
+    // weird values
+    EXPECT_EQ(UTF8::findLastNotOf("", ""), std::string::npos);
+    EXPECT_EQ(UTF8::findLastNotOf("", "aba"), std::string::npos);
+    EXPECT_EQ(UTF8::findLastNotOf("", "aba", 1000), std::string::npos);
+    EXPECT_EQ(UTF8::findLastNotOf("aba", "", 1000), 2);
+    EXPECT_EQ(UTF8::findLastNotOf("aba", "a", 1000), 1);
+
+    EXPECT_EQ(UTF8::findLastNotOf("aba", ""), 2);
+    EXPECT_EQ(UTF8::findLastNotOf("is?", "i", 3), 2);
+    EXPECT_EQ(UTF8::findLastNotOf("is?", "i"), 2);
+    EXPECT_EQ(UTF8::findLastNotOf("is?", "?", 2), 1);
+    EXPECT_EQ(UTF8::findLastNotOf("is?", "?"), 1);
+    EXPECT_EQ(UTF8::findLastNotOf("bbbbb", "b"), std::string::npos);
+    EXPECT_EQ(UTF8::findLastNotOf("πŸ§‘πŸ§‘πŸŒΎπŸŒΎπŸ§‘", "πŸ§‘"), 12);
+}

++++++ hyprutils.obsinfo ++++++
--- /var/tmp/diff_new_pack.DquT5P/_old  2026-10-28 17:54:46.731749800 +0100
+++ /var/tmp/diff_new_pack.DquT5P/_new  2026-10-28 17:54:46.740750177 +0100
@@ -1,5 +1,5 @@
 name: hyprutils
-version: 0.14.2
-mtime: 1788619883
-commit: a21e87b878e72ee5dfd375899e8b2ad0d0c4c0e1
+version: 0.14.3
+mtime: 1792673440
+commit: 0d13d5a624eb093b600d1b2cbe448fb613c86424
 

Reply via email to