File 0001-KCountrySubdivision-unbreak-support-of-iso-codes-4.1.patch of Package ki18n

From 3327283e921627368b4545551d8d6443e24ef897 Mon Sep 17 00:00:00 2001
From: "Friedrich W. H. Kossebau" <kossebau@kde.org>
Date: Sat, 3 Feb 2024 16:21:41 +0100
Subject: [PATCH] KCountrySubdivision: unbreak support of iso-codes >= 4.16

(cherry picked from commit 70a80cb1cb46b6660fb49480de8c6318d256586a)
---
 src/localedata/isocodes_p.h      | 18 ++++++++++++++++++
 src/localedata/isocodescache.cpp |  2 +-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/localedata/isocodes_p.h b/src/localedata/isocodes_p.h
index 57a01eb..83df3cb 100644
--- a/src/localedata/isocodes_p.h
+++ b/src/localedata/isocodes_p.h
@@ -177,6 +177,24 @@ constexpr inline uint32_t subdivisionCodeToKey(const char (&code)[N])
 {
     return subdivisionCodeToKey(code, N - 1);
 }
+
+/// Before v4.16 iso-codes used for parent code just the subdivision code, without the country
+/// (only by error sometimes). Since that version the full code now is always used.
+/// Handle both cases gracefully.
+/// Does not check the country part for sanity, but just discards the info.
+constexpr inline uint16_t parentCodeToKey(QStringView code)
+{
+    if (code.size() < 4) {
+        return alphaNum3CodeToKey(code);
+    }
+    if (code[2] != QLatin1Char('-')) {
+        return 0;
+    }
+
+    const auto countryKey = alpha2CodeToKey(code.left(2));
+    const auto subdivKey = alphaNum3CodeToKey(code.mid(3), code.size() - 3);
+    return countryKey > 0 ? subdivKey : 0;
+}
 }
 
 #endif // ISOCODES_P_H
diff --git a/src/localedata/isocodescache.cpp b/src/localedata/isocodescache.cpp
index e496387..eb8d931 100644
--- a/src/localedata/isocodescache.cpp
+++ b/src/localedata/isocodescache.cpp
@@ -289,7 +289,7 @@ void IsoCodesCache::createIso3166_2Cache()
         iso3166_2stringTable.append(entry.value(QLatin1String("name")).toString().toUtf8());
         iso3166_2stringTable.append('\0');
 
-        const auto parentKey = IsoCodes::alphaNum3CodeToKey(entry.value(QLatin1String("parent")).toString());
+        const auto parentKey = IsoCodes::parentCodeToKey(entry.value(QLatin1String("parent")).toString());
         if (parentKey) {
             subdivParentMap.push_back({key, parentKey});
         }
-- 
2.43.0

openSUSE Build Service is sponsored by