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