summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kcharselect/categories.h1769
-rw-r--r--kcharselect/kcharselectdia.cpp177
-rw-r--r--kcharselect/kcharselectdia.h19
-rw-r--r--kcharselect/kcharselectui.rc6
4 files changed, 1962 insertions, 9 deletions
diff --git a/kcharselect/categories.h b/kcharselect/categories.h
new file mode 100644
index 0000000..1f3e348
--- /dev/null
+++ b/kcharselect/categories.h
@@ -0,0 +1,1769 @@
+#define SUBCATEGORY_1(codepoint) mCategories[codepoint] = category;
+#define SUBCATEGORY_2(codepoint, subcategory) mCategories[codepoint] = TQString("%1|%2").arg(category, subcategory);
+
+TQString category;
+
+category = i18n("Basic Latin"); // 0000
+SUBCATEGORY_2(0x0000, i18n("C0 controls"));
+SUBCATEGORY_2(0x0020, i18n("ASCII punctuation and symbols"));
+SUBCATEGORY_2(0x002B, i18n("ASCII math operator"));
+SUBCATEGORY_2(0x002C, i18n("ASCII punctuation"));
+SUBCATEGORY_2(0x0030, i18n("ASCII digits"));
+SUBCATEGORY_2(0x003A, i18n("ASCII punctuation"));
+SUBCATEGORY_2(0x003C, i18n("ASCII mathematical operators"));
+SUBCATEGORY_2(0x003F, i18n("ASCII punctuation"));
+SUBCATEGORY_2(0x0041, i18n("Uppercase Latin alphabet"));
+SUBCATEGORY_2(0x005B, i18n("ASCII punctuation and symbols"));
+SUBCATEGORY_2(0x0061, i18n("Lowercase Latin alphabet"));
+SUBCATEGORY_2(0x007B, i18n("ASCII punctuation and symbols"));
+SUBCATEGORY_2(0x007F, i18n("Control character"));
+
+category = i18n("Latin-1 Supplement"); // 0080
+SUBCATEGORY_2(0x0080, i18n("C1 controls"));
+SUBCATEGORY_2(0x00A0, i18n("Latin-1 punctuation and symbols"));
+SUBCATEGORY_2(0x00BC, i18n("Vulgar fractions"));
+SUBCATEGORY_2(0x00BF, i18n("Punctuation"));
+SUBCATEGORY_2(0x00C0, i18n("Uppercase letters"));
+SUBCATEGORY_2(0x00D7, i18n("Mathematical operator"));
+SUBCATEGORY_2(0x00D8, i18n("Uppercase letters"));
+SUBCATEGORY_2(0x00DF, i18n("Lowercase letters"));
+SUBCATEGORY_2(0x00F7, i18n("Mathematical operator"));
+SUBCATEGORY_2(0x00F8, i18n("Lowercase letters"));
+
+category = i18n("Latin Extended-A"); // 0100
+SUBCATEGORY_2(0x0100, i18n("European Latin"));
+SUBCATEGORY_2(0x0149, i18n("Deprecated letter"));
+SUBCATEGORY_2(0x014A, i18n("European Latin"));
+
+category = i18n("Latin Extended-B"); // 0180
+SUBCATEGORY_2(0x0180, i18n("Non-European and historic Latin"));
+SUBCATEGORY_2(0x01C0, i18n("African letters for clicks"));
+SUBCATEGORY_2(0x01C4, i18n("Latin digraphs matching Serbian Cyrillic letters"));
+SUBCATEGORY_2(0x01CD, i18n("Pinyin diacritic-vowel combinations"));
+SUBCATEGORY_2(0x01DD, i18n("Phonetic and historic letters"));
+SUBCATEGORY_2(0x0200, i18n("Additions for Slovenian"));
+SUBCATEGORY_2(0x0218, i18n("Additions for Romanian"));
+SUBCATEGORY_2(0x021C, i18n("Miscellaneous additions"));
+SUBCATEGORY_2(0x022A, i18n("Additions for Livonian"));
+SUBCATEGORY_2(0x0234, i18n("Additions for Sinology"));
+SUBCATEGORY_2(0x0237, i18n("Miscellaneous addition"));
+SUBCATEGORY_2(0x0238, i18n("Additions for Africanist linguistics"));
+SUBCATEGORY_2(0x023A, i18n("Additions for Sencoten"));
+SUBCATEGORY_2(0x023F, i18n("Additions for Africanist linguistics"));
+SUBCATEGORY_2(0x0241, i18n("Miscellaneous additions"));
+
+category = i18n("IPA Extensions"); // 0250
+SUBCATEGORY_2(0x0250, i18n("IPA extensions"));
+SUBCATEGORY_2(0x027F, i18n("Sinological extension"));
+SUBCATEGORY_2(0x0280, i18n("IPA extensions"));
+SUBCATEGORY_2(0x0285, i18n("Sinological extension"));
+SUBCATEGORY_2(0x0286, i18n("IPA extensions"));
+SUBCATEGORY_2(0x02A9, i18n("IPA characters for disordered speech"));
+SUBCATEGORY_2(0x02AE, i18n("Sinological extensions"));
+
+category = i18n("Spacing Modifier Letters"); // 02B0
+SUBCATEGORY_2(0x02B0, i18n("Latin superscript modifier letters"));
+SUBCATEGORY_2(0x02B9, i18n("Miscellaneous phonetic modifiers"));
+SUBCATEGORY_2(0x02D8, i18n("Spacing clones of diacritics"));
+SUBCATEGORY_2(0x02DE, i18n("Additions based on 1989 IPA"));
+SUBCATEGORY_2(0x02E5, i18n("Tone letters"));
+SUBCATEGORY_2(0x02EA, i18n("Extended Bopomofo tone marks"));
+SUBCATEGORY_2(0x02EC, i18n("IPA modifiers"));
+SUBCATEGORY_2(0x02EE, i18n("Other modifier letter"));
+SUBCATEGORY_2(0x02EF, i18n("UPA modifiers"));
+
+category = i18n("Combining Diacritical Marks"); // 0300
+SUBCATEGORY_2(0x0300, i18n("Ordinary diacritics"));
+SUBCATEGORY_2(0x0334, i18n("Overstruck diacritics"));
+SUBCATEGORY_2(0x0339, i18n("Miscellaneous additions"));
+SUBCATEGORY_2(0x0340, i18n("Vietnamese tone marks"));
+SUBCATEGORY_2(0x0342, i18n("Additions for Greek"));
+SUBCATEGORY_2(0x0346, i18n("Additions for IPA"));
+SUBCATEGORY_2(0x034B, i18n("IPA diacritics for disordered speech"));
+SUBCATEGORY_2(0x034F, i18n("Miscellaneous addition"));
+SUBCATEGORY_2(0x0350, i18n("Additions for the Uralic Phonetic Alphabet"));
+SUBCATEGORY_2(0x0358, i18n("Miscellaneous additions"));
+SUBCATEGORY_2(0x035C, i18n("Double diacritics"));
+SUBCATEGORY_2(0x0363, i18n("Medieval superscript letter diacritics"));
+
+category = i18n("Greek and Coptic"); // 0370
+SUBCATEGORY_2(0x0370, i18n("Archaic letters"));
+SUBCATEGORY_2(0x0374, i18n("Numeral signs"));
+SUBCATEGORY_2(0x0376, i18n("Archaic letters"));
+SUBCATEGORY_2(0x037A, i18n("Iota subscript"));
+SUBCATEGORY_2(0x037B, i18n("Lowercase of editorial symbols"));
+SUBCATEGORY_2(0x037E, i18n("Punctuation"));
+SUBCATEGORY_2(0x037F, i18n("Additional letter"));
+SUBCATEGORY_2(0x0384, i18n("Spacing accent marks"));
+SUBCATEGORY_2(0x0386, i18n("Letter"));
+SUBCATEGORY_2(0x0387, i18n("Punctuation"));
+SUBCATEGORY_2(0x0388, i18n("Letters"));
+SUBCATEGORY_2(0x03CF, i18n("Variant letterforms"));
+SUBCATEGORY_2(0x03D8, i18n("Archaic letters"));
+SUBCATEGORY_2(0x03E2, i18n("Coptic letters derived from Demotic"));
+SUBCATEGORY_2(0x03F0, i18n("Variant letterforms"));
+SUBCATEGORY_2(0x03F3, i18n("Additional letter"));
+SUBCATEGORY_2(0x03F4, i18n("Variant letterforms and symbols"));
+SUBCATEGORY_2(0x03F7, i18n("Additional archaic letters for Bactrian"));
+SUBCATEGORY_2(0x03F9, i18n("Variant letterform"));
+SUBCATEGORY_2(0x03FA, i18n("Archaic letters"));
+SUBCATEGORY_2(0x03FC, i18n("Symbol"));
+SUBCATEGORY_2(0x03FD, i18n("Editorial symbols"));
+
+category = i18n("Cyrillic"); // 0400
+SUBCATEGORY_2(0x0400, i18n("Cyrillic extensions"));
+SUBCATEGORY_2(0x0410, i18n("Basic Russian alphabet"));
+SUBCATEGORY_2(0x0450, i18n("Cyrillic extensions"));
+SUBCATEGORY_2(0x0460, i18n("Historic letters"));
+SUBCATEGORY_2(0x0478, i18n("Historic digraphs"));
+SUBCATEGORY_2(0x047A, i18n("Historic letters"));
+SUBCATEGORY_2(0x0482, i18n("Historic miscellaneous"));
+SUBCATEGORY_2(0x048A, i18n("Extended Cyrillic"));
+SUBCATEGORY_2(0x04FA, i18n("Additions for Nivkh"));
+
+category = i18n("Cyrillic Supplement"); // 0500
+SUBCATEGORY_2(0x0500, i18n("Komi letters"));
+SUBCATEGORY_2(0x0510, i18n("Khanty letters"));
+SUBCATEGORY_2(0x0512, i18n("Chukchi letters"));
+SUBCATEGORY_2(0x0514, i18n("Mordvin letters"));
+SUBCATEGORY_2(0x051A, i18n("Kurdish letters"));
+SUBCATEGORY_2(0x051E, i18n("Aleut letters"));
+SUBCATEGORY_2(0x0520, i18n("Chuvash letters"));
+SUBCATEGORY_2(0x0524, i18n("Abkhaz letters"));
+SUBCATEGORY_2(0x0526, i18n("Azerbaijani letters"));
+SUBCATEGORY_2(0x0528, i18n("Orok letters"));
+SUBCATEGORY_2(0x052A, i18n("Komi letters"));
+SUBCATEGORY_2(0x052E, i18n("Khanty letters"));
+
+category = i18n("Armenian"); // 0530
+SUBCATEGORY_2(0x0531, i18n("Uppercase letters"));
+SUBCATEGORY_2(0x0559, i18n("Modifier letters"));
+SUBCATEGORY_2(0x0560, i18n("Lowercase letters"));
+SUBCATEGORY_2(0x0589, i18n("Punctuation"));
+SUBCATEGORY_2(0x058D, i18n("Religious symbols"));
+SUBCATEGORY_2(0x058F, i18n("Currency symbol"));
+
+category = i18n("Hebrew"); // 0590
+SUBCATEGORY_2(0x0591, i18n("Cantillation marks"));
+SUBCATEGORY_2(0x05B0, i18n("Points and punctuation"));
+SUBCATEGORY_2(0x05C4, i18n("Puncta extraordinaria"));
+SUBCATEGORY_2(0x05C6, i18n("Points and punctuation"));
+SUBCATEGORY_2(0x05D0, i18n("Based on ISO 8859-8"));
+SUBCATEGORY_2(0x05EF, i18n("Sign"));
+SUBCATEGORY_2(0x05F0, i18n("Yiddish digraphs"));
+SUBCATEGORY_2(0x05F3, i18n("Additional punctuation"));
+
+category = i18n("Arabic"); // 0600
+SUBCATEGORY_2(0x0600, i18n("Subtending marks"));
+SUBCATEGORY_2(0x0605, i18n("Supertending mark"));
+SUBCATEGORY_2(0x0606, i18n("Radix symbols"));
+SUBCATEGORY_2(0x0608, i18n("Letterlike symbol"));
+SUBCATEGORY_2(0x0609, i18n("Punctuation"));
+SUBCATEGORY_2(0x060B, i18n("Currency symbol"));
+SUBCATEGORY_2(0x060C, i18n("Punctuation"));
+SUBCATEGORY_2(0x060E, i18n("Poetic marks"));
+SUBCATEGORY_2(0x0610, i18n("Honorifics"));
+SUBCATEGORY_2(0x0615, i18n("Quranic annotation sign"));
+SUBCATEGORY_2(0x0616, i18n("Extended Arabic mark"));
+SUBCATEGORY_2(0x0617, i18n("Quranic annotation signs"));
+SUBCATEGORY_2(0x061B, i18n("Punctuation"));
+SUBCATEGORY_2(0x061C, i18n("Format character"));
+SUBCATEGORY_2(0x061D, i18n("Punctuation"));
+SUBCATEGORY_2(0x0620, i18n("Addition for Kashmiri"));
+SUBCATEGORY_2(0x0621, i18n("Based on ISO 8859-6"));
+SUBCATEGORY_2(0x063B, i18n("Additions for early Persian and Azerbaijani"));
+SUBCATEGORY_2(0x0640, i18n("Based on ISO 8859-6"));
+SUBCATEGORY_2(0x064B, i18n("Tashkil from ISO 8859-6"));
+SUBCATEGORY_2(0x0653, i18n("Combining maddah and hamza"));
+SUBCATEGORY_2(0x0656, i18n("Other combining marks"));
+SUBCATEGORY_2(0x0660, i18n("Arabic-Indic digits"));
+SUBCATEGORY_2(0x066A, i18n("Punctuation"));
+SUBCATEGORY_2(0x066E, i18n("Archaic letters"));
+SUBCATEGORY_2(0x0670, i18n("Tashkil"));
+SUBCATEGORY_2(0x0671, i18n("Extended Arabic letters"));
+SUBCATEGORY_2(0x0673, i18n("Deprecated letter"));
+SUBCATEGORY_2(0x0674, i18n("High hamza"));
+SUBCATEGORY_2(0x0675, i18n("Digraphic letters for Kazakh"));
+SUBCATEGORY_2(0x0679, i18n("Extended Arabic letters"));
+SUBCATEGORY_2(0x06D4, i18n("Punctuation"));
+SUBCATEGORY_2(0x06D5, i18n("Extended Arabic letter"));
+SUBCATEGORY_2(0x06D6, i18n("Quranic annotation signs"));
+SUBCATEGORY_2(0x06EE, i18n("Extended Arabic letters for Parkari"));
+SUBCATEGORY_2(0x06F0, i18n("Eastern Arabic-Indic digits"));
+SUBCATEGORY_2(0x06FA, i18n("Extended Arabic letters"));
+SUBCATEGORY_2(0x06FD, i18n("Signs for Sindhi"));
+SUBCATEGORY_2(0x06FF, i18n("Extended Arabic letter for Parkari"));
+
+category = i18n("Syriac"); // 0700
+SUBCATEGORY_2(0x0700, i18n("Syriac punctuation and signs"));
+SUBCATEGORY_2(0x070F, i18n("Syriac format control character"));
+SUBCATEGORY_2(0x0710, i18n("Syriac letters"));
+SUBCATEGORY_2(0x072D, i18n("Persian letters"));
+SUBCATEGORY_2(0x0730, i18n("Syriac points (vowels)"));
+SUBCATEGORY_2(0x0740, i18n("Syriac marks"));
+SUBCATEGORY_2(0x074D, i18n("Sogdian letters"));
+
+category = i18n("Arabic Supplement"); // 0750
+SUBCATEGORY_2(0x0750, i18n("Extended Arabic letters"));
+SUBCATEGORY_2(0x076E, i18n("Additions for Khowar"));
+SUBCATEGORY_2(0x0772, i18n("Addition for Torwali"));
+SUBCATEGORY_2(0x0773, i18n("Additions for Burushaski"));
+SUBCATEGORY_2(0x077E, i18n("Additions for early Persian"));
+
+category = i18n("Thaana"); // 0780
+SUBCATEGORY_2(0x0780, i18n("Basic consonants"));
+SUBCATEGORY_2(0x0798, i18n("Extensions for Arabic"));
+SUBCATEGORY_2(0x07A6, i18n("Vowels"));
+SUBCATEGORY_2(0x07B1, i18n("Consonant for Addu dialect"));
+
+category = i18n("NKo"); // 07C0
+SUBCATEGORY_2(0x07C0, i18n("Digits"));
+SUBCATEGORY_2(0x07CA, i18n("Letters"));
+SUBCATEGORY_2(0x07E8, i18n("Archaic letters"));
+SUBCATEGORY_2(0x07EB, i18n("Tone marks"));
+SUBCATEGORY_2(0x07F2, i18n("Other diacritics"));
+SUBCATEGORY_2(0x07F4, i18n("Tonal apostrophes"));
+SUBCATEGORY_2(0x07F6, i18n("Symbol"));
+SUBCATEGORY_2(0x07F7, i18n("Punctuation"));
+SUBCATEGORY_2(0x07FA, i18n("Letter extender"));
+SUBCATEGORY_2(0x07FD, i18n("Abbreviation sign"));
+SUBCATEGORY_2(0x07FE, i18n("Currency symbols"));
+
+category = i18n("Samaritan"); // 0800
+SUBCATEGORY_2(0x0800, i18n("Letters"));
+SUBCATEGORY_2(0x0816, i18n("Consonant modifiers"));
+SUBCATEGORY_2(0x081C, i18n("Vowel signs"));
+SUBCATEGORY_2(0x082D, i18n("Variant reading sign"));
+SUBCATEGORY_2(0x0830, i18n("Punctuation"));
+
+category = i18n("Mandaic"); // 0840
+SUBCATEGORY_2(0x0840, i18n("Letters"));
+SUBCATEGORY_2(0x0859, i18n("Diacritics"));
+SUBCATEGORY_2(0x085E, i18n("Punctuation"));
+
+category = i18n("Syriac Supplement"); // 0860
+SUBCATEGORY_2(0x0860, i18n("Syriac letters"));
+
+category = i18n("Arabic Extended-B"); // 0870
+SUBCATEGORY_2(0x0870, i18n("Additions for Quranic orthographies"));
+SUBCATEGORY_2(0x0889, i18n("Additions for Bosnian orthographies"));
+SUBCATEGORY_2(0x088B, i18n("Additions for Pegon orthographies"));
+SUBCATEGORY_2(0x088E, i18n("Abbreviation mark"));
+SUBCATEGORY_2(0x088F, i18n("Addition for Eastern Punjabi orthographies"));
+SUBCATEGORY_2(0x0890, i18n("Supertending currency symbols"));
+SUBCATEGORY_2(0x0897, i18n("Vowel sign for Pegon"));
+SUBCATEGORY_2(0x0898, i18n("Additions for Quranic orthographies"));
+
+category = i18n("Arabic Extended-A"); // 08A0
+SUBCATEGORY_2(0x08A0, i18n("Arabic letters for African languages"));
+SUBCATEGORY_2(0x08AA, i18n("Dependent consonants for Rohingya"));
+SUBCATEGORY_2(0x08AD, i18n("Arabic letters for European and Central Asian languages"));
+SUBCATEGORY_2(0x08B2, i18n("Arabic letter for Berber"));
+SUBCATEGORY_2(0x08B3, i18n("Arabic letters for Arwi"));
+SUBCATEGORY_2(0x08B5, i18n("Early Arabic letter"));
+SUBCATEGORY_2(0x08B6, i18n("Arabic letters for Bravanese"));
+SUBCATEGORY_2(0x08BB, i18n("Arabic letters for Warsh orthography"));
+SUBCATEGORY_2(0x08BE, i18n("Arabic letters for Hindko"));
+SUBCATEGORY_2(0x08C3, i18n("Arabic letters for Hausa, Wolof and other African orthographies"));
+SUBCATEGORY_2(0x08C7, i18n("Arabic letter for Punjabi"));
+SUBCATEGORY_2(0x08C8, i18n("Arabic letter for Balti"));
+SUBCATEGORY_2(0x08C9, i18n("Additions for Quranic orthographies"));
+SUBCATEGORY_2(0x08D3, i18n("Quranic annotation signs"));
+SUBCATEGORY_2(0x08E3, i18n("Extended vowel sign for Arwi"));
+SUBCATEGORY_2(0x08E4, i18n("Extended vowel signs for Rohingya"));
+SUBCATEGORY_2(0x08EA, i18n("Tone marks for Rohingya"));
+SUBCATEGORY_2(0x08F0, i18n("Quranic annotation signs"));
+SUBCATEGORY_2(0x08F4, i18n("Extended vowel signs for African languages"));
+SUBCATEGORY_2(0x08FE, i18n("Extended vowel signs"));
+
+category = i18n("Devanagari"); // 0900
+SUBCATEGORY_2(0x0900, i18n("Various signs"));
+SUBCATEGORY_2(0x0904, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0915, i18n("Consonants"));
+SUBCATEGORY_2(0x093A, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x093C, i18n("Various signs"));
+SUBCATEGORY_2(0x093E, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x094D, i18n("Virama"));
+SUBCATEGORY_2(0x094E, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0950, i18n("Sign"));
+SUBCATEGORY_2(0x0951, i18n("Vedic tone marks"));
+SUBCATEGORY_2(0x0953, i18n("Accent marks"));
+SUBCATEGORY_2(0x0955, i18n("Dependent vowel sign"));
+SUBCATEGORY_2(0x0956, i18n("Dependent vowel signs for Kashmiri"));
+SUBCATEGORY_2(0x0958, i18n("Additional consonants"));
+SUBCATEGORY_2(0x0960, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x0964, i18n("Generic punctuation for scripts of India"));
+SUBCATEGORY_2(0x0966, i18n("Digits"));
+SUBCATEGORY_2(0x0970, i18n("Additional signs"));
+SUBCATEGORY_2(0x0972, i18n("Independent vowel for Marathi"));
+SUBCATEGORY_2(0x0973, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0976, i18n("Independent vowels for Kashmiri"));
+SUBCATEGORY_2(0x0978, i18n("Additional consonants"));
+SUBCATEGORY_2(0x097B, i18n("Sindhi implosives"));
+SUBCATEGORY_2(0x097D, i18n("Glottal stop"));
+SUBCATEGORY_2(0x097E, i18n("Sindhi implosives"));
+
+category = i18n("Bengali"); // 0980
+SUBCATEGORY_2(0x0980, i18n("Various signs"));
+SUBCATEGORY_2(0x0985, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0995, i18n("Consonants"));
+SUBCATEGORY_2(0x09BC, i18n("Various signs"));
+SUBCATEGORY_2(0x09BE, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x09CB, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x09CD, i18n("Virama"));
+SUBCATEGORY_2(0x09CE, i18n("Additional consonant"));
+SUBCATEGORY_2(0x09D7, i18n("Sign"));
+SUBCATEGORY_2(0x09DC, i18n("Additional consonants"));
+SUBCATEGORY_2(0x09E0, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x09E4, i18n("Reserved"));
+SUBCATEGORY_2(0x09E6, i18n("Digits"));
+SUBCATEGORY_2(0x09F0, i18n("Additions for Assamese"));
+SUBCATEGORY_2(0x09F2, i18n("Currency symbols"));
+SUBCATEGORY_2(0x09F4, i18n("Historic symbols for fractional values"));
+SUBCATEGORY_2(0x09FA, i18n("Sign"));
+SUBCATEGORY_2(0x09FB, i18n("Historic currency sign"));
+SUBCATEGORY_2(0x09FC, i18n("Signs"));
+
+category = i18n("Gurmukhi"); // 0A00
+SUBCATEGORY_2(0x0A01, i18n("Various signs"));
+SUBCATEGORY_2(0x0A05, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0A15, i18n("Consonants"));
+SUBCATEGORY_2(0x0A3C, i18n("Various signs"));
+SUBCATEGORY_2(0x0A3E, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0A4D, i18n("Virama"));
+SUBCATEGORY_2(0x0A51, i18n("Sign"));
+SUBCATEGORY_2(0x0A59, i18n("Additional consonants"));
+SUBCATEGORY_2(0x0A64, i18n("Reserved"));
+SUBCATEGORY_2(0x0A66, i18n("Digits"));
+SUBCATEGORY_2(0x0A70, i18n("Signs"));
+SUBCATEGORY_2(0x0A72, i18n("Vowel bases"));
+SUBCATEGORY_2(0x0A74, i18n("Signs"));
+
+category = i18n("Gujarati"); // 0A80
+SUBCATEGORY_2(0x0A81, i18n("Various signs"));
+SUBCATEGORY_2(0x0A85, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0A95, i18n("Consonants"));
+SUBCATEGORY_2(0x0ABC, i18n("Various signs"));
+SUBCATEGORY_2(0x0ABE, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0ACD, i18n("Virama"));
+SUBCATEGORY_2(0x0AD0, i18n("Various signs"));
+SUBCATEGORY_2(0x0AE0, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x0AE4, i18n("Reserved"));
+SUBCATEGORY_2(0x0AE6, i18n("Digits"));
+SUBCATEGORY_2(0x0AF0, i18n("Abbreviation sign"));
+SUBCATEGORY_2(0x0AF1, i18n("Currency symbol"));
+SUBCATEGORY_2(0x0AF9, i18n("Additional consonant"));
+SUBCATEGORY_2(0x0AFA, i18n("Transliteration signs"));
+
+category = i18n("Oriya"); // 0B00
+SUBCATEGORY_2(0x0B01, i18n("Various signs"));
+SUBCATEGORY_2(0x0B05, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0B15, i18n("Consonants"));
+SUBCATEGORY_2(0x0B3C, i18n("Various signs"));
+SUBCATEGORY_2(0x0B3E, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0B4B, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x0B4D, i18n("Virama"));
+SUBCATEGORY_2(0x0B55, i18n("Various signs"));
+SUBCATEGORY_2(0x0B5C, i18n("Additional consonants"));
+SUBCATEGORY_2(0x0B60, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x0B62, i18n("Dependent vowels"));
+SUBCATEGORY_2(0x0B64, i18n("Reserved"));
+SUBCATEGORY_2(0x0B66, i18n("Digits"));
+SUBCATEGORY_2(0x0B70, i18n("Sign"));
+SUBCATEGORY_2(0x0B71, i18n("Additional consonant"));
+SUBCATEGORY_2(0x0B72, i18n("Fraction signs"));
+
+category = i18n("Tamil"); // 0B80
+SUBCATEGORY_2(0x0B82, i18n("Various signs"));
+SUBCATEGORY_2(0x0B85, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0B95, i18n("Consonants"));
+SUBCATEGORY_2(0x0BBE, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0BCA, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x0BCD, i18n("Virama"));
+SUBCATEGORY_2(0x0BD0, i18n("Various signs"));
+SUBCATEGORY_2(0x0BE4, i18n("Reserved"));
+SUBCATEGORY_2(0x0BE6, i18n("Digits"));
+SUBCATEGORY_2(0x0BF0, i18n("Tamil numerics"));
+SUBCATEGORY_2(0x0BF3, i18n("Tamil calendrical symbols"));
+SUBCATEGORY_2(0x0BF6, i18n("Tamil clerical symbols"));
+SUBCATEGORY_2(0x0BF9, i18n("Currency symbol"));
+SUBCATEGORY_2(0x0BFA, i18n("Tamil clerical symbol"));
+
+category = i18n("Telugu"); // 0C00
+SUBCATEGORY_2(0x0C00, i18n("Various signs"));
+SUBCATEGORY_2(0x0C05, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0C15, i18n("Consonants"));
+SUBCATEGORY_2(0x0C3C, i18n("Sign"));
+SUBCATEGORY_2(0x0C3D, i18n("Addition for Sanskrit"));
+SUBCATEGORY_2(0x0C3E, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0C4D, i18n("Virama"));
+SUBCATEGORY_2(0x0C55, i18n("Various signs"));
+SUBCATEGORY_2(0x0C58, i18n("Historic phonetic variants"));
+SUBCATEGORY_2(0x0C5C, i18n("Ligature"));
+SUBCATEGORY_2(0x0C5D, i18n("Consonant"));
+SUBCATEGORY_2(0x0C60, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x0C62, i18n("Dependent vowels"));
+SUBCATEGORY_2(0x0C64, i18n("Reserved"));
+SUBCATEGORY_2(0x0C66, i18n("Digits"));
+SUBCATEGORY_2(0x0C77, i18n("Sign"));
+SUBCATEGORY_2(0x0C78, i18n("Telugu fractions and weights"));
+
+category = i18n("Kannada"); // 0C80
+SUBCATEGORY_2(0x0C80, i18n("Various signs"));
+SUBCATEGORY_2(0x0C85, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0C95, i18n("Consonants"));
+SUBCATEGORY_2(0x0CBC, i18n("Various signs"));
+SUBCATEGORY_2(0x0CBE, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0CCD, i18n("Virama"));
+SUBCATEGORY_2(0x0CD5, i18n("Various signs"));
+SUBCATEGORY_2(0x0CDC, i18n("Ligature"));
+SUBCATEGORY_2(0x0CDD, i18n("Additional consonants"));
+SUBCATEGORY_2(0x0CE0, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x0CE2, i18n("Dependent vowels"));
+SUBCATEGORY_2(0x0CE4, i18n("Reserved"));
+SUBCATEGORY_2(0x0CE6, i18n("Digits"));
+SUBCATEGORY_2(0x0CF1, i18n("Signs used in Sanskrit"));
+
+category = i18n("Malayalam"); // 0D00
+SUBCATEGORY_2(0x0D00, i18n("Various signs"));
+SUBCATEGORY_2(0x0D05, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0D15, i18n("Consonants"));
+SUBCATEGORY_2(0x0D3B, i18n("Variant shape viramas"));
+SUBCATEGORY_2(0x0D3D, i18n("Addition for Sanskrit"));
+SUBCATEGORY_2(0x0D3E, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0D4A, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x0D4D, i18n("Virama"));
+SUBCATEGORY_2(0x0D4E, i18n("Dot reph"));
+SUBCATEGORY_2(0x0D4F, i18n("Measurement symbol"));
+SUBCATEGORY_2(0x0D54, i18n("Additional historic chillu letters"));
+SUBCATEGORY_2(0x0D57, i18n("Dependent vowel sign"));
+SUBCATEGORY_2(0x0D58, i18n("Minor fractions"));
+SUBCATEGORY_2(0x0D5F, i18n("Additional historic vowel"));
+SUBCATEGORY_2(0x0D60, i18n("Additional vowels for Sanskrit"));
+SUBCATEGORY_2(0x0D62, i18n("Dependent vowels"));
+SUBCATEGORY_2(0x0D64, i18n("Reserved"));
+SUBCATEGORY_2(0x0D66, i18n("Digits"));
+SUBCATEGORY_2(0x0D70, i18n("Malayalam numerics"));
+SUBCATEGORY_2(0x0D73, i18n("Fractions"));
+SUBCATEGORY_2(0x0D79, i18n("Date mark"));
+SUBCATEGORY_2(0x0D7A, i18n("Chillu letters"));
+
+category = i18n("Sinhala"); // 0D80
+SUBCATEGORY_2(0x0D81, i18n("Various signs"));
+SUBCATEGORY_2(0x0D85, i18n("Independent vowels"));
+SUBCATEGORY_2(0x0D9A, i18n("Consonants"));
+SUBCATEGORY_2(0x0DCA, i18n("Sign"));
+SUBCATEGORY_2(0x0DCF, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0DDC, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x0DDF, i18n("Dependent vowel sign"));
+SUBCATEGORY_2(0x0DE6, i18n("Astrological digits"));
+SUBCATEGORY_2(0x0DF2, i18n("Additional dependent vowel signs"));
+SUBCATEGORY_2(0x0DF4, i18n("Punctuation"));
+
+category = i18n("Thai"); // 0E00
+SUBCATEGORY_2(0x0E01, i18n("Consonants"));
+SUBCATEGORY_2(0x0E2F, i18n("Sign"));
+SUBCATEGORY_2(0x0E30, i18n("Vowels"));
+SUBCATEGORY_2(0x0E3F, i18n("Currency symbol"));
+SUBCATEGORY_2(0x0E40, i18n("Vowels"));
+SUBCATEGORY_2(0x0E45, i18n("Vowel length sign"));
+SUBCATEGORY_2(0x0E46, i18n("Repetition mark"));
+SUBCATEGORY_2(0x0E47, i18n("Vowel"));
+SUBCATEGORY_2(0x0E48, i18n("Tone marks"));
+SUBCATEGORY_2(0x0E4C, i18n("Signs"));
+SUBCATEGORY_2(0x0E50, i18n("Digits"));
+SUBCATEGORY_2(0x0E5A, i18n("Signs"));
+
+category = i18n("Lao"); // 0E80
+SUBCATEGORY_2(0x0E81, i18n("Consonants"));
+SUBCATEGORY_2(0x0EAF, i18n("Sign"));
+SUBCATEGORY_2(0x0EB0, i18n("Vowels"));
+SUBCATEGORY_2(0x0EBA, i18n("Virama"));
+SUBCATEGORY_2(0x0EBB, i18n("Vowel"));
+SUBCATEGORY_2(0x0EBC, i18n("Signs"));
+SUBCATEGORY_2(0x0EC0, i18n("Vowels"));
+SUBCATEGORY_2(0x0EC6, i18n("Repetition mark"));
+SUBCATEGORY_2(0x0EC8, i18n("Tone marks"));
+SUBCATEGORY_2(0x0ECC, i18n("Signs"));
+SUBCATEGORY_2(0x0ED0, i18n("Digits"));
+SUBCATEGORY_2(0x0EDC, i18n("Digraphs"));
+SUBCATEGORY_2(0x0EDE, i18n("Consonants for Khmu"));
+
+category = i18n("Tibetan"); // 0F00
+SUBCATEGORY_2(0x0F00, i18n("Syllable"));
+SUBCATEGORY_2(0x0F01, i18n("Head marks"));
+SUBCATEGORY_2(0x0F08, i18n("Marks and signs"));
+SUBCATEGORY_2(0x0F15, i18n("Astrological signs"));
+SUBCATEGORY_2(0x0F20, i18n("Digits"));
+SUBCATEGORY_2(0x0F2A, i18n("Digits minus half"));
+SUBCATEGORY_2(0x0F34, i18n("Marks and signs"));
+SUBCATEGORY_2(0x0F3A, i18n("Paired punctuation"));
+SUBCATEGORY_2(0x0F3E, i18n("Astrological signs"));
+SUBCATEGORY_2(0x0F40, i18n("Consonants"));
+SUBCATEGORY_2(0x0F6B, i18n("Extensions for Balti"));
+SUBCATEGORY_2(0x0F71, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0F7E, i18n("Vocalic modification"));
+SUBCATEGORY_2(0x0F80, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x0F82, i18n("Marks and signs"));
+SUBCATEGORY_2(0x0F88, i18n("Transliteration head letters"));
+SUBCATEGORY_2(0x0F8D, i18n("Transliteration subjoined signs"));
+SUBCATEGORY_2(0x0F90, i18n("Subjoined consonants"));
+SUBCATEGORY_2(0x0FBA, i18n("Fixed-form subjoined consonants"));
+SUBCATEGORY_2(0x0FBE, i18n("Signs"));
+SUBCATEGORY_2(0x0FC0, i18n("Cantillation signs"));
+SUBCATEGORY_2(0x0FC4, i18n("Symbols"));
+SUBCATEGORY_2(0x0FCE, i18n("Astrological signs"));
+SUBCATEGORY_2(0x0FD0, i18n("Marks"));
+SUBCATEGORY_2(0x0FD3, i18n("Head marks"));
+SUBCATEGORY_2(0x0FD5, i18n("Religious symbols"));
+SUBCATEGORY_2(0x0FD9, i18n("Annotation marks"));
+
+category = i18n("Myanmar"); // 1000
+SUBCATEGORY_2(0x1000, i18n("Consonants"));
+SUBCATEGORY_2(0x1021, i18n("Independent vowels"));
+SUBCATEGORY_2(0x102B, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1036, i18n("Various signs"));
+SUBCATEGORY_2(0x1039, i18n("Virama and killer"));
+SUBCATEGORY_2(0x103B, i18n("Dependent consonant signs"));
+SUBCATEGORY_2(0x103F, i18n("Consonant"));
+SUBCATEGORY_2(0x1040, i18n("Digits"));
+SUBCATEGORY_2(0x104A, i18n("Punctuation"));
+SUBCATEGORY_2(0x104C, i18n("Various signs"));
+SUBCATEGORY_2(0x1050, i18n("Pali and Sanskrit extensions"));
+SUBCATEGORY_2(0x105A, i18n("Extensions for Mon"));
+SUBCATEGORY_2(0x1061, i18n("Extensions for S'gaw Karen"));
+SUBCATEGORY_2(0x1065, i18n("Extensions for Western Pwo Karen"));
+SUBCATEGORY_2(0x106E, i18n("Extensions for Eastern Pwo Karen"));
+SUBCATEGORY_2(0x1071, i18n("Extension for Geba Karen"));
+SUBCATEGORY_2(0x1072, i18n("Extensions for Kayah"));
+SUBCATEGORY_2(0x1075, i18n("Extensions for Shan"));
+SUBCATEGORY_2(0x108E, i18n("Extensions for Rumai Palaung"));
+SUBCATEGORY_2(0x1090, i18n("Shan digits"));
+SUBCATEGORY_2(0x109A, i18n("Extensions for Khamti Shan"));
+SUBCATEGORY_2(0x109C, i18n("Extensions for Aiton and Phake"));
+SUBCATEGORY_2(0x109E, i18n("Shan symbols"));
+
+category = i18n("Georgian"); // 10A0
+SUBCATEGORY_2(0x10A0, i18n("Capital letters (Khutsuri)"));
+SUBCATEGORY_2(0x10C7, i18n("Additional letter"));
+SUBCATEGORY_2(0x10CD, i18n("Additional letter for Ossetian"));
+SUBCATEGORY_2(0x10D0, i18n("Mkhedruli"));
+SUBCATEGORY_2(0x10F1, i18n("Archaic letters"));
+SUBCATEGORY_2(0x10F7, i18n("Additional letters for Mingrelian and Svan"));
+SUBCATEGORY_2(0x10F9, i18n("Additional letters"));
+SUBCATEGORY_2(0x10FB, i18n("Punctuation"));
+SUBCATEGORY_2(0x10FC, i18n("Modifier letter"));
+SUBCATEGORY_2(0x10FD, i18n("Additional letters for Ossetian and Abkhaz"));
+
+category = i18n("Hangul Jamo"); // 1100
+SUBCATEGORY_2(0x1100, i18n("Initial consonants"));
+SUBCATEGORY_2(0x1113, i18n("Old initial consonants"));
+SUBCATEGORY_2(0x1160, i18n("Medial vowels"));
+SUBCATEGORY_2(0x1176, i18n("Old medial vowels"));
+SUBCATEGORY_2(0x11A8, i18n("Final consonants"));
+SUBCATEGORY_2(0x11C3, i18n("Old final consonants"));
+
+category = i18n("Ethiopic"); // 1200
+SUBCATEGORY_2(0x1200, i18n("Syllables"));
+SUBCATEGORY_2(0x135D, i18n("Combining marks"));
+SUBCATEGORY_2(0x1360, i18n("Punctuation"));
+SUBCATEGORY_2(0x1369, i18n("Digits"));
+SUBCATEGORY_2(0x1372, i18n("Numbers"));
+
+category = i18n("Ethiopic Supplement"); // 1380
+SUBCATEGORY_2(0x1380, i18n("Syllables for Gurage"));
+SUBCATEGORY_2(0x1390, i18n("Tonal marks"));
+
+category = i18n("Cherokee"); // 13A0
+SUBCATEGORY_2(0x13A0, i18n("Uppercase syllables"));
+SUBCATEGORY_2(0x13F5, i18n("Archaic uppercase syllable"));
+SUBCATEGORY_2(0x13F8, i18n("Lowercase syllables"));
+SUBCATEGORY_2(0x13FD, i18n("Archaic lowercase syllable"));
+
+category = i18n("Unified Canadian Aboriginal Syllabics"); // 1400
+SUBCATEGORY_2(0x1400, i18n("Punctuation"));
+SUBCATEGORY_2(0x1401, i18n("Syllables"));
+SUBCATEGORY_2(0x15C4, i18n("Syllables for Carrier"));
+SUBCATEGORY_2(0x166D, i18n("Symbol"));
+SUBCATEGORY_2(0x166E, i18n("Punctuation"));
+SUBCATEGORY_2(0x166F, i18n("Syllables"));
+
+category = i18n("Ogham"); // 1680
+SUBCATEGORY_2(0x1680, i18n("Space"));
+SUBCATEGORY_2(0x1681, i18n("Traditional letters"));
+SUBCATEGORY_2(0x1695, i18n("Forfeda (supplementary letters)"));
+SUBCATEGORY_2(0x169B, i18n("Punctuation"));
+
+category = i18n("Runic"); // 16A0
+SUBCATEGORY_2(0x16A0, i18n("Letters"));
+SUBCATEGORY_2(0x16EB, i18n("Punctuation"));
+SUBCATEGORY_2(0x16EE, i18n("Golden number runes"));
+SUBCATEGORY_2(0x16F1, i18n("Tolkienian extensions"));
+SUBCATEGORY_2(0x16F4, i18n("Cryptogrammic letters"));
+
+category = i18n("Tagalog"); // 1700
+SUBCATEGORY_2(0x1700, i18n("Independent vowels"));
+SUBCATEGORY_2(0x1703, i18n("Consonants"));
+SUBCATEGORY_2(0x1712, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1714, i18n("Viramas"));
+SUBCATEGORY_2(0x171F, i18n("Archaic letter"));
+
+category = i18n("Hanunoo"); // 1720
+SUBCATEGORY_2(0x1720, i18n("Independent vowels"));
+SUBCATEGORY_2(0x1723, i18n("Consonants"));
+SUBCATEGORY_2(0x1732, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1734, i18n("Virama"));
+SUBCATEGORY_2(0x1735, i18n("Generic punctuation for Philippine scripts"));
+
+category = i18n("Buhid"); // 1740
+SUBCATEGORY_2(0x1740, i18n("Independent vowels"));
+SUBCATEGORY_2(0x1743, i18n("Consonants"));
+SUBCATEGORY_2(0x1752, i18n("Dependent vowel signs"));
+
+category = i18n("Tagbanwa"); // 1760
+SUBCATEGORY_2(0x1760, i18n("Independent vowels"));
+SUBCATEGORY_2(0x1763, i18n("Consonants"));
+SUBCATEGORY_2(0x1772, i18n("Dependent vowel signs"));
+
+category = i18n("Khmer"); // 1780
+SUBCATEGORY_2(0x1780, i18n("Consonants"));
+SUBCATEGORY_2(0x17A3, i18n("Deprecated independent vowels for transliteration"));
+SUBCATEGORY_2(0x17A5, i18n("Independent vowels"));
+SUBCATEGORY_2(0x17B4, i18n("Inherent vowels"));
+SUBCATEGORY_2(0x17B6, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x17BE, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x17C1, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x17C4, i18n("Two-part dependent vowel signs"));
+SUBCATEGORY_2(0x17C6, i18n("Various signs"));
+SUBCATEGORY_2(0x17C9, i18n("Consonant shifters"));
+SUBCATEGORY_2(0x17CB, i18n("Various signs"));
+SUBCATEGORY_2(0x17D3, i18n("Lunar date sign"));
+SUBCATEGORY_2(0x17D4, i18n("Various signs"));
+SUBCATEGORY_2(0x17DB, i18n("Currency symbol"));
+SUBCATEGORY_2(0x17DC, i18n("Various signs"));
+SUBCATEGORY_2(0x17E0, i18n("Digits"));
+SUBCATEGORY_2(0x17F0, i18n("Numeric symbols for divination lore"));
+
+category = i18n("Mongolian"); // 1800
+SUBCATEGORY_2(0x1800, i18n("Punctuation"));
+SUBCATEGORY_2(0x180B, i18n("Format controls"));
+SUBCATEGORY_2(0x1810, i18n("Digits"));
+SUBCATEGORY_2(0x1820, i18n("Basic letters"));
+SUBCATEGORY_2(0x1843, i18n("Todo letters"));
+SUBCATEGORY_2(0x185D, i18n("Sibe letters"));
+SUBCATEGORY_2(0x1873, i18n("Manchu letters"));
+SUBCATEGORY_2(0x1878, i18n("Buryat letter"));
+SUBCATEGORY_2(0x1880, i18n("Extensions for Sanskrit and Tibetan"));
+
+category = i18n("Unified Canadian Aboriginal Syllabics Extended"); // 18B0
+SUBCATEGORY_2(0x18B0, i18n("Syllables for Moose Cree"));
+SUBCATEGORY_2(0x18C6, i18n("Syllables for Cree and Ojibway"));
+SUBCATEGORY_2(0x18D4, i18n("Finals for Cree and Ojibway"));
+SUBCATEGORY_2(0x18E0, i18n("Syllables for Beaver Dene, Hare Dene, and Chipewyan Dene"));
+SUBCATEGORY_2(0x18F3, i18n("Finals for Dene and Carrier"));
+
+category = i18n("Limbu"); // 1900
+SUBCATEGORY_2(0x1900, i18n("Consonants"));
+SUBCATEGORY_2(0x1920, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1929, i18n("Subjoined consonants"));
+SUBCATEGORY_2(0x1930, i18n("Final consonants"));
+SUBCATEGORY_2(0x1939, i18n("Various signs"));
+SUBCATEGORY_2(0x1946, i18n("Digits"));
+
+category = i18n("Tai Le"); // 1950
+SUBCATEGORY_2(0x1950, i18n("Consonants"));
+SUBCATEGORY_2(0x1963, i18n("Vowels"));
+SUBCATEGORY_2(0x1970, i18n("Tone letters"));
+
+category = i18n("New Tai Lue"); // 1980
+SUBCATEGORY_2(0x1980, i18n("Consonants"));
+SUBCATEGORY_2(0x19B0, i18n("Vowels"));
+SUBCATEGORY_2(0x19C1, i18n("Final consonants"));
+SUBCATEGORY_2(0x19C8, i18n("Tone marks"));
+SUBCATEGORY_2(0x19D0, i18n("Digits"));
+SUBCATEGORY_2(0x19DE, i18n("Various signs"));
+
+category = i18n("Khmer Symbols"); // 19E0
+SUBCATEGORY_2(0x19E0, i18n("Lunar date symbols"));
+
+category = i18n("Buginese"); // 1A00
+SUBCATEGORY_2(0x1A00, i18n("Consonants"));
+SUBCATEGORY_2(0x1A17, i18n("Vowels"));
+SUBCATEGORY_2(0x1A1E, i18n("Various signs"));
+
+category = i18n("Tai Tham"); // 1A20
+SUBCATEGORY_2(0x1A20, i18n("Consonants"));
+SUBCATEGORY_2(0x1A4D, i18n("Independent vowels"));
+SUBCATEGORY_2(0x1A53, i18n("Consonants"));
+SUBCATEGORY_2(0x1A55, i18n("Consonant signs"));
+SUBCATEGORY_2(0x1A60, i18n("Sign"));
+SUBCATEGORY_2(0x1A61, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1A75, i18n("Tone marks"));
+SUBCATEGORY_2(0x1A7A, i18n("Other marks"));
+SUBCATEGORY_2(0x1A7F, i18n("Cryptogrammic mark"));
+SUBCATEGORY_2(0x1A80, i18n("Hora digits"));
+SUBCATEGORY_2(0x1A90, i18n("Tham digits"));
+SUBCATEGORY_2(0x1AA0, i18n("Logographs"));
+SUBCATEGORY_2(0x1AA3, i18n("Punctuation"));
+SUBCATEGORY_2(0x1AA7, i18n("Sign"));
+SUBCATEGORY_2(0x1AA8, i18n("Punctuation"));
+
+category = i18n("Combining Diacritical Marks Extended"); // 1AB0
+SUBCATEGORY_2(0x1AB0, i18n("Used in German dialectology"));
+SUBCATEGORY_2(0x1ABB, i18n("Marks surrounding other diacritics or letters"));
+SUBCATEGORY_2(0x1ABF, i18n("Used in Scots dialectology"));
+SUBCATEGORY_2(0x1AC1, i18n("Marks next to or surrounding other diacritics"));
+SUBCATEGORY_2(0x1AC6, i18n("Phonetic sign"));
+SUBCATEGORY_2(0x1AC7, i18n("Used in extended IPA"));
+SUBCATEGORY_2(0x1ACB, i18n("Used in Middle English Ormulum"));
+SUBCATEGORY_2(0x1ACF, i18n("Compound tone diacritics"));
+SUBCATEGORY_2(0x1AD9, i18n("J.P. Harrington diacritics"));
+SUBCATEGORY_2(0x1AE0, i18n("IPA positional variants"));
+SUBCATEGORY_2(0x1AE6, i18n("Historical IPA"));
+SUBCATEGORY_2(0x1AE8, i18n("Extended IPA positional variants"));
+
+category = i18n("Balinese"); // 1B00
+SUBCATEGORY_2(0x1B00, i18n("Various signs"));
+SUBCATEGORY_2(0x1B05, i18n("Independent vowels"));
+SUBCATEGORY_2(0x1B13, i18n("Consonants"));
+SUBCATEGORY_2(0x1B34, i18n("Sign"));
+SUBCATEGORY_2(0x1B35, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1B44, i18n("Sign"));
+SUBCATEGORY_2(0x1B45, i18n("Additional consonants"));
+SUBCATEGORY_2(0x1B4E, i18n("Punctuation"));
+SUBCATEGORY_2(0x1B50, i18n("Digits"));
+SUBCATEGORY_2(0x1B5A, i18n("Punctuation"));
+SUBCATEGORY_2(0x1B61, i18n("Musical symbols for notes"));
+SUBCATEGORY_2(0x1B6B, i18n("Diacritical marks for musical symbols"));
+SUBCATEGORY_2(0x1B74, i18n("Musical symbols"));
+SUBCATEGORY_2(0x1B7D, i18n("Punctuation"));
+
+category = i18n("Sundanese"); // 1B80
+SUBCATEGORY_2(0x1B80, i18n("Various signs"));
+SUBCATEGORY_2(0x1B83, i18n("Vowels"));
+SUBCATEGORY_2(0x1B8A, i18n("Consonants"));
+SUBCATEGORY_2(0x1BA1, i18n("Consonant signs"));
+SUBCATEGORY_2(0x1BA4, i18n("Vowel signs"));
+SUBCATEGORY_2(0x1BAA, i18n("Viramas"));
+SUBCATEGORY_2(0x1BAC, i18n("Consonant signs"));
+SUBCATEGORY_2(0x1BAE, i18n("Additional consonants"));
+SUBCATEGORY_2(0x1BB0, i18n("Digits"));
+SUBCATEGORY_2(0x1BBA, i18n("Sign"));
+SUBCATEGORY_2(0x1BBB, i18n("Historic letters"));
+
+category = i18n("Batak"); // 1BC0
+SUBCATEGORY_2(0x1BC0, i18n("Letters"));
+SUBCATEGORY_2(0x1BE6, i18n("Sign"));
+SUBCATEGORY_2(0x1BE7, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0x1BF0, i18n("Dependent consonant signs"));
+SUBCATEGORY_2(0x1BF2, i18n("Signs"));
+SUBCATEGORY_2(0x1BFC, i18n("Punctuation"));
+
+category = i18n("Lepcha"); // 1C00
+SUBCATEGORY_2(0x1C00, i18n("Consonants"));
+SUBCATEGORY_2(0x1C24, i18n("Subjoined consonants"));
+SUBCATEGORY_2(0x1C26, i18n("Dependent vowels"));
+SUBCATEGORY_2(0x1C2D, i18n("Consonant signs"));
+SUBCATEGORY_2(0x1C36, i18n("Various signs"));
+SUBCATEGORY_2(0x1C3B, i18n("Punctuation"));
+SUBCATEGORY_2(0x1C40, i18n("Digits"));
+SUBCATEGORY_2(0x1C4D, i18n("Additional letters"));
+
+category = i18n("Ol Chiki"); // 1C50
+SUBCATEGORY_2(0x1C50, i18n("Digits"));
+SUBCATEGORY_2(0x1C5A, i18n("Letters"));
+SUBCATEGORY_2(0x1C78, i18n("Modifier letters"));
+SUBCATEGORY_2(0x1C7E, i18n("Punctuation"));
+
+category = i18n("Cyrillic Extended-C"); // 1C80
+SUBCATEGORY_2(0x1C80, i18n("Historic letter variants"));
+SUBCATEGORY_2(0x1C89, i18n("Khanty letters"));
+
+category = i18n("Georgian Extended"); // 1C90
+SUBCATEGORY_2(0x1C90, i18n("Capital letters (Mtavruli)"));
+SUBCATEGORY_2(0x1CB1, i18n("Archaic letters"));
+SUBCATEGORY_2(0x1CB7, i18n("Additional letters for Mingrelian and Svan"));
+SUBCATEGORY_2(0x1CB9, i18n("Additional letters"));
+SUBCATEGORY_2(0x1CBD, i18n("Additional letters for Ossetian and Abkhaz"));
+
+category = i18n("Sundanese Supplement"); // 1CC0
+SUBCATEGORY_2(0x1CC0, i18n("Punctuation"));
+
+category = i18n("Vedic Extensions"); // 1CD0
+SUBCATEGORY_2(0x1CD0, i18n("Tone marks for the Samaveda"));
+SUBCATEGORY_2(0x1CD3, i18n("Breathing mark for the Samaveda"));
+SUBCATEGORY_2(0x1CD4, i18n("Signs for Yajurvedic"));
+SUBCATEGORY_2(0x1CDE, i18n("Tone marks for the Satapathabrahmana"));
+SUBCATEGORY_2(0x1CE0, i18n("Tone mark for the Rigveda"));
+SUBCATEGORY_2(0x1CE1, i18n("Tone mark for the Atharvaveda"));
+SUBCATEGORY_2(0x1CE2, i18n("Diacritics for visarga"));
+SUBCATEGORY_2(0x1CE9, i18n("Nasalization signs"));
+SUBCATEGORY_2(0x1CF2, i18n("Ardhavisarga"));
+SUBCATEGORY_2(0x1CF4, i18n("Sign for Yajurvedic"));
+SUBCATEGORY_2(0x1CF5, i18n("Signs"));
+SUBCATEGORY_2(0x1CF8, i18n("Signs for Jaiminiya Sama Veda"));
+SUBCATEGORY_2(0x1CFA, i18n("Nasalization sign"));
+
+category = i18n("Phonetic Extensions"); // 1D00
+SUBCATEGORY_2(0x1D00, i18n("Latin letters"));
+SUBCATEGORY_2(0x1D26, i18n("Greek letters"));
+SUBCATEGORY_2(0x1D2B, i18n("Cyrillic letter"));
+SUBCATEGORY_2(0x1D2C, i18n("Latin superscript modifier letters"));
+SUBCATEGORY_2(0x1D5D, i18n("Greek superscript modifier letters"));
+SUBCATEGORY_2(0x1D62, i18n("Latin subscript modifier letters"));
+SUBCATEGORY_2(0x1D66, i18n("Greek subscript modifier letters"));
+SUBCATEGORY_2(0x1D6B, i18n("Latin letter for American lexicography"));
+SUBCATEGORY_2(0x1D6C, i18n("Latin letters with middle tilde"));
+SUBCATEGORY_2(0x1D77, i18n("Letters for Caucasian linguistics"));
+SUBCATEGORY_2(0x1D79, i18n("Other phonetic symbols"));
+
+category = i18n("Phonetic Extensions Supplement"); // 1D80
+SUBCATEGORY_2(0x1D80, i18n("Latin letters with palatal hook"));
+SUBCATEGORY_2(0x1D8F, i18n("Latin letters with retroflex hook"));
+SUBCATEGORY_2(0x1D9B, i18n("Modifier letters"));
+
+category = i18n("Combining Diacritical Marks Supplement"); // 1DC0
+SUBCATEGORY_2(0x1DC0, i18n("Used for Ancient Greek"));
+SUBCATEGORY_2(0x1DC2, i18n("Miscellaneous marks"));
+SUBCATEGORY_2(0x1DC4, i18n("Contour tone marks"));
+SUBCATEGORY_2(0x1DCA, i18n("Miscellaneous mark"));
+SUBCATEGORY_2(0x1DCB, i18n("Contour tone marks"));
+SUBCATEGORY_2(0x1DCD, i18n("Double diacritic"));
+SUBCATEGORY_2(0x1DCE, i18n("Medievalist additions"));
+SUBCATEGORY_2(0x1DD3, i18n("Medieval superscript letter diacritics"));
+SUBCATEGORY_2(0x1DE7, i18n("Superscript letter diacritics for German dialectology"));
+SUBCATEGORY_2(0x1DF5, i18n("Diacritic for American lexicography"));
+SUBCATEGORY_2(0x1DF6, i18n("Typicon marks"));
+SUBCATEGORY_2(0x1DF8, i18n("Miscellaneous marks"));
+SUBCATEGORY_2(0x1DFC, i18n("Double diacritic mark for UPA"));
+SUBCATEGORY_2(0x1DFD, i18n("Miscellaneous mark"));
+SUBCATEGORY_2(0x1DFE, i18n("Additional marks for UPA"));
+
+category = i18n("Latin Extended Additional"); // 1E00
+SUBCATEGORY_2(0x1E00, i18n("Latin general use extensions"));
+SUBCATEGORY_2(0x1E9C, i18n("Medievalist additions"));
+SUBCATEGORY_2(0x1E9E, i18n("Addition for German typography"));
+SUBCATEGORY_2(0x1E9F, i18n("Medievalist addition"));
+SUBCATEGORY_2(0x1EA0, i18n("Latin extensions for Vietnamese"));
+SUBCATEGORY_2(0x1EF2, i18n("Latin general extensions"));
+SUBCATEGORY_2(0x1EFA, i18n("Medievalist additions"));
+
+category = i18n("Greek Extended"); // 1F00
+SUBCATEGORY_2(0x1F00, i18n("Precomposed polytonic Greek"));
+
+category = i18n("General Punctuation"); // 2000
+SUBCATEGORY_2(0x2000, i18n("Spaces"));
+SUBCATEGORY_2(0x200B, i18n("Format characters"));
+SUBCATEGORY_2(0x2010, i18n("Dashes"));
+SUBCATEGORY_2(0x2016, i18n("General punctuation"));
+SUBCATEGORY_2(0x2018, i18n("Quotation marks and apostrophe"));
+SUBCATEGORY_2(0x2020, i18n("General punctuation"));
+SUBCATEGORY_2(0x2028, i18n("Separators"));
+SUBCATEGORY_2(0x202A, i18n("Format characters"));
+SUBCATEGORY_2(0x202F, i18n("Space"));
+SUBCATEGORY_2(0x2030, i18n("General punctuation"));
+SUBCATEGORY_2(0x2039, i18n("Quotation marks"));
+SUBCATEGORY_2(0x203B, i18n("General punctuation"));
+SUBCATEGORY_2(0x203C, i18n("Double punctuation for vertical text"));
+SUBCATEGORY_2(0x203D, i18n("General punctuation"));
+SUBCATEGORY_2(0x2045, i18n("Brackets"));
+SUBCATEGORY_2(0x2047, i18n("Double punctuation for vertical text"));
+SUBCATEGORY_2(0x204A, i18n("General punctuation"));
+SUBCATEGORY_2(0x2056, i18n("Archaic punctuation"));
+SUBCATEGORY_2(0x2057, i18n("General punctuation"));
+SUBCATEGORY_2(0x2058, i18n("Archaic punctuation"));
+SUBCATEGORY_2(0x205F, i18n("Space"));
+SUBCATEGORY_2(0x2060, i18n("Format character"));
+SUBCATEGORY_2(0x2061, i18n("Invisible operators"));
+SUBCATEGORY_2(0x2066, i18n("Format characters"));
+SUBCATEGORY_2(0x206A, i18n("Deprecated"));
+
+category = i18n("Superscripts and Subscripts"); // 2070
+SUBCATEGORY_2(0x2070, i18n("Superscripts"));
+SUBCATEGORY_2(0x2080, i18n("Subscripts"));
+SUBCATEGORY_2(0x2095, i18n("Subscripts for UPA"));
+
+category = i18n("Currency Symbols"); // 20A0
+SUBCATEGORY_2(0x20A0, i18n("Currency symbols"));
+
+category = i18n("Combining Diacritical Marks for Symbols"); // 20D0
+SUBCATEGORY_2(0x20D0, i18n("Combining diacritical marks for symbols"));
+SUBCATEGORY_2(0x20DD, i18n("Enclosing diacritics"));
+SUBCATEGORY_2(0x20E1, i18n("Additional diacritical mark for symbols"));
+SUBCATEGORY_2(0x20E2, i18n("Additional enclosing diacritics"));
+SUBCATEGORY_2(0x20E5, i18n("Additional diacritical marks for symbols"));
+
+category = i18n("Letterlike Symbols"); // 2100
+SUBCATEGORY_2(0x2100, i18n("Letterlike symbols"));
+SUBCATEGORY_2(0x2135, i18n("Hebrew letterlike math symbols"));
+SUBCATEGORY_2(0x2139, i18n("Additional letterlike symbols"));
+SUBCATEGORY_2(0x2140, i18n("Double-struck large operator"));
+SUBCATEGORY_2(0x2141, i18n("Additional letterlike symbols"));
+SUBCATEGORY_2(0x2145, i18n("Double-struck italic math symbols"));
+SUBCATEGORY_2(0x214A, i18n("Additional letterlike symbols"));
+SUBCATEGORY_2(0x214E, i18n("Lowercase Claudian letter"));
+SUBCATEGORY_2(0x214F, i18n("Biblical editorial symbol"));
+
+category = i18n("Number Forms"); // 2150
+SUBCATEGORY_2(0x2150, i18n("Fractions"));
+SUBCATEGORY_2(0x2160, i18n("Roman numerals"));
+SUBCATEGORY_2(0x2180, i18n("Archaic Roman numerals"));
+SUBCATEGORY_2(0x2184, i18n("Lowercase Claudian letter"));
+SUBCATEGORY_2(0x2185, i18n("Archaic Roman numerals"));
+SUBCATEGORY_2(0x2189, i18n("Fraction"));
+SUBCATEGORY_2(0x218A, i18n("Turned digits"));
+
+category = i18n("Arrows"); // 2190
+SUBCATEGORY_2(0x2190, i18n("Simple arrows"));
+SUBCATEGORY_2(0x219A, i18n("Arrows with modifications"));
+SUBCATEGORY_2(0x21B0, i18n("Arrows with bent tips"));
+SUBCATEGORY_2(0x21B4, i18n("Keyboard symbols and circle arrows"));
+SUBCATEGORY_2(0x21BC, i18n("Harpoons"));
+SUBCATEGORY_2(0x21C4, i18n("Paired arrows and harpoons"));
+SUBCATEGORY_2(0x21CD, i18n("Double arrows"));
+SUBCATEGORY_2(0x21DA, i18n("Miscellaneous arrows and keyboard symbols"));
+SUBCATEGORY_2(0x21E6, i18n("White arrows and keyboard symbols"));
+SUBCATEGORY_2(0x21F4, i18n("Miscellaneous arrows"));
+
+category = i18n("Mathematical Operators"); // 2200
+SUBCATEGORY_2(0x2200, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x2208, i18n("Set membership"));
+SUBCATEGORY_2(0x220E, i18n("Miscellaneous mathematical symbol"));
+SUBCATEGORY_2(0x220F, i18n("N-ary operators"));
+SUBCATEGORY_2(0x2212, i18n("Operators"));
+SUBCATEGORY_2(0x221E, i18n("Miscellaneous mathematical symbol"));
+SUBCATEGORY_2(0x221F, i18n("Angles"));
+SUBCATEGORY_2(0x2223, i18n("Relations"));
+SUBCATEGORY_2(0x2227, i18n("Logical and set operators"));
+SUBCATEGORY_2(0x222B, i18n("Integrals"));
+SUBCATEGORY_2(0x2234, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x2236, i18n("Relations"));
+SUBCATEGORY_2(0x2238, i18n("Operator"));
+SUBCATEGORY_2(0x2239, i18n("Relation"));
+SUBCATEGORY_2(0x223A, i18n("Operator"));
+SUBCATEGORY_2(0x223B, i18n("Relations"));
+SUBCATEGORY_2(0x223F, i18n("Miscellaneous mathematical symbol"));
+SUBCATEGORY_2(0x2240, i18n("Operator"));
+SUBCATEGORY_2(0x2241, i18n("Relations"));
+SUBCATEGORY_2(0x228C, i18n("Operators"));
+SUBCATEGORY_2(0x228F, i18n("Relations"));
+SUBCATEGORY_2(0x2293, i18n("Operators"));
+SUBCATEGORY_2(0x22A4, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x22A6, i18n("Relations"));
+SUBCATEGORY_2(0x22BA, i18n("Operators"));
+SUBCATEGORY_2(0x22BE, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x22C0, i18n("N-ary operators"));
+SUBCATEGORY_2(0x22C4, i18n("Operators"));
+SUBCATEGORY_2(0x22C8, i18n("Relation"));
+SUBCATEGORY_2(0x22C9, i18n("Operators"));
+SUBCATEGORY_2(0x22CD, i18n("Relation"));
+SUBCATEGORY_2(0x22CE, i18n("Logical operators"));
+SUBCATEGORY_2(0x22D0, i18n("Relations"));
+SUBCATEGORY_2(0x22D2, i18n("Operators"));
+SUBCATEGORY_2(0x22D4, i18n("Relations"));
+SUBCATEGORY_2(0x22EE, i18n("Matrix ellipses"));
+SUBCATEGORY_2(0x22F2, i18n("Relations"));
+
+category = i18n("Miscellaneous Technical"); // 2300
+SUBCATEGORY_2(0x2300, i18n("Miscellaneous technical"));
+SUBCATEGORY_2(0x2308, i18n("Ceilings and floors"));
+SUBCATEGORY_2(0x230C, i18n("Crops"));
+SUBCATEGORY_2(0x2310, i18n("Miscellaneous technical"));
+SUBCATEGORY_2(0x231A, i18n("User interface symbols"));
+SUBCATEGORY_2(0x231C, i18n("Quine corners"));
+SUBCATEGORY_2(0x2320, i18n("Integral pieces"));
+SUBCATEGORY_2(0x2322, i18n("Frown and smile"));
+SUBCATEGORY_2(0x2324, i18n("Keyboard symbols"));
+SUBCATEGORY_2(0x2329, i18n("Deprecated angle brackets"));
+SUBCATEGORY_2(0x232B, i18n("Keyboard symbol"));
+SUBCATEGORY_2(0x232C, i18n("Chemistry symbol"));
+SUBCATEGORY_2(0x232D, i18n("Drafting symbols"));
+SUBCATEGORY_2(0x2336, i18n("APL"));
+SUBCATEGORY_2(0x237B, i18n("Graphics for control codes"));
+SUBCATEGORY_2(0x237C, i18n("Miscellaneous technical"));
+SUBCATEGORY_2(0x237D, i18n("Graphics for control codes"));
+SUBCATEGORY_2(0x2380, i18n("Keyboard symbols from ISO 9995-7"));
+SUBCATEGORY_2(0x238D, i18n("Electrotechnical symbols from IR 181"));
+SUBCATEGORY_2(0x2395, i18n("APL"));
+SUBCATEGORY_2(0x2396, i18n("Keyboard symbols from ISO 9995-7"));
+SUBCATEGORY_2(0x239B, i18n("Bracket pieces"));
+SUBCATEGORY_2(0x23AE, i18n("Special character extensions"));
+SUBCATEGORY_2(0x23B0, i18n("Bracket pieces"));
+SUBCATEGORY_2(0x23B2, i18n("Summation sign parts"));
+SUBCATEGORY_2(0x23B4, i18n("Horizontal brackets"));
+SUBCATEGORY_2(0x23B7, i18n("Terminal graphic characters"));
+SUBCATEGORY_2(0x23BA, i18n("Scan lines for terminal graphics"));
+SUBCATEGORY_2(0x23BE, i18n("Dentistry notation symbols"));
+SUBCATEGORY_2(0x23CD, i18n("Miscellaneous technical"));
+SUBCATEGORY_2(0x23CE, i18n("Keyboard and UI symbols"));
+SUBCATEGORY_2(0x23D0, i18n("Special character extension"));
+SUBCATEGORY_2(0x23D1, i18n("Metrical symbols"));
+SUBCATEGORY_2(0x23DA, i18n("Electrotechnical symbols"));
+SUBCATEGORY_2(0x23DC, i18n("Horizontal brackets"));
+SUBCATEGORY_2(0x23E2, i18n("Miscellaneous technical"));
+SUBCATEGORY_2(0x23E3, i18n("Chemistry symbol"));
+SUBCATEGORY_2(0x23E4, i18n("Miscellaneous technical"));
+SUBCATEGORY_2(0x23E9, i18n("User interface symbols"));
+SUBCATEGORY_2(0x23FB, i18n("Power symbols from ISO 7000:2012"));
+SUBCATEGORY_2(0x23FE, i18n("Power symbol from IEEE 1621-2004"));
+SUBCATEGORY_2(0x23FF, i18n("Miscellaneous symbol"));
+
+category = i18n("Control Pictures"); // 2400
+SUBCATEGORY_2(0x2400, i18n("Graphic pictures for control codes"));
+SUBCATEGORY_2(0x2422, i18n("Specific symbols for space"));
+SUBCATEGORY_2(0x2424, i18n("Graphic picture for control code"));
+SUBCATEGORY_2(0x2425, i18n("Keyboard symbol"));
+SUBCATEGORY_2(0x2426, i18n("Specific symbol for control code"));
+SUBCATEGORY_2(0x2427, i18n("Legacy computer symbols for delete"));
+
+category = i18n("Optical Character Recognition"); // 2440
+SUBCATEGORY_2(0x2440, i18n("OCR-A"));
+SUBCATEGORY_2(0x2446, i18n("MICR"));
+SUBCATEGORY_2(0x244A, i18n("OCR"));
+
+category = i18n("Enclosed Alphanumerics"); // 2460
+SUBCATEGORY_2(0x2460, i18n("Circled numbers"));
+SUBCATEGORY_2(0x2474, i18n("Parenthesized numbers"));
+SUBCATEGORY_2(0x2488, i18n("Numbers period"));
+SUBCATEGORY_2(0x249C, i18n("Parenthesized Latin letters"));
+SUBCATEGORY_2(0x24B6, i18n("Circled Latin letters"));
+SUBCATEGORY_2(0x24EA, i18n("Additional circled number"));
+SUBCATEGORY_2(0x24EB, i18n("White on black circled numbers"));
+SUBCATEGORY_2(0x24F5, i18n("Double circled numbers"));
+SUBCATEGORY_2(0x24FF, i18n("Additional white on black circled number"));
+
+category = i18n("Box Drawing"); // 2500
+SUBCATEGORY_2(0x2500, i18n("Light and heavy solid lines"));
+SUBCATEGORY_2(0x2504, i18n("Light and heavy dashed lines"));
+SUBCATEGORY_2(0x250C, i18n("Light and heavy line box components"));
+SUBCATEGORY_2(0x254C, i18n("Light and heavy dashed lines"));
+SUBCATEGORY_2(0x2550, i18n("Double lines"));
+SUBCATEGORY_2(0x2552, i18n("Light and double line box components"));
+SUBCATEGORY_2(0x256D, i18n("Character cell arcs"));
+SUBCATEGORY_2(0x2571, i18n("Character cell diagonals"));
+SUBCATEGORY_2(0x2574, i18n("Light and heavy half lines"));
+SUBCATEGORY_2(0x257C, i18n("Mixed light and heavy lines"));
+
+category = i18n("Block Elements"); // 2580
+SUBCATEGORY_2(0x2580, i18n("Block elements"));
+SUBCATEGORY_2(0x2591, i18n("Shade characters"));
+SUBCATEGORY_2(0x2594, i18n("Block elements"));
+SUBCATEGORY_2(0x2596, i18n("Terminal graphic characters"));
+
+category = i18n("Geometric Shapes"); // 25A0
+SUBCATEGORY_2(0x25A0, i18n("Geometric shapes"));
+SUBCATEGORY_2(0x25F0, i18n("Control code graphics"));
+SUBCATEGORY_2(0x25F8, i18n("Geometric shapes"));
+
+category = i18n("Miscellaneous Symbols"); // 2600
+SUBCATEGORY_2(0x2600, i18n("Weather and astrological symbols"));
+SUBCATEGORY_2(0x260E, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x2614, i18n("Weather symbol"));
+SUBCATEGORY_2(0x2615, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x2616, i18n("Japanese chess symbols"));
+SUBCATEGORY_2(0x2618, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x261A, i18n("Pointing hand symbols"));
+SUBCATEGORY_2(0x2620, i18n("Warning signs"));
+SUBCATEGORY_2(0x2624, i18n("Medical and healing symbols"));
+SUBCATEGORY_2(0x2626, i18n("Religious and political symbols"));
+SUBCATEGORY_2(0x2630, i18n("Yijing trigram symbols"));
+SUBCATEGORY_2(0x2638, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x2639, i18n("Emoticons"));
+SUBCATEGORY_2(0x263C, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x263D, i18n("Astrological symbols"));
+SUBCATEGORY_2(0x2648, i18n("Zodiacal symbols"));
+SUBCATEGORY_2(0x2654, i18n("Chess symbols"));
+SUBCATEGORY_2(0x2660, i18n("Playing card symbols"));
+SUBCATEGORY_2(0x2668, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x2669, i18n("Musical symbols"));
+SUBCATEGORY_2(0x2670, i18n("Syriac cross symbols"));
+SUBCATEGORY_2(0x2672, i18n("Recycling symbols"));
+SUBCATEGORY_2(0x267E, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x2680, i18n("Dice"));
+SUBCATEGORY_2(0x2686, i18n("Go markers"));
+SUBCATEGORY_2(0x268A, i18n("Yijing monogram and digram symbols"));
+SUBCATEGORY_2(0x2690, i18n("Dictionary and map symbols"));
+SUBCATEGORY_2(0x269C, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x269E, i18n("Symbols for closed captioning from ARIB STD B24"));
+SUBCATEGORY_2(0x26A0, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x26A2, i18n("Gender symbols"));
+SUBCATEGORY_2(0x26AA, i18n("Circles"));
+SUBCATEGORY_2(0x26AD, i18n("Genealogical symbols"));
+SUBCATEGORY_2(0x26B2, i18n("Gender symbol"));
+SUBCATEGORY_2(0x26B3, i18n("Astrological signs"));
+SUBCATEGORY_2(0x26B9, i18n("Astrological aspects"));
+SUBCATEGORY_2(0x26BD, i18n("Sport symbols"));
+SUBCATEGORY_2(0x26BF, i18n("Miscellaneous symbol from ARIB STD B24"));
+SUBCATEGORY_2(0x26C0, i18n("Symbols for draughts and checkers"));
+SUBCATEGORY_2(0x26C4, i18n("Weather symbols from ARIB STD B24"));
+SUBCATEGORY_2(0x26C9, i18n("Game symbols from ARIB STD B24"));
+SUBCATEGORY_2(0x26CC, i18n("Traffic signs from ARIB STD B24"));
+SUBCATEGORY_2(0x26CE, i18n("Zodiacal symbol"));
+SUBCATEGORY_2(0x26CF, i18n("Traffic signs from ARIB STD B24"));
+SUBCATEGORY_2(0x26E2, i18n("Astronomical symbol"));
+SUBCATEGORY_2(0x26E3, i18n("Map symbol from ARIB STD B24"));
+SUBCATEGORY_2(0x26E4, i18n("Pentagram symbols"));
+SUBCATEGORY_2(0x26E8, i18n("Map symbols from ARIB STD B24"));
+
+category = i18n("Dingbats"); // 2700
+SUBCATEGORY_2(0x2700, i18n("Miscellaneous"));
+SUBCATEGORY_2(0x2719, i18n("Crosses"));
+SUBCATEGORY_2(0x2721, i18n("Stars and asterisks"));
+SUBCATEGORY_2(0x273E, i18n("Fleurons"));
+SUBCATEGORY_2(0x2742, i18n("Stars, asterisks and snowflakes"));
+SUBCATEGORY_2(0x274C, i18n("Miscellaneous"));
+SUBCATEGORY_2(0x275B, i18n("Punctuation mark ornaments"));
+SUBCATEGORY_2(0x2766, i18n("Fleurons"));
+SUBCATEGORY_2(0x2768, i18n("Ornamental brackets"));
+SUBCATEGORY_2(0x2776, i18n("Dingbat circled digits"));
+SUBCATEGORY_2(0x2794, i18n("Dingbat arrow"));
+SUBCATEGORY_2(0x2795, i18n("Heavy variants of arithmetic symbols"));
+SUBCATEGORY_2(0x2798, i18n("Dingbat arrows"));
+SUBCATEGORY_2(0x27B0, i18n("Miscellaneous"));
+SUBCATEGORY_2(0x27B1, i18n("Dingbat arrows"));
+SUBCATEGORY_2(0x27BF, i18n("Miscellaneous"));
+
+category = i18n("Miscellaneous Mathematical Symbols-A"); // 27C0
+SUBCATEGORY_2(0x27C0, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x27C5, i18n("Paired punctuation"));
+SUBCATEGORY_2(0x27C7, i18n("Operator"));
+SUBCATEGORY_2(0x27C8, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x27CA, i18n("Vertical line operator"));
+SUBCATEGORY_2(0x27CB, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x27CC, i18n("Division operator"));
+SUBCATEGORY_2(0x27CD, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x27CE, i18n("Operators"));
+SUBCATEGORY_2(0x27D0, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x27D1, i18n("Operators"));
+SUBCATEGORY_2(0x27D5, i18n("Database theory operators"));
+SUBCATEGORY_2(0x27D8, i18n("Tacks and turnstiles"));
+SUBCATEGORY_2(0x27E0, i18n("Modal logic operators"));
+SUBCATEGORY_2(0x27E6, i18n("Mathematical brackets"));
+
+category = i18n("Supplemental Arrows-A"); // 27F0
+SUBCATEGORY_2(0x27F0, i18n("Arrows"));
+SUBCATEGORY_2(0x27F5, i18n("Long arrows"));
+
+category = i18n("Braille Patterns"); // 2800
+SUBCATEGORY_2(0x2800, i18n("Braille patterns"));
+
+category = i18n("Supplemental Arrows-B"); // 2900
+SUBCATEGORY_2(0x2900, i18n("Miscellaneous arrows"));
+SUBCATEGORY_2(0x2919, i18n("Arrow tails"));
+SUBCATEGORY_2(0x291D, i18n("Miscellaneous arrows"));
+SUBCATEGORY_2(0x2927, i18n("Crossing arrows for knot theory"));
+SUBCATEGORY_2(0x2933, i18n("Miscellaneous curved arrows"));
+SUBCATEGORY_2(0x2942, i18n("Arrows combined with operators"));
+SUBCATEGORY_2(0x294A, i18n("Double-barbed harpoons"));
+SUBCATEGORY_2(0x2952, i18n("Modified harpoons"));
+SUBCATEGORY_2(0x2962, i18n("Paired harpoons"));
+SUBCATEGORY_2(0x2970, i18n("Miscellaneous arrow"));
+SUBCATEGORY_2(0x2971, i18n("Arrows combined with relations"));
+SUBCATEGORY_2(0x297C, i18n("Fish tails"));
+
+category = i18n("Miscellaneous Mathematical Symbols-B"); // 2980
+SUBCATEGORY_2(0x2980, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x2983, i18n("Brackets"));
+SUBCATEGORY_2(0x298D, i18n("Brackets with ticks"));
+SUBCATEGORY_2(0x2991, i18n("Brackets"));
+SUBCATEGORY_2(0x2999, i18n("Fences"));
+SUBCATEGORY_2(0x299B, i18n("Angles"));
+SUBCATEGORY_2(0x29B0, i18n("Empty sets"));
+SUBCATEGORY_2(0x29B5, i18n("Circle symbols"));
+SUBCATEGORY_2(0x29C4, i18n("Square symbols"));
+SUBCATEGORY_2(0x29CA, i18n("Triangle symbols"));
+SUBCATEGORY_2(0x29D1, i18n("Bowtie symbols"));
+SUBCATEGORY_2(0x29D8, i18n("Fences"));
+SUBCATEGORY_2(0x29DC, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x29E3, i18n("Relations"));
+SUBCATEGORY_2(0x29E7, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x29EE, i18n("Error bar symbols"));
+SUBCATEGORY_2(0x29F4, i18n("Miscellaneous mathematical symbols"));
+SUBCATEGORY_2(0x29F8, i18n("Large operators"));
+SUBCATEGORY_2(0x29FA, i18n("Specialized plus sign operators"));
+SUBCATEGORY_2(0x29FC, i18n("Brackets"));
+SUBCATEGORY_2(0x29FE, i18n("Symbols used in game theory"));
+
+category = i18n("Supplemental Mathematical Operators"); // 2A00
+SUBCATEGORY_2(0x2A00, i18n("N-ary operators"));
+SUBCATEGORY_2(0x2A0A, i18n("Summations and integrals"));
+SUBCATEGORY_2(0x2A1D, i18n("Miscellaneous large operators"));
+SUBCATEGORY_2(0x2A22, i18n("Plus and minus sign operators"));
+SUBCATEGORY_2(0x2A2F, i18n("Multiplication and division sign operators"));
+SUBCATEGORY_2(0x2A39, i18n("Miscellaneous mathematical operators"));
+SUBCATEGORY_2(0x2A40, i18n("Intersections and unions"));
+SUBCATEGORY_2(0x2A51, i18n("Logical ands and ors"));
+SUBCATEGORY_2(0x2A64, i18n("Miscellaneous mathematical operators"));
+SUBCATEGORY_2(0x2A66, i18n("Relational operators"));
+SUBCATEGORY_2(0x2ABD, i18n("Subset and superset relations"));
+SUBCATEGORY_2(0x2AD9, i18n("Forks"));
+SUBCATEGORY_2(0x2ADE, i18n("Tacks and turnstiles"));
+SUBCATEGORY_2(0x2AEE, i18n("Vertical line operators"));
+SUBCATEGORY_2(0x2AF6, i18n("Miscellaneous mathematical operator"));
+SUBCATEGORY_2(0x2AF7, i18n("Relations"));
+SUBCATEGORY_2(0x2AFC, i18n("Operators"));
+
+category = i18n("Miscellaneous Symbols and Arrows"); // 2B00
+SUBCATEGORY_2(0x2B00, i18n("White and black arrows"));
+SUBCATEGORY_2(0x2B0E, i18n("Arrows with bent tips"));
+SUBCATEGORY_2(0x2B12, i18n("Squares"));
+SUBCATEGORY_2(0x2B16, i18n("Diamonds"));
+SUBCATEGORY_2(0x2B1A, i18n("Squares"));
+SUBCATEGORY_2(0x2B1F, i18n("Pentagons"));
+SUBCATEGORY_2(0x2B21, i18n("Hexagons"));
+SUBCATEGORY_2(0x2B24, i18n("Circle"));
+SUBCATEGORY_2(0x2B25, i18n("Diamonds and lozenges"));
+SUBCATEGORY_2(0x2B2C, i18n("Ellipses"));
+SUBCATEGORY_2(0x2B30, i18n("Mathematical arrows"));
+SUBCATEGORY_2(0x2B4D, i18n("Miscellaneous arrow"));
+SUBCATEGORY_2(0x2B4E, i18n("Intonation marks for Lithuanian dialectology"));
+SUBCATEGORY_2(0x2B50, i18n("Stars"));
+SUBCATEGORY_2(0x2B53, i18n("Pentagons"));
+SUBCATEGORY_2(0x2B55, i18n("Traffic sign from ARIB STD B24"));
+SUBCATEGORY_2(0x2B56, i18n("Dictionary and map symbols from ARIB STD B24"));
+SUBCATEGORY_2(0x2B5A, i18n("Intonation marks for Lithuanian dialectology"));
+SUBCATEGORY_2(0x2B60, i18n("Triangle-headed arrows"));
+SUBCATEGORY_2(0x2B7E, i18n("Keyboard symbols"));
+SUBCATEGORY_2(0x2B80, i18n("Paired triangle-headed arrows"));
+SUBCATEGORY_2(0x2B88, i18n("Circled arrows"));
+SUBCATEGORY_2(0x2B8C, i18n("Triangle-headed u-shaped arrows"));
+SUBCATEGORY_2(0x2B90, i18n("Keyboard symbols"));
+SUBCATEGORY_2(0x2B94, i18n("Miscellaneous arrow symbol"));
+SUBCATEGORY_2(0x2B95, i18n("Black arrow"));
+SUBCATEGORY_2(0x2B96, i18n("Symbol used in chess notation"));
+SUBCATEGORY_2(0x2B97, i18n("Miscellaneous symbol"));
+SUBCATEGORY_2(0x2B98, i18n("Arrowheads"));
+SUBCATEGORY_2(0x2BA0, i18n("Triangle-headed arrows with bent tips"));
+SUBCATEGORY_2(0x2BA8, i18n("Black curved arrows"));
+SUBCATEGORY_2(0x2BB0, i18n("Ribbon arrows"));
+SUBCATEGORY_2(0x2BB8, i18n("Keyboard symbols"));
+SUBCATEGORY_2(0x2BBA, i18n("Symbols used in chess notation"));
+SUBCATEGORY_2(0x2BBD, i18n("Geometric symbols"));
+SUBCATEGORY_2(0x2BC0, i18n("Centred geometric shapes"));
+SUBCATEGORY_2(0x2BC9, i18n("Astronomical symbol"));
+SUBCATEGORY_2(0x2BCA, i18n("Half circles"));
+SUBCATEGORY_2(0x2BCC, i18n("Cusp shapes"));
+SUBCATEGORY_2(0x2BD0, i18n("Miscellaneous symbols"));
+SUBCATEGORY_2(0x2BD3, i18n("Astrological symbols for Pluto"));
+SUBCATEGORY_2(0x2BD7, i18n("Miscellaneous astrological symbols"));
+SUBCATEGORY_2(0x2BE0, i18n("Uranian astrological symbols"));
+SUBCATEGORY_2(0x2BE8, i18n("Half star characters"));
+SUBCATEGORY_2(0x2BEC, i18n("Two-headed arrow symbols"));
+SUBCATEGORY_2(0x2BF0, i18n("Astrological symbols for Eris and Sedna"));
+SUBCATEGORY_2(0x2BF3, i18n("Russian astrological aspects"));
+SUBCATEGORY_2(0x2BF9, i18n("Symbols used in chess notation"));
+SUBCATEGORY_2(0x2BFF, i18n("Miscellaneous symbol"));
+
+category = i18n("Glagolitic"); // 2C00
+SUBCATEGORY_2(0x2C00, i18n("Capital letters"));
+SUBCATEGORY_2(0x2C30, i18n("Small letters"));
+
+category = i18n("Latin Extended-C"); // 2C60
+SUBCATEGORY_2(0x2C60, i18n("Orthographic Latin additions"));
+SUBCATEGORY_2(0x2C67, i18n("Additions for Uyghur"));
+SUBCATEGORY_2(0x2C6D, i18n("Miscellaneous additions"));
+SUBCATEGORY_2(0x2C75, i18n("Claudian letters"));
+SUBCATEGORY_2(0x2C77, i18n("Additions for UPA"));
+SUBCATEGORY_2(0x2C7E, i18n("Additions for Shona"));
+
+category = i18n("Coptic"); // 2C80
+SUBCATEGORY_2(0x2C80, i18n("Bohairic Coptic letters"));
+SUBCATEGORY_2(0x2CB2, i18n("Old Coptic and dialect letters"));
+SUBCATEGORY_2(0x2CDC, i18n("Old Nubian letters"));
+SUBCATEGORY_2(0x2CE4, i18n("Symbols"));
+SUBCATEGORY_2(0x2CEB, i18n("Cryptogrammic letters"));
+SUBCATEGORY_2(0x2CEF, i18n("Combining marks"));
+SUBCATEGORY_2(0x2CF2, i18n("Bohairic Coptic letters"));
+SUBCATEGORY_2(0x2CF9, i18n("Old Nubian punctuation"));
+SUBCATEGORY_2(0x2CFD, i18n("Numeric character"));
+SUBCATEGORY_2(0x2CFE, i18n("Punctuation"));
+
+category = i18n("Georgian Supplement"); // 2D00
+SUBCATEGORY_2(0x2D00, i18n("Small letters (Khutsuri)"));
+SUBCATEGORY_2(0x2D27, i18n("Additional letter"));
+SUBCATEGORY_2(0x2D2D, i18n("Additional letter for Ossetian"));
+
+category = i18n("Tifinagh"); // 2D30
+SUBCATEGORY_2(0x2D30, i18n("Letters"));
+SUBCATEGORY_2(0x2D6F, i18n("Modifier letter"));
+SUBCATEGORY_2(0x2D70, i18n("Punctuation"));
+SUBCATEGORY_2(0x2D7F, i18n("Sign"));
+
+category = i18n("Ethiopic Extended"); // 2D80
+SUBCATEGORY_2(0x2D80, i18n("Syllables for Me'en"));
+SUBCATEGORY_2(0x2D93, i18n("Syllables for Blin"));
+SUBCATEGORY_2(0x2DA0, i18n("Syllables for Bench"));
+SUBCATEGORY_2(0x2DC0, i18n("Syllables for Gurage"));
+
+category = i18n("Cyrillic Extended-A"); // 2DE0
+SUBCATEGORY_2(0x2DE0, i18n("Old Church Slavonic combining letters"));
+
+category = i18n("Supplemental Punctuation"); // 2E00
+SUBCATEGORY_2(0x2E00, i18n("New Testament editorial symbols"));
+SUBCATEGORY_2(0x2E0E, i18n("Ancient Greek textual symbols"));
+SUBCATEGORY_2(0x2E17, i18n("Ancient Near-Eastern linguistic symbol"));
+SUBCATEGORY_2(0x2E18, i18n("General punctuation"));
+SUBCATEGORY_2(0x2E1A, i18n("Dictionary punctuation"));
+SUBCATEGORY_2(0x2E1C, i18n("Brackets"));
+SUBCATEGORY_2(0x2E1E, i18n("Dictionary punctuation"));
+SUBCATEGORY_2(0x2E20, i18n("Brackets"));
+SUBCATEGORY_2(0x2E22, i18n("Half brackets"));
+SUBCATEGORY_2(0x2E26, i18n("Brackets"));
+SUBCATEGORY_2(0x2E2A, i18n("Historic punctuation"));
+SUBCATEGORY_2(0x2E32, i18n("Palaeotype transliteration symbol"));
+SUBCATEGORY_2(0x2E33, i18n("Historic punctuation"));
+SUBCATEGORY_2(0x2E35, i18n("Palaeotype transliteration symbols"));
+SUBCATEGORY_2(0x2E3A, i18n("Dashes"));
+SUBCATEGORY_2(0x2E3C, i18n("Alternate forms of punctuation"));
+SUBCATEGORY_2(0x2E3F, i18n("Historic punctuation"));
+SUBCATEGORY_2(0x2E40, i18n("Double hyphen"));
+SUBCATEGORY_2(0x2E41, i18n("Reversed punctuation"));
+SUBCATEGORY_2(0x2E43, i18n("Miscellaneous punctuation"));
+SUBCATEGORY_2(0x2E45, i18n("Typicon punctuation"));
+SUBCATEGORY_2(0x2E4A, i18n("Historic punctuation"));
+SUBCATEGORY_2(0x2E55, i18n("Brackets"));
+SUBCATEGORY_2(0x2E59, i18n("Parentheses top and bottom halves"));
+SUBCATEGORY_2(0x2E5D, i18n("Oblique hyphen"));
+
+category = i18n("CJK Radicals Supplement"); // 2E80
+SUBCATEGORY_1(0x2E80);
+
+category = i18n("Kangxi Radicals"); // 2F00
+SUBCATEGORY_1(0x2F00);
+
+category = i18n("Ideographic Description Characters"); // 2FF0
+SUBCATEGORY_1(0x2FF0);
+
+category = i18n("CJK Symbols and Punctuation"); // 3000
+SUBCATEGORY_2(0x3000, i18n("CJK symbols and punctuation"));
+SUBCATEGORY_2(0x3008, i18n("CJK angle brackets"));
+SUBCATEGORY_2(0x300C, i18n("CJK corner brackets"));
+SUBCATEGORY_2(0x3010, i18n("CJK brackets"));
+SUBCATEGORY_2(0x3012, i18n("CJK symbols"));
+SUBCATEGORY_2(0x3014, i18n("CJK brackets"));
+SUBCATEGORY_2(0x301C, i18n("CJK punctuation"));
+SUBCATEGORY_2(0x3020, i18n("CJK symbol"));
+SUBCATEGORY_2(0x3021, i18n("Suzhou numerals"));
+SUBCATEGORY_2(0x302A, i18n("Combining tone marks"));
+SUBCATEGORY_2(0x3030, i18n("Other CJK punctuation"));
+SUBCATEGORY_2(0x3031, i18n("Kana repeat marks"));
+SUBCATEGORY_2(0x3036, i18n("Other CJK symbols"));
+SUBCATEGORY_2(0x3038, i18n("Additional Suzhou numerals"));
+SUBCATEGORY_2(0x303B, i18n("Other CJK punctuation"));
+SUBCATEGORY_2(0x303E, i18n("Special CJK indicators"));
+
+category = i18n("Hiragana"); // 3040
+SUBCATEGORY_2(0x3041, i18n("Hiragana letters"));
+SUBCATEGORY_2(0x3095, i18n("Small letters"));
+SUBCATEGORY_2(0x3099, i18n("Voicing marks"));
+SUBCATEGORY_2(0x309D, i18n("Iteration marks"));
+SUBCATEGORY_2(0x309F, i18n("Hiragana digraph"));
+
+category = i18n("Katakana"); // 30A0
+SUBCATEGORY_2(0x30A0, i18n("Katakana punctuation"));
+SUBCATEGORY_2(0x30A1, i18n("Katakana letters"));
+SUBCATEGORY_2(0x30FB, i18n("Conjunction and length marks"));
+SUBCATEGORY_2(0x30FD, i18n("Iteration marks"));
+SUBCATEGORY_2(0x30FF, i18n("Katakana digraph"));
+
+category = i18n("Bopomofo"); // 3100
+SUBCATEGORY_2(0x3105, i18n("Based on GB 2312"));
+SUBCATEGORY_2(0x312A, i18n("Dialect (non-Mandarin) letters"));
+SUBCATEGORY_2(0x312D, i18n("Miscellaneous additions"));
+
+category = i18n("Hangul Compatibility Jamo"); // 3130
+SUBCATEGORY_2(0x3131, i18n("Consonant letters"));
+SUBCATEGORY_2(0x314F, i18n("Vowel letters"));
+SUBCATEGORY_2(0x3164, i18n("Special character"));
+SUBCATEGORY_2(0x3165, i18n("Old consonant letters"));
+SUBCATEGORY_2(0x3187, i18n("Old vowel letters"));
+
+category = i18n("Kanbun"); // 3190
+SUBCATEGORY_2(0x3190, i18n("Tateten"));
+SUBCATEGORY_2(0x3191, i18n("Kaeriten"));
+
+category = i18n("Bopomofo Extended"); // 31A0
+SUBCATEGORY_2(0x31A0, i18n("Extended Bopomofo for Minnan and Hakka"));
+SUBCATEGORY_2(0x31B8, i18n("Extended Bopomofo for Hmu and Ge"));
+SUBCATEGORY_2(0x31BB, i18n("Extended Bopomofo for Minnan and Hakka"));
+SUBCATEGORY_2(0x31BC, i18n("Extended Bopomofo for Cantonese"));
+
+category = i18n("CJK Strokes"); // 31C0
+SUBCATEGORY_2(0x31C0, i18n("CJK strokes"));
+SUBCATEGORY_2(0x31EF, i18n("Ideographic description character"));
+
+category = i18n("Katakana Phonetic Extensions"); // 31F0
+SUBCATEGORY_2(0x31F0, i18n("Phonetic extensions for Ainu"));
+
+category = i18n("Enclosed CJK Letters and Months"); // 3200
+SUBCATEGORY_2(0x3200, i18n("Parenthesized Hangul letters"));
+SUBCATEGORY_2(0x320E, i18n("Parenthesized Hangul syllables"));
+SUBCATEGORY_2(0x321D, i18n("Parenthesized Korean words"));
+SUBCATEGORY_2(0x3220, i18n("Parenthesized ideographs"));
+SUBCATEGORY_2(0x3244, i18n("Circled ideographs from ARIB STD B24"));
+SUBCATEGORY_2(0x3248, i18n("Circled numbers on black squares from ARIB STD B24"));
+SUBCATEGORY_2(0x3250, i18n("Squared Latin abbreviation"));
+SUBCATEGORY_2(0x3251, i18n("Circled numbers"));
+SUBCATEGORY_2(0x3260, i18n("Circled Hangul letters"));
+SUBCATEGORY_2(0x326E, i18n("Circled Hangul syllables"));
+SUBCATEGORY_2(0x327C, i18n("Circled Korean words"));
+SUBCATEGORY_2(0x327E, i18n("Circled Hangul syllable"));
+SUBCATEGORY_2(0x327F, i18n("Symbol"));
+SUBCATEGORY_2(0x3280, i18n("Circled ideographs"));
+SUBCATEGORY_2(0x32B1, i18n("Circled numbers"));
+SUBCATEGORY_2(0x32C0, i18n("Telegraph symbols for months"));
+SUBCATEGORY_2(0x32CC, i18n("Squared Latin abbreviations"));
+SUBCATEGORY_2(0x32D0, i18n("Circled Katakana"));
+SUBCATEGORY_2(0x32FF, i18n("Japanese era name"));
+
+category = i18n("CJK Compatibility"); // 3300
+SUBCATEGORY_2(0x3300, i18n("Squared Katakana words"));
+SUBCATEGORY_2(0x3358, i18n("Telegraph symbols for hours"));
+SUBCATEGORY_2(0x3371, i18n("Squared Latin abbreviations"));
+SUBCATEGORY_2(0x337B, i18n("Japanese era names"));
+SUBCATEGORY_2(0x337F, i18n("Japanese corporation"));
+SUBCATEGORY_2(0x3380, i18n("Squared Latin abbreviations"));
+SUBCATEGORY_2(0x3395, i18n("Abbreviations involving liter symbols"));
+SUBCATEGORY_2(0x3399, i18n("Squared Latin abbreviations"));
+SUBCATEGORY_2(0x33E0, i18n("Telegraph symbols for days"));
+SUBCATEGORY_2(0x33FF, i18n("Squared Latin abbreviation"));
+
+category = i18n("CJK Unified Ideographs Extension A"); // 3400
+
+category = i18n("Yijing Hexagram Symbols"); // 4DC0
+SUBCATEGORY_2(0x4DC0, i18n("Yijing hexagram symbols"));
+
+category = i18n("CJK Unified Ideographs"); // 4E00
+SUBCATEGORY_1(0x4E00);
+
+category = i18n("Yi Syllables"); // A000
+SUBCATEGORY_2(0xA000, i18n("Syllables"));
+SUBCATEGORY_2(0xA015, i18n("Syllable iteration mark"));
+SUBCATEGORY_2(0xA016, i18n("Syllables"));
+
+category = i18n("Yi Radicals"); // A490
+SUBCATEGORY_2(0xA490, i18n("Yi radicals"));
+
+category = i18n("Lisu"); // A4D0
+SUBCATEGORY_2(0xA4D0, i18n("Consonants"));
+SUBCATEGORY_2(0xA4EE, i18n("Vowels"));
+SUBCATEGORY_2(0xA4F8, i18n("Tones"));
+SUBCATEGORY_2(0xA4FE, i18n("Punctuation"));
+
+category = i18n("Vai"); // A500
+SUBCATEGORY_2(0xA500, i18n("Syllables in -ee"));
+SUBCATEGORY_2(0xA524, i18n("Syllables in -i"));
+SUBCATEGORY_2(0xA549, i18n("Syllables in -a"));
+SUBCATEGORY_2(0xA571, i18n("Syllables in -oo"));
+SUBCATEGORY_2(0xA595, i18n("Syllables in -u"));
+SUBCATEGORY_2(0xA5BA, i18n("Syllables in -o"));
+SUBCATEGORY_2(0xA5E1, i18n("Syllables in -e"));
+SUBCATEGORY_2(0xA60B, i18n("Syllable finals"));
+SUBCATEGORY_2(0xA60D, i18n("Punctuation"));
+SUBCATEGORY_2(0xA610, i18n("Historic syllables"));
+SUBCATEGORY_2(0xA613, i18n("Logograms"));
+SUBCATEGORY_2(0xA620, i18n("Digits"));
+SUBCATEGORY_2(0xA62A, i18n("Historic syllables"));
+
+category = i18n("Cyrillic Extended-B"); // A640
+SUBCATEGORY_2(0xA640, i18n("Letters for Old Cyrillic"));
+SUBCATEGORY_2(0xA66F, i18n("Abbreviation mark"));
+SUBCATEGORY_2(0xA670, i18n("Combining numeric signs"));
+SUBCATEGORY_2(0xA673, i18n("Punctuation mark"));
+SUBCATEGORY_2(0xA674, i18n("Combining marks for Old Cyrillic"));
+SUBCATEGORY_2(0xA67E, i18n("Punctuation mark"));
+SUBCATEGORY_2(0xA67F, i18n("Modifier letter"));
+SUBCATEGORY_2(0xA680, i18n("Letters for Old Abkhasian orthography"));
+SUBCATEGORY_2(0xA698, i18n("Letters for Old Cyrillic"));
+SUBCATEGORY_2(0xA69C, i18n("Intonation marks for Lithuanian dialectology"));
+SUBCATEGORY_2(0xA69E, i18n("Combining marks for Old Cyrillic"));
+
+category = i18n("Bamum"); // A6A0
+SUBCATEGORY_2(0xA6A0, i18n("Syllables"));
+SUBCATEGORY_2(0xA6F0, i18n("Combining marks"));
+SUBCATEGORY_2(0xA6F2, i18n("Punctuation"));
+
+category = i18n("Modifier Tone Letters"); // A700
+SUBCATEGORY_2(0xA700, i18n("Corner tone marks for Chinese"));
+SUBCATEGORY_2(0xA708, i18n("Dotted tone letters"));
+SUBCATEGORY_2(0xA712, i18n("Left-stem tone letters"));
+SUBCATEGORY_2(0xA717, i18n("Chinantec tone marks"));
+SUBCATEGORY_2(0xA71B, i18n("Africanist tone letters"));
+
+category = i18n("Latin Extended-D"); // A720
+SUBCATEGORY_2(0xA720, i18n("Additions for UPA"));
+SUBCATEGORY_2(0xA722, i18n("Egyptological additions"));
+SUBCATEGORY_2(0xA726, i18n("Mayanist additions"));
+SUBCATEGORY_2(0xA730, i18n("Medievalist additions"));
+SUBCATEGORY_2(0xA779, i18n("Insular and Celticist letters"));
+SUBCATEGORY_2(0xA788, i18n("Modifier letters"));
+SUBCATEGORY_2(0xA78B, i18n("Orthographic letters for glottals"));
+SUBCATEGORY_2(0xA78D, i18n("Additional letter"));
+SUBCATEGORY_2(0xA78E, i18n("Phonetic symbol"));
+SUBCATEGORY_2(0xA78F, i18n("Transliteration letter for sinology"));
+SUBCATEGORY_2(0xA790, i18n("Additional letters"));
+SUBCATEGORY_2(0xA794, i18n("Additions for Lithuanian dialectology"));
+SUBCATEGORY_2(0xA796, i18n("Letters for Middle Vietnamese"));
+SUBCATEGORY_2(0xA798, i18n("Archaic letters for Ewe"));
+SUBCATEGORY_2(0xA79A, i18n("Archaic letters for Volapük"));
+SUBCATEGORY_2(0xA7A0, i18n("Letters for pre-1921 Latvian orthography"));
+SUBCATEGORY_2(0xA7AA, i18n("Additional letters"));
+SUBCATEGORY_2(0xA7AE, i18n("Letter for West African languages"));
+SUBCATEGORY_2(0xA7AF, i18n("Letter for Japanese phonemic transcription"));
+SUBCATEGORY_2(0xA7B0, i18n("Letters for Americanist orthographies"));
+SUBCATEGORY_2(0xA7B2, i18n("Letter for African languages"));
+SUBCATEGORY_2(0xA7B3, i18n("Letter for German dialectology"));
+SUBCATEGORY_2(0xA7B4, i18n("Letters for African languages"));
+SUBCATEGORY_2(0xA7B8, i18n("Letters for Mazahua (México)"));
+SUBCATEGORY_2(0xA7BA, i18n("Letters for Ugaritic and Egyptological transliteration"));
+SUBCATEGORY_2(0xA7C0, i18n("Additional medieval letters"));
+SUBCATEGORY_2(0xA7C4, i18n("Letters used in early Pinyin romanization"));
+SUBCATEGORY_2(0xA7C7, i18n("Additional letters for Gaulish"));
+SUBCATEGORY_2(0xA7CB, i18n("Letter for Eastern Dan"));
+SUBCATEGORY_2(0xA7CC, i18n("Letters for Luiseño"));
+SUBCATEGORY_2(0xA7CE, i18n("Cased voiced pharyngeal letters"));
+SUBCATEGORY_2(0xA7D0, i18n("Letters used in the Middle English Ormulum"));
+SUBCATEGORY_2(0xA7D6, i18n("Letters used in medieval palaeography"));
+SUBCATEGORY_2(0xA7DA, i18n("Letters used in Wakashan and Salishan languages"));
+SUBCATEGORY_2(0xA7F1, i18n("Modifier letters for Chatino (México)"));
+SUBCATEGORY_2(0xA7F4, i18n("Modifier letter for Japanese phonemic transcription"));
+SUBCATEGORY_2(0xA7F5, i18n("Ancient Gaulish and Celtic epigraphic letters"));
+SUBCATEGORY_2(0xA7F8, i18n("Additions for Extended IPA"));
+SUBCATEGORY_2(0xA7FA, i18n("Addition for UPA"));
+SUBCATEGORY_2(0xA7FB, i18n("Ancient Roman epigraphic letters"));
+
+category = i18n("Syloti Nagri"); // A800
+SUBCATEGORY_2(0xA800, i18n("Independent vowels and dvisvara"));
+SUBCATEGORY_2(0xA806, i18n("Sign"));
+SUBCATEGORY_2(0xA807, i18n("Consonants and consonant signs"));
+SUBCATEGORY_2(0xA823, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0xA828, i18n("Poetry marks"));
+SUBCATEGORY_2(0xA82C, i18n("Sign"));
+
+category = i18n("Common Indic Number Forms"); // A830
+SUBCATEGORY_2(0xA830, i18n("Number forms"));
+SUBCATEGORY_2(0xA837, i18n("Miscellaneous sign"));
+SUBCATEGORY_2(0xA838, i18n("Currency symbol"));
+SUBCATEGORY_2(0xA839, i18n("Miscellaneous sign"));
+
+category = i18n("Phags-pa"); // A840
+SUBCATEGORY_2(0xA840, i18n("Consonants"));
+SUBCATEGORY_2(0xA85D, i18n("Letter A"));
+SUBCATEGORY_2(0xA85E, i18n("Vowels"));
+SUBCATEGORY_2(0xA862, i18n("Consonants"));
+SUBCATEGORY_2(0xA866, i18n("Vowel"));
+SUBCATEGORY_2(0xA867, i18n("Subjoined consonants"));
+SUBCATEGORY_2(0xA869, i18n("Consonant additions for Sanskrit"));
+SUBCATEGORY_2(0xA86D, i18n("Alternate consonant forms for Chinese"));
+SUBCATEGORY_2(0xA871, i18n("Subjoined consonant"));
+SUBCATEGORY_2(0xA872, i18n("Consonant addition for Tibetan"));
+SUBCATEGORY_2(0xA873, i18n("Candrabindu"));
+SUBCATEGORY_2(0xA874, i18n("Head marks for Tibetan"));
+SUBCATEGORY_2(0xA876, i18n("Punctuation for Tibetan"));
+
+category = i18n("Saurashtra"); // A880
+SUBCATEGORY_2(0xA880, i18n("Various signs"));
+SUBCATEGORY_2(0xA882, i18n("Independent vowels"));
+SUBCATEGORY_2(0xA892, i18n("Consonants"));
+SUBCATEGORY_2(0xA8B5, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0xA8C4, i18n("Virama"));
+SUBCATEGORY_2(0xA8C5, i18n("Sign"));
+SUBCATEGORY_2(0xA8CE, i18n("Punctuation"));
+SUBCATEGORY_2(0xA8D0, i18n("Digits"));
+
+category = i18n("Devanagari Extended"); // A8E0
+SUBCATEGORY_2(0xA8E0, i18n("Cantillation marks (svara) for the Samaveda"));
+SUBCATEGORY_2(0xA8F2, i18n("Marks of nasalization"));
+SUBCATEGORY_2(0xA8F8, i18n("Editorial marks"));
+SUBCATEGORY_2(0xA8FC, i18n("Signs"));
+SUBCATEGORY_2(0xA8FE, i18n("Additional vowel and vowel sign"));
+
+category = i18n("Kayah Li"); // A900
+SUBCATEGORY_2(0xA900, i18n("Digits"));
+SUBCATEGORY_2(0xA90A, i18n("Consonants"));
+SUBCATEGORY_2(0xA922, i18n("Vowels"));
+SUBCATEGORY_2(0xA92B, i18n("Tone marks"));
+SUBCATEGORY_2(0xA92E, i18n("Punctuation"));
+
+category = i18n("Rejang"); // A930
+SUBCATEGORY_2(0xA930, i18n("Consonants"));
+SUBCATEGORY_2(0xA947, i18n("Vowel signs"));
+SUBCATEGORY_2(0xA94F, i18n("Consonant signs"));
+SUBCATEGORY_2(0xA953, i18n("Virama"));
+SUBCATEGORY_2(0xA95F, i18n("Punctuation"));
+
+category = i18n("Hangul Jamo Extended-A"); // A960
+SUBCATEGORY_2(0xA960, i18n("Old initial consonants"));
+
+category = i18n("Javanese"); // A980
+SUBCATEGORY_2(0xA980, i18n("Various signs"));
+SUBCATEGORY_2(0xA984, i18n("Letters"));
+SUBCATEGORY_2(0xA9B3, i18n("Sign"));
+SUBCATEGORY_2(0xA9B4, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0xA9BD, i18n("Dependent consonant signs"));
+SUBCATEGORY_2(0xA9C0, i18n("Sign"));
+SUBCATEGORY_2(0xA9C1, i18n("Punctuation"));
+SUBCATEGORY_2(0xA9CF, i18n("Syllable reduplicator"));
+SUBCATEGORY_2(0xA9D0, i18n("Digits"));
+SUBCATEGORY_2(0xA9DE, i18n("Ellipsis marks"));
+
+category = i18n("Myanmar Extended-B"); // A9E0
+SUBCATEGORY_2(0xA9E0, i18n("Additions for Shan Pali"));
+SUBCATEGORY_2(0xA9E6, i18n("Reduplication mark"));
+SUBCATEGORY_2(0xA9E7, i18n("Tai Laing consonants"));
+SUBCATEGORY_2(0xA9F0, i18n("Tai Laing digits"));
+SUBCATEGORY_2(0xA9FA, i18n("Tai Laing consonants"));
+
+category = i18n("Cham"); // AA00
+SUBCATEGORY_2(0xAA00, i18n("Independent vowels"));
+SUBCATEGORY_2(0xAA06, i18n("Consonants"));
+SUBCATEGORY_2(0xAA29, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0xAA33, i18n("Consonant signs"));
+SUBCATEGORY_2(0xAA40, i18n("Final consonants"));
+SUBCATEGORY_2(0xAA50, i18n("Digits"));
+SUBCATEGORY_2(0xAA5C, i18n("Punctuation"));
+
+category = i18n("Myanmar Extended-A"); // AA60
+SUBCATEGORY_2(0xAA60, i18n("Khamti Shan consonants"));
+SUBCATEGORY_2(0xAA74, i18n("Khamti Shan logograms"));
+SUBCATEGORY_2(0xAA77, i18n("Aiton symbols and letters"));
+SUBCATEGORY_2(0xAA7B, i18n("Pa'o Karen tone mark"));
+SUBCATEGORY_2(0xAA7C, i18n("Tai Laing tone marks"));
+SUBCATEGORY_2(0xAA7E, i18n("Shwe Palaung letters"));
+
+category = i18n("Tai Viet"); // AA80
+SUBCATEGORY_2(0xAA80, i18n("Consonants"));
+SUBCATEGORY_2(0xAAB0, i18n("Vowels and finals"));
+SUBCATEGORY_2(0xAABF, i18n("Tones"));
+SUBCATEGORY_2(0xAADB, i18n("Word ligature symbols"));
+SUBCATEGORY_2(0xAADD, i18n("Repetition mark"));
+SUBCATEGORY_2(0xAADE, i18n("Punctuation"));
+
+category = i18n("Meetei Mayek Extensions"); // AAE0
+SUBCATEGORY_2(0xAAE0, i18n("Independent vowel signs"));
+SUBCATEGORY_2(0xAAE2, i18n("Consonants"));
+SUBCATEGORY_2(0xAAEB, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0xAAF0, i18n("Punctuation"));
+SUBCATEGORY_2(0xAAF2, i18n("Sign"));
+SUBCATEGORY_2(0xAAF3, i18n("Repetition marks"));
+SUBCATEGORY_2(0xAAF5, i18n("Sign"));
+SUBCATEGORY_2(0xAAF6, i18n("Virama"));
+
+category = i18n("Ethiopic Extended-A"); // AB00
+SUBCATEGORY_2(0xAB01, i18n("Gamo-Gofa-Dawro and Basketo"));
+SUBCATEGORY_2(0xAB11, i18n("Gamo-Gofa-Dawro"));
+SUBCATEGORY_2(0xAB20, i18n("Gumuz"));
+
+category = i18n("Latin Extended-E"); // AB30
+SUBCATEGORY_2(0xAB30, i18n("Letters for German dialectology"));
+SUBCATEGORY_2(0xAB5B, i18n("Modifier letters for German dialectology"));
+SUBCATEGORY_2(0xAB60, i18n("Historic letters for Sakha (Yakut)"));
+SUBCATEGORY_2(0xAB64, i18n("Letters for Americanist orthographies"));
+SUBCATEGORY_2(0xAB66, i18n("Letters for sinological and Tibetanist phonetic transcription"));
+SUBCATEGORY_2(0xAB68, i18n("Letters for Scots dialectology"));
+
+category = i18n("Cherokee Supplement"); // AB70
+SUBCATEGORY_2(0xAB70, i18n("Lowercase syllables"));
+
+category = i18n("Meetei Mayek"); // ABC0
+SUBCATEGORY_2(0xABC0, i18n("Letters"));
+SUBCATEGORY_2(0xABDB, i18n("Final consonants"));
+SUBCATEGORY_2(0xABE3, i18n("Dependent vowel signs"));
+SUBCATEGORY_2(0xABEB, i18n("Punctuation"));
+SUBCATEGORY_2(0xABF0, i18n("Digits"));
+
+category = i18n("Hangul Syllables"); // AC00
+SUBCATEGORY_1(0xAC00);
+
+category = i18n("Hangul Jamo Extended-B"); // D7B0
+SUBCATEGORY_2(0xD7B0, i18n("Old medial vowels"));
+SUBCATEGORY_2(0xD7CB, i18n("Old final consonants"));
+
+category = i18n("High Surrogates"); // D800
+SUBCATEGORY_1(0xD800);
+
+category = i18n("High Private Use Surrogates"); // DB80
+SUBCATEGORY_1(0xDB80);
+
+category = i18n("Low Surrogates"); // DC00
+SUBCATEGORY_1(0xDC00);
+
+category = i18n("Private Use Area"); // E000
+SUBCATEGORY_1(0xE000);
+
+category = i18n("CJK Compatibility Ideographs"); // F900
+SUBCATEGORY_2(0xF900, i18n("Pronunciation variants from KS X 1001:1998"));
+SUBCATEGORY_2(0xFA0C, i18n("Duplicate characters from Big 5"));
+SUBCATEGORY_2(0xFA0E, i18n("The IBM 32 compatibility ideographs"));
+SUBCATEGORY_2(0xFA2E, i18n("Korean compatibility ideographs"));
+SUBCATEGORY_2(0xFA30, i18n("JIS X 0213 compatibility ideographs"));
+SUBCATEGORY_2(0xFA6B, i18n("ARIB compatibility ideographs"));
+SUBCATEGORY_2(0xFA70, i18n("DPRK compatibility ideographs"));
+
+category = i18n("Alphabetic Presentation Forms"); // FB00
+SUBCATEGORY_2(0xFB00, i18n("Latin ligatures"));
+SUBCATEGORY_2(0xFB13, i18n("Armenian ligatures"));
+SUBCATEGORY_2(0xFB1D, i18n("Hebrew presentation forms"));
+
+category = i18n("Arabic Presentation Forms-A"); // FB50
+SUBCATEGORY_2(0xFB50, i18n("Glyphs for contextual forms of letters for Persian, Urdu, Sindhi, etc."));
+SUBCATEGORY_2(0xFBB2, i18n("Arabic pedagogical symbols"));
+SUBCATEGORY_2(0xFBC3, i18n("Honorific word ligatures"));
+SUBCATEGORY_2(0xFBD3, i18n("Glyphs for contextual forms of letters for Central Asian languages"));
+SUBCATEGORY_2(0xFBEA, i18n("Ligatures (two elements)"));
+SUBCATEGORY_2(0xFD3E, i18n("Punctuation"));
+SUBCATEGORY_2(0xFD40, i18n("Honorific word ligatures"));
+SUBCATEGORY_2(0xFD50, i18n("Ligatures (three elements)"));
+SUBCATEGORY_2(0xFD90, i18n("Honorific word ligatures"));
+SUBCATEGORY_2(0xFD92, i18n("Ligatures (three elements)"));
+SUBCATEGORY_2(0xFDC8, i18n("Honorific word ligatures"));
+SUBCATEGORY_2(0xFDD0, i18n("Noncharacters"));
+SUBCATEGORY_2(0xFDF0, i18n("Word ligatures"));
+SUBCATEGORY_2(0xFDFC, i18n("Currency symbol"));
+SUBCATEGORY_2(0xFDFD, i18n("Honorific word ligatures"));
+
+category = i18n("Variation Selectors"); // FE00
+SUBCATEGORY_2(0xFE00, i18n("Variation selectors"));
+SUBCATEGORY_2(0xFE0E, i18n("Emoji-specific variation selectors"));
+
+category = i18n("Vertical Forms"); // FE10
+SUBCATEGORY_2(0xFE10, i18n("Glyphs for vertical variants"));
+
+category = i18n("Combining Half Marks"); // FE20
+SUBCATEGORY_2(0xFE20, i18n("Combining half marks"));
+SUBCATEGORY_2(0xFE24, i18n("Continuous macrons for Coptic"));
+SUBCATEGORY_2(0xFE27, i18n("Combining half marks below"));
+SUBCATEGORY_2(0xFE2E, i18n("Combining half marks"));
+
+category = i18n("CJK Compatibility Forms"); // FE30
+SUBCATEGORY_2(0xFE30, i18n("Glyphs for vertical variants"));
+SUBCATEGORY_2(0xFE45, i18n("Sidelining emphasis marks"));
+SUBCATEGORY_2(0xFE47, i18n("Glyphs for vertical variants"));
+SUBCATEGORY_2(0xFE49, i18n("Overscores and underscores"));
+
+category = i18n("Small Form Variants"); // FE50
+SUBCATEGORY_1(0xFE50);
+
+category = i18n("Arabic Presentation Forms-B"); // FE70
+SUBCATEGORY_2(0xFE70, i18n("Glyphs for spacing forms of Arabic points"));
+SUBCATEGORY_2(0xFE73, i18n("Glyph part"));
+SUBCATEGORY_2(0xFE74, i18n("Glyphs for spacing forms of Arabic points"));
+SUBCATEGORY_2(0xFE80, i18n("Basic glyphs for Arabic language contextual forms"));
+SUBCATEGORY_2(0xFEFF, i18n("Special"));
+
+category = i18n("Halfwidth and Fullwidth Forms"); // FF00
+SUBCATEGORY_2(0xFF01, i18n("Fullwidth ASCII variants"));
+SUBCATEGORY_2(0xFF5F, i18n("Fullwidth brackets"));
+SUBCATEGORY_2(0xFF61, i18n("Halfwidth CJK punctuation"));
+SUBCATEGORY_2(0xFF65, i18n("Halfwidth Katakana variants"));
+SUBCATEGORY_2(0xFFA0, i18n("Halfwidth Hangul variants"));
+SUBCATEGORY_2(0xFFE0, i18n("Fullwidth symbol variants"));
+SUBCATEGORY_2(0xFFE8, i18n("Halfwidth symbol variants"));
+
+category = i18n("Specials"); // FFF0
+SUBCATEGORY_2(0xFFF9, i18n("Interlinear annotation"));
+SUBCATEGORY_2(0xFFFC, i18n("Replacement characters"));
+SUBCATEGORY_2(0xFFFE, i18n("Noncharacters"));
+
+#undef SUBCATEGORY_1
+#undef SUBCATEGORY_2 \ No newline at end of file
diff --git a/kcharselect/kcharselectdia.cpp b/kcharselect/kcharselectdia.cpp
index d5232a8..33ed2c0 100644
--- a/kcharselect/kcharselectdia.cpp
+++ b/kcharselect/kcharselectdia.cpp
@@ -9,10 +9,15 @@
#include <stdlib.h>
+#include <tqcursor.h>
+#include <tqtimer.h>
+
#include <kdialog.h>
#include <tdeapplication.h>
#include <tdeaccel.h>
#include <tdeconfig.h>
+#include <tdelistview.h>
+#include <tdelistviewsearchline.h>
#include <tdelocale.h>
#include <tdeaction.h>
@@ -44,6 +49,62 @@ KCharSelectDia::KCharSelectDia(TQWidget *parent,const char *name,
TQ_SLOT(fontSelected(const TQString &)));
grid->addMultiCellWidget(charSelect, 0, 0, 0, 3);
+ // Add category browser dock widget
+ dCategories = new TQDockWindow(this, "categories");
+
+ TQVBox *cvbox = new TQVBox(dCategories);
+
+ categories = new TDEListView(cvbox, "dock_categories");
+ categories->addColumn(i18n("Codepoint"));
+ categories->addColumn(i18n("Name"));
+ categories->setRootIsDecorated(true);
+ categories->setResizeMode(TQListView::LastColumn);
+ categories->setAllColumnsShowFocus(true);
+ connect(categories, TQ_SIGNAL(currentChanged(TQListViewItem*)), this, TQ_SLOT(categorySelected(TQListViewItem*)));
+
+ TDEListViewSearchLineWidget *lvsw = new TDEListViewSearchLineWidget(categories, cvbox);
+
+ dCategories->setWidget(cvbox);
+ dCategories->setCaption(i18n("Categories"));
+ dCategories->setHorizontallyStretchable(true);
+ dCategories->setVerticallyStretchable(true);
+ dCategories->setResizeEnabled(true);
+ dCategories->setCloseMode(TQDockWindow::Always);
+
+ // BUG TDEMainWindow::saveMainWindowSettings() does not save TQDockWindow settings
+ TDEConfig *config = tdeApp->config();
+ config->setGroup("Docks");
+ TQt::Dock categoriesDock = (TQt::Dock)config->readNumEntry("Categories dock", TQt::DockLeft);
+ int categoriesIndex = config->readNumEntry("Categories index", 0);
+ bool categoriesNewline = config->readBoolEntry("Categories nl", false);
+ int categoriesOffset = config->readNumEntry("Categories offset", 0);
+ int categoriesSize = config->readNumEntry("Categories size", -1);
+ bool categoriesShown = config->readBoolEntry("Categories shown", true);
+
+ addDockWindow(dCategories, i18n("Categories"), categoriesDock);
+ moveDockWindow(dCategories, categoriesDock, categoriesNewline, categoriesIndex, categoriesOffset);
+ if (categoriesSize >= 0)
+ {
+ if (dCategories->orientation() == TQt::Horizontal)
+ {
+ dCategories->setFixedExtentHeight(categoriesSize);
+ }
+ else
+ {
+ dCategories->setFixedExtentWidth(categoriesSize);
+ }
+ }
+
+ TDEToggleAction *tCategories = new TDEToggleAction(i18n("Show categories dock"), 0,
+ this, TQ_SLOT(toggleCategoriesDock()), actionCollection(), "show_categories");
+
+ tCategories->setChecked(categoriesShown);
+ dCategories->setShown(categoriesShown);
+
+#include "categories.h"
+
+ TQTimer::singleShot(0, this, TQ_SLOT(populateCategories()));
+
// Build line editor
lined = new TQLineEdit(mainWidget);
lined->resize(lined->sizeHint());
@@ -78,7 +139,7 @@ KCharSelectDia::KCharSelectDia(TQWidget *parent,const char *name,
// Build menu
KStdAction::quit( this, TQ_SLOT(_exit()), actionCollection() );
-
+
new TDEAction(i18n("&To Clipboard"), "edit-copy",
TDEStdAccel::shortcut(TDEStdAccel::Copy), this, TQ_SLOT(toClip()), actionCollection(), "copy_clip" );
@@ -86,20 +147,20 @@ KCharSelectDia::KCharSelectDia(TQWidget *parent,const char *name,
TQ_SLOT(toClipUTF8()), actionCollection(), "copy_utf_8" );
(void)new TDEAction(i18n("To Clipboard &HTML"), 0, this,
TQ_SLOT(toClipHTML()), actionCollection(), "copy_html" );
-
+
new TDEAction(i18n("&From Clipboard"), "edit-paste",
TDEStdAccel::shortcut(TDEStdAccel::Paste), this, TQ_SLOT(fromClip()), actionCollection(), "from_clip" );
(void)new TDEAction(i18n("From Clipboard UTF-8"), 0, this,
TQ_SLOT(fromClipUTF8()), actionCollection(), "from_clip_utf8" );
-
+
i18n("From Clipboard HTML"); // Intended for future use
-
+
KStdAction::clear(this, TQ_SLOT(clear()), actionCollection(), "clear");
(void)new TDEAction(i18n("&Flip"), 0, this,
TQ_SLOT(flipText()), actionCollection(), "flip" );
(void)new TDEAction(i18n("&Alignment"), 0, this,
TQ_SLOT(toggleEntryDirection()), actionCollection(), "alignment" );
-
+
charSelect->setFocus();
entryDirection = direction;
@@ -114,7 +175,9 @@ KCharSelectDia::KCharSelectDia(TQWidget *parent,const char *name,
//==================================================================
void KCharSelectDia::charChanged(const TQChar &_chr)
{
+ if (vChr == _chr) return;
vChr = _chr;
+ updateCurrentCategory();
}
//==================================================================
@@ -269,6 +332,27 @@ void KCharSelectDia::_exit()
config->writeEntry("char",static_cast<int>(vChr.unicode()));
config->writeEntry("table",charSelect->tableNum());
config->writeEntry("entryDirection",entryDirection);
+
+ // BUG TDEMainWindow::saveMainWindowSettings() does not save TQDockWindow settings
+ TQt::Dock dock; int index, offset; bool nl;
+ if (getLocation(dCategories, dock, index, nl, offset))
+ {
+ config->setGroup("Docks");
+ config->writeEntry("Categories dock", dock);
+ config->writeEntry("Categories index", index);
+ config->writeEntry("Categories nl", nl);
+ config->writeEntry("Categories offset", offset);
+ config->writeEntry("Categories shown", dCategories->isShown());
+
+ if (dCategories->orientation() == TQt::Horizontal)
+ {
+ config->writeEntry("Categories size", dCategories->height());
+ }
+ else
+ {
+ config->writeEntry("Categories size", dCategories->width());
+ }
+ }
config->sync();
delete this;
@@ -287,3 +371,86 @@ void KCharSelectDia::help()
tdeApp->invokeHelp();
}
+//==================================================================
+void KCharSelectDia::populateCategories()
+{
+ categories->setCursor(TQCursor(TQt::BusyCursor));
+ categories->setEnabled(false);
+
+ TQMap<int, TQString>::iterator cit;
+ for (cit = mCategories.begin(); cit != mCategories.end(); ++cit)
+ {
+ TQString uc = TQString("%1").arg(cit.key(), 4, 16).replace(' ', '0');
+ TQStringList cdata = TQStringList::split("|", cit.data());
+ TQString category = cdata[0];
+ TQListViewItem *cItem = categories->findItem(category, 1);
+ if (!cItem)
+ {
+ cItem = new TQListViewItem(categories, uc, category);
+ }
+
+ if (cdata.count() > 1)
+ {
+ TQString subcategory = cdata[1];
+ new TQListViewItem(cItem, uc, subcategory);
+ }
+
+ tqApp->processEvents();
+ }
+
+ categories->setEnabled(true);
+ categories->setCursor(TQCursor(TQt::ArrowCursor));
+ updateCurrentCategory();
+}
+
+//==================================================================
+void KCharSelectDia::categorySelected(TQListViewItem *category)
+{
+ bool ok;
+ const int uc = category->text(0).toInt(&ok, 16);
+ if (!ok) return;
+
+ const int table = uc / 256;
+ charSelect->setTableNum(table);
+
+ const TQChar ch(uc);
+ charSelect->setChar(ch);
+}
+
+//==================================================================
+// Returns the category index corresponding to _chr
+int KCharSelectDia::categoryIndex(TQChar &_chr)
+{
+ TQMap<int, TQString>::iterator cit;
+ int uc = -1;
+ for (cit = mCategories.begin(); cit != mCategories.end(); ++cit)
+ {
+ if (cit.key() > vChr.unicode()) break;
+ uc = cit.key();
+ }
+ return uc;
+}
+
+//==================================================================
+// Updates category dock to reflect the category of the currently selected character
+void KCharSelectDia::updateCurrentCategory()
+{
+ int uc = categoryIndex(vChr);
+ if (uc < 0) return;
+
+ TQString codepoint = TQString("%1").arg(uc, 4, 16).replace(' ', '0');
+
+ TQListViewItem *lvi = categories->findItem(codepoint, 0);
+ if (!lvi) return;
+
+ categories->blockSignals(true);
+ categories->setCurrentItem(lvi);
+ categories->ensureItemVisible(lvi);
+ categories->blockSignals(false);
+}
+
+//==================================================================
+void KCharSelectDia::toggleCategoriesDock()
+{
+ dCategories->setShown(static_cast<const TDEToggleAction*>(TQObject::sender())->isChecked());
+} \ No newline at end of file
diff --git a/kcharselect/kcharselectdia.h b/kcharselect/kcharselectdia.h
index c2b3742..24053b1 100644
--- a/kcharselect/kcharselectdia.h
+++ b/kcharselect/kcharselectdia.h
@@ -7,7 +7,7 @@
#ifndef kcharselectdia_h
#define kcharselectdia_h
-
+#include <tqmap.h>
#include <tqlayout.h>
#include <tqlineedit.h>
#include <tqclipboard.h>
@@ -16,7 +16,11 @@
#include <kcharselect.h>
#include <tdemainwindow.h>
-static const char *version = "v1.1";
+static const char *version = "v1.1";
+
+class TQDockWindow;
+class TDEListView;
+class TQListViewItem;
/******************************************************************/
/* class KCharSelectDia */
@@ -25,7 +29,7 @@ static const char *version = "v1.1";
class KCharSelectDia : public TDEMainWindow
{
TQ_OBJECT
-
+
public:
KCharSelectDia(TQWidget *parent,const char *name,const TQChar &_chr,const TQString &_font,int _tableNum, bool direction);
@@ -35,6 +39,8 @@ public:
int chr() { return vChr; }
TQString font() { return vFont; }
+ int categoryIndex(TQChar &_chr);
+
protected:
void closeEvent(TQCloseEvent *) { _exit(); }
@@ -43,11 +49,14 @@ protected:
TQLineEdit *lined;
KPushButton *bClip,*bClear;
KPushButton *bHelp;
+ TQDockWindow *dCategories;
+ TDEListView *categories;
TQChar vChr;
TQString vFont;
int pointSize;
bool entryDirection;
+ TQMap <int, TQString> mCategories;
protected slots:
void charChanged(const TQChar &_chr);
@@ -66,6 +75,10 @@ protected slots:
void _exit();
void clear();
void help();
+ void populateCategories();
+ void categorySelected(TQListViewItem*);
+ void updateCurrentCategory();
+ void toggleCategoriesDock();
};
diff --git a/kcharselect/kcharselectui.rc b/kcharselect/kcharselectui.rc
index 7768293..f27e98f 100644
--- a/kcharselect/kcharselectui.rc
+++ b/kcharselect/kcharselectui.rc
@@ -11,6 +11,10 @@
<Action name="clear"/>
<Action name="flip"/>
<Action name="alignment"/>
- </Menu>
+ </Menu>
+ <Menu name="settings"><text>&amp;Settings</text>
+ <Action name="show_categories"/>
+ <Separator/>
+ </Menu>
</MenuBar>
</kpartgui>