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: