diff options
| author | Philippe Mavridis <philippe.mavridis@yandex.com> | 2026-04-01 18:59:40 +0300 |
|---|---|---|
| committer | Philippe Mavridis <philippe.mavridis@yandex.com> | 2026-04-01 19:08:43 +0300 |
| commit | d3067241a0d2f531e23ed82c46326fd95e6a2031 (patch) | |
| tree | e493ff67bc535acb4bb0c37f173c15e82f67a16f /kcharselect | |
| parent | 50855e76de13f2ca1361130493cc026b1ea50bba (diff) | |
| download | tdeutils-feat/kcharselect/category-dock.tar.gz tdeutils-feat/kcharselect/category-dock.zip | |
KCharSelect: add categories dockfeat/kcharselect/category-dock
The category dock provides an easier way to navigate the Unicode tables compared to entering the table number
or manually scrolling until the desired table. The category names are officially defined by the Unicode standard
and are part of many character pickers nowadays.
The proposed dock provides a sortable and searchable hierarchy of categories and subcategories, can be moved, resized
or hidden and the settings are preserved at the next start.
Signed-off-by: Philippe Mavridis <philippe.mavridis@yandex.com>
Diffstat (limited to 'kcharselect')
| -rw-r--r-- | kcharselect/categories.h | 1769 | ||||
| -rw-r--r-- | kcharselect/kcharselectdia.cpp | 177 | ||||
| -rw-r--r-- | kcharselect/kcharselectdia.h | 19 | ||||
| -rw-r--r-- | kcharselect/kcharselectui.rc | 6 |
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>&Settings</text> + <Action name="show_categories"/> + <Separator/> + </Menu> </MenuBar> </kpartgui> |
