copying.txt
*
* MODULE: Unicode.m3
* PURPOSE: Unicode character set
* HISTORY:
* DATE PROGRAMMER DESCRIPTION
* 30-Nov-2003 Dirk Muysers Initial creation
*
* NOTE:
* The data tables in this module are based on the file
* UnicodeData-3.2.0.txt
.
\*---------------------------------------------------------------------------
MODULE---------------------------------------------------------------------------*} * DESCRIPTION: * * This implementation admittedly uses a brute force approach. * * Normally, UNICODE character properties should be provided by the operating * system, which is not the case for the majority of the existing Win32 * platforms. This implementation, while being a performance hog, has the * advantage of having a minimal memory footprint. Most operating system * implementations that offer good performance require at least 2 MB of * memory for hosting the corresponding property tables. * * Reference: Optimal Unicode 3.x Character Attributes and Access Methods * <http://developers.sun.com/dev/gadc/technicalpublications/presentations/ * iuc19-optimalunicode.pdf> * {*---------------------------------------------------------------------------; Unicode
===========================================================================*} * TYPES {*===========================================================================
TYPE Ord = BITS 16 FOR [0..16_FFFF]; Tuple = ARRAY OF Ord; T1 = ARRAY [0..0] OF Ord; T2 = ARRAY [0..1] OF Ord; T3 = ARRAY [0..2] OF Ord;===========================================================================*} * DATA {*===========================================================================
CONST---------------------------------------------------------------------------*} * Spaces {*---------------------------------------------------------------------------
space2 = ARRAY OF T2 { T2{16_0009, 16_000D}, (* tab, form feed, newline and carriage return *) T2{16_0020, 16_0020}, (* space *) T2{16_00a0, 16_00A0}, (* non-break space *) T2{16_2000, 16_200B}, (* - *) T2{16_2028, 16_2029}, (* - *) T2{16_3000, 16_3000}, (* *) T2{16_FEFF, 16_FEFF} (* byte order mark *) };---------------------------------------------------------------------------*} * Letter ranges (covers only those ranges that are not in lower or upper) {*---------------------------------------------------------------------------
alpha2 = ARRAY OF T2 { T2{16_00D8, 16_00F6}, (* Ø - ö *) T2{16_00F8, 16_01F5}, (* ø - ǵ *) T2{16_0250, 16_02A8}, (* ɐ - ʨ *) T2{16_038E, 16_03A1}, (* Ύ - Ρ *) T2{16_03A3, 16_03CE}, (* Σ - ώ *) T2{16_03D0, 16_03D6}, (* ϐ - ϖ *) T2{16_03E2, 16_03F3}, (* Ϣ - ϳ *) T2{16_0490, 16_04C4}, (* Ґ - ӄ *) T2{16_0561, 16_0587}, (* ա - և *) T2{16_05D0, 16_05EA}, (* א - ת *) T2{16_05F0, 16_05F2}, (* װ - ײ *) T2{16_0621, 16_063A}, (* ء - غ *) T2{16_0640, 16_064A}, (* ـ - ي *) T2{16_0671, 16_06B7}, (* ٱ - ڷ *) T2{16_06BA, 16_06BE}, (* ں - ھ *) T2{16_06C0, 16_06CE}, (* ۀ - ێ *) T2{16_06D0, 16_06D3}, (* ې - ۓ *) T2{16_0905, 16_0939}, (* अ - ह *) T2{16_0958, 16_0961}, (* क़ - ॡ *) T2{16_0985, 16_098C}, (* অ - ঌ *) T2{16_098F, 16_0990}, (* এ - ঐ *) T2{16_0993, 16_09A8}, (* ও - ন *) T2{16_09AA, 16_09B0}, (* প - র *) T2{16_09B6, 16_09B9}, (* শ - হ *) T2{16_09DC, 16_09DD}, (* ড় - ঢ় *) T2{16_09DF, 16_09E1}, (* য় - ৡ *) T2{16_09F0, 16_09F1}, (* ৰ - ৱ *) T2{16_0A05, 16_0A0A}, (* ਅ - ਊ *) T2{16_0A0F, 16_0A10}, (* ਏ - ਐ *) T2{16_0A13, 16_0A28}, (* ਓ - ਨ *) T2{16_0A2A, 16_0A30}, (* ਪ - ਰ *) T2{16_0A32, 16_0A33}, (* ਲ - ਲ਼ *) T2{16_0A35, 16_0A36}, (* ਵ - ਸ਼ *) T2{16_0A38, 16_0A39}, (* ਸ - ਹ *) T2{16_0A59, 16_0A5C}, (* ਖ਼ - ੜ *) T2{16_0A85, 16_0A8B}, (* અ - ઋ *) T2{16_0A8F, 16_0A91}, (* એ - ઑ *) T2{16_0A93, 16_0AA8}, (* ઓ - ન *) T2{16_0AAA, 16_0AB0}, (* પ - ર *) T2{16_0AB2, 16_0AB3}, (* લ - ળ *) T2{16_0AB5, 16_0AB9}, (* વ - હ *) T2{16_0B05, 16_0B0C}, (* ଅ - ଌ *) T2{16_0B0F, 16_0B10}, (* ଏ - ଐ *) T2{16_0B13, 16_0B28}, (* ଓ - ନ *) T2{16_0B2A, 16_0B30}, (* ପ - ର *) T2{16_0B32, 16_0B33}, (* ଲ - ଳ *) T2{16_0B36, 16_0B39}, (* ଶ - ହ *) T2{16_0B5C, 16_0B5D}, (* ଡ଼ - ଢ଼ *) T2{16_0B5F, 16_0B61}, (* ୟ - ୡ *) T2{16_0B85, 16_0B8A}, (* அ - ஊ *) T2{16_0B8E, 16_0B90}, (* எ - ஐ *) T2{16_0B92, 16_0B95}, (* ஒ - க *) T2{16_0B99, 16_0B9A}, (* ங - ச *) T2{16_0B9E, 16_0B9F}, (* ஞ - ட *) T2{16_0BA3, 16_0BA4}, (* ண - த *) T2{16_0BA8, 16_0BAA}, (* ந - ப *) T2{16_0BAE, 16_0BB5}, (* ம - வ *) T2{16_0BB7, 16_0BB9}, (* ஷ - ஹ *) T2{16_0C05, 16_0C0C}, (* అ - ఌ *) T2{16_0C0E, 16_0C10}, (* ఎ - ఐ *) T2{16_0C12, 16_0C28}, (* ఒ - న *) T2{16_0C2A, 16_0C33}, (* ప - ళ *) T2{16_0C35, 16_0C39}, (* వ - హ *) T2{16_0C60, 16_0C61}, (* ౠ - ౡ *) T2{16_0C85, 16_0C8C}, (* ಅ - ಌ *) T2{16_0C8E, 16_0C90}, (* ಎ - ಐ *) T2{16_0C92, 16_0CA8}, (* ಒ - ನ *) T2{16_0CAA, 16_0CB3}, (* ಪ - ಳ *) T2{16_0CB5, 16_0CB9}, (* ವ - ಹ *) T2{16_0CE0, 16_0CE1}, (* ೠ - ೡ *) T2{16_0D05, 16_0D0C}, (* അ - ഌ *) T2{16_0D0E, 16_0D10}, (* എ - ഐ *) T2{16_0D12, 16_0D28}, (* ഒ - ന *) T2{16_0D2A, 16_0D39}, (* പ - ഹ *) T2{16_0D60, 16_0D61}, (* ൠ - ൡ *) T2{16_0E01, 16_0E30}, (* ก - ะ *) T2{16_0E32, 16_0E33}, (* า - ำ *) T2{16_0E40, 16_0E46}, (* เ - ๆ *) T2{16_0E5A, 16_0E5B}, (* ๚ - ๛ *) T2{16_0E81, 16_0E82}, (* ກ - ຂ *) T2{16_0E87, 16_0E88}, (* ງ - ຈ *) T2{16_0E94, 16_0E97}, (* ດ - ທ *) T2{16_0E99, 16_0E9F}, (* ນ - ຟ *) T2{16_0EA1, 16_0EA3}, (* ມ - ຣ *) T2{16_0EAA, 16_0EAB}, (* ສ - ຫ *) T2{16_0EAD, 16_0EAE}, (* ອ - ຮ *) T2{16_0EB2, 16_0EB3}, (* າ - ຳ *) T2{16_0EC0, 16_0EC4}, (* ເ - ໄ *) T2{16_0EDC, 16_0EDD}, (* ໜ - ໝ *) T2{16_0F18, 16_0F19}, (* ༘ - ༙ *) T2{16_0F40, 16_0F47}, (* ཀ - ཇ *) T2{16_0F49, 16_0F69}, (* ཉ - ཀྵ *) T2{16_10D0, 16_10F6}, (* ა - ჶ *) T2{16_1100, 16_1159}, (* ᄀ - ᅙ *) T2{16_115F, 16_11A2}, (* ᅟ - ᆢ *) T2{16_11A8, 16_11F9}, (* ᆨ - ᇹ *) T2{16_1E00, 16_1E9B}, (* Ḁ - ẛ *) T2{16_1F50, 16_1F57}, (* ὐ - ὗ *) T2{16_1F80, 16_1FB4}, (* ᾀ - ᾴ *) T2{16_1FB6, 16_1FBC}, (* ᾶ - ᾼ *) T2{16_1FC2, 16_1FC4}, (* ῂ - ῄ *) T2{16_1FC6, 16_1FCC}, (* ῆ - ῌ *) T2{16_1FD0, 16_1FD3}, (* ῐ - ΐ *) T2{16_1FD6, 16_1FDB}, (* ῖ - Ί *) T2{16_1FE0, 16_1FEC}, (* ῠ - Ῥ *) T2{16_1FF2, 16_1FF4}, (* ῲ - ῴ *) T2{16_1FF6, 16_1FFC}, (* ῶ - ῼ *) T2{16_210A, 16_2113}, (* ℊ - ℓ *) T2{16_2115, 16_211D}, (* ℕ - ℝ *) T2{16_2120, 16_2122}, (* ℠ - ™ *) T2{16_212A, 16_2131}, (* K - ℱ *) T2{16_2133, 16_2138}, (* ℳ - ℸ *) T2{16_3041, 16_3094}, (* ぁ - ゔ *) T2{16_30A1, 16_30FA}, (* ァ - ヺ *) T2{16_3105, 16_312C}, (* ㄅ - ㄬ *) T2{16_3131, 16_318E}, (* ㄱ - ㆎ *) T2{16_3192, 16_319F}, (* ㆒ - ㆟ *) T2{16_3260, 16_327B}, (* ㉠ - ㉻ *) T2{16_328A, 16_32B0}, (* ㊊ - ㊰ *) T2{16_32D0, 16_32FE}, (* ㋐ - ㋾ *) T2{16_3300, 16_3357}, (* ㌀ - ㍗ *) T2{16_3371, 16_3376}, (* ㍱ - ㍶ *) T2{16_337B, 16_3394}, (* ㍻ - ㎔ *) T2{16_3399, 16_339E}, (* ㎙ - ㎞ *) T2{16_33A9, 16_33AD}, (* ㎩ - ㎭ *) T2{16_33B0, 16_33C1}, (* ㎰ - ㏁ *) T2{16_33C3, 16_33C5}, (* ㏃ - ㏅ *) T2{16_33C7, 16_33D7}, (* ㏇ - ㏗ *) T2{16_33D9, 16_33DD}, (* ㏙ - ㏝ *) T2{16_4E00, 16_9FFF}, (* 一 - 鿿 *) T2{16_AC00, 16_D7A3}, (* 가 - 힣 *) T2{16_F900, 16_FB06}, (* 豈 - st *) T2{16_FB13, 16_FB17}, (* ﬓ - ﬗ *) T2{16_FB1F, 16_FB28}, (* ײַ - ﬨ *) T2{16_FB2A, 16_FB36}, (* שׁ - זּ *) T2{16_FB38, 16_FB3C}, (* טּ - לּ *) T2{16_FB40, 16_FB41}, (* נּ - סּ *) T2{16_FB43, 16_FB44}, (* ףּ - פּ *) T2{16_FB46, 16_FBB1}, (* צּ - ﮱ *) T2{16_FBD3, 16_FD3D}, (* ﯓ - ﴽ *) T2{16_FD50, 16_FD8F}, (* ﵐ - ﶏ *) T2{16_FD92, 16_FDC7}, (* ﶒ - ﷇ *) T2{16_FDF0, 16_FDF9}, (* ﷰ - ﷹ *) T2{16_FE70, 16_FE72}, (* ﹰ - ﹲ *) T2{16_FE76, 16_FEFC}, (* ﹶ - ﻼ *) T2{16_FF66, 16_FF6F}, (* ヲ - ッ *) T2{16_FF71, 16_FF9D}, (* ア - ン *) T2{16_FFA0, 16_FFBE}, (* ᅠ - ᄒ *) T2{16_FFC2, 16_FFC7}, (* ᅡ - ᅦ *) T2{16_FFCA, 16_FFCF}, (* ᅧ - ᅬ *) T2{16_FFD2, 16_FFD7}, (* ᅭ - ᅲ *) T2{16_FFDA, 16_FFDC} (* ᅳ - ᅵ *) };---------------------------------------------------------------------------*} * Letter singletons (only covers those letters that are not in upper/lower) {*---------------------------------------------------------------------------
alpha1 = ARRAY OF T1 { T1{16_00AA}, (* ª *) T1{16_00B5}, (* µ *) T1{16_00BA}, (* º *) T1{16_03DA}, (* Ϛ *) T1{16_03DC}, (* Ϝ *) T1{16_03DE}, (* Ϟ *) T1{16_03E0}, (* Ϡ *) T1{16_06D5}, (* ە *) T1{16_09B2}, (* ল *) T1{16_0A5E}, (* ਫ਼ *) T1{16_0A8D}, (* ઍ *) T1{16_0AE0}, (* ૠ *) T1{16_0B9C}, (* ஜ *) T1{16_0CDE}, (* ೞ *) T1{16_0E4F}, (* ๏ *) T1{16_0E84}, (* ຄ *) T1{16_0E8A}, (* ຊ *) T1{16_0E8D}, (* ຍ *) T1{16_0EA5}, (* ລ *) T1{16_0EA7}, (* ວ *) T1{16_0EB0}, (* ະ *) T1{16_0EBD}, (* ຽ *) T1{16_1FBE}, (* ι *) T1{16_207F}, (* ⁿ *) T1{16_20A8}, (* ₨ *) T1{16_2102}, (* ℂ *) T1{16_2107}, (* ℇ *) T1{16_2124}, (* ℤ *) T1{16_2126}, (* Ω *) T1{16_2128}, (* ℨ *) T1{16_FB3E}, (* מּ *) T1{16_FE74} (* ﹴ *) };---------------------------------------------------------------------------*} * Decimal digit ranges {*---------------------------------------------------------------------------
digit2 = ARRAY OF T2 { T2{16_0030, 16_0039}, (* Digit *) T2{16_0660, 16_0669}, (* Arabic Indic *) T2{16_06F0, 16_06F9}, (* Extended Arabic Indic *) T2{16_0966, 16_096F}, (* Devanagari *) T2{16_09E6, 16_09EF}, (* Bengali *) T2{16_0A66, 16_0A6F}, (* Gurmukhi *) T2{16_0AE6, 16_0AEF}, (* Gujarati *) T2{16_0B66, 16_0B6F}, (* Oriya *) T2{16_0BE7, 16_0BEF}, (* Tamil [1..9] :-( *) T2{16_0C66, 16_0C6F}, (* Telugu *) T2{16_0CE6, 16_0CEF}, (* Kannara *) T2{16_0D66, 16_0D6F}, (* Malyalam *) T2{16_0E50, 16_0E59}, (* Thai *) T2{16_0ED0, 16_0ED9}, (* Lao *) T2{16_0F20, 16_0F29}, (* Tibetan *) T2{16_1040, 16_1049}, (* Burmese *) T2{16_1369, 16_1371}, (* Ethiopian [1..9] :-( *) T2{16_17E0, 16_17E9}, (* Khmer *) T2{16_1810, 16_1819}, (* Gurmukhi *) T2{16_0A66, 16_0A6F}, (* Mongolian *) T2{16_FF10, 16_FF19} (* Fullwidth digit *) };---------------------------------------------------------------------------*} * Upper-case ranges (3rd column is conversion excess 500) {*---------------------------------------------------------------------------
tolower3 = ARRAY OF T3 { T3{16_0041, 16_005A, 532}, (* A-Z a-z *) T3{16_00C0, 16_00D6, 532}, (* À-Ö à-ö *) T3{16_00D8, 16_00DE, 532}, (* Ø-Þ ø-þ *) T3{16_0189, 16_018A, 705}, (* Ɖ-Ɗ ɖ-ɗ *) T3{16_018E, 16_018F, 702}, (* Ǝ-Ə ɘ-ə *) T3{16_01B1, 16_01B2, 717}, (* Ʊ-Ʋ ʊ-ʋ *) T3{16_0388, 16_038A, 537}, (* Έ-Ί έ-ί *) T3{16_038E, 16_038F, 563}, (* Ύ-Ώ ύ-ώ *) T3{16_0391, 16_03A1, 532}, (* Α-Ρ α-ρ *) T3{16_03A3, 16_03AB, 532}, (* Σ-Ϋ σ-ϋ *) T3{16_0401, 16_040C, 580}, (* Ё-Ќ ё-ќ *) T3{16_040E, 16_040F, 580}, (* Ў-Џ ў-џ *) T3{16_0410, 16_042F, 532}, (* А-Я а-я *) T3{16_0531, 16_0556, 548}, (* Ա-Ֆ ա-ֆ *) T3{16_10A0, 16_10C5, 548}, (* Ⴀ-Ⴥ ა-ჵ *) T3{16_1F08, 16_1F0F, 492}, (* Ἀ-Ἇ ἀ-ἇ *) T3{16_1F18, 16_1F1D, 492}, (* Ἐ-Ἕ ἐ-ἕ *) T3{16_1F28, 16_1F2F, 492}, (* Ἠ-Ἧ ἠ-ἧ *) T3{16_1F38, 16_1F3F, 492}, (* Ἰ-Ἷ ἰ-ἷ *) T3{16_1F48, 16_1F4D, 492}, (* Ὀ-Ὅ ὀ-ὅ *) T3{16_1F68, 16_1F6F, 492}, (* Ὠ-Ὧ ὠ-ὧ *) T3{16_1F88, 16_1F8F, 492}, (* -ᾏ ᾀ-ᾇ *) T3{16_1F98, 16_1F9F, 492}, (* ᾘ-ᾟ ᾐ-ᾗ *) T3{16_1FA8, 16_1FAF, 492}, (* ᾨ-ᾯ ᾠ-ᾧ *) T3{16_1FB8, 16_1FB9, 492}, (* Ᾰ-Ᾱ ᾰ-ᾱ *) T3{16_1FBA, 16_1FBB, 426}, (* Ὰ-Ά ὰ-ά *) T3{16_1FC8, 16_1FCB, 414}, (* Ὲ-Ή ὲ-ή *) T3{16_1FD8, 16_1FD9, 492}, (* Ῐ-Ῑ ῐ-ῑ *) T3{16_1FDA, 16_1FDB, 400}, (* Ὶ-Ί ὶ-ί *) T3{16_1FE8, 16_1FE9, 492}, (* Ῠ-Ῡ ῠ-ῡ *) T3{16_1FEA, 16_1FEB, 388}, (* Ὺ-Ύ ὺ-ύ *) T3{16_1FF8, 16_1FF9, 372}, (* Ὸ-Ό ὸ-ό *) T3{16_1FFA, 16_1FFB, 374}, (* Ὼ-Ώ ὼ-ώ *) T3{16_2160, 16_216F, 516}, (* Ⅰ-Ⅿ ⅰ-ⅿ *) T3{16_24B6, 16_24CF, 526}, (* Ⓐ-Ⓩ ⓐ-ⓩ *) T3{16_FF21, 16_FF3A, 532} (* A-Z a-z *) };---------------------------------------------------------------------------*} * Upper-case Singletons (2nd column is conversion excess 500 {*---------------------------------------------------------------------------
tolower2 = ARRAY OF T2 { T2{16_0100, 501}, (* Ā ā *) T2{16_0102, 501}, (* Ă ă *) T2{16_0104, 501}, (* Ą ą *) T2{16_0106, 501}, (* Ć ć *) T2{16_0108, 501}, (* Ĉ ĉ *) T2{16_010A, 501}, (* Ċ ċ *) T2{16_010C, 501}, (* Č č *) T2{16_010E, 501}, (* Ď ď *) T2{16_0110, 501}, (* Đ đ *) T2{16_0112, 501}, (* Ē ē *) T2{16_0114, 501}, (* Ĕ ĕ *) T2{16_0116, 501}, (* Ė ė *) T2{16_0118, 501}, (* Ę ę *) T2{16_011A, 501}, (* Ě ě *) T2{16_011C, 501}, (* Ĝ ĝ *) T2{16_011E, 501}, (* Ğ ğ *) T2{16_0120, 501}, (* Ġ ġ *) T2{16_0122, 501}, (* Ģ ģ *) T2{16_0124, 501}, (* Ĥ ĥ *) T2{16_0126, 501}, (* Ħ ħ *) T2{16_0128, 501}, (* Ĩ ĩ *) T2{16_012A, 501}, (* Ī ī *) T2{16_012C, 501}, (* Ĭ ĭ *) T2{16_012E, 501}, (* Į į *) T2{16_0130, 301}, (* İ i *) T2{16_0132, 501}, (* IJ ij *) T2{16_0134, 501}, (* Ĵ ĵ *) T2{16_0136, 501}, (* Ķ ķ *) T2{16_0139, 501}, (* Ĺ ĺ *) T2{16_013B, 501}, (* Ļ ļ *) T2{16_013D, 501}, (* Ľ ľ *) T2{16_013F, 501}, (* Ŀ ŀ *) T2{16_0141, 501}, (* Ł ł *) T2{16_0143, 501}, (* Ń ń *) T2{16_0145, 501}, (* Ņ ņ *) T2{16_0147, 501}, (* Ň ň *) T2{16_014A, 501}, (* Ŋ ŋ *) T2{16_014C, 501}, (* Ō ō *) T2{16_014E, 501}, (* Ŏ ŏ *) T2{16_0150, 501}, (* Ő ő *) T2{16_0152, 501}, (* Œ œ *) T2{16_0154, 501}, (* Ŕ ŕ *) T2{16_0156, 501}, (* Ŗ ŗ *) T2{16_0158, 501}, (* Ř ř *) T2{16_015A, 501}, (* Ś ś *) T2{16_015C, 501}, (* Ŝ ŝ *) T2{16_015E, 501}, (* Ş ş *) T2{16_0160, 501}, (* Š š *) T2{16_0162, 501}, (* Ţ ţ *) T2{16_0164, 501}, (* Ť ť *) T2{16_0166, 501}, (* Ŧ ŧ *) T2{16_0168, 501}, (* Ũ ũ *) T2{16_016A, 501}, (* Ū ū *) T2{16_016C, 501}, (* Ŭ ŭ *) T2{16_016E, 501}, (* Ů ů *) T2{16_0170, 501}, (* Ű ű *) T2{16_0172, 501}, (* Ų ų *) T2{16_0174, 501}, (* Ŵ ŵ *) T2{16_0176, 501}, (* Ŷ ŷ *) T2{16_0178, 379}, (* Ÿ ÿ *) T2{16_0179, 501}, (* Ź ź *) T2{16_017B, 501}, (* Ż ż *) T2{16_017D, 501}, (* Ž ž *) T2{16_0181, 710}, (* Ɓ ɓ *) T2{16_0182, 501}, (* Ƃ ƃ *) T2{16_0184, 501}, (* Ƅ ƅ *) T2{16_0186, 706}, (* Ɔ ɔ *) T2{16_0187, 501}, (* Ƈ ƈ *) T2{16_018B, 501}, (* Ƌ ƌ *) T2{16_0190, 703}, (* Ɛ ɛ *) T2{16_0191, 501}, (* Ƒ ƒ *) T2{16_0193, 705}, (* Ɠ ɠ *) T2{16_0194, 707}, (* Ɣ ɣ *) T2{16_0196, 711}, (* Ɩ ɩ *) T2{16_0197, 709}, (* Ɨ ɨ *) T2{16_0198, 501}, (* Ƙ ƙ *) T2{16_019C, 711}, (* Ɯ ɯ *) T2{16_019D, 713}, (* Ɲ ɲ *) T2{16_01A0, 501}, (* Ơ ơ *) T2{16_01A2, 501}, (* Ƣ ƣ *) T2{16_01A4, 501}, (* Ƥ ƥ *) T2{16_01A7, 501}, (* Ƨ ƨ *) T2{16_01A9, 718}, (* Ʃ ʃ *) T2{16_01AC, 501}, (* Ƭ ƭ *) T2{16_01AE, 718}, (* Ʈ ʈ *) T2{16_01AF, 501}, (* Ư ư *) T2{16_01B3, 501}, (* Ƴ ƴ *) T2{16_01B5, 501}, (* Ƶ ƶ *) T2{16_01B7, 719}, (* Ʒ ʒ *) T2{16_01B8, 501}, (* Ƹ ƹ *) T2{16_01BC, 501}, (* Ƽ ƽ *) T2{16_01C4, 502}, (* DŽ dž *) T2{16_01C5, 501}, (* Dž dž *) T2{16_01C7, 502}, (* LJ lj *) T2{16_01C8, 501}, (* Lj lj *) T2{16_01CA, 502}, (* NJ nj *) T2{16_01CB, 501}, (* Nj nj *) T2{16_01CD, 501}, (* Ǎ ǎ *) T2{16_01CF, 501}, (* Ǐ ǐ *) T2{16_01D1, 501}, (* Ǒ ǒ *) T2{16_01D3, 501}, (* Ǔ ǔ *) T2{16_01D5, 501}, (* Ǖ ǖ *) T2{16_01D7, 501}, (* Ǘ ǘ *) T2{16_01D9, 501}, (* Ǚ ǚ *) T2{16_01DB, 501}, (* Ǜ ǜ *) T2{16_01DE, 501}, (* Ǟ ǟ *) T2{16_01E0, 501}, (* Ǡ ǡ *) T2{16_01E2, 501}, (* Ǣ ǣ *) T2{16_01E4, 501}, (* Ǥ ǥ *) T2{16_01E6, 501}, (* Ǧ ǧ *) T2{16_01E8, 501}, (* Ǩ ǩ *) T2{16_01EA, 501}, (* Ǫ ǫ *) T2{16_01EC, 501}, (* Ǭ ǭ *) T2{16_01EE, 501}, (* Ǯ ǯ *) T2{16_01F1, 502}, (* DZ dz *) T2{16_01F2, 501}, (* Dz dz *) T2{16_01F4, 501}, (* Ǵ ǵ *) T2{16_01FA, 501}, (* Ǻ ǻ *) T2{16_01FC, 501}, (* Ǽ ǽ *) T2{16_01FE, 501}, (* Ǿ ǿ *) T2{16_0200, 501}, (* Ȁ ȁ *) T2{16_0202, 501}, (* Ȃ ȃ *) T2{16_0204, 501}, (* Ȅ ȅ *) T2{16_0206, 501}, (* Ȇ ȇ *) T2{16_0208, 501}, (* Ȉ ȉ *) T2{16_020A, 501}, (* Ȋ ȋ *) T2{16_020C, 501}, (* Ȍ ȍ *) T2{16_020E, 501}, (* Ȏ ȏ *) T2{16_0210, 501}, (* Ȑ ȑ *) T2{16_0212, 501}, (* Ȓ ȓ *) T2{16_0214, 501}, (* Ȕ ȕ *) T2{16_0216, 501}, (* Ȗ ȗ *) T2{16_0386, 538}, (* Ά ά *) T2{16_038C, 564}, (* Ό ό *) T2{16_03E2, 501}, (* Ϣ ϣ *) T2{16_03E4, 501}, (* Ϥ ϥ *) T2{16_03E6, 501}, (* Ϧ ϧ *) T2{16_03E8, 501}, (* Ϩ ϩ *) T2{16_03EA, 501}, (* Ϫ ϫ *) T2{16_03EC, 501}, (* Ϭ ϭ *) T2{16_03EE, 501}, (* Ϯ ϯ *) T2{16_0460, 501}, (* Ѡ ѡ *) T2{16_0462, 501}, (* Ѣ ѣ *) T2{16_0464, 501}, (* Ѥ ѥ *) T2{16_0466, 501}, (* Ѧ ѧ *) T2{16_0468, 501}, (* Ѩ ѩ *) T2{16_046A, 501}, (* Ѫ ѫ *) T2{16_046C, 501}, (* Ѭ ѭ *) T2{16_046E, 501}, (* Ѯ ѯ *) T2{16_0470, 501}, (* Ѱ ѱ *) T2{16_0472, 501}, (* Ѳ ѳ *) T2{16_0474, 501}, (* Ѵ ѵ *) T2{16_0476, 501}, (* Ѷ ѷ *) T2{16_0478, 501}, (* Ѹ ѹ *) T2{16_047A, 501}, (* Ѻ ѻ *) T2{16_047C, 501}, (* Ѽ ѽ *) T2{16_047E, 501}, (* Ѿ ѿ *) T2{16_0480, 501}, (* Ҁ ҁ *) T2{16_0490, 501}, (* Ґ ґ *) T2{16_0492, 501}, (* Ғ ғ *) T2{16_0494, 501}, (* Ҕ ҕ *) T2{16_0496, 501}, (* Җ җ *) T2{16_0498, 501}, (* Ҙ ҙ *) T2{16_049A, 501}, (* Қ қ *) T2{16_049C, 501}, (* Ҝ ҝ *) T2{16_049E, 501}, (* Ҟ ҟ *) T2{16_04A0, 501}, (* Ҡ ҡ *) T2{16_04A2, 501}, (* Ң ң *) T2{16_04A4, 501}, (* Ҥ ҥ *) T2{16_04A6, 501}, (* Ҧ ҧ *) T2{16_04A8, 501}, (* Ҩ ҩ *) T2{16_04AA, 501}, (* Ҫ ҫ *) T2{16_04AC, 501}, (* Ҭ ҭ *) T2{16_04AE, 501}, (* Ү ү *) T2{16_04B0, 501}, (* Ұ ұ *) T2{16_04B2, 501}, (* Ҳ ҳ *) T2{16_04B4, 501}, (* Ҵ ҵ *) T2{16_04B6, 501}, (* Ҷ ҷ *) T2{16_04B8, 501}, (* Ҹ ҹ *) T2{16_04BA, 501}, (* Һ һ *) T2{16_04BC, 501}, (* Ҽ ҽ *) T2{16_04BE, 501}, (* Ҿ ҿ *) T2{16_04C1, 501}, (* Ӂ ӂ *) T2{16_04C3, 501}, (* Ӄ ӄ *) T2{16_04C7, 501}, (* Ӈ ӈ *) T2{16_04CB, 501}, (* Ӌ ӌ *) T2{16_04D0, 501}, (* Ӑ ӑ *) T2{16_04D2, 501}, (* Ӓ ӓ *) T2{16_04D4, 501}, (* Ӕ ӕ *) T2{16_04D6, 501}, (* Ӗ ӗ *) T2{16_04D8, 501}, (* Ә ә *) T2{16_04DA, 501}, (* Ӛ ӛ *) T2{16_04DC, 501}, (* Ӝ ӝ *) T2{16_04DE, 501}, (* Ӟ ӟ *) T2{16_04E0, 501}, (* Ӡ ӡ *) T2{16_04E2, 501}, (* Ӣ ӣ *) T2{16_04E4, 501}, (* Ӥ ӥ *) T2{16_04E6, 501}, (* Ӧ ӧ *) T2{16_04E8, 501}, (* Ө ө *) T2{16_04EA, 501}, (* Ӫ ӫ *) T2{16_04EE, 501}, (* Ӯ ӯ *) T2{16_04F0, 501}, (* Ӱ ӱ *) T2{16_04F2, 501}, (* Ӳ ӳ *) T2{16_04F4, 501}, (* Ӵ ӵ *) T2{16_04F8, 501}, (* Ӹ ӹ *) T2{16_1E00, 501}, (* Ḁ ḁ *) T2{16_1E02, 501}, (* Ḃ ḃ *) T2{16_1E04, 501}, (* Ḅ ḅ *) T2{16_1E06, 501}, (* Ḇ ḇ *) T2{16_1E08, 501}, (* Ḉ ḉ *) T2{16_1E0A, 501}, (* Ḋ ḋ *) T2{16_1E0C, 501}, (* Ḍ ḍ *) T2{16_1E0E, 501}, (* Ḏ ḏ *) T2{16_1E10, 501}, (* Ḑ ḑ *) T2{16_1E12, 501}, (* Ḓ ḓ *) T2{16_1E14, 501}, (* Ḕ ḕ *) T2{16_1E16, 501}, (* Ḗ ḗ *) T2{16_1E18, 501}, (* Ḙ ḙ *) T2{16_1E1A, 501}, (* Ḛ ḛ *) T2{16_1E1C, 501}, (* Ḝ ḝ *) T2{16_1E1E, 501}, (* Ḟ ḟ *) T2{16_1E20, 501}, (* Ḡ ḡ *) T2{16_1E22, 501}, (* Ḣ ḣ *) T2{16_1E24, 501}, (* Ḥ ḥ *) T2{16_1E26, 501}, (* Ḧ ḧ *) T2{16_1E28, 501}, (* Ḩ ḩ *) T2{16_1E2A, 501}, (* Ḫ ḫ *) T2{16_1E2C, 501}, (* Ḭ ḭ *) T2{16_1E2E, 501}, (* Ḯ ḯ *) T2{16_1E30, 501}, (* Ḱ ḱ *) T2{16_1E32, 501}, (* Ḳ ḳ *) T2{16_1E34, 501}, (* Ḵ ḵ *) T2{16_1E36, 501}, (* Ḷ ḷ *) T2{16_1E38, 501}, (* Ḹ ḹ *) T2{16_1E3A, 501}, (* Ḻ ḻ *) T2{16_1E3C, 501}, (* Ḽ ḽ *) T2{16_1E3E, 501}, (* Ḿ ḿ *) T2{16_1E40, 501}, (* Ṁ ṁ *) T2{16_1E42, 501}, (* Ṃ ṃ *) T2{16_1E44, 501}, (* Ṅ ṅ *) T2{16_1E46, 501}, (* Ṇ ṇ *) T2{16_1E48, 501}, (* Ṉ ṉ *) T2{16_1E4A, 501}, (* Ṋ ṋ *) T2{16_1E4C, 501}, (* Ṍ ṍ *) T2{16_1E4E, 501}, (* Ṏ ṏ *) T2{16_1E50, 501}, (* Ṑ ṑ *) T2{16_1E52, 501}, (* Ṓ ṓ *) T2{16_1E54, 501}, (* Ṕ ṕ *) T2{16_1E56, 501}, (* Ṗ ṗ *) T2{16_1E58, 501}, (* Ṙ ṙ *) T2{16_1E5A, 501}, (* Ṛ ṛ *) T2{16_1E5C, 501}, (* Ṝ ṝ *) T2{16_1E5E, 501}, (* Ṟ ṟ *) T2{16_1E60, 501}, (* Ṡ ṡ *) T2{16_1E62, 501}, (* Ṣ ṣ *) T2{16_1E64, 501}, (* Ṥ ṥ *) T2{16_1E66, 501}, (* Ṧ ṧ *) T2{16_1E68, 501}, (* Ṩ ṩ *) T2{16_1E6A, 501}, (* Ṫ ṫ *) T2{16_1E6C, 501}, (* Ṭ ṭ *) T2{16_1E6E, 501}, (* Ṯ ṯ *) T2{16_1E70, 501}, (* Ṱ ṱ *) T2{16_1E72, 501}, (* Ṳ ṳ *) T2{16_1E74, 501}, (* Ṵ ṵ *) T2{16_1E76, 501}, (* Ṷ ṷ *) T2{16_1E78, 501}, (* Ṹ ṹ *) T2{16_1E7A, 501}, (* Ṻ ṻ *) T2{16_1E7C, 501}, (* Ṽ ṽ *) T2{16_1E7E, 501}, (* Ṿ ṿ *) T2{16_1E80, 501}, (* Ẁ ẁ *) T2{16_1E82, 501}, (* Ẃ ẃ *) T2{16_1E84, 501}, (* Ẅ ẅ *) T2{16_1E86, 501}, (* Ẇ ẇ *) T2{16_1E88, 501}, (* Ẉ ẉ *) T2{16_1E8A, 501}, (* Ẋ ẋ *) T2{16_1E8C, 501}, (* Ẍ ẍ *) T2{16_1E8E, 501}, (* Ẏ ẏ *) T2{16_1E90, 501}, (* Ẑ ẑ *) T2{16_1E92, 501}, (* Ẓ ẓ *) T2{16_1E94, 501}, (* Ẕ ẕ *) T2{16_1EA0, 501}, (* Ạ ạ *) T2{16_1EA2, 501}, (* Ả ả *) T2{16_1EA4, 501}, (* Ấ ấ *) T2{16_1EA6, 501}, (* Ầ ầ *) T2{16_1EA8, 501}, (* Ẩ ẩ *) T2{16_1EAA, 501}, (* Ẫ ẫ *) T2{16_1EAC, 501}, (* Ậ ậ *) T2{16_1EAE, 501}, (* Ắ ắ *) T2{16_1EB0, 501}, (* Ằ ằ *) T2{16_1EB2, 501}, (* Ẳ ẳ *) T2{16_1EB4, 501}, (* Ẵ ẵ *) T2{16_1EB6, 501}, (* Ặ ặ *) T2{16_1EB8, 501}, (* Ẹ ẹ *) T2{16_1EBA, 501}, (* Ẻ ẻ *) T2{16_1EBC, 501}, (* Ẽ ẽ *) T2{16_1EBE, 501}, (* Ế ế *) T2{16_1EC0, 501}, (* Ề ề *) T2{16_1EC2, 501}, (* Ể ể *) T2{16_1EC4, 501}, (* Ễ ễ *) T2{16_1EC6, 501}, (* Ệ ệ *) T2{16_1EC8, 501}, (* Ỉ ỉ *) T2{16_1ECA, 501}, (* Ị ị *) T2{16_1ECC, 501}, (* Ọ ọ *) T2{16_1ECE, 501}, (* Ỏ ỏ *) T2{16_1ED0, 501}, (* Ố ố *) T2{16_1ED2, 501}, (* Ồ ồ *) T2{16_1ED4, 501}, (* Ổ ổ *) T2{16_1ED6, 501}, (* Ỗ ỗ *) T2{16_1ED8, 501}, (* Ộ ộ *) T2{16_1EDA, 501}, (* Ớ ớ *) T2{16_1EDC, 501}, (* Ờ ờ *) T2{16_1EDE, 501}, (* Ở ở *) T2{16_1EE0, 501}, (* Ỡ ỡ *) T2{16_1EE2, 501}, (* Ợ ợ *) T2{16_1EE4, 501}, (* Ụ ụ *) T2{16_1EE6, 501}, (* Ủ ủ *) T2{16_1EE8, 501}, (* Ứ ứ *) T2{16_1EEA, 501}, (* Ừ ừ *) T2{16_1EEC, 501}, (* Ử ử *) T2{16_1EEE, 501}, (* Ữ ữ *) T2{16_1EF0, 501}, (* Ự ự *) T2{16_1EF2, 501}, (* Ỳ ỳ *) T2{16_1EF4, 501}, (* Ỵ ỵ *) T2{16_1EF6, 501}, (* Ỷ ỷ *) T2{16_1EF8, 501}, (* Ỹ ỹ *) T2{16_1F59, 492}, (* Ὑ ὑ *) T2{16_1F5B, 492}, (* Ὓ ὓ *) T2{16_1F5D, 492}, (* Ὕ ὕ *) T2{16_1F5F, 492}, (* Ὗ ὗ *) T2{16_1FBC, 491}, (* ᾼ ᾳ *) T2{16_1FCC, 491}, (* ῌ ῃ *) T2{16_1FEC, 493}, (* Ῥ ῥ *) T2{16_1FFC, 491} (* ῼ ῳ *) };---------------------------------------------------------------------------*} * Lower-case ranges (3rd column is conversion excess 500) {*---------------------------------------------------------------------------
toupper3 = ARRAY OF T3 { T3{16_0061, 16_007A, 468}, (* a-z A-Z *) T3{16_00E0, 16_00F6, 468}, (* à-ö À-Ö *) T3{16_00F8, 16_00FE, 468}, (* ø-þ Ø-Þ *) T3{16_0256, 16_0257, 295}, (* ɖ-ɗ Ɖ-Ɗ *) T3{16_0258, 16_0259, 298}, (* ɘ-ə Ǝ-Ə *) T3{16_028A, 16_028B, 283}, (* ʊ-ʋ Ʊ-Ʋ *) T3{16_03AD, 16_03AF, 463}, (* έ-ί Έ-Ί *) T3{16_03B1, 16_03C1, 468}, (* α-ρ Α-Ρ *) T3{16_03C3, 16_03CB, 468}, (* σ-ϋ Σ-Ϋ *) T3{16_03CD, 16_03CE, 437}, (* ύ-ώ Ύ-Ώ *) T3{16_0430, 16_044F, 468}, (* а-я А-Я *) T3{16_0451, 16_045C, 420}, (* ё-ќ Ё-Ќ *) T3{16_045E, 16_045F, 420}, (* ў-џ Ў-Џ *) T3{16_0561, 16_0586, 452}, (* ա-ֆ Ա-Ֆ *) T3{16_1F00, 16_1F07, 508}, (* ἀ-ἇ Ἀ-Ἇ *) T3{16_1F10, 16_1F15, 508}, (* ἐ-ἕ Ἐ-Ἕ *) T3{16_1F20, 16_1F27, 508}, (* ἠ-ἧ Ἠ-Ἧ *) T3{16_1F30, 16_1F37, 508}, (* ἰ-ἷ Ἰ-Ἷ *) T3{16_1F40, 16_1F45, 508}, (* ὀ-ὅ Ὀ-Ὅ *) T3{16_1F60, 16_1F67, 508}, (* ὠ-ὧ Ὠ-Ὧ *) T3{16_1F70, 16_1F71, 574}, (* ὰ-ά Ὰ-Ά *) T3{16_1F72, 16_1F75, 586}, (* ὲ-ή Ὲ-Ή *) T3{16_1F76, 16_1F77, 600}, (* ὶ-ί Ὶ-Ί *) T3{16_1F78, 16_1F79, 628}, (* ὸ-ό Ὸ-Ό *) T3{16_1F7A, 16_1F7B, 612}, (* ὺ-ύ Ὺ-Ύ *) T3{16_1F7C, 16_1F7D, 626}, (* ὼ-ώ Ὼ-Ώ *) T3{16_1F80, 16_1F87, 508}, (* ᾀ-ᾇ ᾈ-ᾏ *) T3{16_1F90, 16_1F97, 508}, (* ᾐ-ᾗ ᾘ-ᾟ *) T3{16_1FA0, 16_1FA7, 508}, (* ᾠ-ᾧ ᾨ-ᾯ *) T3{16_1FB0, 16_1FB1, 508}, (* ᾰ-ᾱ Ᾰ-Ᾱ *) T3{16_1FD0, 16_1FD1, 508}, (* ῐ-ῑ Ῐ-Ῑ *) T3{16_1FE0, 16_1FE1, 508}, (* ῠ-ῡ Ῠ-Ῡ *) T3{16_2170, 16_217F, 484}, (* ⅰ-ⅿ Ⅰ-Ⅿ *) T3{16_24D0, 16_24E9, 474}, (* ⓐ-ⓩ Ⓐ-Ⓩ *) T3{16_FF41, 16_FF5A, 468} (* a-z A-Z *) };---------------------------------------------------------------------------*} * Lower-case singletons (2nd column is conversion excess 500) {*---------------------------------------------------------------------------
toupper2 = ARRAY OF T2 { T2{16_00FF, 621}, (* ÿ Ÿ *) T2{16_0101, 499}, (* ā Ā *) T2{16_0103, 499}, (* ă Ă *) T2{16_0105, 499}, (* ą Ą *) T2{16_0107, 499}, (* ć Ć *) T2{16_0109, 499}, (* ĉ Ĉ *) T2{16_010B, 499}, (* ċ Ċ *) T2{16_010D, 499}, (* č Č *) T2{16_010F, 499}, (* ď Ď *) T2{16_0111, 499}, (* đ Đ *) T2{16_0113, 499}, (* ē Ē *) T2{16_0115, 499}, (* ĕ Ĕ *) T2{16_0117, 499}, (* ė Ė *) T2{16_0119, 499}, (* ę Ę *) T2{16_011B, 499}, (* ě Ě *) T2{16_011D, 499}, (* ĝ Ĝ *) T2{16_011F, 499}, (* ğ Ğ *) T2{16_0121, 499}, (* ġ Ġ *) T2{16_0123, 499}, (* ģ Ģ *) T2{16_0125, 499}, (* ĥ Ĥ *) T2{16_0127, 499}, (* ħ Ħ *) T2{16_0129, 499}, (* ĩ Ĩ *) T2{16_012B, 499}, (* ī Ī *) T2{16_012D, 499}, (* ĭ Ĭ *) T2{16_012F, 499}, (* į Į *) T2{16_0131, 268}, (* ı I *) T2{16_0133, 499}, (* ij IJ *) T2{16_0135, 499}, (* ĵ Ĵ *) T2{16_0137, 499}, (* ķ Ķ *) T2{16_013A, 499}, (* ĺ Ĺ *) T2{16_013C, 499}, (* ļ Ļ *) T2{16_013E, 499}, (* ľ Ľ *) T2{16_0140, 499}, (* ŀ Ŀ *) T2{16_0142, 499}, (* ł Ł *) T2{16_0144, 499}, (* ń Ń *) T2{16_0146, 499}, (* ņ Ņ *) T2{16_0148, 499}, (* ň Ň *) T2{16_014B, 499}, (* ŋ Ŋ *) T2{16_014D, 499}, (* ō Ō *) T2{16_014F, 499}, (* ŏ Ŏ *) T2{16_0151, 499}, (* ő Ő *) T2{16_0153, 499}, (* œ Œ *) T2{16_0155, 499}, (* ŕ Ŕ *) T2{16_0157, 499}, (* ŗ Ŗ *) T2{16_0159, 499}, (* ř Ř *) T2{16_015B, 499}, (* ś Ś *) T2{16_015D, 499}, (* ŝ Ŝ *) T2{16_015F, 499}, (* ş Ş *) T2{16_0161, 499}, (* š Š *) T2{16_0163, 499}, (* ţ Ţ *) T2{16_0165, 499}, (* ť Ť *) T2{16_0167, 499}, (* ŧ Ŧ *) T2{16_0169, 499}, (* ũ Ũ *) T2{16_016B, 499}, (* ū Ū *) T2{16_016D, 499}, (* ŭ Ŭ *) T2{16_016F, 499}, (* ů Ů *) T2{16_0171, 499}, (* ű Ű *) T2{16_0173, 499}, (* ų Ų *) T2{16_0175, 499}, (* ŵ Ŵ *) T2{16_0177, 499}, (* ŷ Ŷ *) T2{16_017A, 499}, (* ź Ź *) T2{16_017C, 499}, (* ż Ż *) T2{16_017E, 499}, (* ž Ž *) T2{16_017F, 200}, (* ſ S *) T2{16_0183, 499}, (* ƃ Ƃ *) T2{16_0185, 499}, (* ƅ Ƅ *) T2{16_0188, 499}, (* ƈ Ƈ *) T2{16_018C, 499}, (* ƌ Ƌ *) T2{16_0192, 499}, (* ƒ Ƒ *) T2{16_0199, 499}, (* ƙ Ƙ *) T2{16_01A1, 499}, (* ơ Ơ *) T2{16_01A3, 499}, (* ƣ Ƣ *) T2{16_01A5, 499}, (* ƥ Ƥ *) T2{16_01A8, 499}, (* ƨ Ƨ *) T2{16_01AD, 499}, (* ƭ Ƭ *) T2{16_01B0, 499}, (* ư Ư *) T2{16_01B4, 499}, (* ƴ Ƴ *) T2{16_01B6, 499}, (* ƶ Ƶ *) T2{16_01B9, 499}, (* ƹ Ƹ *) T2{16_01BD, 499}, (* ƽ Ƽ *) T2{16_01C5, 499}, (* Dž DŽ *) T2{16_01C6, 498}, (* dž DŽ *) T2{16_01C8, 499}, (* Lj LJ *) T2{16_01C9, 498}, (* lj LJ *) T2{16_01CB, 499}, (* Nj NJ *) T2{16_01CC, 498}, (* nj NJ *) T2{16_01CE, 499}, (* ǎ Ǎ *) T2{16_01D0, 499}, (* ǐ Ǐ *) T2{16_01D2, 499}, (* ǒ Ǒ *) T2{16_01D4, 499}, (* ǔ Ǔ *) T2{16_01D6, 499}, (* ǖ Ǖ *) T2{16_01D8, 499}, (* ǘ Ǘ *) T2{16_01DA, 499}, (* ǚ Ǚ *) T2{16_01DC, 499}, (* ǜ Ǜ *) T2{16_01DF, 499}, (* ǟ Ǟ *) T2{16_01E1, 499}, (* ǡ Ǡ *) T2{16_01E3, 499}, (* ǣ Ǣ *) T2{16_01E5, 499}, (* ǥ Ǥ *) T2{16_01E7, 499}, (* ǧ Ǧ *) T2{16_01E9, 499}, (* ǩ Ǩ *) T2{16_01EB, 499}, (* ǫ Ǫ *) T2{16_01ED, 499}, (* ǭ Ǭ *) T2{16_01EF, 499}, (* ǯ Ǯ *) T2{16_01F2, 499}, (* Dz DZ *) T2{16_01F3, 498}, (* dz DZ *) T2{16_01F5, 499}, (* ǵ Ǵ *) T2{16_01FB, 499}, (* ǻ Ǻ *) T2{16_01FD, 499}, (* ǽ Ǽ *) T2{16_01FF, 499}, (* ǿ Ǿ *) T2{16_0201, 499}, (* ȁ Ȁ *) T2{16_0203, 499}, (* ȃ Ȃ *) T2{16_0205, 499}, (* ȅ Ȅ *) T2{16_0207, 499}, (* ȇ Ȇ *) T2{16_0209, 499}, (* ȉ Ȉ *) T2{16_020B, 499}, (* ȋ Ȋ *) T2{16_020D, 499}, (* ȍ Ȍ *) T2{16_020F, 499}, (* ȏ Ȏ *) T2{16_0211, 499}, (* ȑ Ȑ *) T2{16_0213, 499}, (* ȓ Ȓ *) T2{16_0215, 499}, (* ȕ Ȕ *) T2{16_0217, 499}, (* ȗ Ȗ *) T2{16_0253, 290}, (* ɓ Ɓ *) T2{16_0254, 294}, (* ɔ Ɔ *) T2{16_025B, 297}, (* ɛ Ɛ *) T2{16_0260, 295}, (* ɠ Ɠ *) T2{16_0263, 293}, (* ɣ Ɣ *) T2{16_0268, 291}, (* ɨ Ɨ *) T2{16_0269, 289}, (* ɩ Ɩ *) T2{16_026F, 289}, (* ɯ Ɯ *) T2{16_0272, 287}, (* ɲ Ɲ *) T2{16_0283, 282}, (* ʃ Ʃ *) T2{16_0288, 282}, (* ʈ Ʈ *) T2{16_0292, 281}, (* ʒ Ʒ *) T2{16_03AC, 462}, (* ά Ά *) T2{16_03CC, 436}, (* ό Ό *) T2{16_03D0, 438}, (* ϐ Β *) T2{16_03D1, 443}, (* ϑ Θ *) T2{16_03D5, 453}, (* ϕ Φ *) T2{16_03D6, 446}, (* ϖ Π *) T2{16_03E3, 499}, (* ϣ Ϣ *) T2{16_03E5, 499}, (* ϥ Ϥ *) T2{16_03E7, 499}, (* ϧ Ϧ *) T2{16_03E9, 499}, (* ϩ Ϩ *) T2{16_03EB, 499}, (* ϫ Ϫ *) T2{16_03ED, 499}, (* ϭ Ϭ *) T2{16_03EF, 499}, (* ϯ Ϯ *) T2{16_03F0, 414}, (* ϰ Κ *) T2{16_03F1, 420}, (* ϱ Ρ *) T2{16_0461, 499}, (* ѡ Ѡ *) T2{16_0463, 499}, (* ѣ Ѣ *) T2{16_0465, 499}, (* ѥ Ѥ *) T2{16_0467, 499}, (* ѧ Ѧ *) T2{16_0469, 499}, (* ѩ Ѩ *) T2{16_046B, 499}, (* ѫ Ѫ *) T2{16_046D, 499}, (* ѭ Ѭ *) T2{16_046F, 499}, (* ѯ Ѯ *) T2{16_0471, 499}, (* ѱ Ѱ *) T2{16_0473, 499}, (* ѳ Ѳ *) T2{16_0475, 499}, (* ѵ Ѵ *) T2{16_0477, 499}, (* ѷ Ѷ *) T2{16_0479, 499}, (* ѹ Ѹ *) T2{16_047B, 499}, (* ѻ Ѻ *) T2{16_047D, 499}, (* ѽ Ѽ *) T2{16_047F, 499}, (* ѿ Ѿ *) T2{16_0481, 499}, (* ҁ Ҁ *) T2{16_0491, 499}, (* ґ Ґ *) T2{16_0493, 499}, (* ғ Ғ *) T2{16_0495, 499}, (* ҕ Ҕ *) T2{16_0497, 499}, (* җ Җ *) T2{16_0499, 499}, (* ҙ Ҙ *) T2{16_049B, 499}, (* қ Қ *) T2{16_049D, 499}, (* ҝ Ҝ *) T2{16_049F, 499}, (* ҟ Ҟ *) T2{16_04A1, 499}, (* ҡ Ҡ *) T2{16_04A3, 499}, (* ң Ң *) T2{16_04A5, 499}, (* ҥ Ҥ *) T2{16_04A7, 499}, (* ҧ Ҧ *) T2{16_04A9, 499}, (* ҩ Ҩ *) T2{16_04AB, 499}, (* ҫ Ҫ *) T2{16_04AD, 499}, (* ҭ Ҭ *) T2{16_04AF, 499}, (* ү Ү *) T2{16_04B1, 499}, (* ұ Ұ *) T2{16_04B3, 499}, (* ҳ Ҳ *) T2{16_04B5, 499}, (* ҵ Ҵ *) T2{16_04B7, 499}, (* ҷ Ҷ *) T2{16_04B9, 499}, (* ҹ Ҹ *) T2{16_04BB, 499}, (* һ Һ *) T2{16_04BD, 499}, (* ҽ Ҽ *) T2{16_04BF, 499}, (* ҿ Ҿ *) T2{16_04C2, 499}, (* ӂ Ӂ *) T2{16_04C4, 499}, (* ӄ Ӄ *) T2{16_04C8, 499}, (* ӈ Ӈ *) T2{16_04CC, 499}, (* ӌ Ӌ *) T2{16_04D1, 499}, (* ӑ Ӑ *) T2{16_04D3, 499}, (* ӓ Ӓ *) T2{16_04D5, 499}, (* ӕ Ӕ *) T2{16_04D7, 499}, (* ӗ Ӗ *) T2{16_04D9, 499}, (* ә Ә *) T2{16_04DB, 499}, (* ӛ Ӛ *) T2{16_04DD, 499}, (* ӝ Ӝ *) T2{16_04DF, 499}, (* ӟ Ӟ *) T2{16_04E1, 499}, (* ӡ Ӡ *) T2{16_04E3, 499}, (* ӣ Ӣ *) T2{16_04E5, 499}, (* ӥ Ӥ *) T2{16_04E7, 499}, (* ӧ Ӧ *) T2{16_04E9, 499}, (* ө Ө *) T2{16_04EB, 499}, (* ӫ Ӫ *) T2{16_04EF, 499}, (* ӯ Ӯ *) T2{16_04F1, 499}, (* ӱ Ӱ *) T2{16_04F3, 499}, (* ӳ Ӳ *) T2{16_04F5, 499}, (* ӵ Ӵ *) T2{16_04F9, 499}, (* ӹ Ӹ *) T2{16_1E01, 499}, (* ḁ Ḁ *) T2{16_1E03, 499}, (* ḃ Ḃ *) T2{16_1E05, 499}, (* ḅ Ḅ *) T2{16_1E07, 499}, (* ḇ Ḇ *) T2{16_1E09, 499}, (* ḉ Ḉ *) T2{16_1E0B, 499}, (* ḋ Ḋ *) T2{16_1E0D, 499}, (* ḍ Ḍ *) T2{16_1E0F, 499}, (* ḏ Ḏ *) T2{16_1E11, 499}, (* ḑ Ḑ *) T2{16_1E13, 499}, (* ḓ Ḓ *) T2{16_1E15, 499}, (* ḕ Ḕ *) T2{16_1E17, 499}, (* ḗ Ḗ *) T2{16_1E19, 499}, (* ḙ Ḙ *) T2{16_1E1B, 499}, (* ḛ Ḛ *) T2{16_1E1D, 499}, (* ḝ Ḝ *) T2{16_1E1F, 499}, (* ḟ Ḟ *) T2{16_1E21, 499}, (* ḡ Ḡ *) T2{16_1E23, 499}, (* ḣ Ḣ *) T2{16_1E25, 499}, (* ḥ Ḥ *) T2{16_1E27, 499}, (* ḧ Ḧ *) T2{16_1E29, 499}, (* ḩ Ḩ *) T2{16_1E2B, 499}, (* ḫ Ḫ *) T2{16_1E2D, 499}, (* ḭ Ḭ *) T2{16_1E2F, 499}, (* ḯ Ḯ *) T2{16_1E31, 499}, (* ḱ Ḱ *) T2{16_1E33, 499}, (* ḳ Ḳ *) T2{16_1E35, 499}, (* ḵ Ḵ *) T2{16_1E37, 499}, (* ḷ Ḷ *) T2{16_1E39, 499}, (* ḹ Ḹ *) T2{16_1E3B, 499}, (* ḻ Ḻ *) T2{16_1E3D, 499}, (* ḽ Ḽ *) T2{16_1E3F, 499}, (* ḿ Ḿ *) T2{16_1E41, 499}, (* ṁ Ṁ *) T2{16_1E43, 499}, (* ṃ Ṃ *) T2{16_1E45, 499}, (* ṅ Ṅ *) T2{16_1E47, 499}, (* ṇ Ṇ *) T2{16_1E49, 499}, (* ṉ Ṉ *) T2{16_1E4B, 499}, (* ṋ Ṋ *) T2{16_1E4D, 499}, (* ṍ Ṍ *) T2{16_1E4F, 499}, (* ṏ Ṏ *) T2{16_1E51, 499}, (* ṑ Ṑ *) T2{16_1E53, 499}, (* ṓ Ṓ *) T2{16_1E55, 499}, (* ṕ Ṕ *) T2{16_1E57, 499}, (* ṗ Ṗ *) T2{16_1E59, 499}, (* ṙ Ṙ *) T2{16_1E5B, 499}, (* ṛ Ṛ *) T2{16_1E5D, 499}, (* ṝ Ṝ *) T2{16_1E5F, 499}, (* ṟ Ṟ *) T2{16_1E61, 499}, (* ṡ Ṡ *) T2{16_1E63, 499}, (* ṣ Ṣ *) T2{16_1E65, 499}, (* ṥ Ṥ *) T2{16_1E67, 499}, (* ṧ Ṧ *) T2{16_1E69, 499}, (* ṩ Ṩ *) T2{16_1E6B, 499}, (* ṫ Ṫ *) T2{16_1E6D, 499}, (* ṭ Ṭ *) T2{16_1E6F, 499}, (* ṯ Ṯ *) T2{16_1E71, 499}, (* ṱ Ṱ *) T2{16_1E73, 499}, (* ṳ Ṳ *) T2{16_1E75, 499}, (* ṵ Ṵ *) T2{16_1E77, 499}, (* ṷ Ṷ *) T2{16_1E79, 499}, (* ṹ Ṹ *) T2{16_1E7B, 499}, (* ṻ Ṻ *) T2{16_1E7D, 499}, (* ṽ Ṽ *) T2{16_1E7F, 499}, (* ṿ Ṿ *) T2{16_1E81, 499}, (* ẁ Ẁ *) T2{16_1E83, 499}, (* ẃ Ẃ *) T2{16_1E85, 499}, (* ẅ Ẅ *) T2{16_1E87, 499}, (* ẇ Ẇ *) T2{16_1E89, 499}, (* ẉ Ẉ *) T2{16_1E8B, 499}, (* ẋ Ẋ *) T2{16_1E8D, 499}, (* ẍ Ẍ *) T2{16_1E8F, 499}, (* ẏ Ẏ *) T2{16_1E91, 499}, (* ẑ Ẑ *) T2{16_1E93, 499}, (* ẓ Ẓ *) T2{16_1E95, 499}, (* ẕ Ẕ *) T2{16_1EA1, 499}, (* ạ Ạ *) T2{16_1EA3, 499}, (* ả Ả *) T2{16_1EA5, 499}, (* ấ Ấ *) T2{16_1EA7, 499}, (* ầ Ầ *) T2{16_1EA9, 499}, (* ẩ Ẩ *) T2{16_1EAB, 499}, (* ẫ Ẫ *) T2{16_1EAD, 499}, (* ậ Ậ *) T2{16_1EAF, 499}, (* ắ Ắ *) T2{16_1EB1, 499}, (* ằ Ằ *) T2{16_1EB3, 499}, (* ẳ Ẳ *) T2{16_1EB5, 499}, (* ẵ Ẵ *) T2{16_1EB7, 499}, (* ặ Ặ *) T2{16_1EB9, 499}, (* ẹ Ẹ *) T2{16_1EBB, 499}, (* ẻ Ẻ *) T2{16_1EBD, 499}, (* ẽ Ẽ *) T2{16_1EBF, 499}, (* ế Ế *) T2{16_1EC1, 499}, (* ề Ề *) T2{16_1EC3, 499}, (* ể Ể *) T2{16_1EC5, 499}, (* ễ Ễ *) T2{16_1EC7, 499}, (* ệ Ệ *) T2{16_1EC9, 499}, (* ỉ Ỉ *) T2{16_1ECB, 499}, (* ị Ị *) T2{16_1ECD, 499}, (* ọ Ọ *) T2{16_1ECF, 499}, (* ỏ Ỏ *) T2{16_1ED1, 499}, (* ố Ố *) T2{16_1ED3, 499}, (* ồ Ồ *) T2{16_1ED5, 499}, (* ổ Ổ *) T2{16_1ED7, 499}, (* ỗ Ỗ *) T2{16_1ED9, 499}, (* ộ Ộ *) T2{16_1EDB, 499}, (* ớ Ớ *) T2{16_1EDD, 499}, (* ờ Ờ *) T2{16_1EDF, 499}, (* ở Ở *) T2{16_1EE1, 499}, (* ỡ Ỡ *) T2{16_1EE3, 499}, (* ợ Ợ *) T2{16_1EE5, 499}, (* ụ Ụ *) T2{16_1EE7, 499}, (* ủ Ủ *) T2{16_1EE9, 499}, (* ứ Ứ *) T2{16_1EEB, 499}, (* ừ Ừ *) T2{16_1EED, 499}, (* ử Ử *) T2{16_1EEF, 499}, (* ữ Ữ *) T2{16_1EF1, 499}, (* ự Ự *) T2{16_1EF3, 499}, (* ỳ Ỳ *) T2{16_1EF5, 499}, (* ỵ Ỵ *) T2{16_1EF7, 499}, (* ỷ Ỷ *) T2{16_1EF9, 499}, (* ỹ Ỹ *) T2{16_1F51, 508}, (* ὑ Ὑ *) T2{16_1F53, 508}, (* ὓ Ὓ *) T2{16_1F55, 508}, (* ὕ Ὕ *) T2{16_1F57, 508}, (* ὗ Ὗ *) T2{16_1FB3, 509}, (* ᾳ ᾼ *) T2{16_1FC3, 509}, (* ῃ ῌ *) T2{16_1FE5, 507}, (* ῥ Ῥ *) T2{16_1FF3, 509} (* ῳ ῼ *) };---------------------------------------------------------------------------*} * Lower-case singletons that have title-case equivalents * (2nd col. conversion excess 500) {*---------------------------------------------------------------------------
totitle2 = ARRAY OF T2 { T2{16_01C4, 501}, (* DŽ Dž *) T2{16_01C6, 499}, (* dž Dž *) T2{16_01C7, 501}, (* LJ Lj *) T2{16_01C9, 499}, (* lj Lj *) T2{16_01CA, 501}, (* NJ Nj *) T2{16_01CC, 499}, (* nj Nj *) T2{16_01F1, 501}, (* DZ Dz *) T2{16_01F3, 499} (* dz Dz *) };===========================================================================*} * EXPORTED PROCEDURES {*===========================================================================
PROCEDURE===========================================================================*} * LOCAL PROCEDURES {*===========================================================================IsDefined (t: T): BOOLEAN = BEGIN IF ORD (t) > 16_FFFD THEN RETURN FALSE END; IF ORD (t) < 16_D800 OR ORD (t) > 16_DFFF THEN RETURN TRUE END; RETURN FALSE; END IsDefined; PROCEDUREIsASCII (t: T): BOOLEAN = BEGIN RETURN ORD (t) <= ORD (LAST (CHAR)); END IsASCII; PROCEDUREIsSpace (t: T): BOOLEAN = VAR p := BSearch (t, space2); BEGIN IF p >= 0 AND space2[p, 0] <= ORD (t) AND ORD (t) <= space2[p, 1] THEN RETURN TRUE; END; RETURN FALSE; END IsSpace; PROCEDUREIsLetter (t: T): BOOLEAN = VAR p: INTEGER; BEGIN IF IsUpperCase (t) OR IsLowerCase (t) THEN RETURN TRUE END; p := BSearch (t, alpha2); IF p >= 0 AND alpha2[p, 0] <= ORD (t) AND ORD (t) <= alpha2[p, 1] THEN RETURN TRUE; END; p := BSearch (t, alpha1); IF p >= 0 AND ORD (t) = alpha1[p, 0] THEN RETURN TRUE END; RETURN FALSE; END IsLetter; PROCEDUREIsDigit (t: T): BOOLEAN = VAR p := BSearch (t, digit2); BEGIN IF p >= 0 AND digit2[p, 0] <= ORD (t) AND ORD (t) <= digit2[p, 1] THEN RETURN TRUE; END; RETURN FALSE; END IsDigit; PROCEDUREIsLetterOrDigit (t: T): BOOLEAN = BEGIN RETURN IsLetter (t) OR IsDigit (t); END IsLetterOrDigit; PROCEDUREIsUpperCase (t: T): BOOLEAN = VAR p: INTEGER; BEGIN p := BSearch (t, tolower3); IF p >= 0 AND tolower3[p, 0] <= ORD (t) AND ORD (t) <= tolower3[p, 1] THEN RETURN TRUE; END; p := BSearch (t, tolower2); IF p >= 0 AND tolower2[p, 0] = ORD (t) THEN RETURN TRUE END; RETURN FALSE; END IsUpperCase; PROCEDUREIsLowerCase (t: T): BOOLEAN = VAR p: INTEGER; BEGIN p := BSearch (t, toupper3); IF p >= 0 AND toupper3[p, 0] <= ORD (t) AND ORD (t) <= toupper3[p, 1] THEN RETURN TRUE; END; p := BSearch (t, toupper2); IF p >= 0 AND toupper2[p, 0] = ORD (t) THEN RETURN TRUE END; RETURN FALSE; END IsLowerCase; PROCEDUREIsTitleCase (t: T): BOOLEAN = BEGIN RETURN IsLowerCase (t) AND IsUpperCase (t); END IsTitleCase; PROCEDUREToUpperCase (t: T): T = VAR p: INTEGER; BEGIN p := BSearch (t, toupper3); IF p >= 0 AND toupper3[p, 0] <= ORD (t) AND ORD (t) <= toupper3[p, 1] THEN RETURN VAL (ORD (t) + toupper3[p, 2] - 500, T); END; p := BSearch (t, toupper2); IF p >= 0 AND ORD (t) = toupper2[p, 0] THEN RETURN VAL (ORD (t) + toupper2[p, 1] - 500, T); END; RETURN t; END ToUpperCase; PROCEDUREToLowerCase (t: T): T = VAR p := BSearch (t, tolower3); BEGIN IF p >= 0 AND tolower3[p, 0] <= ORD (t) AND ORD (t) <= tolower3[p, 1] THEN RETURN VAL (ORD (t) + tolower3[p, 2] - 500, T); END; p := BSearch (t, tolower2); IF p >= 0 AND tolower2[p, 0] = ORD (t) THEN RETURN VAL (ORD (t) + tolower2[p, 1] - 500, T); END; RETURN t; END ToLowerCase; PROCEDUREToTitleCase (t: T): T = VAR p := BSearch (t, totitle2); BEGIN IF p >= 0 AND totitle2[p, 0] = ORD (t) THEN RETURN VAL (ORD (t) + totitle2[p, 1] - 500, T); END; RETURN t; END ToTitleCase; PROCEDUREToDigitValue (t: T): CARDINAL = VAR p := BSearch (t, digit2); BEGIN IF p >= 0 AND digit2[p, 0] <= ORD (t) AND ORD (t) <= digit2[p, 1] THEN IF digit2[p, 0] = 16_0BE7 OR digit2[p, 0] = 16_1369 THEN (* Tamils and Ethiopians have no zero digit *) RETURN ORD (t) - digit2[p, 0] + 1; ELSE RETURN ORD (t) - digit2[p, 0]; END; ELSE RETURN LAST (CARDINAL); END; END ToDigitValue;
---------------------------------------------------------------------------*} * BSearch - Binary Search of a Codepoint Range Table * Arguments: c - wide character * r - range tuple table index * n - nbr of tuple entries * Returns: ptr - Pointer to tuple or NIL {*---------------------------------------------------------------------------
PROCEDUREBSearch (c: T; READONLY xr: ARRAY OF Tuple): INTEGER = VAR r := 0; n := NUMBER(xr); p, m: INTEGER; BEGIN WHILE n > 1 DO m := n DIV 2; p := r + m; IF ORD (c) >= xr[p, 0] THEN r := p; n := n - m; ELSE n := m; END; END; IF n > 0 AND ORD (c) >= xr[r, 0] THEN RETURN r END; RETURN -1; END BSearch; BEGIN END Unicode.
vi: set ai sw=2 ts=2 tw=80: