From 97d8c38f657f04dffa718ae5d81bc1c5671faed6 Mon Sep 17 00:00:00 2001
From: Philippe Mavridis <philippe.mavridis@yandex.com>
Date: Sun, 6 Sep 2026 13:54:59 +0300
Subject: TDEUnicodeData: make subcategories constexpr

Categories already are and it makes perfect sense to make subcategories too.

Signed-off-by: Philippe Mavridis <philippe.mavridis@yandex.com>
---
 tdecore/tdeunicodedata_categories.cpp | 720 +++++++++++++++++-----------------
 tdeui/unicode/update_unicode_data.pl  |   2 +-
 2 files changed, 361 insertions(+), 361 deletions(-)

diff --git a/tdecore/tdeunicodedata_categories.cpp b/tdecore/tdeunicodedata_categories.cpp
index e9da5891b..6b3b18dcf 100644
--- a/tdecore/tdeunicodedata_categories.cpp
+++ b/tdecore/tdeunicodedata_categories.cpp
@@ -16,7 +16,7 @@
 // extraction; the actual translation is performed at the call site
 // with i18n(name).
 
-static const TDEUnicodeData::Subcategory BasicLatin[] = {
+constexpr TDEUnicodeData::Subcategory BasicLatin[] = {
 	{ 0x0000,	I18N_NOOP("C0 controls") },
 	{ 0x0020,	I18N_NOOP("ASCII punctuation and symbols") },
 	{ 0x002B,	I18N_NOOP("ASCII math operator") },
@@ -32,7 +32,7 @@ static const TDEUnicodeData::Subcategory BasicLatin[] = {
 	{ 0x007F,	I18N_NOOP("Control character") },
 };
 
-static const TDEUnicodeData::Subcategory Latin1Supplement[] = {
+constexpr TDEUnicodeData::Subcategory Latin1Supplement[] = {
 	{ 0x0080,	I18N_NOOP("C1 controls") },
 	{ 0x00A0,	I18N_NOOP("Latin-1 punctuation and symbols") },
 	{ 0x00BC,	I18N_NOOP("Vulgar fractions") },
@@ -45,13 +45,13 @@ static const TDEUnicodeData::Subcategory Latin1Supplement[] = {
 	{ 0x00F8,	I18N_NOOP("Lowercase letters") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedA[] = {
 	{ 0x0100,	I18N_NOOP("European Latin") },
 	{ 0x0149,	I18N_NOOP("Deprecated letter") },
 	{ 0x014A,	I18N_NOOP("European Latin") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedB[] = {
 	{ 0x0180,	I18N_NOOP("Non-European and historic Latin") },
 	{ 0x01C0,	I18N_NOOP("African letters for clicks") },
 	{ 0x01C4,	I18N_NOOP("Latin digraphs matching Serbian Cyrillic letters") },
@@ -69,7 +69,7 @@ static const TDEUnicodeData::Subcategory LatinExtendedB[] = {
 	{ 0x0241,	I18N_NOOP("Miscellaneous additions") },
 };
 
-static const TDEUnicodeData::Subcategory IPAExtensions[] = {
+constexpr TDEUnicodeData::Subcategory IPAExtensions[] = {
 	{ 0x0250,	I18N_NOOP("IPA extensions") },
 	{ 0x027F,	I18N_NOOP("Sinological extension") },
 	{ 0x0280,	I18N_NOOP("IPA extensions") },
@@ -79,7 +79,7 @@ static const TDEUnicodeData::Subcategory IPAExtensions[] = {
 	{ 0x02AE,	I18N_NOOP("Sinological extensions") },
 };
 
-static const TDEUnicodeData::Subcategory SpacingModifierLetters[] = {
+constexpr TDEUnicodeData::Subcategory SpacingModifierLetters[] = {
 	{ 0x02B0,	I18N_NOOP("Latin superscript modifier letters") },
 	{ 0x02B9,	I18N_NOOP("Miscellaneous phonetic modifiers") },
 	{ 0x02D8,	I18N_NOOP("Spacing clones of diacritics") },
@@ -91,7 +91,7 @@ static const TDEUnicodeData::Subcategory SpacingModifierLetters[] = {
 	{ 0x02EF,	I18N_NOOP("UPA modifiers") },
 };
 
-static const TDEUnicodeData::Subcategory CombiningDiacriticalMarks[] = {
+constexpr TDEUnicodeData::Subcategory CombiningDiacriticalMarks[] = {
 	{ 0x0300,	I18N_NOOP("Ordinary diacritics") },
 	{ 0x0334,	I18N_NOOP("Overstruck diacritics") },
 	{ 0x0339,	I18N_NOOP("Miscellaneous additions") },
@@ -106,7 +106,7 @@ static const TDEUnicodeData::Subcategory CombiningDiacriticalMarks[] = {
 	{ 0x0363,	I18N_NOOP("Medieval superscript letter diacritics") },
 };
 
-static const TDEUnicodeData::Subcategory GreekandCoptic[] = {
+constexpr TDEUnicodeData::Subcategory GreekandCoptic[] = {
 	{ 0x0370,	I18N_NOOP("Archaic letters") },
 	{ 0x0374,	I18N_NOOP("Numeral signs") },
 	{ 0x0376,	I18N_NOOP("Archaic letters") },
@@ -131,7 +131,7 @@ static const TDEUnicodeData::Subcategory GreekandCoptic[] = {
 	{ 0x03FD,	I18N_NOOP("Editorial symbols") },
 };
 
-static const TDEUnicodeData::Subcategory Cyrillic[] = {
+constexpr TDEUnicodeData::Subcategory Cyrillic[] = {
 	{ 0x0400,	I18N_NOOP("Cyrillic extensions") },
 	{ 0x0410,	I18N_NOOP("Basic Russian alphabet") },
 	{ 0x0450,	I18N_NOOP("Cyrillic extensions") },
@@ -143,7 +143,7 @@ static const TDEUnicodeData::Subcategory Cyrillic[] = {
 	{ 0x04FA,	I18N_NOOP("Additions for Nivkh") },
 };
 
-static const TDEUnicodeData::Subcategory CyrillicSupplement[] = {
+constexpr TDEUnicodeData::Subcategory CyrillicSupplement[] = {
 	{ 0x0500,	I18N_NOOP("Komi letters") },
 	{ 0x0510,	I18N_NOOP("Khanty letters") },
 	{ 0x0512,	I18N_NOOP("Chukchi letters") },
@@ -158,7 +158,7 @@ static const TDEUnicodeData::Subcategory CyrillicSupplement[] = {
 	{ 0x052E,	I18N_NOOP("Khanty letters") },
 };
 
-static const TDEUnicodeData::Subcategory Armenian[] = {
+constexpr TDEUnicodeData::Subcategory Armenian[] = {
 	{ 0x0531,	I18N_NOOP("Uppercase letters") },
 	{ 0x0559,	I18N_NOOP("Modifier letters") },
 	{ 0x0560,	I18N_NOOP("Lowercase letters") },
@@ -167,7 +167,7 @@ static const TDEUnicodeData::Subcategory Armenian[] = {
 	{ 0x058F,	I18N_NOOP("Currency symbol") },
 };
 
-static const TDEUnicodeData::Subcategory Hebrew[] = {
+constexpr TDEUnicodeData::Subcategory Hebrew[] = {
 	{ 0x0591,	I18N_NOOP("Cantillation marks") },
 	{ 0x05B0,	I18N_NOOP("Points and punctuation") },
 	{ 0x05C4,	I18N_NOOP("Puncta extraordinaria") },
@@ -178,7 +178,7 @@ static const TDEUnicodeData::Subcategory Hebrew[] = {
 	{ 0x05F3,	I18N_NOOP("Additional punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Arabic[] = {
+constexpr TDEUnicodeData::Subcategory Arabic[] = {
 	{ 0x0600,	I18N_NOOP("Subtending marks") },
 	{ 0x0605,	I18N_NOOP("Supertending mark") },
 	{ 0x0606,	I18N_NOOP("Radix symbols") },
@@ -220,7 +220,7 @@ static const TDEUnicodeData::Subcategory Arabic[] = {
 	{ 0x06FF,	I18N_NOOP("Extended Arabic letter for Parkari") },
 };
 
-static const TDEUnicodeData::Subcategory Syriac[] = {
+constexpr TDEUnicodeData::Subcategory Syriac[] = {
 	{ 0x0700,	I18N_NOOP("Syriac punctuation and signs") },
 	{ 0x070F,	I18N_NOOP("Syriac format control character") },
 	{ 0x0710,	I18N_NOOP("Syriac letters") },
@@ -230,7 +230,7 @@ static const TDEUnicodeData::Subcategory Syriac[] = {
 	{ 0x074D,	I18N_NOOP("Sogdian letters") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicSupplement[] = {
+constexpr TDEUnicodeData::Subcategory ArabicSupplement[] = {
 	{ 0x0750,	I18N_NOOP("Extended Arabic letters") },
 	{ 0x076E,	I18N_NOOP("Additions for Khowar") },
 	{ 0x0772,	I18N_NOOP("Addition for Torwali") },
@@ -238,14 +238,14 @@ static const TDEUnicodeData::Subcategory ArabicSupplement[] = {
 	{ 0x077E,	I18N_NOOP("Additions for early Persian") },
 };
 
-static const TDEUnicodeData::Subcategory Thaana[] = {
+constexpr TDEUnicodeData::Subcategory Thaana[] = {
 	{ 0x0780,	I18N_NOOP("Basic consonants") },
 	{ 0x0798,	I18N_NOOP("Extensions for Arabic") },
 	{ 0x07A6,	I18N_NOOP("Vowels") },
 	{ 0x07B1,	I18N_NOOP("Consonant for Addu dialect") },
 };
 
-static const TDEUnicodeData::Subcategory NKo[] = {
+constexpr TDEUnicodeData::Subcategory NKo[] = {
 	{ 0x07C0,	I18N_NOOP("Digits") },
 	{ 0x07CA,	I18N_NOOP("Letters") },
 	{ 0x07E8,	I18N_NOOP("Archaic letters") },
@@ -259,7 +259,7 @@ static const TDEUnicodeData::Subcategory NKo[] = {
 	{ 0x07FE,	I18N_NOOP("Currency symbols") },
 };
 
-static const TDEUnicodeData::Subcategory Samaritan[] = {
+constexpr TDEUnicodeData::Subcategory Samaritan[] = {
 	{ 0x0800,	I18N_NOOP("Letters") },
 	{ 0x0816,	I18N_NOOP("Consonant modifiers") },
 	{ 0x081C,	I18N_NOOP("Vowel signs") },
@@ -267,17 +267,17 @@ static const TDEUnicodeData::Subcategory Samaritan[] = {
 	{ 0x0830,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Mandaic[] = {
+constexpr TDEUnicodeData::Subcategory Mandaic[] = {
 	{ 0x0840,	I18N_NOOP("Letters") },
 	{ 0x0859,	I18N_NOOP("Diacritics") },
 	{ 0x085E,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory SyriacSupplement[] = {
+constexpr TDEUnicodeData::Subcategory SyriacSupplement[] = {
 	{ 0x0860,	I18N_NOOP("Syriac letters") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory ArabicExtendedB[] = {
 	{ 0x0870,	I18N_NOOP("Additions for Quranic orthographies") },
 	{ 0x0889,	I18N_NOOP("Additions for Bosnian orthographies") },
 	{ 0x088B,	I18N_NOOP("Additions for Pegon orthographies") },
@@ -288,7 +288,7 @@ static const TDEUnicodeData::Subcategory ArabicExtendedB[] = {
 	{ 0x0898,	I18N_NOOP("Additions for Quranic orthographies") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory ArabicExtendedA[] = {
 	{ 0x08A0,	I18N_NOOP("Arabic letters for African languages") },
 	{ 0x08AA,	I18N_NOOP("Dependent consonants for Rohingya") },
 	{ 0x08AD,	I18N_NOOP("Arabic letters for European and Central Asian languages") },
@@ -311,7 +311,7 @@ static const TDEUnicodeData::Subcategory ArabicExtendedA[] = {
 	{ 0x08FE,	I18N_NOOP("Extended vowel signs") },
 };
 
-static const TDEUnicodeData::Subcategory Devanagari[] = {
+constexpr TDEUnicodeData::Subcategory Devanagari[] = {
 	{ 0x0900,	I18N_NOOP("Various signs") },
 	{ 0x0904,	I18N_NOOP("Independent vowels") },
 	{ 0x0915,	I18N_NOOP("Consonants") },
@@ -339,7 +339,7 @@ static const TDEUnicodeData::Subcategory Devanagari[] = {
 	{ 0x097E,	I18N_NOOP("Sindhi implosives") },
 };
 
-static const TDEUnicodeData::Subcategory Bengali[] = {
+constexpr TDEUnicodeData::Subcategory Bengali[] = {
 	{ 0x0980,	I18N_NOOP("Various signs") },
 	{ 0x0985,	I18N_NOOP("Independent vowels") },
 	{ 0x0995,	I18N_NOOP("Consonants") },
@@ -361,7 +361,7 @@ static const TDEUnicodeData::Subcategory Bengali[] = {
 	{ 0x09FC,	I18N_NOOP("Signs") },
 };
 
-static const TDEUnicodeData::Subcategory Gurmukhi[] = {
+constexpr TDEUnicodeData::Subcategory Gurmukhi[] = {
 	{ 0x0A01,	I18N_NOOP("Various signs") },
 	{ 0x0A05,	I18N_NOOP("Independent vowels") },
 	{ 0x0A15,	I18N_NOOP("Consonants") },
@@ -377,7 +377,7 @@ static const TDEUnicodeData::Subcategory Gurmukhi[] = {
 	{ 0x0A74,	I18N_NOOP("Signs") },
 };
 
-static const TDEUnicodeData::Subcategory Gujarati[] = {
+constexpr TDEUnicodeData::Subcategory Gujarati[] = {
 	{ 0x0A81,	I18N_NOOP("Various signs") },
 	{ 0x0A85,	I18N_NOOP("Independent vowels") },
 	{ 0x0A95,	I18N_NOOP("Consonants") },
@@ -394,7 +394,7 @@ static const TDEUnicodeData::Subcategory Gujarati[] = {
 	{ 0x0AFA,	I18N_NOOP("Transliteration signs") },
 };
 
-static const TDEUnicodeData::Subcategory Oriya[] = {
+constexpr TDEUnicodeData::Subcategory Oriya[] = {
 	{ 0x0B01,	I18N_NOOP("Various signs") },
 	{ 0x0B05,	I18N_NOOP("Independent vowels") },
 	{ 0x0B15,	I18N_NOOP("Consonants") },
@@ -413,7 +413,7 @@ static const TDEUnicodeData::Subcategory Oriya[] = {
 	{ 0x0B72,	I18N_NOOP("Fraction signs") },
 };
 
-static const TDEUnicodeData::Subcategory Tamil[] = {
+constexpr TDEUnicodeData::Subcategory Tamil[] = {
 	{ 0x0B82,	I18N_NOOP("Various signs") },
 	{ 0x0B85,	I18N_NOOP("Independent vowels") },
 	{ 0x0B95,	I18N_NOOP("Consonants") },
@@ -430,7 +430,7 @@ static const TDEUnicodeData::Subcategory Tamil[] = {
 	{ 0x0BFA,	I18N_NOOP("Tamil clerical symbol") },
 };
 
-static const TDEUnicodeData::Subcategory Telugu[] = {
+constexpr TDEUnicodeData::Subcategory Telugu[] = {
 	{ 0x0C00,	I18N_NOOP("Various signs") },
 	{ 0x0C05,	I18N_NOOP("Independent vowels") },
 	{ 0x0C15,	I18N_NOOP("Consonants") },
@@ -450,7 +450,7 @@ static const TDEUnicodeData::Subcategory Telugu[] = {
 	{ 0x0C78,	I18N_NOOP("Telugu fractions and weights") },
 };
 
-static const TDEUnicodeData::Subcategory Kannada[] = {
+constexpr TDEUnicodeData::Subcategory Kannada[] = {
 	{ 0x0C80,	I18N_NOOP("Various signs") },
 	{ 0x0C85,	I18N_NOOP("Independent vowels") },
 	{ 0x0C95,	I18N_NOOP("Consonants") },
@@ -467,7 +467,7 @@ static const TDEUnicodeData::Subcategory Kannada[] = {
 	{ 0x0CF1,	I18N_NOOP("Signs used in Sanskrit") },
 };
 
-static const TDEUnicodeData::Subcategory Malayalam[] = {
+constexpr TDEUnicodeData::Subcategory Malayalam[] = {
 	{ 0x0D00,	I18N_NOOP("Various signs") },
 	{ 0x0D05,	I18N_NOOP("Independent vowels") },
 	{ 0x0D15,	I18N_NOOP("Consonants") },
@@ -492,7 +492,7 @@ static const TDEUnicodeData::Subcategory Malayalam[] = {
 	{ 0x0D7A,	I18N_NOOP("Chillu letters") },
 };
 
-static const TDEUnicodeData::Subcategory Sinhala[] = {
+constexpr TDEUnicodeData::Subcategory Sinhala[] = {
 	{ 0x0D81,	I18N_NOOP("Various signs") },
 	{ 0x0D85,	I18N_NOOP("Independent vowels") },
 	{ 0x0D9A,	I18N_NOOP("Consonants") },
@@ -505,7 +505,7 @@ static const TDEUnicodeData::Subcategory Sinhala[] = {
 	{ 0x0DF4,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Thai[] = {
+constexpr TDEUnicodeData::Subcategory Thai[] = {
 	{ 0x0E01,	I18N_NOOP("Consonants") },
 	{ 0x0E2F,	I18N_NOOP("Sign") },
 	{ 0x0E30,	I18N_NOOP("Vowels") },
@@ -520,7 +520,7 @@ static const TDEUnicodeData::Subcategory Thai[] = {
 	{ 0x0E5A,	I18N_NOOP("Signs") },
 };
 
-static const TDEUnicodeData::Subcategory Lao[] = {
+constexpr TDEUnicodeData::Subcategory Lao[] = {
 	{ 0x0E81,	I18N_NOOP("Consonants") },
 	{ 0x0EAF,	I18N_NOOP("Sign") },
 	{ 0x0EB0,	I18N_NOOP("Vowels") },
@@ -536,7 +536,7 @@ static const TDEUnicodeData::Subcategory Lao[] = {
 	{ 0x0EDE,	I18N_NOOP("Consonants for Khmu") },
 };
 
-static const TDEUnicodeData::Subcategory Tibetan[] = {
+constexpr TDEUnicodeData::Subcategory Tibetan[] = {
 	{ 0x0F00,	I18N_NOOP("Syllable") },
 	{ 0x0F01,	I18N_NOOP("Head marks") },
 	{ 0x0F08,	I18N_NOOP("Marks and signs") },
@@ -566,7 +566,7 @@ static const TDEUnicodeData::Subcategory Tibetan[] = {
 	{ 0x0FD9,	I18N_NOOP("Annotation marks") },
 };
 
-static const TDEUnicodeData::Subcategory Myanmar[] = {
+constexpr TDEUnicodeData::Subcategory Myanmar[] = {
 	{ 0x1000,	I18N_NOOP("Consonants") },
 	{ 0x1021,	I18N_NOOP("Independent vowels") },
 	{ 0x102B,	I18N_NOOP("Dependent vowel signs") },
@@ -592,7 +592,7 @@ static const TDEUnicodeData::Subcategory Myanmar[] = {
 	{ 0x109E,	I18N_NOOP("Shan symbols") },
 };
 
-static const TDEUnicodeData::Subcategory Georgian[] = {
+constexpr TDEUnicodeData::Subcategory Georgian[] = {
 	{ 0x10A0,	I18N_NOOP("Capital letters (Khutsuri)") },
 	{ 0x10C7,	I18N_NOOP("Additional letter") },
 	{ 0x10CD,	I18N_NOOP("Additional letter for Ossetian") },
@@ -605,7 +605,7 @@ static const TDEUnicodeData::Subcategory Georgian[] = {
 	{ 0x10FD,	I18N_NOOP("Additional letters for Ossetian and Abkhaz") },
 };
 
-static const TDEUnicodeData::Subcategory HangulJamo[] = {
+constexpr TDEUnicodeData::Subcategory HangulJamo[] = {
 	{ 0x1100,	I18N_NOOP("Initial consonants") },
 	{ 0x1113,	I18N_NOOP("Old initial consonants") },
 	{ 0x1160,	I18N_NOOP("Medial vowels") },
@@ -614,7 +614,7 @@ static const TDEUnicodeData::Subcategory HangulJamo[] = {
 	{ 0x11C3,	I18N_NOOP("Old final consonants") },
 };
 
-static const TDEUnicodeData::Subcategory Ethiopic[] = {
+constexpr TDEUnicodeData::Subcategory Ethiopic[] = {
 	{ 0x1200,	I18N_NOOP("Syllables") },
 	{ 0x135D,	I18N_NOOP("Combining marks") },
 	{ 0x1360,	I18N_NOOP("Punctuation") },
@@ -622,19 +622,19 @@ static const TDEUnicodeData::Subcategory Ethiopic[] = {
 	{ 0x1372,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory EthiopicSupplement[] = {
+constexpr TDEUnicodeData::Subcategory EthiopicSupplement[] = {
 	{ 0x1380,	I18N_NOOP("Syllables for Gurage") },
 	{ 0x1390,	I18N_NOOP("Tonal marks") },
 };
 
-static const TDEUnicodeData::Subcategory Cherokee[] = {
+constexpr TDEUnicodeData::Subcategory Cherokee[] = {
 	{ 0x13A0,	I18N_NOOP("Uppercase syllables") },
 	{ 0x13F5,	I18N_NOOP("Archaic uppercase syllable") },
 	{ 0x13F8,	I18N_NOOP("Lowercase syllables") },
 	{ 0x13FD,	I18N_NOOP("Archaic lowercase syllable") },
 };
 
-static const TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabics[] = {
+constexpr TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabics[] = {
 	{ 0x1400,	I18N_NOOP("Punctuation") },
 	{ 0x1401,	I18N_NOOP("Syllables") },
 	{ 0x15C4,	I18N_NOOP("Syllables for Carrier") },
@@ -643,14 +643,14 @@ static const TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabics[] =
 	{ 0x166F,	I18N_NOOP("Syllables") },
 };
 
-static const TDEUnicodeData::Subcategory Ogham[] = {
+constexpr TDEUnicodeData::Subcategory Ogham[] = {
 	{ 0x1680,	I18N_NOOP("Space") },
 	{ 0x1681,	I18N_NOOP("Traditional letters") },
 	{ 0x1695,	I18N_NOOP("Forfeda (supplementary letters)") },
 	{ 0x169B,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Runic[] = {
+constexpr TDEUnicodeData::Subcategory Runic[] = {
 	{ 0x16A0,	I18N_NOOP("Letters") },
 	{ 0x16EB,	I18N_NOOP("Punctuation") },
 	{ 0x16EE,	I18N_NOOP("Golden number runes") },
@@ -658,7 +658,7 @@ static const TDEUnicodeData::Subcategory Runic[] = {
 	{ 0x16F4,	I18N_NOOP("Cryptogrammic letters") },
 };
 
-static const TDEUnicodeData::Subcategory Tagalog[] = {
+constexpr TDEUnicodeData::Subcategory Tagalog[] = {
 	{ 0x1700,	I18N_NOOP("Independent vowels") },
 	{ 0x1703,	I18N_NOOP("Consonants") },
 	{ 0x1712,	I18N_NOOP("Dependent vowel signs") },
@@ -666,7 +666,7 @@ static const TDEUnicodeData::Subcategory Tagalog[] = {
 	{ 0x171F,	I18N_NOOP("Archaic letter") },
 };
 
-static const TDEUnicodeData::Subcategory Hanunoo[] = {
+constexpr TDEUnicodeData::Subcategory Hanunoo[] = {
 	{ 0x1720,	I18N_NOOP("Independent vowels") },
 	{ 0x1723,	I18N_NOOP("Consonants") },
 	{ 0x1732,	I18N_NOOP("Dependent vowel signs") },
@@ -674,19 +674,19 @@ static const TDEUnicodeData::Subcategory Hanunoo[] = {
 	{ 0x1735,	I18N_NOOP("Generic punctuation for Philippine scripts") },
 };
 
-static const TDEUnicodeData::Subcategory Buhid[] = {
+constexpr TDEUnicodeData::Subcategory Buhid[] = {
 	{ 0x1740,	I18N_NOOP("Independent vowels") },
 	{ 0x1743,	I18N_NOOP("Consonants") },
 	{ 0x1752,	I18N_NOOP("Dependent vowel signs") },
 };
 
-static const TDEUnicodeData::Subcategory Tagbanwa[] = {
+constexpr TDEUnicodeData::Subcategory Tagbanwa[] = {
 	{ 0x1760,	I18N_NOOP("Independent vowels") },
 	{ 0x1763,	I18N_NOOP("Consonants") },
 	{ 0x1772,	I18N_NOOP("Dependent vowel signs") },
 };
 
-static const TDEUnicodeData::Subcategory Khmer[] = {
+constexpr TDEUnicodeData::Subcategory Khmer[] = {
 	{ 0x1780,	I18N_NOOP("Consonants") },
 	{ 0x17A3,	I18N_NOOP("Deprecated independent vowels for transliteration") },
 	{ 0x17A5,	I18N_NOOP("Independent vowels") },
@@ -706,7 +706,7 @@ static const TDEUnicodeData::Subcategory Khmer[] = {
 	{ 0x17F0,	I18N_NOOP("Numeric symbols for divination lore") },
 };
 
-static const TDEUnicodeData::Subcategory Mongolian[] = {
+constexpr TDEUnicodeData::Subcategory Mongolian[] = {
 	{ 0x1800,	I18N_NOOP("Punctuation") },
 	{ 0x180B,	I18N_NOOP("Format controls") },
 	{ 0x1810,	I18N_NOOP("Digits") },
@@ -718,7 +718,7 @@ static const TDEUnicodeData::Subcategory Mongolian[] = {
 	{ 0x1880,	I18N_NOOP("Extensions for Sanskrit and Tibetan") },
 };
 
-static const TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabicsExtended[] = {
+constexpr TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabicsExtended[] = {
 	{ 0x18B0,	I18N_NOOP("Syllables for Moose Cree") },
 	{ 0x18C6,	I18N_NOOP("Syllables for Cree and Ojibway") },
 	{ 0x18D4,	I18N_NOOP("Finals for Cree and Ojibway") },
@@ -726,7 +726,7 @@ static const TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabicsExten
 	{ 0x18F3,	I18N_NOOP("Finals for Dene and Carrier") },
 };
 
-static const TDEUnicodeData::Subcategory Limbu[] = {
+constexpr TDEUnicodeData::Subcategory Limbu[] = {
 	{ 0x1900,	I18N_NOOP("Consonants") },
 	{ 0x1920,	I18N_NOOP("Dependent vowel signs") },
 	{ 0x1929,	I18N_NOOP("Subjoined consonants") },
@@ -735,13 +735,13 @@ static const TDEUnicodeData::Subcategory Limbu[] = {
 	{ 0x1946,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory TaiLe[] = {
+constexpr TDEUnicodeData::Subcategory TaiLe[] = {
 	{ 0x1950,	I18N_NOOP("Consonants") },
 	{ 0x1963,	I18N_NOOP("Vowels") },
 	{ 0x1970,	I18N_NOOP("Tone letters") },
 };
 
-static const TDEUnicodeData::Subcategory NewTaiLue[] = {
+constexpr TDEUnicodeData::Subcategory NewTaiLue[] = {
 	{ 0x1980,	I18N_NOOP("Consonants") },
 	{ 0x19B0,	I18N_NOOP("Vowels") },
 	{ 0x19C1,	I18N_NOOP("Final consonants") },
@@ -750,17 +750,17 @@ static const TDEUnicodeData::Subcategory NewTaiLue[] = {
 	{ 0x19DE,	I18N_NOOP("Various signs") },
 };
 
-static const TDEUnicodeData::Subcategory KhmerSymbols[] = {
+constexpr TDEUnicodeData::Subcategory KhmerSymbols[] = {
 	{ 0x19E0,	I18N_NOOP("Lunar date symbols") },
 };
 
-static const TDEUnicodeData::Subcategory Buginese[] = {
+constexpr TDEUnicodeData::Subcategory Buginese[] = {
 	{ 0x1A00,	I18N_NOOP("Consonants") },
 	{ 0x1A17,	I18N_NOOP("Vowels") },
 	{ 0x1A1E,	I18N_NOOP("Various signs") },
 };
 
-static const TDEUnicodeData::Subcategory TaiTham[] = {
+constexpr TDEUnicodeData::Subcategory TaiTham[] = {
 	{ 0x1A20,	I18N_NOOP("Consonants") },
 	{ 0x1A4D,	I18N_NOOP("Independent vowels") },
 	{ 0x1A53,	I18N_NOOP("Consonants") },
@@ -778,7 +778,7 @@ static const TDEUnicodeData::Subcategory TaiTham[] = {
 	{ 0x1AA8,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory CombiningDiacriticalMarksExtended[] = {
+constexpr TDEUnicodeData::Subcategory CombiningDiacriticalMarksExtended[] = {
 	{ 0x1AB0,	I18N_NOOP("Used in German dialectology") },
 	{ 0x1ABB,	I18N_NOOP("Marks surrounding other diacritics or letters") },
 	{ 0x1ABF,	I18N_NOOP("Used in Scots dialectology") },
@@ -793,7 +793,7 @@ static const TDEUnicodeData::Subcategory CombiningDiacriticalMarksExtended[] = {
 	{ 0x1AE8,	I18N_NOOP("Extended IPA positional variants") },
 };
 
-static const TDEUnicodeData::Subcategory Balinese[] = {
+constexpr TDEUnicodeData::Subcategory Balinese[] = {
 	{ 0x1B00,	I18N_NOOP("Various signs") },
 	{ 0x1B05,	I18N_NOOP("Independent vowels") },
 	{ 0x1B13,	I18N_NOOP("Consonants") },
@@ -810,7 +810,7 @@ static const TDEUnicodeData::Subcategory Balinese[] = {
 	{ 0x1B7D,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Sundanese[] = {
+constexpr TDEUnicodeData::Subcategory Sundanese[] = {
 	{ 0x1B80,	I18N_NOOP("Various signs") },
 	{ 0x1B83,	I18N_NOOP("Vowels") },
 	{ 0x1B8A,	I18N_NOOP("Consonants") },
@@ -824,7 +824,7 @@ static const TDEUnicodeData::Subcategory Sundanese[] = {
 	{ 0x1BBB,	I18N_NOOP("Historic letters") },
 };
 
-static const TDEUnicodeData::Subcategory Batak[] = {
+constexpr TDEUnicodeData::Subcategory Batak[] = {
 	{ 0x1BC0,	I18N_NOOP("Letters") },
 	{ 0x1BE6,	I18N_NOOP("Sign") },
 	{ 0x1BE7,	I18N_NOOP("Dependent vowel signs") },
@@ -833,7 +833,7 @@ static const TDEUnicodeData::Subcategory Batak[] = {
 	{ 0x1BFC,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Lepcha[] = {
+constexpr TDEUnicodeData::Subcategory Lepcha[] = {
 	{ 0x1C00,	I18N_NOOP("Consonants") },
 	{ 0x1C24,	I18N_NOOP("Subjoined consonants") },
 	{ 0x1C26,	I18N_NOOP("Dependent vowels") },
@@ -844,19 +844,19 @@ static const TDEUnicodeData::Subcategory Lepcha[] = {
 	{ 0x1C4D,	I18N_NOOP("Additional letters") },
 };
 
-static const TDEUnicodeData::Subcategory OlChiki[] = {
+constexpr TDEUnicodeData::Subcategory OlChiki[] = {
 	{ 0x1C50,	I18N_NOOP("Digits") },
 	{ 0x1C5A,	I18N_NOOP("Letters") },
 	{ 0x1C78,	I18N_NOOP("Modifier letters") },
 	{ 0x1C7E,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory CyrillicExtendedC[] = {
+constexpr TDEUnicodeData::Subcategory CyrillicExtendedC[] = {
 	{ 0x1C80,	I18N_NOOP("Historic letter variants") },
 	{ 0x1C89,	I18N_NOOP("Khanty letters") },
 };
 
-static const TDEUnicodeData::Subcategory GeorgianExtended[] = {
+constexpr TDEUnicodeData::Subcategory GeorgianExtended[] = {
 	{ 0x1C90,	I18N_NOOP("Capital letters (Mtavruli)") },
 	{ 0x1CB1,	I18N_NOOP("Archaic letters") },
 	{ 0x1CB7,	I18N_NOOP("Additional letters for Mingrelian and Svan") },
@@ -864,11 +864,11 @@ static const TDEUnicodeData::Subcategory GeorgianExtended[] = {
 	{ 0x1CBD,	I18N_NOOP("Additional letters for Ossetian and Abkhaz") },
 };
 
-static const TDEUnicodeData::Subcategory SundaneseSupplement[] = {
+constexpr TDEUnicodeData::Subcategory SundaneseSupplement[] = {
 	{ 0x1CC0,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory VedicExtensions[] = {
+constexpr TDEUnicodeData::Subcategory VedicExtensions[] = {
 	{ 0x1CD0,	I18N_NOOP("Tone marks for the Samaveda") },
 	{ 0x1CD3,	I18N_NOOP("Breathing mark for the Samaveda") },
 	{ 0x1CD4,	I18N_NOOP("Signs for Yajurvedic") },
@@ -884,7 +884,7 @@ static const TDEUnicodeData::Subcategory VedicExtensions[] = {
 	{ 0x1CFA,	I18N_NOOP("Nasalization sign") },
 };
 
-static const TDEUnicodeData::Subcategory PhoneticExtensions[] = {
+constexpr TDEUnicodeData::Subcategory PhoneticExtensions[] = {
 	{ 0x1D00,	I18N_NOOP("Latin letters") },
 	{ 0x1D26,	I18N_NOOP("Greek letters") },
 	{ 0x1D2B,	I18N_NOOP("Cyrillic letter") },
@@ -898,13 +898,13 @@ static const TDEUnicodeData::Subcategory PhoneticExtensions[] = {
 	{ 0x1D79,	I18N_NOOP("Other phonetic symbols") },
 };
 
-static const TDEUnicodeData::Subcategory PhoneticExtensionsSupplement[] = {
+constexpr TDEUnicodeData::Subcategory PhoneticExtensionsSupplement[] = {
 	{ 0x1D80,	I18N_NOOP("Latin letters with palatal hook") },
 	{ 0x1D8F,	I18N_NOOP("Latin letters with retroflex hook") },
 	{ 0x1D9B,	I18N_NOOP("Modifier letters") },
 };
 
-static const TDEUnicodeData::Subcategory CombiningDiacriticalMarksSupplement[] = {
+constexpr TDEUnicodeData::Subcategory CombiningDiacriticalMarksSupplement[] = {
 	{ 0x1DC0,	I18N_NOOP("Used for Ancient Greek") },
 	{ 0x1DC2,	I18N_NOOP("Miscellaneous marks") },
 	{ 0x1DC4,	I18N_NOOP("Contour tone marks") },
@@ -922,7 +922,7 @@ static const TDEUnicodeData::Subcategory CombiningDiacriticalMarksSupplement[] =
 	{ 0x1DFE,	I18N_NOOP("Additional marks for UPA") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedAdditional[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedAdditional[] = {
 	{ 0x1E00,	I18N_NOOP("Latin general use extensions") },
 	{ 0x1E9C,	I18N_NOOP("Medievalist additions") },
 	{ 0x1E9E,	I18N_NOOP("Addition for German typography") },
@@ -932,11 +932,11 @@ static const TDEUnicodeData::Subcategory LatinExtendedAdditional[] = {
 	{ 0x1EFA,	I18N_NOOP("Medievalist additions") },
 };
 
-static const TDEUnicodeData::Subcategory GreekExtended[] = {
+constexpr TDEUnicodeData::Subcategory GreekExtended[] = {
 	{ 0x1F00,	I18N_NOOP("Precomposed polytonic Greek") },
 };
 
-static const TDEUnicodeData::Subcategory GeneralPunctuation[] = {
+constexpr TDEUnicodeData::Subcategory GeneralPunctuation[] = {
 	{ 0x2000,	I18N_NOOP("Spaces") },
 	{ 0x200B,	I18N_NOOP("Format characters") },
 	{ 0x2010,	I18N_NOOP("Dashes") },
@@ -964,17 +964,17 @@ static const TDEUnicodeData::Subcategory GeneralPunctuation[] = {
 	{ 0x206A,	I18N_NOOP("Deprecated") },
 };
 
-static const TDEUnicodeData::Subcategory SuperscriptsandSubscripts[] = {
+constexpr TDEUnicodeData::Subcategory SuperscriptsandSubscripts[] = {
 	{ 0x2070,	I18N_NOOP("Superscripts") },
 	{ 0x2080,	I18N_NOOP("Subscripts") },
 	{ 0x2095,	I18N_NOOP("Subscripts for UPA") },
 };
 
-static const TDEUnicodeData::Subcategory CurrencySymbols[] = {
+constexpr TDEUnicodeData::Subcategory CurrencySymbols[] = {
 	{ 0x20A0,	I18N_NOOP("Currency symbols") },
 };
 
-static const TDEUnicodeData::Subcategory CombiningDiacriticalMarksforSymbols[] = {
+constexpr TDEUnicodeData::Subcategory CombiningDiacriticalMarksforSymbols[] = {
 	{ 0x20D0,	I18N_NOOP("Combining diacritical marks for symbols") },
 	{ 0x20DD,	I18N_NOOP("Enclosing diacritics") },
 	{ 0x20E1,	I18N_NOOP("Additional diacritical mark for symbols") },
@@ -982,7 +982,7 @@ static const TDEUnicodeData::Subcategory CombiningDiacriticalMarksforSymbols[] =
 	{ 0x20E5,	I18N_NOOP("Additional diacritical marks for symbols") },
 };
 
-static const TDEUnicodeData::Subcategory LetterlikeSymbols[] = {
+constexpr TDEUnicodeData::Subcategory LetterlikeSymbols[] = {
 	{ 0x2100,	I18N_NOOP("Letterlike symbols") },
 	{ 0x2135,	I18N_NOOP("Hebrew letterlike math symbols") },
 	{ 0x2139,	I18N_NOOP("Additional letterlike symbols") },
@@ -994,7 +994,7 @@ static const TDEUnicodeData::Subcategory LetterlikeSymbols[] = {
 	{ 0x214F,	I18N_NOOP("Biblical editorial symbol") },
 };
 
-static const TDEUnicodeData::Subcategory NumberForms[] = {
+constexpr TDEUnicodeData::Subcategory NumberForms[] = {
 	{ 0x2150,	I18N_NOOP("Fractions") },
 	{ 0x2160,	I18N_NOOP("Roman numerals") },
 	{ 0x2180,	I18N_NOOP("Archaic Roman numerals") },
@@ -1004,7 +1004,7 @@ static const TDEUnicodeData::Subcategory NumberForms[] = {
 	{ 0x218A,	I18N_NOOP("Turned digits") },
 };
 
-static const TDEUnicodeData::Subcategory Arrows[] = {
+constexpr TDEUnicodeData::Subcategory Arrows[] = {
 	{ 0x2190,	I18N_NOOP("Simple arrows") },
 	{ 0x219A,	I18N_NOOP("Arrows with modifications") },
 	{ 0x21B0,	I18N_NOOP("Arrows with bent tips") },
@@ -1017,7 +1017,7 @@ static const TDEUnicodeData::Subcategory Arrows[] = {
 	{ 0x21F4,	I18N_NOOP("Miscellaneous arrows") },
 };
 
-static const TDEUnicodeData::Subcategory MathematicalOperators[] = {
+constexpr TDEUnicodeData::Subcategory MathematicalOperators[] = {
 	{ 0x2200,	I18N_NOOP("Miscellaneous mathematical symbols") },
 	{ 0x2208,	I18N_NOOP("Set membership") },
 	{ 0x220E,	I18N_NOOP("Miscellaneous mathematical symbol") },
@@ -1057,7 +1057,7 @@ static const TDEUnicodeData::Subcategory MathematicalOperators[] = {
 	{ 0x22F2,	I18N_NOOP("Relations") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousTechnical[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousTechnical[] = {
 	{ 0x2300,	I18N_NOOP("Miscellaneous technical") },
 	{ 0x2308,	I18N_NOOP("Ceilings and floors") },
 	{ 0x230C,	I18N_NOOP("Crops") },
@@ -1102,7 +1102,7 @@ static const TDEUnicodeData::Subcategory MiscellaneousTechnical[] = {
 	{ 0x23FF,	I18N_NOOP("Miscellaneous symbol") },
 };
 
-static const TDEUnicodeData::Subcategory ControlPictures[] = {
+constexpr TDEUnicodeData::Subcategory ControlPictures[] = {
 	{ 0x2400,	I18N_NOOP("Graphic pictures for control codes") },
 	{ 0x2422,	I18N_NOOP("Specific symbols for space") },
 	{ 0x2424,	I18N_NOOP("Graphic picture for control code") },
@@ -1111,13 +1111,13 @@ static const TDEUnicodeData::Subcategory ControlPictures[] = {
 	{ 0x2427,	I18N_NOOP("Legacy computer symbols for delete") },
 };
 
-static const TDEUnicodeData::Subcategory OpticalCharacterRecognition[] = {
+constexpr TDEUnicodeData::Subcategory OpticalCharacterRecognition[] = {
 	{ 0x2440,	I18N_NOOP("OCR-A") },
 	{ 0x2446,	I18N_NOOP("MICR") },
 	{ 0x244A,	I18N_NOOP("OCR") },
 };
 
-static const TDEUnicodeData::Subcategory EnclosedAlphanumerics[] = {
+constexpr TDEUnicodeData::Subcategory EnclosedAlphanumerics[] = {
 	{ 0x2460,	I18N_NOOP("Circled numbers") },
 	{ 0x2474,	I18N_NOOP("Parenthesized numbers") },
 	{ 0x2488,	I18N_NOOP("Numbers period") },
@@ -1129,7 +1129,7 @@ static const TDEUnicodeData::Subcategory EnclosedAlphanumerics[] = {
 	{ 0x24FF,	I18N_NOOP("Additional white on black circled number") },
 };
 
-static const TDEUnicodeData::Subcategory BoxDrawing[] = {
+constexpr TDEUnicodeData::Subcategory BoxDrawing[] = {
 	{ 0x2500,	I18N_NOOP("Light and heavy solid lines") },
 	{ 0x2504,	I18N_NOOP("Light and heavy dashed lines") },
 	{ 0x250C,	I18N_NOOP("Light and heavy line box components") },
@@ -1142,20 +1142,20 @@ static const TDEUnicodeData::Subcategory BoxDrawing[] = {
 	{ 0x257C,	I18N_NOOP("Mixed light and heavy lines") },
 };
 
-static const TDEUnicodeData::Subcategory BlockElements[] = {
+constexpr TDEUnicodeData::Subcategory BlockElements[] = {
 	{ 0x2580,	I18N_NOOP("Block elements") },
 	{ 0x2591,	I18N_NOOP("Shade characters") },
 	{ 0x2594,	I18N_NOOP("Block elements") },
 	{ 0x2596,	I18N_NOOP("Terminal graphic characters") },
 };
 
-static const TDEUnicodeData::Subcategory GeometricShapes[] = {
+constexpr TDEUnicodeData::Subcategory GeometricShapes[] = {
 	{ 0x25A0,	I18N_NOOP("Geometric shapes") },
 	{ 0x25F0,	I18N_NOOP("Control code graphics") },
 	{ 0x25F8,	I18N_NOOP("Geometric shapes") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousSymbols[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousSymbols[] = {
 	{ 0x2600,	I18N_NOOP("Weather and astrological symbols") },
 	{ 0x260E,	I18N_NOOP("Miscellaneous symbols") },
 	{ 0x2614,	I18N_NOOP("Weather symbol") },
@@ -1206,7 +1206,7 @@ static const TDEUnicodeData::Subcategory MiscellaneousSymbols[] = {
 	{ 0x26E8,	I18N_NOOP("Map symbols from ARIB STD B24") },
 };
 
-static const TDEUnicodeData::Subcategory Dingbats[] = {
+constexpr TDEUnicodeData::Subcategory Dingbats[] = {
 	{ 0x2700,	I18N_NOOP("Miscellaneous") },
 	{ 0x2719,	I18N_NOOP("Crosses") },
 	{ 0x2721,	I18N_NOOP("Stars and asterisks") },
@@ -1225,7 +1225,7 @@ static const TDEUnicodeData::Subcategory Dingbats[] = {
 	{ 0x27BF,	I18N_NOOP("Miscellaneous") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousMathematicalSymbolsA[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousMathematicalSymbolsA[] = {
 	{ 0x27C0,	I18N_NOOP("Miscellaneous symbols") },
 	{ 0x27C5,	I18N_NOOP("Paired punctuation") },
 	{ 0x27C7,	I18N_NOOP("Operator") },
@@ -1243,16 +1243,16 @@ static const TDEUnicodeData::Subcategory MiscellaneousMathematicalSymbolsA[] = {
 	{ 0x27E6,	I18N_NOOP("Mathematical brackets") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementalArrowsA[] = {
+constexpr TDEUnicodeData::Subcategory SupplementalArrowsA[] = {
 	{ 0x27F0,	I18N_NOOP("Arrows") },
 	{ 0x27F5,	I18N_NOOP("Long arrows") },
 };
 
-static const TDEUnicodeData::Subcategory BraillePatterns[] = {
+constexpr TDEUnicodeData::Subcategory BraillePatterns[] = {
 	{ 0x2800,	I18N_NOOP("Braille patterns") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementalArrowsB[] = {
+constexpr TDEUnicodeData::Subcategory SupplementalArrowsB[] = {
 	{ 0x2900,	I18N_NOOP("Miscellaneous arrows") },
 	{ 0x2919,	I18N_NOOP("Arrow tails") },
 	{ 0x291D,	I18N_NOOP("Miscellaneous arrows") },
@@ -1267,7 +1267,7 @@ static const TDEUnicodeData::Subcategory SupplementalArrowsB[] = {
 	{ 0x297C,	I18N_NOOP("Fish tails") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousMathematicalSymbolsB[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousMathematicalSymbolsB[] = {
 	{ 0x2980,	I18N_NOOP("Miscellaneous mathematical symbols") },
 	{ 0x2983,	I18N_NOOP("Brackets") },
 	{ 0x298D,	I18N_NOOP("Brackets with ticks") },
@@ -1291,7 +1291,7 @@ static const TDEUnicodeData::Subcategory MiscellaneousMathematicalSymbolsB[] = {
 	{ 0x29FE,	I18N_NOOP("Symbols used in game theory") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementalMathematicalOperators[] = {
+constexpr TDEUnicodeData::Subcategory SupplementalMathematicalOperators[] = {
 	{ 0x2A00,	I18N_NOOP("N-ary operators") },
 	{ 0x2A0A,	I18N_NOOP("Summations and integrals") },
 	{ 0x2A1D,	I18N_NOOP("Miscellaneous large operators") },
@@ -1311,7 +1311,7 @@ static const TDEUnicodeData::Subcategory SupplementalMathematicalOperators[] = {
 	{ 0x2AFC,	I18N_NOOP("Operators") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousSymbolsandArrows[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousSymbolsandArrows[] = {
 	{ 0x2B00,	I18N_NOOP("White and black arrows") },
 	{ 0x2B0E,	I18N_NOOP("Arrows with bent tips") },
 	{ 0x2B12,	I18N_NOOP("Squares") },
@@ -1363,12 +1363,12 @@ static const TDEUnicodeData::Subcategory MiscellaneousSymbolsandArrows[] = {
 	{ 0x2BFF,	I18N_NOOP("Miscellaneous symbol") },
 };
 
-static const TDEUnicodeData::Subcategory Glagolitic[] = {
+constexpr TDEUnicodeData::Subcategory Glagolitic[] = {
 	{ 0x2C00,	I18N_NOOP("Capital letters") },
 	{ 0x2C30,	I18N_NOOP("Small letters") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedC[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedC[] = {
 	{ 0x2C60,	I18N_NOOP("Orthographic Latin additions") },
 	{ 0x2C67,	I18N_NOOP("Additions for Uyghur") },
 	{ 0x2C6D,	I18N_NOOP("Miscellaneous additions") },
@@ -1377,7 +1377,7 @@ static const TDEUnicodeData::Subcategory LatinExtendedC[] = {
 	{ 0x2C7E,	I18N_NOOP("Additions for Shona") },
 };
 
-static const TDEUnicodeData::Subcategory Coptic[] = {
+constexpr TDEUnicodeData::Subcategory Coptic[] = {
 	{ 0x2C80,	I18N_NOOP("Bohairic Coptic letters") },
 	{ 0x2CB2,	I18N_NOOP("Old Coptic and dialect letters") },
 	{ 0x2CDC,	I18N_NOOP("Old Nubian letters") },
@@ -1390,31 +1390,31 @@ static const TDEUnicodeData::Subcategory Coptic[] = {
 	{ 0x2CFE,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory GeorgianSupplement[] = {
+constexpr TDEUnicodeData::Subcategory GeorgianSupplement[] = {
 	{ 0x2D00,	I18N_NOOP("Small letters (Khutsuri)") },
 	{ 0x2D27,	I18N_NOOP("Additional letter") },
 	{ 0x2D2D,	I18N_NOOP("Additional letter for Ossetian") },
 };
 
-static const TDEUnicodeData::Subcategory Tifinagh[] = {
+constexpr TDEUnicodeData::Subcategory Tifinagh[] = {
 	{ 0x2D30,	I18N_NOOP("Letters") },
 	{ 0x2D6F,	I18N_NOOP("Modifier letter") },
 	{ 0x2D70,	I18N_NOOP("Punctuation") },
 	{ 0x2D7F,	I18N_NOOP("Sign") },
 };
 
-static const TDEUnicodeData::Subcategory EthiopicExtended[] = {
+constexpr TDEUnicodeData::Subcategory EthiopicExtended[] = {
 	{ 0x2D80,	I18N_NOOP("Syllables for Me'en") },
 	{ 0x2D93,	I18N_NOOP("Syllables for Blin") },
 	{ 0x2DA0,	I18N_NOOP("Syllables for Bench") },
 	{ 0x2DC0,	I18N_NOOP("Syllables for Gurage") },
 };
 
-static const TDEUnicodeData::Subcategory CyrillicExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory CyrillicExtendedA[] = {
 	{ 0x2DE0,	I18N_NOOP("Old Church Slavonic combining letters") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementalPunctuation[] = {
+constexpr TDEUnicodeData::Subcategory SupplementalPunctuation[] = {
 	{ 0x2E00,	I18N_NOOP("New Testament editorial symbols") },
 	{ 0x2E0E,	I18N_NOOP("Ancient Greek textual symbols") },
 	{ 0x2E17,	I18N_NOOP("Ancient Near-Eastern linguistic symbol") },
@@ -1442,19 +1442,19 @@ static const TDEUnicodeData::Subcategory SupplementalPunctuation[] = {
 	{ 0x2E5D,	I18N_NOOP("Oblique hyphen") },
 };
 
-static const TDEUnicodeData::Subcategory CJKRadicalsSupplement[] = {
+constexpr TDEUnicodeData::Subcategory CJKRadicalsSupplement[] = {
 	{ 0x2E80,	I18N_NOOP("CJK radicals supplement") },
 };
 
-static const TDEUnicodeData::Subcategory KangxiRadicals[] = {
+constexpr TDEUnicodeData::Subcategory KangxiRadicals[] = {
 	{ 0x2F00,	I18N_NOOP("Kangxi radicals") },
 };
 
-static const TDEUnicodeData::Subcategory IdeographicDescriptionCharacters[] = {
+constexpr TDEUnicodeData::Subcategory IdeographicDescriptionCharacters[] = {
 	{ 0x2FF0,	I18N_NOOP("Ideographic description characters") },
 };
 
-static const TDEUnicodeData::Subcategory CJKSymbolsandPunctuation[] = {
+constexpr TDEUnicodeData::Subcategory CJKSymbolsandPunctuation[] = {
 	{ 0x3000,	I18N_NOOP("CJK symbols and punctuation") },
 	{ 0x3008,	I18N_NOOP("CJK angle brackets") },
 	{ 0x300C,	I18N_NOOP("CJK corner brackets") },
@@ -1473,7 +1473,7 @@ static const TDEUnicodeData::Subcategory CJKSymbolsandPunctuation[] = {
 	{ 0x303E,	I18N_NOOP("Special CJK indicators") },
 };
 
-static const TDEUnicodeData::Subcategory Hiragana[] = {
+constexpr TDEUnicodeData::Subcategory Hiragana[] = {
 	{ 0x3041,	I18N_NOOP("Hiragana letters") },
 	{ 0x3095,	I18N_NOOP("Small letters") },
 	{ 0x3099,	I18N_NOOP("Voicing marks") },
@@ -1481,7 +1481,7 @@ static const TDEUnicodeData::Subcategory Hiragana[] = {
 	{ 0x309F,	I18N_NOOP("Hiragana digraph") },
 };
 
-static const TDEUnicodeData::Subcategory Katakana[] = {
+constexpr TDEUnicodeData::Subcategory Katakana[] = {
 	{ 0x30A0,	I18N_NOOP("Katakana punctuation") },
 	{ 0x30A1,	I18N_NOOP("Katakana letters") },
 	{ 0x30FB,	I18N_NOOP("Conjunction and length marks") },
@@ -1489,13 +1489,13 @@ static const TDEUnicodeData::Subcategory Katakana[] = {
 	{ 0x30FF,	I18N_NOOP("Katakana digraph") },
 };
 
-static const TDEUnicodeData::Subcategory Bopomofo[] = {
+constexpr TDEUnicodeData::Subcategory Bopomofo[] = {
 	{ 0x3105,	I18N_NOOP("Based on GB 2312") },
 	{ 0x312A,	I18N_NOOP("Dialect (non-Mandarin) letters") },
 	{ 0x312D,	I18N_NOOP("Miscellaneous additions") },
 };
 
-static const TDEUnicodeData::Subcategory HangulCompatibilityJamo[] = {
+constexpr TDEUnicodeData::Subcategory HangulCompatibilityJamo[] = {
 	{ 0x3131,	I18N_NOOP("Consonant letters") },
 	{ 0x314F,	I18N_NOOP("Vowel letters") },
 	{ 0x3164,	I18N_NOOP("Special character") },
@@ -1503,28 +1503,28 @@ static const TDEUnicodeData::Subcategory HangulCompatibilityJamo[] = {
 	{ 0x3187,	I18N_NOOP("Old vowel letters") },
 };
 
-static const TDEUnicodeData::Subcategory Kanbun[] = {
+constexpr TDEUnicodeData::Subcategory Kanbun[] = {
 	{ 0x3190,	I18N_NOOP("Tateten") },
 	{ 0x3191,	I18N_NOOP("Kaeriten") },
 };
 
-static const TDEUnicodeData::Subcategory BopomofoExtended[] = {
+constexpr TDEUnicodeData::Subcategory BopomofoExtended[] = {
 	{ 0x31A0,	I18N_NOOP("Extended Bopomofo for Minnan and Hakka") },
 	{ 0x31B8,	I18N_NOOP("Extended Bopomofo for Hmu and Ge") },
 	{ 0x31BB,	I18N_NOOP("Extended Bopomofo for Minnan and Hakka") },
 	{ 0x31BC,	I18N_NOOP("Extended Bopomofo for Cantonese") },
 };
 
-static const TDEUnicodeData::Subcategory CJKStrokes[] = {
+constexpr TDEUnicodeData::Subcategory CJKStrokes[] = {
 	{ 0x31C0,	I18N_NOOP("CJK strokes") },
 	{ 0x31EF,	I18N_NOOP("Ideographic description character") },
 };
 
-static const TDEUnicodeData::Subcategory KatakanaPhoneticExtensions[] = {
+constexpr TDEUnicodeData::Subcategory KatakanaPhoneticExtensions[] = {
 	{ 0x31F0,	I18N_NOOP("Phonetic extensions for Ainu") },
 };
 
-static const TDEUnicodeData::Subcategory EnclosedCJKLettersandMonths[] = {
+constexpr TDEUnicodeData::Subcategory EnclosedCJKLettersandMonths[] = {
 	{ 0x3200,	I18N_NOOP("Parenthesized Hangul letters") },
 	{ 0x320E,	I18N_NOOP("Parenthesized Hangul syllables") },
 	{ 0x321D,	I18N_NOOP("Parenthesized Korean words") },
@@ -1546,7 +1546,7 @@ static const TDEUnicodeData::Subcategory EnclosedCJKLettersandMonths[] = {
 	{ 0x32FF,	I18N_NOOP("Japanese era name") },
 };
 
-static const TDEUnicodeData::Subcategory CJKCompatibility[] = {
+constexpr TDEUnicodeData::Subcategory CJKCompatibility[] = {
 	{ 0x3300,	I18N_NOOP("Squared Katakana words") },
 	{ 0x3358,	I18N_NOOP("Telegraph symbols for hours") },
 	{ 0x3371,	I18N_NOOP("Squared Latin abbreviations") },
@@ -1559,34 +1559,34 @@ static const TDEUnicodeData::Subcategory CJKCompatibility[] = {
 	{ 0x33FF,	I18N_NOOP("Squared Latin abbreviation") },
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionA[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionA[] = {
 };
 
-static const TDEUnicodeData::Subcategory YijingHexagramSymbols[] = {
+constexpr TDEUnicodeData::Subcategory YijingHexagramSymbols[] = {
 	{ 0x4DC0,	I18N_NOOP("Yijing hexagram symbols") },
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographs[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographs[] = {
 };
 
-static const TDEUnicodeData::Subcategory YiSyllables[] = {
+constexpr TDEUnicodeData::Subcategory YiSyllables[] = {
 	{ 0xA000,	I18N_NOOP("Syllables") },
 	{ 0xA015,	I18N_NOOP("Syllable iteration mark") },
 	{ 0xA016,	I18N_NOOP("Syllables") },
 };
 
-static const TDEUnicodeData::Subcategory YiRadicals[] = {
+constexpr TDEUnicodeData::Subcategory YiRadicals[] = {
 	{ 0xA490,	I18N_NOOP("Yi radicals") },
 };
 
-static const TDEUnicodeData::Subcategory Lisu[] = {
+constexpr TDEUnicodeData::Subcategory Lisu[] = {
 	{ 0xA4D0,	I18N_NOOP("Consonants") },
 	{ 0xA4EE,	I18N_NOOP("Vowels") },
 	{ 0xA4F8,	I18N_NOOP("Tones") },
 	{ 0xA4FE,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Vai[] = {
+constexpr TDEUnicodeData::Subcategory Vai[] = {
 	{ 0xA500,	I18N_NOOP("Syllables in -ee") },
 	{ 0xA524,	I18N_NOOP("Syllables in -i") },
 	{ 0xA549,	I18N_NOOP("Syllables in -a") },
@@ -1602,7 +1602,7 @@ static const TDEUnicodeData::Subcategory Vai[] = {
 	{ 0xA62A,	I18N_NOOP("Historic syllables") },
 };
 
-static const TDEUnicodeData::Subcategory CyrillicExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory CyrillicExtendedB[] = {
 	{ 0xA640,	I18N_NOOP("Letters for Old Cyrillic") },
 	{ 0xA66F,	I18N_NOOP("Abbreviation mark") },
 	{ 0xA670,	I18N_NOOP("Combining numeric signs") },
@@ -1616,13 +1616,13 @@ static const TDEUnicodeData::Subcategory CyrillicExtendedB[] = {
 	{ 0xA69E,	I18N_NOOP("Combining marks for Old Cyrillic") },
 };
 
-static const TDEUnicodeData::Subcategory Bamum[] = {
+constexpr TDEUnicodeData::Subcategory Bamum[] = {
 	{ 0xA6A0,	I18N_NOOP("Syllables") },
 	{ 0xA6F0,	I18N_NOOP("Combining marks") },
 	{ 0xA6F2,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory ModifierToneLetters[] = {
+constexpr TDEUnicodeData::Subcategory ModifierToneLetters[] = {
 	{ 0xA700,	I18N_NOOP("Corner tone marks for Chinese") },
 	{ 0xA708,	I18N_NOOP("Dotted tone letters") },
 	{ 0xA712,	I18N_NOOP("Left-stem tone letters") },
@@ -1630,7 +1630,7 @@ static const TDEUnicodeData::Subcategory ModifierToneLetters[] = {
 	{ 0xA71B,	I18N_NOOP("Africanist tone letters") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedD[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedD[] = {
 	{ 0xA720,	I18N_NOOP("Additions for UPA") },
 	{ 0xA722,	I18N_NOOP("Egyptological additions") },
 	{ 0xA726,	I18N_NOOP("Mayanist additions") },
@@ -1673,7 +1673,7 @@ static const TDEUnicodeData::Subcategory LatinExtendedD[] = {
 	{ 0xA7FB,	I18N_NOOP("Ancient Roman epigraphic letters") },
 };
 
-static const TDEUnicodeData::Subcategory SylotiNagri[] = {
+constexpr TDEUnicodeData::Subcategory SylotiNagri[] = {
 	{ 0xA800,	I18N_NOOP("Independent vowels and dvisvara") },
 	{ 0xA806,	I18N_NOOP("Sign") },
 	{ 0xA807,	I18N_NOOP("Consonants and consonant signs") },
@@ -1682,14 +1682,14 @@ static const TDEUnicodeData::Subcategory SylotiNagri[] = {
 	{ 0xA82C,	I18N_NOOP("Sign") },
 };
 
-static const TDEUnicodeData::Subcategory CommonIndicNumberForms[] = {
+constexpr TDEUnicodeData::Subcategory CommonIndicNumberForms[] = {
 	{ 0xA830,	I18N_NOOP("Number forms") },
 	{ 0xA837,	I18N_NOOP("Miscellaneous sign") },
 	{ 0xA838,	I18N_NOOP("Currency symbol") },
 	{ 0xA839,	I18N_NOOP("Miscellaneous sign") },
 };
 
-static const TDEUnicodeData::Subcategory Phagspa[] = {
+constexpr TDEUnicodeData::Subcategory Phagspa[] = {
 	{ 0xA840,	I18N_NOOP("Consonants") },
 	{ 0xA85D,	I18N_NOOP("Letter A") },
 	{ 0xA85E,	I18N_NOOP("Vowels") },
@@ -1705,7 +1705,7 @@ static const TDEUnicodeData::Subcategory Phagspa[] = {
 	{ 0xA876,	I18N_NOOP("Punctuation for Tibetan") },
 };
 
-static const TDEUnicodeData::Subcategory Saurashtra[] = {
+constexpr TDEUnicodeData::Subcategory Saurashtra[] = {
 	{ 0xA880,	I18N_NOOP("Various signs") },
 	{ 0xA882,	I18N_NOOP("Independent vowels") },
 	{ 0xA892,	I18N_NOOP("Consonants") },
@@ -1716,7 +1716,7 @@ static const TDEUnicodeData::Subcategory Saurashtra[] = {
 	{ 0xA8D0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory DevanagariExtended[] = {
+constexpr TDEUnicodeData::Subcategory DevanagariExtended[] = {
 	{ 0xA8E0,	I18N_NOOP("Cantillation marks (svara) for the Samaveda") },
 	{ 0xA8F2,	I18N_NOOP("Marks of nasalization") },
 	{ 0xA8F8,	I18N_NOOP("Editorial marks") },
@@ -1724,7 +1724,7 @@ static const TDEUnicodeData::Subcategory DevanagariExtended[] = {
 	{ 0xA8FE,	I18N_NOOP("Additional vowel and vowel sign") },
 };
 
-static const TDEUnicodeData::Subcategory KayahLi[] = {
+constexpr TDEUnicodeData::Subcategory KayahLi[] = {
 	{ 0xA900,	I18N_NOOP("Digits") },
 	{ 0xA90A,	I18N_NOOP("Consonants") },
 	{ 0xA922,	I18N_NOOP("Vowels") },
@@ -1732,7 +1732,7 @@ static const TDEUnicodeData::Subcategory KayahLi[] = {
 	{ 0xA92E,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Rejang[] = {
+constexpr TDEUnicodeData::Subcategory Rejang[] = {
 	{ 0xA930,	I18N_NOOP("Consonants") },
 	{ 0xA947,	I18N_NOOP("Vowel signs") },
 	{ 0xA94F,	I18N_NOOP("Consonant signs") },
@@ -1740,11 +1740,11 @@ static const TDEUnicodeData::Subcategory Rejang[] = {
 	{ 0xA95F,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory HangulJamoExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory HangulJamoExtendedA[] = {
 	{ 0xA960,	I18N_NOOP("Old initial consonants") },
 };
 
-static const TDEUnicodeData::Subcategory Javanese[] = {
+constexpr TDEUnicodeData::Subcategory Javanese[] = {
 	{ 0xA980,	I18N_NOOP("Various signs") },
 	{ 0xA984,	I18N_NOOP("Letters") },
 	{ 0xA9B3,	I18N_NOOP("Sign") },
@@ -1757,7 +1757,7 @@ static const TDEUnicodeData::Subcategory Javanese[] = {
 	{ 0xA9DE,	I18N_NOOP("Ellipsis marks") },
 };
 
-static const TDEUnicodeData::Subcategory MyanmarExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory MyanmarExtendedB[] = {
 	{ 0xA9E0,	I18N_NOOP("Additions for Shan Pali") },
 	{ 0xA9E6,	I18N_NOOP("Reduplication mark") },
 	{ 0xA9E7,	I18N_NOOP("Tai Laing consonants") },
@@ -1765,7 +1765,7 @@ static const TDEUnicodeData::Subcategory MyanmarExtendedB[] = {
 	{ 0xA9FA,	I18N_NOOP("Tai Laing consonants") },
 };
 
-static const TDEUnicodeData::Subcategory Cham[] = {
+constexpr TDEUnicodeData::Subcategory Cham[] = {
 	{ 0xAA00,	I18N_NOOP("Independent vowels") },
 	{ 0xAA06,	I18N_NOOP("Consonants") },
 	{ 0xAA29,	I18N_NOOP("Dependent vowel signs") },
@@ -1775,7 +1775,7 @@ static const TDEUnicodeData::Subcategory Cham[] = {
 	{ 0xAA5C,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory MyanmarExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory MyanmarExtendedA[] = {
 	{ 0xAA60,	I18N_NOOP("Khamti Shan consonants") },
 	{ 0xAA74,	I18N_NOOP("Khamti Shan logograms") },
 	{ 0xAA77,	I18N_NOOP("Aiton symbols and letters") },
@@ -1784,7 +1784,7 @@ static const TDEUnicodeData::Subcategory MyanmarExtendedA[] = {
 	{ 0xAA7E,	I18N_NOOP("Shwe Palaung letters") },
 };
 
-static const TDEUnicodeData::Subcategory TaiViet[] = {
+constexpr TDEUnicodeData::Subcategory TaiViet[] = {
 	{ 0xAA80,	I18N_NOOP("Consonants") },
 	{ 0xAAB0,	I18N_NOOP("Vowels and finals") },
 	{ 0xAABF,	I18N_NOOP("Tones") },
@@ -1793,7 +1793,7 @@ static const TDEUnicodeData::Subcategory TaiViet[] = {
 	{ 0xAADE,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory MeeteiMayekExtensions[] = {
+constexpr TDEUnicodeData::Subcategory MeeteiMayekExtensions[] = {
 	{ 0xAAE0,	I18N_NOOP("Independent vowel signs") },
 	{ 0xAAE2,	I18N_NOOP("Consonants") },
 	{ 0xAAEB,	I18N_NOOP("Dependent vowel signs") },
@@ -1804,13 +1804,13 @@ static const TDEUnicodeData::Subcategory MeeteiMayekExtensions[] = {
 	{ 0xAAF6,	I18N_NOOP("Virama") },
 };
 
-static const TDEUnicodeData::Subcategory EthiopicExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory EthiopicExtendedA[] = {
 	{ 0xAB01,	I18N_NOOP("Gamo-Gofa-Dawro and Basketo") },
 	{ 0xAB11,	I18N_NOOP("Gamo-Gofa-Dawro") },
 	{ 0xAB20,	I18N_NOOP("Gumuz") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedE[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedE[] = {
 	{ 0xAB30,	I18N_NOOP("Letters for German dialectology") },
 	{ 0xAB5B,	I18N_NOOP("Modifier letters for German dialectology") },
 	{ 0xAB60,	I18N_NOOP("Historic letters for Sakha (Yakut)") },
@@ -1819,11 +1819,11 @@ static const TDEUnicodeData::Subcategory LatinExtendedE[] = {
 	{ 0xAB68,	I18N_NOOP("Letters for Scots dialectology") },
 };
 
-static const TDEUnicodeData::Subcategory CherokeeSupplement[] = {
+constexpr TDEUnicodeData::Subcategory CherokeeSupplement[] = {
 	{ 0xAB70,	I18N_NOOP("Lowercase syllables") },
 };
 
-static const TDEUnicodeData::Subcategory MeeteiMayek[] = {
+constexpr TDEUnicodeData::Subcategory MeeteiMayek[] = {
 	{ 0xABC0,	I18N_NOOP("Letters") },
 	{ 0xABDB,	I18N_NOOP("Final consonants") },
 	{ 0xABE3,	I18N_NOOP("Dependent vowel signs") },
@@ -1831,27 +1831,27 @@ static const TDEUnicodeData::Subcategory MeeteiMayek[] = {
 	{ 0xABF0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory HangulSyllables[] = {
+constexpr TDEUnicodeData::Subcategory HangulSyllables[] = {
 };
 
-static const TDEUnicodeData::Subcategory HangulJamoExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory HangulJamoExtendedB[] = {
 	{ 0xD7B0,	I18N_NOOP("Old medial vowels") },
 	{ 0xD7CB,	I18N_NOOP("Old final consonants") },
 };
 
-static const TDEUnicodeData::Subcategory HighSurrogates[] = {
+constexpr TDEUnicodeData::Subcategory HighSurrogates[] = {
 };
 
-static const TDEUnicodeData::Subcategory HighPrivateUseSurrogates[] = {
+constexpr TDEUnicodeData::Subcategory HighPrivateUseSurrogates[] = {
 };
 
-static const TDEUnicodeData::Subcategory LowSurrogates[] = {
+constexpr TDEUnicodeData::Subcategory LowSurrogates[] = {
 };
 
-static const TDEUnicodeData::Subcategory PrivateUseArea[] = {
+constexpr TDEUnicodeData::Subcategory PrivateUseArea[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKCompatibilityIdeographs[] = {
+constexpr TDEUnicodeData::Subcategory CJKCompatibilityIdeographs[] = {
 	{ 0xF900,	I18N_NOOP("Pronunciation variants from KS X 1001:1998") },
 	{ 0xFA0C,	I18N_NOOP("Duplicate characters from Big 5") },
 	{ 0xFA0E,	I18N_NOOP("The IBM 32 compatibility ideographs") },
@@ -1861,13 +1861,13 @@ static const TDEUnicodeData::Subcategory CJKCompatibilityIdeographs[] = {
 	{ 0xFA70,	I18N_NOOP("DPRK compatibility ideographs") },
 };
 
-static const TDEUnicodeData::Subcategory AlphabeticPresentationForms[] = {
+constexpr TDEUnicodeData::Subcategory AlphabeticPresentationForms[] = {
 	{ 0xFB00,	I18N_NOOP("Latin ligatures") },
 	{ 0xFB13,	I18N_NOOP("Armenian ligatures") },
 	{ 0xFB1D,	I18N_NOOP("Hebrew presentation forms") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicPresentationFormsA[] = {
+constexpr TDEUnicodeData::Subcategory ArabicPresentationFormsA[] = {
 	{ 0xFB50,	I18N_NOOP("Glyphs for contextual forms of letters for Persian, Urdu, Sindhi, etc.") },
 	{ 0xFBB2,	I18N_NOOP("Arabic pedagogical symbols") },
 	{ 0xFBC3,	I18N_NOOP("Honorific word ligatures") },
@@ -1885,34 +1885,34 @@ static const TDEUnicodeData::Subcategory ArabicPresentationFormsA[] = {
 	{ 0xFDFD,	I18N_NOOP("Honorific word ligatures") },
 };
 
-static const TDEUnicodeData::Subcategory VariationSelectors[] = {
+constexpr TDEUnicodeData::Subcategory VariationSelectors[] = {
 	{ 0xFE00,	I18N_NOOP("Variation selectors") },
 	{ 0xFE0E,	I18N_NOOP("Emoji-specific variation selectors") },
 };
 
-static const TDEUnicodeData::Subcategory VerticalForms[] = {
+constexpr TDEUnicodeData::Subcategory VerticalForms[] = {
 	{ 0xFE10,	I18N_NOOP("Glyphs for vertical variants") },
 };
 
-static const TDEUnicodeData::Subcategory CombiningHalfMarks[] = {
+constexpr TDEUnicodeData::Subcategory CombiningHalfMarks[] = {
 	{ 0xFE20,	I18N_NOOP("Combining half marks") },
 	{ 0xFE24,	I18N_NOOP("Continuous macrons for Coptic") },
 	{ 0xFE27,	I18N_NOOP("Combining half marks below") },
 	{ 0xFE2E,	I18N_NOOP("Combining half marks") },
 };
 
-static const TDEUnicodeData::Subcategory CJKCompatibilityForms[] = {
+constexpr TDEUnicodeData::Subcategory CJKCompatibilityForms[] = {
 	{ 0xFE30,	I18N_NOOP("Glyphs for vertical variants") },
 	{ 0xFE45,	I18N_NOOP("Sidelining emphasis marks") },
 	{ 0xFE47,	I18N_NOOP("Glyphs for vertical variants") },
 	{ 0xFE49,	I18N_NOOP("Overscores and underscores") },
 };
 
-static const TDEUnicodeData::Subcategory SmallFormVariants[] = {
+constexpr TDEUnicodeData::Subcategory SmallFormVariants[] = {
 	{ 0xFE50,	I18N_NOOP("Small form variants") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicPresentationFormsB[] = {
+constexpr TDEUnicodeData::Subcategory ArabicPresentationFormsB[] = {
 	{ 0xFE70,	I18N_NOOP("Glyphs for spacing forms of Arabic points") },
 	{ 0xFE73,	I18N_NOOP("Glyph part") },
 	{ 0xFE74,	I18N_NOOP("Glyphs for spacing forms of Arabic points") },
@@ -1920,7 +1920,7 @@ static const TDEUnicodeData::Subcategory ArabicPresentationFormsB[] = {
 	{ 0xFEFF,	I18N_NOOP("Special") },
 };
 
-static const TDEUnicodeData::Subcategory HalfwidthandFullwidthForms[] = {
+constexpr TDEUnicodeData::Subcategory HalfwidthandFullwidthForms[] = {
 	{ 0xFF01,	I18N_NOOP("Fullwidth ASCII variants") },
 	{ 0xFF5F,	I18N_NOOP("Fullwidth brackets") },
 	{ 0xFF61,	I18N_NOOP("Halfwidth CJK punctuation") },
@@ -1930,19 +1930,19 @@ static const TDEUnicodeData::Subcategory HalfwidthandFullwidthForms[] = {
 	{ 0xFFE8,	I18N_NOOP("Halfwidth symbol variants") },
 };
 
-static const TDEUnicodeData::Subcategory Specials[] = {
+constexpr TDEUnicodeData::Subcategory Specials[] = {
 	{ 0xFFF9,	I18N_NOOP("Interlinear annotation") },
 	{ 0xFFFC,	I18N_NOOP("Replacement characters") },
 	{ 0xFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory LinearBSyllabary[] = {
+constexpr TDEUnicodeData::Subcategory LinearBSyllabary[] = {
 	{ 0x10000,	I18N_NOOP("Basic syllables") },
 	{ 0x10040,	I18N_NOOP("Supplementary signs") },
 	{ 0x10050,	I18N_NOOP("Symbols") },
 };
 
-static const TDEUnicodeData::Subcategory LinearBIdeograms[] = {
+constexpr TDEUnicodeData::Subcategory LinearBIdeograms[] = {
 	{ 0x10080,	I18N_NOOP("People and animals") },
 	{ 0x1008E,	I18N_NOOP("Cereals and plants") },
 	{ 0x10095,	I18N_NOOP("Extracts") },
@@ -1951,45 +1951,45 @@ static const TDEUnicodeData::Subcategory LinearBIdeograms[] = {
 	{ 0x100DE,	I18N_NOOP("Vessels") },
 };
 
-static const TDEUnicodeData::Subcategory AegeanNumbers[] = {
+constexpr TDEUnicodeData::Subcategory AegeanNumbers[] = {
 	{ 0x10100,	I18N_NOOP("Punctuation") },
 	{ 0x10107,	I18N_NOOP("Numbers") },
 	{ 0x10137,	I18N_NOOP("Measures") },
 };
 
-static const TDEUnicodeData::Subcategory AncientGreekNumbers[] = {
+constexpr TDEUnicodeData::Subcategory AncientGreekNumbers[] = {
 	{ 0x10140,	I18N_NOOP("Ancient Greek acrophonic numerals") },
 	{ 0x10175,	I18N_NOOP("Ancient Greek papyrological numbers") },
 	{ 0x1018C,	I18N_NOOP("Ancient Greek symbols") },
 };
 
-static const TDEUnicodeData::Subcategory AncientSymbols[] = {
+constexpr TDEUnicodeData::Subcategory AncientSymbols[] = {
 	{ 0x10190,	I18N_NOOP("Roman weights and measures") },
 	{ 0x10196,	I18N_NOOP("Roman coin symbols") },
 	{ 0x1019B,	I18N_NOOP("Other Roman epigraphic symbols") },
 	{ 0x101A0,	I18N_NOOP("Greek symbol") },
 };
 
-static const TDEUnicodeData::Subcategory PhaistosDisc[] = {
+constexpr TDEUnicodeData::Subcategory PhaistosDisc[] = {
 	{ 0x101D0,	I18N_NOOP("Signs") },
 	{ 0x101FD,	I18N_NOOP("Combining stroke") },
 };
 
-static const TDEUnicodeData::Subcategory Lycian[] = {
+constexpr TDEUnicodeData::Subcategory Lycian[] = {
 	{ 0x10280,	I18N_NOOP("Letters") },
 };
 
-static const TDEUnicodeData::Subcategory Carian[] = {
+constexpr TDEUnicodeData::Subcategory Carian[] = {
 	{ 0x102A0,	I18N_NOOP("Letters") },
 };
 
-static const TDEUnicodeData::Subcategory CopticEpactNumbers[] = {
+constexpr TDEUnicodeData::Subcategory CopticEpactNumbers[] = {
 	{ 0x102E0,	I18N_NOOP("Sign") },
 	{ 0x102E1,	I18N_NOOP("Digits") },
 	{ 0x102EA,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory OldItalic[] = {
+constexpr TDEUnicodeData::Subcategory OldItalic[] = {
 	{ 0x10300,	I18N_NOOP("Letters") },
 	{ 0x1031B,	I18N_NOOP("Umbrian letters") },
 	{ 0x1031D,	I18N_NOOP("Oscan letters") },
@@ -1998,21 +1998,21 @@ static const TDEUnicodeData::Subcategory OldItalic[] = {
 	{ 0x1032D,	I18N_NOOP("North Italic letters") },
 };
 
-static const TDEUnicodeData::Subcategory Gothic[] = {
+constexpr TDEUnicodeData::Subcategory Gothic[] = {
 	{ 0x10330,	I18N_NOOP("Letters") },
 };
 
-static const TDEUnicodeData::Subcategory OldPermic[] = {
+constexpr TDEUnicodeData::Subcategory OldPermic[] = {
 	{ 0x10350,	I18N_NOOP("Letters") },
 	{ 0x10376,	I18N_NOOP("Combining letters") },
 };
 
-static const TDEUnicodeData::Subcategory Ugaritic[] = {
+constexpr TDEUnicodeData::Subcategory Ugaritic[] = {
 	{ 0x10380,	I18N_NOOP("Letters") },
 	{ 0x1039F,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory OldPersian[] = {
+constexpr TDEUnicodeData::Subcategory OldPersian[] = {
 	{ 0x103A0,	I18N_NOOP("Independent vowels") },
 	{ 0x103A3,	I18N_NOOP("Consonants") },
 	{ 0x103C8,	I18N_NOOP("Various signs") },
@@ -2020,45 +2020,45 @@ static const TDEUnicodeData::Subcategory OldPersian[] = {
 	{ 0x103D1,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Deseret[] = {
+constexpr TDEUnicodeData::Subcategory Deseret[] = {
 	{ 0x10400,	I18N_NOOP("Uppercase letters") },
 	{ 0x10428,	I18N_NOOP("Lowercase letters") },
 };
 
-static const TDEUnicodeData::Subcategory Shavian[] = {
+constexpr TDEUnicodeData::Subcategory Shavian[] = {
 	{ 0x10450,	I18N_NOOP("Tall and deep letters (consonants)") },
 	{ 0x10464,	I18N_NOOP("Short letters") },
 	{ 0x10478,	I18N_NOOP("Ligatures") },
 };
 
-static const TDEUnicodeData::Subcategory Osmanya[] = {
+constexpr TDEUnicodeData::Subcategory Osmanya[] = {
 	{ 0x10480,	I18N_NOOP("Letters") },
 	{ 0x104A0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Osage[] = {
+constexpr TDEUnicodeData::Subcategory Osage[] = {
 	{ 0x104B0,	I18N_NOOP("Uppercase letters") },
 	{ 0x104D8,	I18N_NOOP("Lowercase letters") },
 };
 
-static const TDEUnicodeData::Subcategory Elbasan[] = {
+constexpr TDEUnicodeData::Subcategory Elbasan[] = {
 	{ 0x10500,	I18N_NOOP("Letters") },
 };
 
-static const TDEUnicodeData::Subcategory CaucasianAlbanian[] = {
+constexpr TDEUnicodeData::Subcategory CaucasianAlbanian[] = {
 	{ 0x10530,	I18N_NOOP("Letters") },
 	{ 0x1056F,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Vithkuqi[] = {
+constexpr TDEUnicodeData::Subcategory Vithkuqi[] = {
 	{ 0x10570,	I18N_NOOP("Capital letters") },
 	{ 0x10597,	I18N_NOOP("Small letters") },
 };
 
-static const TDEUnicodeData::Subcategory Todhri[] = {
+constexpr TDEUnicodeData::Subcategory Todhri[] = {
 };
 
-static const TDEUnicodeData::Subcategory LinearA[] = {
+constexpr TDEUnicodeData::Subcategory LinearA[] = {
 	{ 0x10600,	I18N_NOOP("Simple signs") },
 	{ 0x106A0,	I18N_NOOP("Vase shapes") },
 	{ 0x106B3,	I18N_NOOP("Complex signs") },
@@ -2067,60 +2067,60 @@ static const TDEUnicodeData::Subcategory LinearA[] = {
 	{ 0x10760,	I18N_NOOP("Additional signs") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedF[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedF[] = {
 	{ 0x10780,	I18N_NOOP("Modifier letter for VoQS") },
 	{ 0x10781,	I18N_NOOP("Modifier letters for IPA") },
 };
 
-static const TDEUnicodeData::Subcategory CypriotSyllabary[] = {
+constexpr TDEUnicodeData::Subcategory CypriotSyllabary[] = {
 	{ 0x10800,	I18N_NOOP("Syllables") },
 };
 
-static const TDEUnicodeData::Subcategory ImperialAramaic[] = {
+constexpr TDEUnicodeData::Subcategory ImperialAramaic[] = {
 	{ 0x10840,	I18N_NOOP("Letters") },
 	{ 0x10857,	I18N_NOOP("Punctuation") },
 	{ 0x10858,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Palmyrene[] = {
+constexpr TDEUnicodeData::Subcategory Palmyrene[] = {
 	{ 0x10860,	I18N_NOOP("Letters") },
 	{ 0x10877,	I18N_NOOP("Symbols") },
 	{ 0x10879,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Nabataean[] = {
+constexpr TDEUnicodeData::Subcategory Nabataean[] = {
 	{ 0x10880,	I18N_NOOP("Letters") },
 	{ 0x108A7,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Hatran[] = {
+constexpr TDEUnicodeData::Subcategory Hatran[] = {
 	{ 0x108E0,	I18N_NOOP("Letters") },
 	{ 0x108FB,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Phoenician[] = {
+constexpr TDEUnicodeData::Subcategory Phoenician[] = {
 	{ 0x10900,	I18N_NOOP("Letters") },
 	{ 0x10916,	I18N_NOOP("Numbers") },
 	{ 0x1091F,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Lydian[] = {
+constexpr TDEUnicodeData::Subcategory Lydian[] = {
 	{ 0x10920,	I18N_NOOP("Letters") },
 	{ 0x1093F,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Sidetic[] = {
+constexpr TDEUnicodeData::Subcategory Sidetic[] = {
 	{ 0x10940,	I18N_NOOP("Vowel and semivowel letters") },
 	{ 0x10947,	I18N_NOOP("Consonant letters") },
 };
 
-static const TDEUnicodeData::Subcategory MeroiticHieroglyphs[] = {
+constexpr TDEUnicodeData::Subcategory MeroiticHieroglyphs[] = {
 	{ 0x10980,	I18N_NOOP("Vowel letters") },
 	{ 0x10984,	I18N_NOOP("Consonant letters") },
 	{ 0x1099E,	I18N_NOOP("Symbols") },
 };
 
-static const TDEUnicodeData::Subcategory MeroiticCursive[] = {
+constexpr TDEUnicodeData::Subcategory MeroiticCursive[] = {
 	{ 0x109A0,	I18N_NOOP("Vowel letters") },
 	{ 0x109A4,	I18N_NOOP("Consonant letters") },
 	{ 0x109BC,	I18N_NOOP("Fractions") },
@@ -2134,7 +2134,7 @@ static const TDEUnicodeData::Subcategory MeroiticCursive[] = {
 	{ 0x109F6,	I18N_NOOP("Fractions") },
 };
 
-static const TDEUnicodeData::Subcategory Kharoshthi[] = {
+constexpr TDEUnicodeData::Subcategory Kharoshthi[] = {
 	{ 0x10A00,	I18N_NOOP("Vowels") },
 	{ 0x10A0C,	I18N_NOOP("Length mark") },
 	{ 0x10A0D,	I18N_NOOP("Various signs") },
@@ -2146,17 +2146,17 @@ static const TDEUnicodeData::Subcategory Kharoshthi[] = {
 	{ 0x10A50,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory OldSouthArabian[] = {
+constexpr TDEUnicodeData::Subcategory OldSouthArabian[] = {
 	{ 0x10A60,	I18N_NOOP("Letters") },
 	{ 0x10A7D,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory OldNorthArabian[] = {
+constexpr TDEUnicodeData::Subcategory OldNorthArabian[] = {
 	{ 0x10A80,	I18N_NOOP("Letters") },
 	{ 0x10A9D,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Manichaean[] = {
+constexpr TDEUnicodeData::Subcategory Manichaean[] = {
 	{ 0x10AC0,	I18N_NOOP("Letters") },
 	{ 0x10AC8,	I18N_NOOP("Logogram") },
 	{ 0x10AC9,	I18N_NOOP("Letters") },
@@ -2165,40 +2165,40 @@ static const TDEUnicodeData::Subcategory Manichaean[] = {
 	{ 0x10AF0,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Avestan[] = {
+constexpr TDEUnicodeData::Subcategory Avestan[] = {
 	{ 0x10B00,	I18N_NOOP("Vowels") },
 	{ 0x10B10,	I18N_NOOP("Consonants") },
 	{ 0x10B39,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory InscriptionalParthian[] = {
+constexpr TDEUnicodeData::Subcategory InscriptionalParthian[] = {
 	{ 0x10B40,	I18N_NOOP("Letters") },
 	{ 0x10B58,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory InscriptionalPahlavi[] = {
+constexpr TDEUnicodeData::Subcategory InscriptionalPahlavi[] = {
 	{ 0x10B60,	I18N_NOOP("Letters") },
 	{ 0x10B78,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory PsalterPahlavi[] = {
+constexpr TDEUnicodeData::Subcategory PsalterPahlavi[] = {
 	{ 0x10B80,	I18N_NOOP("Letters") },
 	{ 0x10B99,	I18N_NOOP("Punctuation") },
 	{ 0x10BA9,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory OldTurkic[] = {
+constexpr TDEUnicodeData::Subcategory OldTurkic[] = {
 	{ 0x10C00,	I18N_NOOP("Vowels") },
 	{ 0x10C09,	I18N_NOOP("Consonants") },
 };
 
-static const TDEUnicodeData::Subcategory OldHungarian[] = {
+constexpr TDEUnicodeData::Subcategory OldHungarian[] = {
 	{ 0x10C80,	I18N_NOOP("Uppercase letters") },
 	{ 0x10CC0,	I18N_NOOP("Lowercase letters") },
 	{ 0x10CFA,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory HanifiRohingya[] = {
+constexpr TDEUnicodeData::Subcategory HanifiRohingya[] = {
 	{ 0x10D00,	I18N_NOOP("Letters") },
 	{ 0x10D1C,	I18N_NOOP("Additional letter") },
 	{ 0x10D1D,	I18N_NOOP("Vowels") },
@@ -2209,7 +2209,7 @@ static const TDEUnicodeData::Subcategory HanifiRohingya[] = {
 	{ 0x10D30,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Garay[] = {
+constexpr TDEUnicodeData::Subcategory Garay[] = {
 	{ 0x10D40,	I18N_NOOP("Digits") },
 	{ 0x10D4A,	I18N_NOOP("Vowel signs") },
 	{ 0x10D4E,	I18N_NOOP("Vowel modifiers") },
@@ -2221,20 +2221,20 @@ static const TDEUnicodeData::Subcategory Garay[] = {
 	{ 0x10D8E,	I18N_NOOP("Mathematical symbols") },
 };
 
-static const TDEUnicodeData::Subcategory RumiNumeralSymbols[] = {
+constexpr TDEUnicodeData::Subcategory RumiNumeralSymbols[] = {
 	{ 0x10E60,	I18N_NOOP("Digits") },
 	{ 0x10E69,	I18N_NOOP("Numbers") },
 	{ 0x10E7B,	I18N_NOOP("Fractions") },
 };
 
-static const TDEUnicodeData::Subcategory Yezidi[] = {
+constexpr TDEUnicodeData::Subcategory Yezidi[] = {
 	{ 0x10E80,	I18N_NOOP("Letters") },
 	{ 0x10EAB,	I18N_NOOP("Combining marks") },
 	{ 0x10EAD,	I18N_NOOP("Punctuation") },
 	{ 0x10EB0,	I18N_NOOP("Historical letters with diacritics") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicExtendedC[] = {
+constexpr TDEUnicodeData::Subcategory ArabicExtendedC[] = {
 	{ 0x10EC2,	I18N_NOOP("Letters for Pegon") },
 	{ 0x10EC5,	I18N_NOOP("Quranic letter used in Indonesia") },
 	{ 0x10EC6,	I18N_NOOP("Quranic letter used in Warsh orthography") },
@@ -2247,13 +2247,13 @@ static const TDEUnicodeData::Subcategory ArabicExtendedC[] = {
 	{ 0x10EFD,	I18N_NOOP("Quranic marks used in Turkey") },
 };
 
-static const TDEUnicodeData::Subcategory OldSogdian[] = {
+constexpr TDEUnicodeData::Subcategory OldSogdian[] = {
 	{ 0x10F00,	I18N_NOOP("Letters") },
 	{ 0x10F1D,	I18N_NOOP("Numbers") },
 	{ 0x10F27,	I18N_NOOP("Ligature") },
 };
 
-static const TDEUnicodeData::Subcategory Sogdian[] = {
+constexpr TDEUnicodeData::Subcategory Sogdian[] = {
 	{ 0x10F30,	I18N_NOOP("Letters") },
 	{ 0x10F45,	I18N_NOOP("Phonogram") },
 	{ 0x10F46,	I18N_NOOP("Combining marks") },
@@ -2261,23 +2261,23 @@ static const TDEUnicodeData::Subcategory Sogdian[] = {
 	{ 0x10F55,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory OldUyghur[] = {
+constexpr TDEUnicodeData::Subcategory OldUyghur[] = {
 	{ 0x10F70,	I18N_NOOP("Letters") },
 	{ 0x10F82,	I18N_NOOP("Combining signs") },
 	{ 0x10F86,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Chorasmian[] = {
+constexpr TDEUnicodeData::Subcategory Chorasmian[] = {
 	{ 0x10FB0,	I18N_NOOP("Letters") },
 	{ 0x10FC5,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Elymaic[] = {
+constexpr TDEUnicodeData::Subcategory Elymaic[] = {
 	{ 0x10FE0,	I18N_NOOP("Letters") },
 	{ 0x10FF6,	I18N_NOOP("Ligature") },
 };
 
-static const TDEUnicodeData::Subcategory Brahmi[] = {
+constexpr TDEUnicodeData::Subcategory Brahmi[] = {
 	{ 0x11000,	I18N_NOOP("Various signs") },
 	{ 0x11005,	I18N_NOOP("Independent vowels") },
 	{ 0x11013,	I18N_NOOP("Consonants") },
@@ -2293,7 +2293,7 @@ static const TDEUnicodeData::Subcategory Brahmi[] = {
 	{ 0x1107F,	I18N_NOOP("Number joiner") },
 };
 
-static const TDEUnicodeData::Subcategory Kaithi[] = {
+constexpr TDEUnicodeData::Subcategory Kaithi[] = {
 	{ 0x11080,	I18N_NOOP("Various signs") },
 	{ 0x11083,	I18N_NOOP("Independent vowels") },
 	{ 0x1108D,	I18N_NOOP("Consonants") },
@@ -2305,14 +2305,14 @@ static const TDEUnicodeData::Subcategory Kaithi[] = {
 	{ 0x110CD,	I18N_NOOP("Sign") },
 };
 
-static const TDEUnicodeData::Subcategory SoraSompeng[] = {
+constexpr TDEUnicodeData::Subcategory SoraSompeng[] = {
 	{ 0x110D0,	I18N_NOOP("Consonants") },
 	{ 0x110E2,	I18N_NOOP("Vowels") },
 	{ 0x110E8,	I18N_NOOP("Other letter") },
 	{ 0x110F0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Chakma[] = {
+constexpr TDEUnicodeData::Subcategory Chakma[] = {
 	{ 0x11100,	I18N_NOOP("Various signs") },
 	{ 0x11103,	I18N_NOOP("Independent vowels") },
 	{ 0x11107,	I18N_NOOP("Consonants") },
@@ -2325,7 +2325,7 @@ static const TDEUnicodeData::Subcategory Chakma[] = {
 	{ 0x11147,	I18N_NOOP("Consonant") },
 };
 
-static const TDEUnicodeData::Subcategory Mahajani[] = {
+constexpr TDEUnicodeData::Subcategory Mahajani[] = {
 	{ 0x11150,	I18N_NOOP("Vowels") },
 	{ 0x11155,	I18N_NOOP("Consonants") },
 	{ 0x11173,	I18N_NOOP("Sign") },
@@ -2333,7 +2333,7 @@ static const TDEUnicodeData::Subcategory Mahajani[] = {
 	{ 0x11176,	I18N_NOOP("Word ligature") },
 };
 
-static const TDEUnicodeData::Subcategory Sharada[] = {
+constexpr TDEUnicodeData::Subcategory Sharada[] = {
 	{ 0x11180,	I18N_NOOP("Various signs") },
 	{ 0x11183,	I18N_NOOP("Independent vowels") },
 	{ 0x11191,	I18N_NOOP("Consonants") },
@@ -2351,12 +2351,12 @@ static const TDEUnicodeData::Subcategory Sharada[] = {
 	{ 0x111DE,	I18N_NOOP("Section marks") },
 };
 
-static const TDEUnicodeData::Subcategory SinhalaArchaicNumbers[] = {
+constexpr TDEUnicodeData::Subcategory SinhalaArchaicNumbers[] = {
 	{ 0x111E1,	I18N_NOOP("Historical digits") },
 	{ 0x111EA,	I18N_NOOP("Historical numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Khojki[] = {
+constexpr TDEUnicodeData::Subcategory Khojki[] = {
 	{ 0x11200,	I18N_NOOP("Independent vowels") },
 	{ 0x11208,	I18N_NOOP("Consonants") },
 	{ 0x1122C,	I18N_NOOP("Dependent vowel signs") },
@@ -2368,13 +2368,13 @@ static const TDEUnicodeData::Subcategory Khojki[] = {
 	{ 0x11241,	I18N_NOOP("Dependent vowel sign") },
 };
 
-static const TDEUnicodeData::Subcategory Multani[] = {
+constexpr TDEUnicodeData::Subcategory Multani[] = {
 	{ 0x11280,	I18N_NOOP("Vowels") },
 	{ 0x11284,	I18N_NOOP("Consonants") },
 	{ 0x112A9,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Khudawadi[] = {
+constexpr TDEUnicodeData::Subcategory Khudawadi[] = {
 	{ 0x112B0,	I18N_NOOP("Independent vowels") },
 	{ 0x112BA,	I18N_NOOP("Consonants") },
 	{ 0x112DF,	I18N_NOOP("Sign") },
@@ -2383,7 +2383,7 @@ static const TDEUnicodeData::Subcategory Khudawadi[] = {
 	{ 0x112F0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Grantha[] = {
+constexpr TDEUnicodeData::Subcategory Grantha[] = {
 	{ 0x11300,	I18N_NOOP("Various signs") },
 	{ 0x11305,	I18N_NOOP("Independent vowels") },
 	{ 0x11315,	I18N_NOOP("Consonants") },
@@ -2400,7 +2400,7 @@ static const TDEUnicodeData::Subcategory Grantha[] = {
 	{ 0x11366,	I18N_NOOP("Cantillation marks (svara) for the Samaveda") },
 };
 
-static const TDEUnicodeData::Subcategory TuluTigalari[] = {
+constexpr TDEUnicodeData::Subcategory TuluTigalari[] = {
 	{ 0x11380,	I18N_NOOP("Independent vowels") },
 	{ 0x11392,	I18N_NOOP("Consonants") },
 	{ 0x113B7,	I18N_NOOP("Avagraha") },
@@ -2411,7 +2411,7 @@ static const TDEUnicodeData::Subcategory TuluTigalari[] = {
 	{ 0x113E1,	I18N_NOOP("Vedic tone marks") },
 };
 
-static const TDEUnicodeData::Subcategory Newa[] = {
+constexpr TDEUnicodeData::Subcategory Newa[] = {
 	{ 0x11400,	I18N_NOOP("Independent vowels") },
 	{ 0x1140E,	I18N_NOOP("Consonants") },
 	{ 0x11435,	I18N_NOOP("Dependent vowel signs") },
@@ -2423,7 +2423,7 @@ static const TDEUnicodeData::Subcategory Newa[] = {
 	{ 0x1145B,	I18N_NOOP("Various signs") },
 };
 
-static const TDEUnicodeData::Subcategory Tirhuta[] = {
+constexpr TDEUnicodeData::Subcategory Tirhuta[] = {
 	{ 0x11480,	I18N_NOOP("Sign") },
 	{ 0x11481,	I18N_NOOP("Independent vowels") },
 	{ 0x1148F,	I18N_NOOP("Consonants") },
@@ -2432,7 +2432,7 @@ static const TDEUnicodeData::Subcategory Tirhuta[] = {
 	{ 0x114D0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Siddham[] = {
+constexpr TDEUnicodeData::Subcategory Siddham[] = {
 	{ 0x11580,	I18N_NOOP("Independent vowels") },
 	{ 0x1158E,	I18N_NOOP("Consonants") },
 	{ 0x115AF,	I18N_NOOP("Dependent vowel signs") },
@@ -2446,7 +2446,7 @@ static const TDEUnicodeData::Subcategory Siddham[] = {
 	{ 0x115DC,	I18N_NOOP("Alternate vowel signs") },
 };
 
-static const TDEUnicodeData::Subcategory Modi[] = {
+constexpr TDEUnicodeData::Subcategory Modi[] = {
 	{ 0x11600,	I18N_NOOP("Independent vowels") },
 	{ 0x1160E,	I18N_NOOP("Consonants") },
 	{ 0x11630,	I18N_NOOP("Dependent vowel signs") },
@@ -2456,11 +2456,11 @@ static const TDEUnicodeData::Subcategory Modi[] = {
 	{ 0x11650,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory MongolianSupplement[] = {
+constexpr TDEUnicodeData::Subcategory MongolianSupplement[] = {
 	{ 0x11660,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Takri[] = {
+constexpr TDEUnicodeData::Subcategory Takri[] = {
 	{ 0x11680,	I18N_NOOP("Independent vowels") },
 	{ 0x1168A,	I18N_NOOP("Consonants") },
 	{ 0x116AB,	I18N_NOOP("Various signs") },
@@ -2472,12 +2472,12 @@ static const TDEUnicodeData::Subcategory Takri[] = {
 	{ 0x116C0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory MyanmarExtendedC[] = {
+constexpr TDEUnicodeData::Subcategory MyanmarExtendedC[] = {
 	{ 0x116D0,	I18N_NOOP("Pao digits") },
 	{ 0x116DA,	I18N_NOOP("Eastern Pwo Karen digits") },
 };
 
-static const TDEUnicodeData::Subcategory Ahom[] = {
+constexpr TDEUnicodeData::Subcategory Ahom[] = {
 	{ 0x11700,	I18N_NOOP("Consonants") },
 	{ 0x1171D,	I18N_NOOP("Medials") },
 	{ 0x11720,	I18N_NOOP("Vowel signs") },
@@ -2487,7 +2487,7 @@ static const TDEUnicodeData::Subcategory Ahom[] = {
 	{ 0x11740,	I18N_NOOP("Additional consonants") },
 };
 
-static const TDEUnicodeData::Subcategory Dogra[] = {
+constexpr TDEUnicodeData::Subcategory Dogra[] = {
 	{ 0x11800,	I18N_NOOP("Independent vowels") },
 	{ 0x1180A,	I18N_NOOP("Consonants") },
 	{ 0x1182C,	I18N_NOOP("Dependent vowel signs") },
@@ -2495,7 +2495,7 @@ static const TDEUnicodeData::Subcategory Dogra[] = {
 	{ 0x1183B,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory WarangCiti[] = {
+constexpr TDEUnicodeData::Subcategory WarangCiti[] = {
 	{ 0x118A0,	I18N_NOOP("Uppercase vowels") },
 	{ 0x118AA,	I18N_NOOP("Uppercase consonants") },
 	{ 0x118C0,	I18N_NOOP("Lowercase vowels") },
@@ -2505,7 +2505,7 @@ static const TDEUnicodeData::Subcategory WarangCiti[] = {
 	{ 0x118FF,	I18N_NOOP("Sign") },
 };
 
-static const TDEUnicodeData::Subcategory DivesAkuru[] = {
+constexpr TDEUnicodeData::Subcategory DivesAkuru[] = {
 	{ 0x11900,	I18N_NOOP("Independent vowels") },
 	{ 0x1190C,	I18N_NOOP("Consonants") },
 	{ 0x11930,	I18N_NOOP("Dependent vowel signs") },
@@ -2517,7 +2517,7 @@ static const TDEUnicodeData::Subcategory DivesAkuru[] = {
 	{ 0x11950,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Nandinagari[] = {
+constexpr TDEUnicodeData::Subcategory Nandinagari[] = {
 	{ 0x119A0,	I18N_NOOP("Independent vowels") },
 	{ 0x119AE,	I18N_NOOP("Consonants") },
 	{ 0x119D1,	I18N_NOOP("Dependent vowel signs") },
@@ -2526,7 +2526,7 @@ static const TDEUnicodeData::Subcategory Nandinagari[] = {
 	{ 0x119E4,	I18N_NOOP("Dependent vowel sign") },
 };
 
-static const TDEUnicodeData::Subcategory ZanabazarSquare[] = {
+constexpr TDEUnicodeData::Subcategory ZanabazarSquare[] = {
 	{ 0x11A00,	I18N_NOOP("Vowel letter") },
 	{ 0x11A01,	I18N_NOOP("Vowel signs") },
 	{ 0x11A0A,	I18N_NOOP("Vowel length mark") },
@@ -2543,7 +2543,7 @@ static const TDEUnicodeData::Subcategory ZanabazarSquare[] = {
 	{ 0x11A47,	I18N_NOOP("Subjoiner") },
 };
 
-static const TDEUnicodeData::Subcategory Soyombo[] = {
+constexpr TDEUnicodeData::Subcategory Soyombo[] = {
 	{ 0x11A50,	I18N_NOOP("Vowel letter") },
 	{ 0x11A51,	I18N_NOOP("Vowel signs") },
 	{ 0x11A5B,	I18N_NOOP("Vowel length mark") },
@@ -2560,34 +2560,34 @@ static const TDEUnicodeData::Subcategory Soyombo[] = {
 	{ 0x11AA1,	I18N_NOOP("Terminal marks") },
 };
 
-static const TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabicsExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory UnifiedCanadianAboriginalSyllabicsExtendedA[] = {
 	{ 0x11AB0,	I18N_NOOP("Syllables for Nattilik") },
 	{ 0x11ABC,	I18N_NOOP("Historic syllables for Cree and Ojibway") },
 };
 
-static const TDEUnicodeData::Subcategory PauCinHau[] = {
+constexpr TDEUnicodeData::Subcategory PauCinHau[] = {
 	{ 0x11AC0,	I18N_NOOP("Consonants") },
 	{ 0x11AD5,	I18N_NOOP("Vowels") },
 	{ 0x11ADC,	I18N_NOOP("Final consonants") },
 	{ 0x11AE5,	I18N_NOOP("Tone marks") },
 };
 
-static const TDEUnicodeData::Subcategory DevanagariExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory DevanagariExtendedA[] = {
 	{ 0x11B00,	I18N_NOOP("Head marks") },
 	{ 0x11B02,	I18N_NOOP("Auspicious signs") },
 };
 
-static const TDEUnicodeData::Subcategory SharadaSupplement[] = {
+constexpr TDEUnicodeData::Subcategory SharadaSupplement[] = {
 	{ 0x11B60,	I18N_NOOP("Kashmiri vowel signs") },
 };
 
-static const TDEUnicodeData::Subcategory Sunuwar[] = {
+constexpr TDEUnicodeData::Subcategory Sunuwar[] = {
 	{ 0x11BC0,	I18N_NOOP("Letters") },
 	{ 0x11BE1,	I18N_NOOP("Punctuation") },
 	{ 0x11BF0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Bhaiksuki[] = {
+constexpr TDEUnicodeData::Subcategory Bhaiksuki[] = {
 	{ 0x11C00,	I18N_NOOP("Independent vowels") },
 	{ 0x11C0E,	I18N_NOOP("Consonants") },
 	{ 0x11C2F,	I18N_NOOP("Dependent vowel signs") },
@@ -2598,7 +2598,7 @@ static const TDEUnicodeData::Subcategory Bhaiksuki[] = {
 	{ 0x11C5A,	I18N_NOOP("Numbers") },
 };
 
-static const TDEUnicodeData::Subcategory Marchen[] = {
+constexpr TDEUnicodeData::Subcategory Marchen[] = {
 	{ 0x11C70,	I18N_NOOP("Punctuation") },
 	{ 0x11C72,	I18N_NOOP("Letters") },
 	{ 0x11C92,	I18N_NOOP("Subjoined letters") },
@@ -2606,7 +2606,7 @@ static const TDEUnicodeData::Subcategory Marchen[] = {
 	{ 0x11CB5,	I18N_NOOP("Various signs") },
 };
 
-static const TDEUnicodeData::Subcategory MasaramGondi[] = {
+constexpr TDEUnicodeData::Subcategory MasaramGondi[] = {
 	{ 0x11D00,	I18N_NOOP("Vowels") },
 	{ 0x11D0C,	I18N_NOOP("Consonants") },
 	{ 0x11D2E,	I18N_NOOP("Conjunct letters") },
@@ -2617,7 +2617,7 @@ static const TDEUnicodeData::Subcategory MasaramGondi[] = {
 	{ 0x11D50,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory GunjalaGondi[] = {
+constexpr TDEUnicodeData::Subcategory GunjalaGondi[] = {
 	{ 0x11D60,	I18N_NOOP("Independent vowels") },
 	{ 0x11D6C,	I18N_NOOP("Consonants") },
 	{ 0x11D8A,	I18N_NOOP("Dependent vowel signs") },
@@ -2627,7 +2627,7 @@ static const TDEUnicodeData::Subcategory GunjalaGondi[] = {
 	{ 0x11DA0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory TolongSiki[] = {
+constexpr TDEUnicodeData::Subcategory TolongSiki[] = {
 	{ 0x11DB0,	I18N_NOOP("Vowel letters") },
 	{ 0x11DB6,	I18N_NOOP("Consonant letters") },
 	{ 0x11DD9,	I18N_NOOP("Signs") },
@@ -2635,14 +2635,14 @@ static const TDEUnicodeData::Subcategory TolongSiki[] = {
 	{ 0x11DE0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Makasar[] = {
+constexpr TDEUnicodeData::Subcategory Makasar[] = {
 	{ 0x11EE0,	I18N_NOOP("Consonants") },
 	{ 0x11EF2,	I18N_NOOP("Consonant reduplicator") },
 	{ 0x11EF3,	I18N_NOOP("Vowel signs") },
 	{ 0x11EF7,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Kawi[] = {
+constexpr TDEUnicodeData::Subcategory Kawi[] = {
 	{ 0x11F00,	I18N_NOOP("Signs") },
 	{ 0x11F04,	I18N_NOOP("Independent vowels") },
 	{ 0x11F12,	I18N_NOOP("Consonants") },
@@ -2653,11 +2653,11 @@ static const TDEUnicodeData::Subcategory Kawi[] = {
 	{ 0x11F5A,	I18N_NOOP("Nukta") },
 };
 
-static const TDEUnicodeData::Subcategory LisuSupplement[] = {
+constexpr TDEUnicodeData::Subcategory LisuSupplement[] = {
 	{ 0x11FB0,	I18N_NOOP("Letter") },
 };
 
-static const TDEUnicodeData::Subcategory TamilSupplement[] = {
+constexpr TDEUnicodeData::Subcategory TamilSupplement[] = {
 	{ 0x11FC0,	I18N_NOOP("Fractions") },
 	{ 0x11FD5,	I18N_NOOP("Measures of grain") },
 	{ 0x11FDD,	I18N_NOOP("Old currency symbols") },
@@ -2668,13 +2668,13 @@ static const TDEUnicodeData::Subcategory TamilSupplement[] = {
 	{ 0x11FFF,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Cuneiform[] = {
+constexpr TDEUnicodeData::Subcategory Cuneiform[] = {
 	{ 0x12000,	I18N_NOOP("Signs") },
 	{ 0x1236F,	I18N_NOOP("Elamite sign") },
 	{ 0x12370,	I18N_NOOP("Signs") },
 };
 
-static const TDEUnicodeData::Subcategory CuneiformNumbersandPunctuation[] = {
+constexpr TDEUnicodeData::Subcategory CuneiformNumbersandPunctuation[] = {
 	{ 0x12400,	I18N_NOOP("Common numeric signs") },
 	{ 0x12434,	I18N_NOOP("Area measures") },
 	{ 0x1243A,	I18N_NOOP("Variant stacking patterns") },
@@ -2689,16 +2689,16 @@ static const TDEUnicodeData::Subcategory CuneiformNumbersandPunctuation[] = {
 	{ 0x12470,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory EarlyDynasticCuneiform[] = {
+constexpr TDEUnicodeData::Subcategory EarlyDynasticCuneiform[] = {
 	{ 0x12480,	I18N_NOOP("Signs") },
 };
 
-static const TDEUnicodeData::Subcategory CyproMinoan[] = {
+constexpr TDEUnicodeData::Subcategory CyproMinoan[] = {
 	{ 0x12F90,	I18N_NOOP("Signs") },
 	{ 0x12FF1,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory EgyptianHieroglyphs[] = {
+constexpr TDEUnicodeData::Subcategory EgyptianHieroglyphs[] = {
 	{ 0x13000,	I18N_NOOP("A. Man and his occupations") },
 	{ 0x13050,	I18N_NOOP("B. Woman and her occupations") },
 	{ 0x1305A,	I18N_NOOP("C. Anthropomorphic deities") },
@@ -2730,7 +2730,7 @@ static const TDEUnicodeData::Subcategory EgyptianHieroglyphs[] = {
 	{ 0x1342F,	I18N_NOOP("Addition to group V") },
 };
 
-static const TDEUnicodeData::Subcategory EgyptianHieroglyphFormatControls[] = {
+constexpr TDEUnicodeData::Subcategory EgyptianHieroglyphFormatControls[] = {
 	{ 0x13430,	I18N_NOOP("Joiners") },
 	{ 0x13432,	I18N_NOOP("Sign insertion controls") },
 	{ 0x13436,	I18N_NOOP("Sign stacking control") },
@@ -2742,7 +2742,7 @@ static const TDEUnicodeData::Subcategory EgyptianHieroglyphFormatControls[] = {
 	{ 0x13447,	I18N_NOOP("Damage modifiers") },
 };
 
-static const TDEUnicodeData::Subcategory EgyptianHieroglyphsExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory EgyptianHieroglyphsExtendedA[] = {
 	{ 0x13460,	I18N_NOOP("A01. Man seated or kneeling empty handed") },
 	{ 0x13488,	I18N_NOOP("A02. Man standing empty handed") },
 	{ 0x134A5,	I18N_NOOP("A04. Man adoring or bent") },
@@ -3198,7 +3198,7 @@ static const TDEUnicodeData::Subcategory EgyptianHieroglyphsExtendedA[] = {
 	{ 0x143F8,	I18N_NOOP("AA22. Unclassified signs, varia") },
 };
 
-static const TDEUnicodeData::Subcategory AnatolianHieroglyphs[] = {
+constexpr TDEUnicodeData::Subcategory AnatolianHieroglyphs[] = {
 	{ 0x14400,	I18N_NOOP("A. The human body and clothing") },
 	{ 0x1446A,	I18N_NOOP("B. Animals") },
 	{ 0x144B0,	I18N_NOOP("C. Plants") },
@@ -3212,7 +3212,7 @@ static const TDEUnicodeData::Subcategory AnatolianHieroglyphs[] = {
 	{ 0x14629,	I18N_NOOP("M. Additional signs") },
 };
 
-static const TDEUnicodeData::Subcategory GurungKhema[] = {
+constexpr TDEUnicodeData::Subcategory GurungKhema[] = {
 	{ 0x16100,	I18N_NOOP("Vowel carrier") },
 	{ 0x16101,	I18N_NOOP("Consonants") },
 	{ 0x1611E,	I18N_NOOP("Vowel signs") },
@@ -3222,7 +3222,7 @@ static const TDEUnicodeData::Subcategory GurungKhema[] = {
 	{ 0x16130,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory BamumSupplement[] = {
+constexpr TDEUnicodeData::Subcategory BamumSupplement[] = {
 	{ 0x16800,	I18N_NOOP("Characters found through Phase A") },
 	{ 0x16857,	I18N_NOOP("Characters found through Phase B") },
 	{ 0x1688F,	I18N_NOOP("Characters found through Phase C") },
@@ -3231,26 +3231,26 @@ static const TDEUnicodeData::Subcategory BamumSupplement[] = {
 	{ 0x16A03,	I18N_NOOP("Characters found through Phase F") },
 };
 
-static const TDEUnicodeData::Subcategory Mro[] = {
+constexpr TDEUnicodeData::Subcategory Mro[] = {
 	{ 0x16A40,	I18N_NOOP("Letters") },
 	{ 0x16A60,	I18N_NOOP("Digits") },
 	{ 0x16A6E,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory Tangsa[] = {
+constexpr TDEUnicodeData::Subcategory Tangsa[] = {
 	{ 0x16A70,	I18N_NOOP("Vowels") },
 	{ 0x16AA0,	I18N_NOOP("Consonants") },
 	{ 0x16AC0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory BassaVah[] = {
+constexpr TDEUnicodeData::Subcategory BassaVah[] = {
 	{ 0x16AD0,	I18N_NOOP("Consonant letters") },
 	{ 0x16AE7,	I18N_NOOP("Vowel letters") },
 	{ 0x16AF0,	I18N_NOOP("Combining tone marks") },
 	{ 0x16AF5,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory PahawhHmong[] = {
+constexpr TDEUnicodeData::Subcategory PahawhHmong[] = {
 	{ 0x16B00,	I18N_NOOP("Vowel rimes") },
 	{ 0x16B1C,	I18N_NOOP("Consonant onsets") },
 	{ 0x16B30,	I18N_NOOP("Combining diacritical marks") },
@@ -3264,7 +3264,7 @@ static const TDEUnicodeData::Subcategory PahawhHmong[] = {
 	{ 0x16B7D,	I18N_NOOP("Logographs for clan names") },
 };
 
-static const TDEUnicodeData::Subcategory KiratRai[] = {
+constexpr TDEUnicodeData::Subcategory KiratRai[] = {
 	{ 0x16D40,	I18N_NOOP("Various signs") },
 	{ 0x16D43,	I18N_NOOP("Independent vowel") },
 	{ 0x16D44,	I18N_NOOP("Consonants") },
@@ -3274,7 +3274,7 @@ static const TDEUnicodeData::Subcategory KiratRai[] = {
 	{ 0x16D70,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory Medefaidrin[] = {
+constexpr TDEUnicodeData::Subcategory Medefaidrin[] = {
 	{ 0x16E40,	I18N_NOOP("Uppercase letters") },
 	{ 0x16E60,	I18N_NOOP("Lowercase letters") },
 	{ 0x16E80,	I18N_NOOP("Digits") },
@@ -3284,12 +3284,12 @@ static const TDEUnicodeData::Subcategory Medefaidrin[] = {
 	{ 0x16E99,	I18N_NOOP("Symbols") },
 };
 
-static const TDEUnicodeData::Subcategory BeriaErfe[] = {
+constexpr TDEUnicodeData::Subcategory BeriaErfe[] = {
 	{ 0x16EA0,	I18N_NOOP("Uppercase letters") },
 	{ 0x16EBB,	I18N_NOOP("Lowercase letters") },
 };
 
-static const TDEUnicodeData::Subcategory Miao[] = {
+constexpr TDEUnicodeData::Subcategory Miao[] = {
 	{ 0x16F00,	I18N_NOOP("Consonant onsets") },
 	{ 0x16F4F,	I18N_NOOP("Modifiers") },
 	{ 0x16F54,	I18N_NOOP("Vowels and finals") },
@@ -3298,7 +3298,7 @@ static const TDEUnicodeData::Subcategory Miao[] = {
 	{ 0x16F9A,	I18N_NOOP("Archaic baseline tone marks") },
 };
 
-static const TDEUnicodeData::Subcategory IdeographicSymbolsandPunctuation[] = {
+constexpr TDEUnicodeData::Subcategory IdeographicSymbolsandPunctuation[] = {
 	{ 0x16FE0,	I18N_NOOP("Tangut mark") },
 	{ 0x16FE1,	I18N_NOOP("Nushu mark") },
 	{ 0x16FE2,	I18N_NOOP("Marks used in ancient Chinese texts") },
@@ -3308,10 +3308,10 @@ static const TDEUnicodeData::Subcategory IdeographicSymbolsandPunctuation[] = {
 	{ 0x16FF4,	I18N_NOOP("Characters used for Cantonese music") },
 };
 
-static const TDEUnicodeData::Subcategory Tangut[] = {
+constexpr TDEUnicodeData::Subcategory Tangut[] = {
 };
 
-static const TDEUnicodeData::Subcategory TangutComponents[] = {
+constexpr TDEUnicodeData::Subcategory TangutComponents[] = {
 	{ 0x18800,	I18N_NOOP("One-stroke components") },
 	{ 0x1880A,	I18N_NOOP("Two-stroke components") },
 	{ 0x18826,	I18N_NOOP("Three-stroke components") },
@@ -3331,7 +3331,7 @@ static const TDEUnicodeData::Subcategory TangutComponents[] = {
 	{ 0x18AF3,	I18N_NOOP("Additional components") },
 };
 
-static const TDEUnicodeData::Subcategory KhitanSmallScript[] = {
+constexpr TDEUnicodeData::Subcategory KhitanSmallScript[] = {
 	{ 0x18B00,	I18N_NOOP("Iteration mark") },
 	{ 0x18B01,	I18N_NOOP("Radical-01") },
 	{ 0x18B36,	I18N_NOOP("Radical-02") },
@@ -3356,10 +3356,10 @@ static const TDEUnicodeData::Subcategory KhitanSmallScript[] = {
 	{ 0x18CFF,	I18N_NOOP("Indication of missing character") },
 };
 
-static const TDEUnicodeData::Subcategory TangutSupplement[] = {
+constexpr TDEUnicodeData::Subcategory TangutSupplement[] = {
 };
 
-static const TDEUnicodeData::Subcategory TangutComponentsSupplement[] = {
+constexpr TDEUnicodeData::Subcategory TangutComponentsSupplement[] = {
 	{ 0x18D80,	I18N_NOOP("Miscellaneous components") },
 	{ 0x18D82,	I18N_NOOP("One-stroke components") },
 	{ 0x18D84,	I18N_NOOP("Two-stroke component") },
@@ -3377,29 +3377,29 @@ static const TDEUnicodeData::Subcategory TangutComponentsSupplement[] = {
 	{ 0x18DF2,	I18N_NOOP("Fourteen-stroke component") },
 };
 
-static const TDEUnicodeData::Subcategory KanaExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory KanaExtendedB[] = {
 	{ 0x1AFF0,	I18N_NOOP("Tone marks") },
 	{ 0x1AFF7,	I18N_NOOP("Nasalized tone marks") },
 };
 
-static const TDEUnicodeData::Subcategory KanaSupplement[] = {
+constexpr TDEUnicodeData::Subcategory KanaSupplement[] = {
 	{ 0x1B000,	I18N_NOOP("Historic Katakana") },
 	{ 0x1B001,	I18N_NOOP("Historic Hiragana and Hentaigana") },
 	{ 0x1B002,	I18N_NOOP("Hentaigana") },
 };
 
-static const TDEUnicodeData::Subcategory KanaExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory KanaExtendedA[] = {
 	{ 0x1B100,	I18N_NOOP("Hentaigana") },
 	{ 0x1B11F,	I18N_NOOP("Historic Hiragana") },
 	{ 0x1B120,	I18N_NOOP("Historic Katakana") },
 };
 
-static const TDEUnicodeData::Subcategory SmallKanaExtension[] = {
+constexpr TDEUnicodeData::Subcategory SmallKanaExtension[] = {
 	{ 0x1B132,	I18N_NOOP("Historic small hiragana letters") },
 	{ 0x1B155,	I18N_NOOP("Historic small katakana letters") },
 };
 
-static const TDEUnicodeData::Subcategory Nushu[] = {
+constexpr TDEUnicodeData::Subcategory Nushu[] = {
 	{ 0x1B170,	I18N_NOOP("One-stroke character") },
 	{ 0x1B171,	I18N_NOOP("Two-stroke characters") },
 	{ 0x1B178,	I18N_NOOP("Three-stroke characters") },
@@ -3418,7 +3418,7 @@ static const TDEUnicodeData::Subcategory Nushu[] = {
 	{ 0x1B2FA,	I18N_NOOP("Sixteen-stroke characters") },
 };
 
-static const TDEUnicodeData::Subcategory Duployan[] = {
+constexpr TDEUnicodeData::Subcategory Duployan[] = {
 	{ 0x1BC00,	I18N_NOOP("Non-joining consonants") },
 	{ 0x1BC02,	I18N_NOOP("Line consonants") },
 	{ 0x1BC19,	I18N_NOOP("Arc consonants") },
@@ -3442,11 +3442,11 @@ static const TDEUnicodeData::Subcategory Duployan[] = {
 	{ 0x1BC9F,	I18N_NOOP("Chinook punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory ShorthandFormatControls[] = {
+constexpr TDEUnicodeData::Subcategory ShorthandFormatControls[] = {
 	{ 0x1BCA0,	I18N_NOOP("Shorthand format controls") },
 };
 
-static const TDEUnicodeData::Subcategory SymbolsforLegacyComputingSupplement[] = {
+constexpr TDEUnicodeData::Subcategory SymbolsforLegacyComputingSupplement[] = {
 	{ 0x1CC00,	I18N_NOOP("Game sprites") },
 	{ 0x1CC05,	I18N_NOOP("Rule segments") },
 	{ 0x1CC08,	I18N_NOOP("Schematic symbols") },
@@ -3480,20 +3480,20 @@ static const TDEUnicodeData::Subcategory SymbolsforLegacyComputingSupplement[] =
 	{ 0x1CEBA,	I18N_NOOP("Terminal graphic characters") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousSymbolsSupplement[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousSymbolsSupplement[] = {
 	{ 0x1CEC0,	I18N_NOOP("Astronomical symbols for asteroids") },
 	{ 0x1CEE0,	I18N_NOOP("Symbols for geomantic figures") },
 	{ 0x1CEF0,	I18N_NOOP("Miscellaneous symbol") },
 };
 
-static const TDEUnicodeData::Subcategory ZnamennyMusicalNotation[] = {
+constexpr TDEUnicodeData::Subcategory ZnamennyMusicalNotation[] = {
 	{ 0x1CF00,	I18N_NOOP("Combining red marks") },
 	{ 0x1CF30,	I18N_NOOP("Combining black marks") },
 	{ 0x1CF42,	I18N_NOOP("Modifying marks for priznaki") },
 	{ 0x1CF50,	I18N_NOOP("Znamenny neumes") },
 };
 
-static const TDEUnicodeData::Subcategory ByzantineMusicalSymbols[] = {
+constexpr TDEUnicodeData::Subcategory ByzantineMusicalSymbols[] = {
 	{ 0x1D000,	I18N_NOOP("Prosodies (Prosodics)") },
 	{ 0x1D003,	I18N_NOOP("Ekfonetika") },
 	{ 0x1D015,	I18N_NOOP("Melodimata (Melodics)") },
@@ -3511,7 +3511,7 @@ static const TDEUnicodeData::Subcategory ByzantineMusicalSymbols[] = {
 	{ 0x1D0F0,	I18N_NOOP("Specials") },
 };
 
-static const TDEUnicodeData::Subcategory MusicalSymbols[] = {
+constexpr TDEUnicodeData::Subcategory MusicalSymbols[] = {
 	{ 0x1D100,	I18N_NOOP("Bars") },
 	{ 0x1D106,	I18N_NOOP("Codas") },
 	{ 0x1D10D,	I18N_NOOP("Figure repetitions") },
@@ -3553,33 +3553,33 @@ static const TDEUnicodeData::Subcategory MusicalSymbols[] = {
 	{ 0x1D1E9,	I18N_NOOP("Accidentals for quarter tones") },
 };
 
-static const TDEUnicodeData::Subcategory AncientGreekMusicalNotation[] = {
+constexpr TDEUnicodeData::Subcategory AncientGreekMusicalNotation[] = {
 	{ 0x1D200,	I18N_NOOP("Ancient Greek vocalic notation") },
 	{ 0x1D21D,	I18N_NOOP("Ancient Greek instrumental notation") },
 	{ 0x1D242,	I18N_NOOP("Further Greek musical notation symbols") },
 };
 
-static const TDEUnicodeData::Subcategory KaktovikNumerals[] = {
+constexpr TDEUnicodeData::Subcategory KaktovikNumerals[] = {
 	{ 0x1D2C0,	I18N_NOOP("Numerals") },
 };
 
-static const TDEUnicodeData::Subcategory MayanNumerals[] = {
+constexpr TDEUnicodeData::Subcategory MayanNumerals[] = {
 	{ 0x1D2E0,	I18N_NOOP("Mayan numerals") },
 };
 
-static const TDEUnicodeData::Subcategory TaiXuanJingSymbols[] = {
+constexpr TDEUnicodeData::Subcategory TaiXuanJingSymbols[] = {
 	{ 0x1D300,	I18N_NOOP("Monogram") },
 	{ 0x1D301,	I18N_NOOP("Digrams") },
 	{ 0x1D306,	I18N_NOOP("Tetragrams") },
 };
 
-static const TDEUnicodeData::Subcategory CountingRodNumerals[] = {
+constexpr TDEUnicodeData::Subcategory CountingRodNumerals[] = {
 	{ 0x1D360,	I18N_NOOP("Counting rod units") },
 	{ 0x1D372,	I18N_NOOP("Ideographic tally marks") },
 	{ 0x1D377,	I18N_NOOP("Western tally marks") },
 };
 
-static const TDEUnicodeData::Subcategory MathematicalAlphanumericSymbols[] = {
+constexpr TDEUnicodeData::Subcategory MathematicalAlphanumericSymbols[] = {
 	{ 0x1D400,	I18N_NOOP("Bold symbols") },
 	{ 0x1D434,	I18N_NOOP("Italic symbols") },
 	{ 0x1D468,	I18N_NOOP("Bold italic symbols") },
@@ -3612,7 +3612,7 @@ static const TDEUnicodeData::Subcategory MathematicalAlphanumericSymbols[] = {
 	{ 0x1D7F6,	I18N_NOOP("Monospace digits") },
 };
 
-static const TDEUnicodeData::Subcategory SuttonSignWriting[] = {
+constexpr TDEUnicodeData::Subcategory SuttonSignWriting[] = {
 	{ 0x1D800,	I18N_NOOP("Hand shapes with index finger") },
 	{ 0x1D80E,	I18N_NOOP("Hand shapes with index and middle fingers") },
 	{ 0x1D81E,	I18N_NOOP("Hand shapes with index and middle fingers and thumb") },
@@ -3635,7 +3635,7 @@ static const TDEUnicodeData::Subcategory SuttonSignWriting[] = {
 	{ 0x1DAA1,	I18N_NOOP("Rotation modifiers") },
 };
 
-static const TDEUnicodeData::Subcategory LatinExtendedG[] = {
+constexpr TDEUnicodeData::Subcategory LatinExtendedG[] = {
 	{ 0x1DF00,	I18N_NOOP("Extended IPA for disordered speech") },
 	{ 0x1DF08,	I18N_NOOP("IPA extensions") },
 	{ 0x1DF0B,	I18N_NOOP("Clicks") },
@@ -3646,18 +3646,18 @@ static const TDEUnicodeData::Subcategory LatinExtendedG[] = {
 	{ 0x1DF25,	I18N_NOOP("Letters for Malayalam transliteration") },
 };
 
-static const TDEUnicodeData::Subcategory GlagoliticSupplement[] = {
+constexpr TDEUnicodeData::Subcategory GlagoliticSupplement[] = {
 	{ 0x1E000,	I18N_NOOP("Combining letters") },
 };
 
-static const TDEUnicodeData::Subcategory CyrillicExtendedD[] = {
+constexpr TDEUnicodeData::Subcategory CyrillicExtendedD[] = {
 	{ 0x1E030,	I18N_NOOP("Superscript modifier letters") },
 	{ 0x1E051,	I18N_NOOP("Subscript modifier letters") },
 	{ 0x1E06B,	I18N_NOOP("Superscript modifier letters") },
 	{ 0x1E08F,	I18N_NOOP("Diacritical mark") },
 };
 
-static const TDEUnicodeData::Subcategory NyiakengPuachueHmong[] = {
+constexpr TDEUnicodeData::Subcategory NyiakengPuachueHmong[] = {
 	{ 0x1E100,	I18N_NOOP("Consonant onsets") },
 	{ 0x1E124,	I18N_NOOP("Vowel rimes") },
 	{ 0x1E130,	I18N_NOOP("Tone marks") },
@@ -3668,44 +3668,44 @@ static const TDEUnicodeData::Subcategory NyiakengPuachueHmong[] = {
 	{ 0x1E14E,	I18N_NOOP("Symbols") },
 };
 
-static const TDEUnicodeData::Subcategory Toto[] = {
+constexpr TDEUnicodeData::Subcategory Toto[] = {
 	{ 0x1E290,	I18N_NOOP("Basic consonants") },
 	{ 0x1E2A1,	I18N_NOOP("Basic vowels") },
 	{ 0x1E2AE,	I18N_NOOP("Sign") },
 };
 
-static const TDEUnicodeData::Subcategory Wancho[] = {
+constexpr TDEUnicodeData::Subcategory Wancho[] = {
 	{ 0x1E2C0,	I18N_NOOP("Letters") },
 	{ 0x1E2EC,	I18N_NOOP("Tone marks") },
 	{ 0x1E2F0,	I18N_NOOP("Digits") },
 	{ 0x1E2FF,	I18N_NOOP("Currency symbol") },
 };
 
-static const TDEUnicodeData::Subcategory NagMundari[] = {
+constexpr TDEUnicodeData::Subcategory NagMundari[] = {
 	{ 0x1E4D0,	I18N_NOOP("Letters") },
 	{ 0x1E4EB,	I18N_NOOP("Various signs") },
 	{ 0x1E4F0,	I18N_NOOP("Digits") },
 };
 
-static const TDEUnicodeData::Subcategory OlOnal[] = {
+constexpr TDEUnicodeData::Subcategory OlOnal[] = {
 	{ 0x1E5D0,	I18N_NOOP("Letters") },
 	{ 0x1E5EE,	I18N_NOOP("Various signs") },
 	{ 0x1E5F1,	I18N_NOOP("Digits") },
 	{ 0x1E5FF,	I18N_NOOP("Abbreviation sign") },
 };
 
-static const TDEUnicodeData::Subcategory TaiYo[] = {
+constexpr TDEUnicodeData::Subcategory TaiYo[] = {
 	{ 0x1E6C0,	I18N_NOOP("Letters") },
 	{ 0x1E6E0,	I18N_NOOP("Vowel letters and rhyme signs") },
 	{ 0x1E6EE,	I18N_NOOP("Finals") },
 	{ 0x1E6FE,	I18N_NOOP("Symbols") },
 };
 
-static const TDEUnicodeData::Subcategory EthiopicExtendedB[] = {
+constexpr TDEUnicodeData::Subcategory EthiopicExtendedB[] = {
 	{ 0x1E7E0,	I18N_NOOP("Syllables for Gurage") },
 };
 
-static const TDEUnicodeData::Subcategory MendeKikakui[] = {
+constexpr TDEUnicodeData::Subcategory MendeKikakui[] = {
 	{ 0x1E800,	I18N_NOOP("Syllables in k-") },
 	{ 0x1E808,	I18N_NOOP("Syllables in w-") },
 	{ 0x1E811,	I18N_NOOP("Syllables in wv-") },
@@ -3737,7 +3737,7 @@ static const TDEUnicodeData::Subcategory MendeKikakui[] = {
 	{ 0x1E8D0,	I18N_NOOP("Combining number bases") },
 };
 
-static const TDEUnicodeData::Subcategory Adlam[] = {
+constexpr TDEUnicodeData::Subcategory Adlam[] = {
 	{ 0x1E900,	I18N_NOOP("Capital letters") },
 	{ 0x1E91C,	I18N_NOOP("Supplementary capital letters") },
 	{ 0x1E922,	I18N_NOOP("Small letters") },
@@ -3748,7 +3748,7 @@ static const TDEUnicodeData::Subcategory Adlam[] = {
 	{ 0x1E95E,	I18N_NOOP("Punctuation") },
 };
 
-static const TDEUnicodeData::Subcategory IndicSiyaqNumbers[] = {
+constexpr TDEUnicodeData::Subcategory IndicSiyaqNumbers[] = {
 	{ 0x1EC71,	I18N_NOOP("Primary numbers") },
 	{ 0x1EC7A,	I18N_NOOP("Tens") },
 	{ 0x1EC83,	I18N_NOOP("Hundreds") },
@@ -3763,7 +3763,7 @@ static const TDEUnicodeData::Subcategory IndicSiyaqNumbers[] = {
 	{ 0x1ECB1,	I18N_NOOP("Alternate forms") },
 };
 
-static const TDEUnicodeData::Subcategory OttomanSiyaqNumbers[] = {
+constexpr TDEUnicodeData::Subcategory OttomanSiyaqNumbers[] = {
 	{ 0x1ED01,	I18N_NOOP("Primary numbers") },
 	{ 0x1ED0A,	I18N_NOOP("Tens") },
 	{ 0x1ED13,	I18N_NOOP("Hundreds") },
@@ -3774,7 +3774,7 @@ static const TDEUnicodeData::Subcategory OttomanSiyaqNumbers[] = {
 	{ 0x1ED3C,	I18N_NOOP("Fractions") },
 };
 
-static const TDEUnicodeData::Subcategory ArabicMathematicalAlphabeticSymbols[] = {
+constexpr TDEUnicodeData::Subcategory ArabicMathematicalAlphabeticSymbols[] = {
 	{ 0x1EE00,	I18N_NOOP("Isolated symbols") },
 	{ 0x1EE21,	I18N_NOOP("Initial symbols") },
 	{ 0x1EE42,	I18N_NOOP("Tailed symbols") },
@@ -3784,7 +3784,7 @@ static const TDEUnicodeData::Subcategory ArabicMathematicalAlphabeticSymbols[] =
 	{ 0x1EEF0,	I18N_NOOP("Stretching operators") },
 };
 
-static const TDEUnicodeData::Subcategory MahjongTiles[] = {
+constexpr TDEUnicodeData::Subcategory MahjongTiles[] = {
 	{ 0x1F000,	I18N_NOOP("Prevailing wind tiles") },
 	{ 0x1F004,	I18N_NOOP("Dragon tiles") },
 	{ 0x1F007,	I18N_NOOP("Character suit tiles") },
@@ -3795,7 +3795,7 @@ static const TDEUnicodeData::Subcategory MahjongTiles[] = {
 	{ 0x1F02A,	I18N_NOOP("Miscellaneous tiles") },
 };
 
-static const TDEUnicodeData::Subcategory DominoTiles[] = {
+constexpr TDEUnicodeData::Subcategory DominoTiles[] = {
 	{ 0x1F030,	I18N_NOOP("Horizontal tiles") },
 	{ 0x1F031,	I18N_NOOP("Zeroes") },
 	{ 0x1F038,	I18N_NOOP("Ones") },
@@ -3814,7 +3814,7 @@ static const TDEUnicodeData::Subcategory DominoTiles[] = {
 	{ 0x1F08D,	I18N_NOOP("Sixes") },
 };
 
-static const TDEUnicodeData::Subcategory PlayingCards[] = {
+constexpr TDEUnicodeData::Subcategory PlayingCards[] = {
 	{ 0x1F0A0,	I18N_NOOP("Back of card") },
 	{ 0x1F0A1,	I18N_NOOP("Spades or swords") },
 	{ 0x1F0B1,	I18N_NOOP("Hearts or cups") },
@@ -3826,7 +3826,7 @@ static const TDEUnicodeData::Subcategory PlayingCards[] = {
 	{ 0x1F0E0,	I18N_NOOP("Trumps") },
 };
 
-static const TDEUnicodeData::Subcategory EnclosedAlphanumericSupplement[] = {
+constexpr TDEUnicodeData::Subcategory EnclosedAlphanumericSupplement[] = {
 	{ 0x1F100,	I18N_NOOP("Number with full stop") },
 	{ 0x1F101,	I18N_NOOP("Numbers with comma") },
 	{ 0x1F10B,	I18N_NOOP("Circled sans-serif digits") },
@@ -3846,7 +3846,7 @@ static const TDEUnicodeData::Subcategory EnclosedAlphanumericSupplement[] = {
 	{ 0x1F1E6,	I18N_NOOP("Regional indicator symbols") },
 };
 
-static const TDEUnicodeData::Subcategory EnclosedIdeographicSupplement[] = {
+constexpr TDEUnicodeData::Subcategory EnclosedIdeographicSupplement[] = {
 	{ 0x1F200,	I18N_NOOP("Squared hiragana from ARIB STD B24") },
 	{ 0x1F201,	I18N_NOOP("Squared katakana") },
 	{ 0x1F210,	I18N_NOOP("Squared ideographs and kana from ARIB STD B24") },
@@ -3856,7 +3856,7 @@ static const TDEUnicodeData::Subcategory EnclosedIdeographicSupplement[] = {
 	{ 0x1F260,	I18N_NOOP("Symbols for Chinese folk religion") },
 };
 
-static const TDEUnicodeData::Subcategory MiscellaneousSymbolsandPictographs[] = {
+constexpr TDEUnicodeData::Subcategory MiscellaneousSymbolsandPictographs[] = {
 	{ 0x1F300,	I18N_NOOP("Weather, landscape, and sky symbols") },
 	{ 0x1F30D,	I18N_NOOP("Globe symbols") },
 	{ 0x1F311,	I18N_NOOP("Moon, sun, and star symbols") },
@@ -3933,14 +3933,14 @@ static const TDEUnicodeData::Subcategory MiscellaneousSymbolsandPictographs[] =
 	{ 0x1F5FB,	I18N_NOOP("Cultural symbols") },
 };
 
-static const TDEUnicodeData::Subcategory Emoticons[] = {
+constexpr TDEUnicodeData::Subcategory Emoticons[] = {
 	{ 0x1F600,	I18N_NOOP("Faces") },
 	{ 0x1F638,	I18N_NOOP("Cat faces") },
 	{ 0x1F641,	I18N_NOOP("Faces") },
 	{ 0x1F645,	I18N_NOOP("Gesture symbols") },
 };
 
-static const TDEUnicodeData::Subcategory OrnamentalDingbats[] = {
+constexpr TDEUnicodeData::Subcategory OrnamentalDingbats[] = {
 	{ 0x1F650,	I18N_NOOP("Fleurons") },
 	{ 0x1F668,	I18N_NOOP("Quilt square ornaments") },
 	{ 0x1F66C,	I18N_NOOP("Rocket ornaments") },
@@ -3949,7 +3949,7 @@ static const TDEUnicodeData::Subcategory OrnamentalDingbats[] = {
 	{ 0x1F67E,	I18N_NOOP("Miscellaneous symbols") },
 };
 
-static const TDEUnicodeData::Subcategory TransportandMapSymbols[] = {
+constexpr TDEUnicodeData::Subcategory TransportandMapSymbols[] = {
 	{ 0x1F680,	I18N_NOOP("Vehicles") },
 	{ 0x1F6A5,	I18N_NOOP("Traffic signs") },
 	{ 0x1F6A9,	I18N_NOOP("Signage and other symbols") },
@@ -3960,7 +3960,7 @@ static const TDEUnicodeData::Subcategory TransportandMapSymbols[] = {
 	{ 0x1F6E5,	I18N_NOOP("Vehicles") },
 };
 
-static const TDEUnicodeData::Subcategory AlchemicalSymbols[] = {
+constexpr TDEUnicodeData::Subcategory AlchemicalSymbols[] = {
 	{ 0x1F700,	I18N_NOOP("Symbols for Aristotelian elements") },
 	{ 0x1F705,	I18N_NOOP("Symbols for important solvents") },
 	{ 0x1F70D,	I18N_NOOP("Symbols for sulfur and mercury") },
@@ -3982,7 +3982,7 @@ static const TDEUnicodeData::Subcategory AlchemicalSymbols[] = {
 	{ 0x1F77B,	I18N_NOOP("Symbols for dwarf planets") },
 };
 
-static const TDEUnicodeData::Subcategory GeometricShapesExtended[] = {
+constexpr TDEUnicodeData::Subcategory GeometricShapesExtended[] = {
 	{ 0x1F780,	I18N_NOOP("Isosceles right triangles") },
 	{ 0x1F784,	I18N_NOOP("Black circles") },
 	{ 0x1F785,	I18N_NOOP("White circles") },
@@ -4015,7 +4015,7 @@ static const TDEUnicodeData::Subcategory GeometricShapesExtended[] = {
 	{ 0x1F7F0,	I18N_NOOP("Miscellaneous symbol") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementalArrowsC[] = {
+constexpr TDEUnicodeData::Subcategory SupplementalArrowsC[] = {
 	{ 0x1F800,	I18N_NOOP("Arrows with triangle arrowheads") },
 	{ 0x1F810,	I18N_NOOP("Arrows with equilateral triangle arrowheads") },
 	{ 0x1F820,	I18N_NOOP("Triangle headed arrows with different shaft weights") },
@@ -4037,7 +4037,7 @@ static const TDEUnicodeData::Subcategory SupplementalArrowsC[] = {
 	{ 0x1F8D8,	I18N_NOOP("Isolobal arrow") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementalSymbolsandPictographs[] = {
+constexpr TDEUnicodeData::Subcategory SupplementalSymbolsandPictographs[] = {
 	{ 0x1F900,	I18N_NOOP("Typicon symbols") },
 	{ 0x1F90C,	I18N_NOOP("Hand symbol") },
 	{ 0x1F90D,	I18N_NOOP("Colored heart symbols") },
@@ -4067,7 +4067,7 @@ static const TDEUnicodeData::Subcategory SupplementalSymbolsandPictographs[] = {
 	{ 0x1F9EA,	I18N_NOOP("Objects") },
 };
 
-static const TDEUnicodeData::Subcategory ChessSymbols[] = {
+constexpr TDEUnicodeData::Subcategory ChessSymbols[] = {
 	{ 0x1FA00,	I18N_NOOP("Neutral chess symbols") },
 	{ 0x1FA06,	I18N_NOOP("Chess symbols rotated 45 degrees") },
 	{ 0x1FA09,	I18N_NOOP("Chess symbols rotated 90 degrees") },
@@ -4083,7 +4083,7 @@ static const TDEUnicodeData::Subcategory ChessSymbols[] = {
 	{ 0x1FA60,	I18N_NOOP("Xiangqi symbols") },
 };
 
-static const TDEUnicodeData::Subcategory SymbolsandPictographsExtendedA[] = {
+constexpr TDEUnicodeData::Subcategory SymbolsandPictographsExtendedA[] = {
 	{ 0x1FA70,	I18N_NOOP("Clothing") },
 	{ 0x1FA75,	I18N_NOOP("Colored heart symbols") },
 	{ 0x1FA78,	I18N_NOOP("Medical symbols") },
@@ -4105,7 +4105,7 @@ static const TDEUnicodeData::Subcategory SymbolsandPictographsExtendedA[] = {
 	{ 0x1FAF0,	I18N_NOOP("Hand symbols") },
 };
 
-static const TDEUnicodeData::Subcategory SymbolsforLegacyComputing[] = {
+constexpr TDEUnicodeData::Subcategory SymbolsforLegacyComputing[] = {
 	{ 0x1FB00,	I18N_NOOP("Block mosaic terminal graphic characters") },
 	{ 0x1FB3C,	I18N_NOOP("Smooth mosaic terminal graphic characters") },
 	{ 0x1FB70,	I18N_NOOP("Block elements") },
@@ -4131,108 +4131,108 @@ static const TDEUnicodeData::Subcategory SymbolsforLegacyComputing[] = {
 	{ 0x1FBFA,	I18N_NOOP("Terminal graphic character") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned[] = {
 	{ 0x1FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionB[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionB[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionC[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionC[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionD[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionD[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionE[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionE[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionF[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionF[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionI[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionI[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKCompatibilityIdeographsSupplement[] = {
+constexpr TDEUnicodeData::Subcategory CJKCompatibilityIdeographsSupplement[] = {
 	{ 0x2F800,	I18N_NOOP("Duplicate characters from CNS 11643-1992") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned2[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned2[] = {
 	{ 0x2FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionG[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionG[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionH[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionH[] = {
 };
 
-static const TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionJ[] = {
+constexpr TDEUnicodeData::Subcategory CJKUnifiedIdeographsExtensionJ[] = {
 };
 
-static const TDEUnicodeData::Subcategory Unassigned3[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned3[] = {
 	{ 0x3FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned4[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned4[] = {
 	{ 0x4FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned5[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned5[] = {
 	{ 0x5FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned6[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned6[] = {
 	{ 0x6FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned7[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned7[] = {
 	{ 0x7FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned8[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned8[] = {
 	{ 0x8FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned9[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned9[] = {
 	{ 0x9FFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned10[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned10[] = {
 	{ 0xAFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned11[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned11[] = {
 	{ 0xBFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned12[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned12[] = {
 	{ 0xCFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned13[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned13[] = {
 	{ 0xDFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory Tags[] = {
+constexpr TDEUnicodeData::Subcategory Tags[] = {
 	{ 0xE0001,	I18N_NOOP("Tag identifiers") },
 	{ 0xE0020,	I18N_NOOP("Tag components") },
 	{ 0xE007F,	I18N_NOOP("Stateful tag terminator") },
 };
 
-static const TDEUnicodeData::Subcategory VariationSelectorsSupplement[] = {
+constexpr TDEUnicodeData::Subcategory VariationSelectorsSupplement[] = {
 	{ 0xE0100,	I18N_NOOP("Ideographic-specific variation selectors") },
 };
 
-static const TDEUnicodeData::Subcategory Unassigned14[] = {
+constexpr TDEUnicodeData::Subcategory Unassigned14[] = {
 	{ 0xEFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementaryPrivateUseAreaA[] = {
+constexpr TDEUnicodeData::Subcategory SupplementaryPrivateUseAreaA[] = {
 	{ 0xFFFFE,	I18N_NOOP("Noncharacters") },
 };
 
-static const TDEUnicodeData::Subcategory SupplementaryPrivateUseAreaB[] = {
+constexpr TDEUnicodeData::Subcategory SupplementaryPrivateUseAreaB[] = {
 	{ 0x10FFFE,	I18N_NOOP("Noncharacters") },
 };
 
diff --git a/tdeui/unicode/update_unicode_data.pl b/tdeui/unicode/update_unicode_data.pl
index 260e00b53..23aa746a7 100755
--- a/tdeui/unicode/update_unicode_data.pl
+++ b/tdeui/unicode/update_unicode_data.pl
@@ -165,7 +165,7 @@ foreach my $category (@categories)
     my $category_id   = @{$category}[2];
     my @subcategories = @{@{$category}[3]};
 
-    print $outfile qq!\nstatic const TDEUnicodeData::Subcategory ${category_id}[] = {\n!;
+    print $outfile qq!\nconstexpr TDEUnicodeData::Subcategory ${category_id}[] = {\n!;
 
     for my $subcategory (@subcategories)
     {
-- 
cgit v1.2.3

