unicode.sa


Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
 
------------------------->  GNU Sather - sourcefile  <-------------------------
-- Copyright (C) 2000 by K Hopper, University of Waikato, New Zealand        --
-- This file is part of the GNU Sather library. It is free software; you may --
-- redistribute  and/or modify it under the terms of the GNU Library General --
-- Public  License (LGPL)  as published  by the  Free  Software  Foundation; --
-- either version 2 of the license, or (at your option) any later version.   --
-- This  library  is distributed  in the  hope that it will  be  useful, but --
-- WITHOUT ANY WARRANTY without even the implied warranty of MERCHANTABILITY --
-- or FITNESS FOR A PARTICULAR PURPOSE. See Doc/LGPL for more details.       --
-- The license text is also available from:  Free Software Foundation, Inc., --
-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA                     --
-------------->  Please email comments to <bug-sather@gnu.org>  <--------------


immutable class UNICODE < $ORDERED{UNICODE}

immutable class UNICODE < $ORDERED{UNICODE} is -- This partial class is used in defining the language full encoding of -- all forms of character in a 32-bit 'number' as specified in the standard -- ISO/IEC 10646-1.2:1993. -- Since for multiple case languages which have the notion of letters, -- digits etc there is a wide range of codes falling into each class, only -- those codes which appear in the various Latin, Greek and Cyrillic tables -- of the standard are given explicit definition. Other groupings defined -- by the standard are defined as multiple ranges. -- Version 1.3 April 2001. Copyright K Hopper, U of Waikato -- Development History -- ------------------- -- Date Who By Detail -- ---- ------ ------ -- 11 Nov 96 kh Original from ISO/IEC 10646-1.2:1993 -- 11 Dec 96 kh No longer partial class! -- 30 Oct 98 kh Cut out all names but ISO 646 ones! -- 2 Apr 01 kh Brought up to Unicode 3.0 include AVAL{OCTET} asize -> ; include COMPARABLE ; const asize : CARD := 4 ; -- The following individual values are defined for use in later -- predicates which are found at the end of this class definition. private const Invalid_Val : CARD := 0x7FFFFFFF ; private const priv_nil : SAME := do_create(Invalid_Val) ; const has_letters : BOOL := true ; const has_cases : BOOL := true ; const has_digits : BOOL := true ; const has_hex : BOOL := true ; -- The following named constants are taken directly from the standard -- with spaces replaced by the LOW_LINE character. -- NOTE This implementation uses the do-create initialisation -- routine because the 'constants' are initialised at -- run-time!!! const SPACE : SAME := do_create(32) ; const EXCLAMATION_MARK : SAME := do_create(33) ; const QUOTATION_MARK : SAME := do_create(34) ; const NUMBER_SIGN : SAME := do_create(35) ; const DOLLAR_SIGN : SAME := do_create(36) ; const PERCENT_SIGN : SAME := do_create(37) ; const AMPERSAND : SAME := do_create(38) ; const APOSTROPHE : SAME := do_create(39) ; const LEFT_PARENTHESIS : SAME := do_create(40) ; const RIGHT_PARENTHESIS : SAME := do_create(41) ; const ASTERISK : SAME := do_create(42) ; const PLUS_SIGN : SAME := do_create(43) ; const COMMA : SAME := do_create(44) ; const HYPHEN_MINUS : SAME := do_create(45) ; const FULL_STOP : SAME := do_create(46) ; const SOLIDUS : SAME := do_create(47) ; const DIGIT_ZERO : SAME := do_create(48) ; const DIGIT_ONE : SAME := do_create(49) ; const DIGIT_TWO : SAME := do_create(50) ; const DIGIT_THREE : SAME := do_create(51) ; const DIGIT_FOUR : SAME := do_create(52) ; const DIGIT_FIVE : SAME := do_create(53) ; const DIGIT_SIX : SAME := do_create(54) ; const DIGIT_SEVEN : SAME := do_create(55) ; const DIGIT_EIGHT : SAME := do_create(56) ; const DIGIT_NINE : SAME := do_create(57) ; const COLON : SAME := do_create(58) ; const SEMICOLON : SAME := do_create(59) ; const LESS_THAN_SIGN : SAME := do_create(60) ; const EQUALS_SIGN : SAME := do_create(61) ; const GREATER_THAN_SIGN : SAME := do_create(62) ; const QUESTION_MARK : SAME := do_create(63) ; const COMMERCIAL_AT : SAME := do_create(64) ; const LATIN_CAPITAL_LETTER_A : SAME := do_create(65) ; const LATIN_CAPITAL_LETTER_B : SAME := do_create(66) ; const LATIN_CAPITAL_LETTER_C : SAME := do_create(67) ; const LATIN_CAPITAL_LETTER_D : SAME := do_create(68) ; const LATIN_CAPITAL_LETTER_E : SAME := do_create(69) ; const LATIN_CAPITAL_LETTER_F : SAME := do_create(70) ; const LATIN_CAPITAL_LETTER_G : SAME := do_create(71) ; const LATIN_CAPITAL_LETTER_H : SAME := do_create(72) ; const LATIN_CAPITAL_LETTER_I : SAME := do_create(73) ; const LATIN_CAPITAL_LETTER_J : SAME := do_create(74) ; const LATIN_CAPITAL_LETTER_K : SAME := do_create(75) ; const LATIN_CAPITAL_LETTER_L : SAME := do_create(76) ; const LATIN_CAPITAL_LETTER_M : SAME := do_create(77) ; const LATIN_CAPITAL_LETTER_N : SAME := do_create(78) ; const LATIN_CAPITAL_LETTER_O : SAME := do_create(79) ; const LATIN_CAPITAL_LETTER_P : SAME := do_create(80) ; const LATIN_CAPITAL_LETTER_Q : SAME := do_create(81) ; const LATIN_CAPITAL_LETTER_R : SAME := do_create(82) ; const LATIN_CAPITAL_LETTER_S : SAME := do_create(83) ; const LATIN_CAPITAL_LETTER_T : SAME := do_create(84) ; const LATIN_CAPITAL_LETTER_U : SAME := do_create(85) ; const LATIN_CAPITAL_LETTER_V : SAME := do_create(86) ; const LATIN_CAPITAL_LETTER_W : SAME := do_create(87) ; const LATIN_CAPITAL_LETTER_X : SAME := do_create(88) ; const LATIN_CAPITAL_LETTER_Y : SAME := do_create(89) ; const LATIN_CAPITAL_LETTER_Z : SAME := do_create(90) ; const LEFT_SQUARE_BRACKET : SAME := do_create(91) ; const REVERSE_SOLIDUS : SAME := do_create(92) ; const RIGHT_SQUARE_BRACKET : SAME := do_create(93) ; const CIRCUMFLEX_ACCENT : SAME := do_create(94) ; const LOW_LINE : SAME := do_create(95) ; const GRAVE_ACCENT : SAME := do_create(96) ; const LATIN_SMALL_LETTER_A : SAME := do_create(97) ; const LATIN_SMALL_LETTER_B : SAME := do_create(98) ; const LATIN_SMALL_LETTER_C : SAME := do_create(99) ; const LATIN_SMALL_LETTER_D : SAME := do_create(100) ; const LATIN_SMALL_LETTER_E : SAME := do_create(101) ; const LATIN_SMALL_LETTER_F : SAME := do_create(102) ; const LATIN_SMALL_LETTER_G : SAME := do_create(103) ; const LATIN_SMALL_LETTER_H : SAME := do_create(104) ; const LATIN_SMALL_LETTER_I : SAME := do_create(105) ; const LATIN_SMALL_LETTER_J : SAME := do_create(106) ; const LATIN_SMALL_LETTER_K : SAME := do_create(107) ; const LATIN_SMALL_LETTER_L : SAME := do_create(108) ; const LATIN_SMALL_LETTER_M : SAME := do_create(109) ; const LATIN_SMALL_LETTER_N : SAME := do_create(110) ; const LATIN_SMALL_LETTER_O : SAME := do_create(111) ; const LATIN_SMALL_LETTER_P : SAME := do_create(112) ; const LATIN_SMALL_LETTER_Q : SAME := do_create(113) ; const LATIN_SMALL_LETTER_R : SAME := do_create(114) ; const LATIN_SMALL_LETTER_S : SAME := do_create(115) ; const LATIN_SMALL_LETTER_T : SAME := do_create(116) ; const LATIN_SMALL_LETTER_U : SAME := do_create(117) ; const LATIN_SMALL_LETTER_V : SAME := do_create(118) ; const LATIN_SMALL_LETTER_W : SAME := do_create(119) ; const LATIN_SMALL_LETTER_X : SAME := do_create(120) ; const LATIN_SMALL_LETTER_Y : SAME := do_create(121) ; const LATIN_SMALL_LETTER_Z : SAME := do_create(122) ; const LEFT_CURLY_BRACKET : SAME := do_create(123) ; const VERTICAL_LINE : SAME := do_create(124) ; const RIGHT_CURLY_BRACKET : SAME := do_create(125) ; const TILDE : SAME := do_create(126) ; -- The following range is merely allocated for private use in the -- standard and is merely identified as such in this class. const Private_Area : RANGE := RANGE::create(0xE000,0xF7FF) ; -- The codes 0xFEFF and the range from 0xFFF0 to 0xFFFF are special -- codes which are provided to enable current software practice to be used -- by a Unicode processing engine. const BYTE_ORDER_MARK : SAME := do_create(0xFEFF) ; -- UTF-16 Big-Endian const BYTE_SWAPPED_ORDER : SAME := do_create(0xFFFE) ; -- UTF-16 Little-Endian const UTF_8_BYTE_ORDER_MARK : SAME := do_create(0xEFBBBF) ; const INTERLINEAR_ANNOTATION_ANCHOR : SAME := do_create(0xFFF9) ; const INTERLINEAR_ANNOTATION_SEPARATOR : SAME := do_create(0xFFFA) ; const INTERLINEAR_ANNOTATION_TERMINATOR : SAME := do_create(0xFFFB) ; const OBJECT_REPLACEMENT_CHARACTER : SAME := do_create(0xFFFC) ; const REPLACEMENT_CHARACTER : SAME := do_create(0xFFFD) ; const INVALID_CODE : SAME := do_create(0xFFFF) ; const ZERO_WIDTH_NO_BREAK_SPACE : SAME := do_create(0xFEFF) ; -- The standard identifies broad ranges of encodings which it calls -- collections. These are given below as individual ranges. -- NOTE The following group of range constants is given in code order as specified in the standard. Within many of the given ranges there are 'omitted' codes which are. therefore not included in the table following these ranges! const Basic_Latin : RANGE := RANGE::create(SPACE.card,TILDE.card) ; const Latin1_Supplement : RANGE := RANGE::create(0x00A0,0x00FF) ; const Latin_Extended_A : RANGE := RANGE::create(0x0100,0x017F) ; const Latin_Extended_B : RANGE := RANGE::create(0x0180,0x0217) ; const IPA_Extensions : RANGE := RANGE::create(0x0250,0x02AF) ; const Spacing_Modifier_Letters : RANGE := RANGE::create(0x02B0,0x02FF) ; const Combining_Diacritical_Marks : RANGE := RANGE::create(0x0300,0x036F) ; const Basic_Greek : RANGE := RANGE::create(0x0370,0x03CF) ; const Greek_Symbols_and_Coptic : RANGE := RANGE::create(0x03D0,0x03FF) ; const Cyrillic : RANGE := RANGE::create(0x0400,0x04FF) ; const Armenian : RANGE := RANGE::create(0x0530,0x058F) ; const Hebrew_Extended_1 : RANGE := RANGE::create(0x0590,0x05CF) ; const Basic_Hebrew : RANGE := RANGE::create(0x05D0,0x05EA) ; const Hebrew_Extended_2 : RANGE := RANGE::create(0x05EB,0x05FF) ; const Basic_Arabic : RANGE := RANGE::create(0x0600,0x0652) ; const Arabic_Extended : RANGE := RANGE::create(0x0653,0x06FF) ; const Syriac : RANGE := RANGE::create(0x0700,0x074F) ; const Devanagari : RANGE := RANGE::create(0x0900,0x097F) ; const Bengali : RANGE := RANGE::create(0x0980,0x09FF) ; const Gurmukhi : RANGE := RANGE::create(0x0A00,0x0A07F) ; const Gujarati : RANGE := RANGE::create(0x0A80,0x0AFF) ; const Oriya : RANGE := RANGE::create(0x0B00,0x0B7F) ; const Tamil : RANGE := RANGE::create(0x0B80,0x0BFF) ; const Telugu : RANGE := RANGE::create(0x0C00,0x0C7F) ; const Kannada : RANGE := RANGE::create(0x0C80,0xCFF) ; const Malayalam : RANGE := RANGE::create(0x0D00,0x0D7F) ; const Sinhala : RANGE := RANGE::create(0x0D80,0x0DFF) ; const Thai : RANGE := RANGE::create(0x0E00,0x0E7F) ; const Lao : RANGE := RANGE::create(0x0E80,0x0EFF) ; const Tibetan : RANGE := RANGE::create(0x0F00,0x0FCF) ; const Myanmar : RANGE := RANGE::create(0x1000,0x109F) ; const Georgian_Extended : RANGE := RANGE::create(0x10A0,0x10CF) ; const Basic_Georgian : RANGE := RANGE::create(0x10D0,0x10FF) ; const Hangul_Jamo : RANGE := RANGE::create(0x1100,0x11FF) ; const Ethiopic : RANGE := RANGE::create(0x1200,0x137F) ; const Cherokee : RANGE := RANGE::create(0x13A0,0x13FF) ; const Canadian_Aboriginal : RANGE := RANGE::create(0x1400,0x167F) ; const Ogham : RANGE := RANGE::create(0x1680,0x169F) ; const Runic : RANGE := RANGE::create(0x16A0,0x16F0) ; const Khmer : RANGE := RANGE::create(0x1780,0x17FF) ; const Mongolian : RANGE := RANGE::create(0x1800,0x18AF) ; const Latin_Extended_Additional : RANGE := RANGE::create(0x1E00,0x1EFF) ; const Greek_Extended : RANGE := RANGE::create(0x1F00,0x1FFF) ; const General_Punctuation : RANGE := RANGE::create(0x2000,0x206F) ; const Superscripts_and_Subscripts : RANGE := RANGE::create(0x2070,0x209F) ; const Currency_Symbols : RANGE := RANGE::create(0x20A0,0x20CF) ; const Combining_Diacritical_Marks_for_Symbols : RANGE := RANGE::create(0x20D0,0x20FF) ; const Letterlike_Symbols : RANGE := RANGE::create(0x2100,0x214F) ; const Number_Forms : RANGE := RANGE::create(0x2150,0x218F) ; const Arrows : RANGE := RANGE::create(0x2190,0x21FF) ; const Mathematical_Operators : RANGE := RANGE::create(0x2200,0x22FF) ; const Miscellaneous_Technical : RANGE := RANGE::create(0x2300,0x23FF) ; const Control_Pictures : RANGE := RANGE::create(0x2400,0x243F) ; const Optical_Character_Recognition : RANGE := RANGE::create(0x2440,0x245F) ; const Enclosed_Alphanumerics : RANGE := RANGE::create(0x2460,0x24FF) ; const Box_Drawing : RANGE := RANGE::create(0x2500,0x257F) ; const Block_Elements : RANGE := RANGE::create(0x2580,0x259F) ; const Geometric_Shapes : RANGE := RANGE::create(0x25A0,0x25FF) ; const Miscellaneous_Symbols : RANGE := RANGE::create(0x2600,0x26FF) ; const Dingbats : RANGE := RANGE::create(0x2700,0x27BF) ; const CJK_Smbols_and_Punctuation : RANGE := RANGE::create(0x3000,0x303F) ; const Hiragana : RANGE := RANGE::create(0x3040,0x309F) ; const Katakana : RANGE := RANGE::create(0x30A0,0x30FF) ; const Bopomofo : RANGE := RANGE::create(0x3100,0x312F) ; const Hangul_Compatibility_Jamo : RANGE := RANGE::create(0x3130,0x318F) ; const CJK_Miscellaneous : RANGE := RANGE::create(0x3190,0x319F) ; const Enclosed_CJK_Letters_and_Months : RANGE := RANGE::create(0x3200,0x32FF) ; const CJK_Compatibility : RANGE := RANGE::create(0x3300,0x33FF) ; const CJK_Unified_Ideographs : RANGE := RANGE::create(0x3400,0x9FFF) ; const Yi : RANGE := RANGE::create(0xA000,0xA48F) ; const Hangul : RANGE := RANGE::create(0xAC00,0xD7A3) ; const Private_Use_Area : RANGE := RANGE::create(0xE000,0xF8FF) ; const CJK_Compatibility_Ideographs : RANGE := RANGE::create(0xF900,0xFAFF) ; const Alphabetic_Presentation_Forms : RANGE := RANGE::create(0xFB00,0xFB4F) ; const Arabic_Presentation_Forms_A : RANGE := RANGE::create(0xFB50,0xFDFF) ; const CJK_Compatibility_Forms : RANGE := RANGE::create(0xFE30,0xFE4F) ; const Combining_Half_Marks : RANGE := RANGE::create(0xFE20,0xFE2F) ; const Small_Form_Variants : RANGE := RANGE::create(0xFE50,0xFE6F) ; const Arabic_Presentation_Forms_B : RANGE := RANGE::create(0xFE70,0xFEFE) ; const Halfwidth_and_Fullwidth_Forms : RANGE := RANGE::create(0xFF00,0xFFEF) ; const Specials : RANGE := RANGE::create(0xFFF0,0xFFFD) ; -- The following constants include all of the various ranges contained -- in the complete BMP encoding. They are used for universal testing. -- The code group constant following is given in the order of the -- enumeration class SCRIPTS which will be extended as additional scripts -- are added to the standard. Note that the ranges under each script omit -- the codes which have not been allocated! const Code_Groups : ARRAY{ARRAY{RANGE}} := | -- Arabic | RANGE::create(0x060C,0x060C), RANGE::create(0x061B,0x061B), RANGE::create(0x061F,0x061F), RANGE::create(0x0621,0x063A), RANGE::create(0x0640,0x0655), RANGE::create(0x0660,0x066D), RANGE::create(0x0670,0x06ED), RANGE::create(0x06F0,0x06FE) |, -- Arabic Presentation | RANGE::create(0xFB50,0xFBB1), RANGE::create(0xFBD3,0xFD3F), RANGE::create(0xFD50,0xFD8F), RANGE::create(0xFD92,0xFDC7), RANGE::create(0xFDF0,0xFDFB), RANGE::create(0xFE70,0xFE72), RANGE::create(0xFE74,0xFE74), RANGE::create(0xFE76,0xFEFC) |, -- Armenian | RANGE::create(0x0531,0x0556), RANGE::create(0x0559,0x055F), RANGE::create(0x0561,0x0587), RANGE::create(0x0589,0x058A), RANGE::create(0xFB13,0xFB17) |, -- Bengali | RANGE::create(0x0981,0x0983), RANGE::create(0x0985,0x098C), RANGE::create(0x098F,0x0990), RANGE::create(0x0993,0x09A8), RANGE::create(0x09AA,0x09B0), RANGE::create(0x09B2,0x09B2), RANGE::create(0x09B6,0x09B9), RANGE::create(0x09BC,0x09BC), RANGE::create(0x09BE,0x09C4), RANGE::create(0x09C7,0x09C8), RANGE::create(0x09CB,0x09CD), RANGE::create(0x09D7,0x09D7), RANGE::create(0x09DC,0x09DD), RANGE::create(0x09DF,0x09E3), RANGE::create(0x09E6,0x09FA) |, -- Bopomofo | RANGE::create(0x3105,0x312C), RANGE::create(0x31A0,0x31B7) |, -- Canadian Aboriginal | RANGE::create(0x1401,0x1676) |, -- Cherokee | RANGE::create(0x13A0,0x13F4) |, -- CJK-Unified | RANGE::create(0x2E80,0x2E99), RANGE::create(0x2E9B,0x2EF3), RANGE::create(0x2F00,0x2FD5), RANGE::create(0x2FF0,0x2FFB), RANGE::create(0x3000,0x303A), RANGE::create(0x303E,0x303F), RANGE::create(0x3190,0x319F), RANGE::create(0x3200,0x321C), RANGE::create(0x3220,0x3243), RANGE::create(0x3260,0x327B), RANGE::create(0x32C0,0x32CB), RANGE::create(0x32D0,0x32FE), RANGE::create(0x3300,0x3376), RANGE::create(0x337B,0x33DD), RANGE::create(0x33E0,0x33FE), RANGE::create(0x3400,0x9FA5), RANGE::create(0xF900,0xFA2D), RANGE::create(0xFE30,0xFE44), RANGE::create(0xFE49,0xFE52), RANGE::create(0xFE54,0xFE66), RANGE::create(0xFE68,0xFE6B), RANGE::create(0xFF61,0xFF64) |, -- Cyrillic | RANGE::create(0x0400,0x0486), RANGE::create(0x0488,0x0489), RANGE::create(0x048C,0x04C4), RANGE::create(0x04C7,0x04C8), RANGE::create(0x04CB,0x04CC), RANGE::create(0x04D0,0x04F5), RANGE::create(0x04F8,0x04F9) |, -- Devanagari | RANGE::create(0x0901,0x0903), RANGE::create(0x0905,0x0939), RANGE::create(0x093C,0x094D), RANGE::create(0x0950,0x0954), RANGE::create(0x0958,0x0970) |, -- Ethiopic | RANGE::create(0x1200,0x1206), RANGE::create(0x1208,0x1246), RANGE::create(0x1248,0x1248), RANGE::create(0x124A,0x124D), RANGE::create(0x1250,0x1256), RANGE::create(0x1258,0x1258), RANGE::create(0x125A,0x125D), RANGE::create(0x1260,0x1286), RANGE::create(0x1288,0x1288), RANGE::create(0x128A,0x128D), RANGE::create(0x1290,0x12AE), RANGE::create(0x12B0,0x12B0), RANGE::create(0x12B2,0x12B5), RANGE::create(0x12B8,0x12BE), RANGE::create(0x12C0,0x12C0), RANGE::create(0x12C2,0x12C5), RANGE::create(0x12C8,0x12CE), RANGE::create(0x12D0,0x12D6), RANGE::create(0x12D8,0x12EE), RANGE::create(0x12F0,0x130E), RANGE::create(0x1310,0x1310), RANGE::create(0x1312,0x1315), RANGE::create(0x1318,0x131E), RANGE::create(0x1320,0x1346), RANGE::create(0x1348,0x135A), RANGE::create(0x1361,0x137C) |, -- Georgian | RANGE::create(0x10A0,0x10C5), RANGE::create(0x10D0,0x10F6), RANGE::create(0x10FB,0x10FB) |, -- Greek | RANGE::create(0x0374,0x0375), RANGE::create(0x037A,0x037A), RANGE::create(0x037E,0x037E), RANGE::create(0x0384,0x038A), RANGE::create(0x038C,0x038C), RANGE::create(0x038E,0x03A1), RANGE::create(0x03A3,0x03CE), RANGE::create(0x03D0,0x03D7), RANGE::create(0x03DA,0x03F3), RANGE::create(0x1F00,0x1F15), RANGE::create(0x1F18,0x1F1D), RANGE::create(0x1F20,0x1F45), RANGE::create(0x1F48,0x1F5D), RANGE::create(0x1F50,0x1F57), RANGE::create(0x1F59,0x1F59), RANGE::create(0x1F5B,0x1F5B), RANGE::create(0x1F5D,0x1F5D), RANGE::create(0x1F5F,0x1F7D), RANGE::create(0x1F80,0x1FB4), RANGE::create(0x1FB6,0x1FC4), RANGE::create(0x1FC6,0x1FD3), RANGE::create(0x1FD6,0x1FDB), RANGE::create(0x1FDD,0x1FEF), RANGE::create(0x1FF2,0x1FF4), RANGE::create(0x1FF6,0x1FFE) |, -- Gujarati | RANGE::create(0x0A81,0x0A83), RANGE::create(0x0A85,0x0A8B), RANGE::create(0x0A8D,0x0A8D), RANGE::create(0x0A8F,0x0A91), RANGE::create(0x0A93,0x0AA8), RANGE::create(0x0AAA,0x0AB0), RANGE::create(0x0AB2,0x0AB3), RANGE::create(0x0AB5,0x0AB9), RANGE::create(0x0ABC,0x0AC5), RANGE::create(0x0AC7,0x0AC9), RANGE::create(0x0ACB,0x0ACD), RANGE::create(0x0AD0,0x0AD0), RANGE::create(0x0AE0,0x0AE0), RANGE::create(0x0AE6,0x0AEF) |, -- Gurmukhi | RANGE::create(0x0A02,0x0A02), RANGE::create(0x0A05,0x0A0A), RANGE::create(0x0A0F,0x0A10), RANGE::create(0x0A13,0x0A28), RANGE::create(0x0A2A,0x0A30), RANGE::create(0x0A32,0x0A33), RANGE::create(0x0A35,0x0A36), RANGE::create(0x0A38,0x0A39), RANGE::create(0x0A3C,0x0A3C), RANGE::create(0x0A3E,0x0A42), RANGE::create(0x0A47,0x0A48), RANGE::create(0x0A4B,0x0A4D), RANGE::create(0x0A59,0x0A5C), RANGE::create(0x0A5E,0x0A5E), RANGE::create(0x0A66,0x0A74) |, -- Hangul | RANGE::create(0xAC00,0xD7A3), RANGE::create(0xFFA0,0xFFBE), RANGE::create(0xFFC2,0xFFC7), RANGE::create(0xFFCA,0xFFCF), RANGE::create(0xFFD2,0xFFD7), RANGE::create(0xFFDA,0xFFDC), RANGE::create(0xFFE0,0xFFE6), RANGE::create(0xFFE8,0xFFEE) |, -- Hangul_Jamo | RANGE::create(0x1100,0x1159), RANGE::create(0x115F,0x11A2), RANGE::create(0x11A8,0x11F9), RANGE::create(0x3131,0x318E) |, -- Hebrew | RANGE::create(0x0591,0x05A1), RANGE::create(0x05A3,0x05B9), RANGE::create(0x05BB,0x05C4), RANGE::create(0x05D0,0x05EA), RANGE::create(0x05F0,0x05F4), RANGE::create(0x2135,0x2138), RANGE::create(0xFB1D,0xFB36), RANGE::create(0xFB38,0xFB3C), RANGE::create(0xFB3E,0xFB3E), RANGE::create(0xFB40,0xFB41), RANGE::create(0xFB43,0xFB44), RANGE::create(0xFB46,0xFB4F) |, -- Hiragana | RANGE::create(0x3041,0x3094), RANGE::create(0x3099,0x309E) |, -- IPA | RANGE::create(0x0250,0x02AD) |, -- Kannada | RANGE::create(0x0C82,0x0C83), RANGE::create(0x0C85,0x0C8C), RANGE::create(0x0C8E,0x0C90), RANGE::create(0x0C92,0x0CA8), RANGE::create(0x0CAA,0x0CB3), RANGE::create(0x0CB5,0x0CB9), RANGE::create(0x0CBE,0x0CC4), RANGE::create(0x0CC6,0x0CC8), RANGE::create(0x0CCA,0x0CCD), RANGE::create(0x0CD5,0x0CD6), RANGE::create(0x0CDE,0x0CDE), RANGE::create(0x0CE0,0x0CE1), RANGE::create(0x0CE6,0x0CEF) |, -- Katakana | RANGE::create(0x30A1,0x30FE), RANGE::create(0xFF65,0xFF9F) |, -- Khmer | RANGE::create(0x1780,0x17DC), RANGE::create(0x17E0,0x17E9) |, -- Lao | RANGE::create(0x0E81,0x0E82), RANGE::create(0x0E84,0x0E84), RANGE::create(0x0E87,0x0E88), RANGE::create(0x0E8A,0x0E8A), RANGE::create(0x0E8D,0x0E8D), RANGE::create(0x0E94,0x0E97), RANGE::create(0x0E99,0x0E9F), RANGE::create(0x0EA1,0x0EA3), RANGE::create(0x0EA5,0x0EA5), RANGE::create(0x0EA7,0x0EA7), RANGE::create(0x0EAA,0x0EAB), RANGE::create(0x0EAD,0x0EB9), RANGE::create(0x0EBB,0x0EBD), RANGE::create(0x0EC0,0x0EC4), RANGE::create(0x0EC6,0x0EC6), RANGE::create(0x0EC8,0x0ECD), RANGE::create(0x0ED0,0x0ED9), RANGE::create(0x0EDC,0x0EDD) |, -- Latin | RANGE::create(SPACE.card, TILDE.card), RANGE::create(0x00A0,0x021F), RANGE::create(0x0222,0x0233), RANGE::create(0x01FA,0x0217), RANGE::create(0x1E00,0x1E9B), RANGE::create(0x1EA0,0x1EF9), RANGE::create(0x2100,0x2138), RANGE::create(0x2153,0x2182), RANGE::create(0x2400,0x2424), RANGE::create(0x2440,0x244A), RANGE::create(0x2460,0x24EA), RANGE::create(0xFB00,0xFB06), RANGE::create(0xFEFF,0xFEFF), RANGE::create(0xFF01,0xFF5E) |, -- Malayalam | RANGE::create(0x0D02,0x0D03), RANGE::create(0x0D05,0x0D0C), RANGE::create(0x0D0E,0x0D10), RANGE::create(0x0D12,0x0D28), RANGE::create(0x0D2A,0x0D39), RANGE::create(0x0D3E,0x0D43), RANGE::create(0x0D46,0x0D48), RANGE::create(0x0D4A,0x0D4D), RANGE::create(0x0D57,0x0D57), RANGE::create(0x0D60,0x0D61), RANGE::create(0x0D66,0x0D6F) |, -- Mongolian | RANGE::create(0x1800,0x180E), RANGE::create(0x1810,0x1819), RANGE::create(0x1820,0x1877), RANGE::create(0x1880,0x18A9) |, -- Myanmar | RANGE::create(0x1000,0x1021), RANGE::create(0x1023,0x1027), RANGE::create(0x1029,0x102A), RANGE::create(0x102C,0x1032), RANGE::create(0x1036,0x1039), RANGE::create(0x1040,0x1059) |, -- Ogham | RANGE::create(0x1680,0x169C) |, -- Oriya | RANGE::create(0x0B01,0x0B03), RANGE::create(0x0B05,0x0B0C), RANGE::create(0x0B0F,0x0B10), RANGE::create(0x0B13,0x0B28), RANGE::create(0x0B2A,0x0B30), RANGE::create(0x0B32,0x0B33), RANGE::create(0x0B36,0x0B39), RANGE::create(0x0B3C,0x0B43), RANGE::create(0x0B47,0x0B48), RANGE::create(0x0B4B,0x0B4D), RANGE::create(0x0B56,0x0B57), RANGE::create(0x0B5C,0x0B5D), RANGE::create(0x0B5F,0x0B61), RANGE::create(0x0B66,0x0B70) |, -- Runic | RANGE::create(0x16A0,0x16F0) |, -- Sinhala | RANGE::create(0x0D82,0x0D83), RANGE::create(0x0D85,0x0D96), RANGE::create(0x0D9A,0x0DB1), RANGE::create(0x0DB3,0x0DBB), RANGE::create(0x0DBD,0x0DBD), RANGE::create(0x0DC0,0x0DC6), RANGE::create(0x0DCA,0x0DCA), RANGE::create(0x0DCF,0x0DD4), RANGE::create(0x0DD6,0x0DD6), RANGE::create(0x0DD8,0x0DDF), RANGE::create(0x0DF2,0x0DF4) |, -- Syriac | RANGE::create(0x0700,0x070D), RANGE::create(0x070F,0x072C), RANGE::create(0x0730,0x074A) |, -- Tamil | RANGE::create(0x0B82,0x0B83), RANGE::create(0x0B85,0x0B8A), RANGE::create(0x0B8E,0x0B90), RANGE::create(0x0B92,0x0B95), RANGE::create(0x0B99,0x0B9A), RANGE::create(0x0B9C,0x0B9C), RANGE::create(0x0B9E,0x0B9F), RANGE::create(0x0BA3,0x0BA4), RANGE::create(0x0BA8,0x0BAA), RANGE::create(0x0BAE,0x0BB5), RANGE::create(0x0BB7,0x0BB9), RANGE::create(0x0BBE,0x0BC2), RANGE::create(0x0BC6,0x0BC8), RANGE::create(0x0BCA,0x0BCD), RANGE::create(0x0BD7,0x0BD7), RANGE::create(0x0BE7,0x0BF2) |, -- Telugu | RANGE::create(0x0C01,0x0C03), RANGE::create(0x0C05,0x0C0C), RANGE::create(0x0C0E,0x0C10), RANGE::create(0x0C12,0x0C28), RANGE::create(0x0C2A,0x0C33), RANGE::create(0x0C35,0x0C39), RANGE::create(0x0C3E,0x0C44), RANGE::create(0x0C46,0x0C48), RANGE::create(0x0C4A,0x0C4D), RANGE::create(0x0C55,0x0C56), RANGE::create(0x0C60,0x0C61), RANGE::create(0x0C66,0x0C6F) |, -- Thaana | RANGE::create(0x0780,0x07B0) |, -- Thai | RANGE::create(0x0E01,0x0E3A), RANGE::create(0x0E3F,0x0E5B) |, -- Tibetan | RANGE::create(0x0F00,0x0F47), RANGE::create(0x0F49,0x0F6A), RANGE::create(0x0F71,0x0F8B), RANGE::create(0x0F90,0x0F97), RANGE::create(0x0F99,0x0FBC), RANGE::create(0x0FBE,0x0FCC), RANGE::create(0x0FCF,0x0FCF) |, -- Yi | RANGE::create(0xA000,0xA48C), RANGE::create(0xA490,0xA4A1), RANGE::create(0xA4A4,0xA4B3), RANGE::create(0xA4B5,0xA4C0), RANGE::create(0xA4C2,0xA4C4), RANGE::create(0xA4C6,0xA4C6) |, -- Miscellaneous Numerics | RANGE::create(0x00B2,0x00B3), RANGE::create(0x00B9,0x00BE), RANGE::create(0x2070,0x2070), RANGE::create(0x2074,0x2079), RANGE::create(0x2080,0x2089), RANGE::create(0x2153,0x2183), RANGE::create(0x2460,0x249B), RANGE::create(0x24EA,0x24EA), RANGE::create(0x2776,0x2793), RANGE::create(0x3007,0x3007), RANGE::create(0x3021,0x3029), RANGE::create(0x3038,0x303A), RANGE::create(0x3192,0x3195), RANGE::create(0x3220,0x3229), RANGE::create(0x3280,0x3289) | | ; -- The following constant array is given in the order established by -- the enumeration class SCRIPTS for ease of external referencing as further -- scripts are added to the standard. const Letters : ARRAY{ARRAY{RANGE}} := | -- Arabic | RANGE::create(0x0621,0x063A), RANGE::create(0x0641,0x064A), RANGE::create(0x0671,0x06D3), RANGE::create(0x06D5,0x06D5), RANGE::create(0x06FA,0x06FC) |, -- Arabic Presentation Forms | RANGE::create(0xFB50,0xFBB1), RANGE::create(0xFBD3,0xFD3F), RANGE::create(0xFD50,0xFD8F), RANGE::create(0xFD92,0xFDC7), RANGE::create(0xFDF0,0xFDFB), RANGE::create(0xFE70,0xFE72), RANGE::create(0xFE74,0xFE74), RANGE::create(0xFE76,0xFEFC) |, -- Armenian | RANGE::create(0x0531,0x0556), RANGE::create(0x0561,0x0587), RANGE::create(0xFB13,0xFB17) |, -- Bengali | RANGE::create(0x0985,0x098C), RANGE::create(0x098F,0x0990), RANGE::create(0x0993,0x09A8), RANGE::create(0x09AA,0x09B0), RANGE::create(0x09B2,0x09B2), RANGE::create(0x09B6,0x09B9), RANGE::create(0x09DC,0x09DD), RANGE::create(0x09DF,0x09E3), RANGE::create(0x09F0,0x09F1) |, -- Bopomofo | RANGE::create(0x3105,0x312C), RANGE::create(0x31A0,0x31B7) |, -- Canadian Aboriginal | void |, -- Cherokee | RANGE::create(0x13A0,0x13F4) |, -- CJK_Unified | void |, -- Cyrillic | RANGE::create(0x0400,0x0481), RANGE::create(0x048C,0x04C4), RANGE::create(0x04C7,0x04C8), RANGE::create(0x04CB,0x04CC), RANGE::create(0x04D0,0x04F9) |, -- Devanagari | RANGE::create(0x0905,0x0939), RANGE::create(0x0958,0x0965) |, -- Ethiopic | void |, -- Georgian | RANGE::create(0x10A0,0x10C5), RANGE::create(0x10D0,0x10F6) |, -- Greek | RANGE::create(0x0386,0x0386), RANGE::create(0x0388,0x038A), RANGE::create(0x038C,0x038C), RANGE::create(0x038E,0x03A1), RANGE::create(0x03A3,0x03CE), RANGE::create(0x03D0,0x03D6), RANGE::create(0x03DA,0x03F3), RANGE::create(0x1F00,0x1F15), RANGE::create(0x1F18,0x1F1D), RANGE::create(0x1F20,0x1F45), RANGE::create(0x1F48,0x1F4D), RANGE::create(0x1F50,0x1F57), RANGE::create(0x1F59,0x1F59), RANGE::create(0x1F5B,0x1F5B), RANGE::create(0x1F5D,0x1F5D), RANGE::create(0x1F5F,0x1F7D), RANGE::create(0x1F80,0x1FB4), RANGE::create(0x1FB6,0x1FBC), RANGE::create(0x1FC2,0x1FC4), RANGE::create(0x1FC6,0x1FCC), RANGE::create(0x1FD0,0x1FD3), RANGE::create(0x1FD6,0x1FDB), RANGE::create(0x1F00,0x1F15), RANGE::create(0x1FE0,0x1FEC), RANGE::create(0x1FF2,0x1FF4), RANGE::create(0x1FF6,0x1FFC) |, -- Gujarati | RANGE::create(0x0A85,0x0A8B), RANGE::create(0x0A8D,0x0A8D), RANGE::create(0x0A8F,0x0A91), RANGE::create(0x0A93,0x0AA8), RANGE::create(0x0AAA,0x0AB0), RANGE::create(0x0AB2,0x0AB3), RANGE::create(0x0AB5,0x0AB9), RANGE::create(0x0AE0,0x0AE0) |, -- Gurmukhi | RANGE::create(0x0A05,0x0A0A), RANGE::create(0x0A0F,0x0A10), RANGE::create(0x0A13,0x0A28), RANGE::create(0x0A2A,0x0A30), RANGE::create(0x0A32,0x0A33), RANGE::create(0x0A35,0x0A36), RANGE::create(0x0A38,0x0A39), RANGE::create(0x0A59,0x0A5C), RANGE::create(0xFFA0,0xFFBE), RANGE::create(0xFFC2,0xFFC7), RANGE::create(0xFFCA,0xFFCF), RANGE::create(0xFFD2,0xFFD7), RANGE::create(0xFFDA,0xFFDC) |, -- Hangul | void |, -- Hangul_Jamo | RANGE::create(0x3131,0x318E), RANGE::create(0xFFA0,0xFFBE), RANGE::create(0xFFC2,0xFFC7), RANGE::create(0xFFCA,0xFFCF), RANGE::create(0xFFD2,0xFFD7), RANGE::create(0xFFDA,0xFFDC) |, -- Hebrew | RANGE::create(0x05D0,0x05EA), RANGE::create(0x05F0,0x05F2), RANGE::create(0xFB1D,0xFB1D), RANGE::create(0xFB1F,0xFB36), RANGE::create(0xFB38,0xFB3C), RANGE::create(0xFB3E,0xFB3E), RANGE::create(0xFB40,0xFB41), RANGE::create(0xFB43,0xFB44), RANGE::create(0xFB46,0xFB4F) |, -- Hiragana | RANGE::create(0x3041,0x3094) |, -- IPA | RANGE::create(0x0250,0x02AD) |, -- Kannada | RANGE::create(0x0C85,0x0C8C), RANGE::create(0x0C8E,0x0C90), RANGE::create(0x0C92,0x0CA8), RANGE::create(0x0CAA,0x0CB3), RANGE::create(0x0CB5,0x0CB9), RANGE::create(0x0CDE,0x0CDE), RANGE::create(0x0CE0,0x0CE1) |, -- Katakana | RANGE::create(0x30A1,0x30FA), RANGE::create(0xFF21,0xFF3A), RANGE::create(0xFF41,0xFF5A), RANGE::create(0xFF66,0xFF9D) |, -- Khmer | RANGE::create(0x1780,0x17B3) |, -- Lao | RANGE::create(0x0E81,0x0E82), RANGE::create(0x0E84,0x0E84), RANGE::create(0x0E87,0x0E88), RANGE::create(0x0E8A,0x0E8A), RANGE::create(0x0E8D,0x0E8D), RANGE::create(0x0E94,0x0E97), RANGE::create(0x0E99,0x0E9F), RANGE::create(0x0EA1,0x0EA3), RANGE::create(0x0EA5,0x0EA5), RANGE::create(0x0EA7,0x0EA7), RANGE::create(0x0EAA,0x0EAB), RANGE::create(0x0EAD,0x0EAE), RANGE::create(0x0EB0,0x0EB0), RANGE::create(0x0EBB,0x0EBD), RANGE::create(0x0EC0,0x0EC4), RANGE::create(0x0EDC,0x0EDD) |, -- Latin | RANGE::create(0x0041,0x005A), RANGE::create(0x0061,0x007A), RANGE::create(0x00B5,0x00B5), RANGE::create(0x00BA,0x00BA), RANGE::create(0x00C0,0x00D6), RANGE::create(0x00D8,0x00F6), RANGE::create(0x00F8,0x021F), RANGE::create(0x0222,0x0233), RANGE::create(0x1E00,0x1E9B), RANGE::create(0x1EA0,0x1EF9), RANGE::create(0x2102,0x2102), RANGE::create(0x2107,0x2107), RANGE::create(0x210A,0x2113), RANGE::create(0x2115,0x2115), RANGE::create(0x2118,0x211D), RANGE::create(0x2124,0x2124), RANGE::create(0x2126,0x2126), RANGE::create(0x2128,0x2128), RANGE::create(0x212A,0x212D), RANGE::create(0x212F,0x2131), RANGE::create(0x2133,0x2138), RANGE::create(0x2160,0x2182), RANGE::create(0xFB00,0xFB06) |, -- Malayalam | RANGE::create(0x0D05,0x0D0C), RANGE::create(0x0D0E,0x0D10), RANGE::create(0x0D12,0x0D28), RANGE::create(0x0D2A,0x0D39), RANGE::create(0x0D60,0x0D61) |, -- Mongolian | RANGE::create(0x1820,0x18A9) |, -- Myanmar | RANGE::create(0x1000,0x1021), RANGE::create(0x1023,0x1027), RANGE::create(0x1029,0x102A), RANGE::create(0x1050,0x1055) |, -- Ogham | RANGE::create(0x1681,0x169A) |, -- Oriya | RANGE::create(0x0B05,0x0B0C), RANGE::create(0x0B0F,0x0B10), RANGE::create(0x0B13,0x0B28), RANGE::create(0x0B2A,0x0B30), RANGE::create(0x0B32,0x0B33), RANGE::create(0x0B36,0x0B39), RANGE::create(0x0B5C,0x0B5D), RANGE::create(0x0B5F,0x0B61) |, -- Runic | RANGE::create(0x16A0,0x16EA) |, -- Sinhala | RANGE::create(0x0D85,0x0D96), RANGE::create(0x0D9A,0x0DB1), RANGE::create(0x0DB3,0x0DBB), RANGE::create(0x0DBD,0x0DBD), RANGE::create(0x0DC0,0x0DC6) |, -- Syriac | RANGE::create(0x0710,0x072C) |, -- Tamil | RANGE::create(0x0B85,0x0B8A), RANGE::create(0x0B8E,0x0B90), RANGE::create(0x0B92,0x0B95), RANGE::create(0x0B99,0x0B9A), RANGE::create(0x0B9C,0x0B9C), RANGE::create(0x0B9E,0x0B9F), RANGE::create(0x0BA3,0x0BA4), RANGE::create(0x0BA8,0x0BAA), RANGE::create(0x0BAE,0x0BB5), RANGE::create(0x0BB7,0x0BB9) |, -- Telugu | RANGE::create(0x0C05,0x0C0C), RANGE::create(0x0C0E,0x0C10), RANGE::create(0x0C12,0x0C28), RANGE::create(0x0C2A,0x0C33), RANGE::create(0x0C35,0x0C39), RANGE::create(0x0C60,0x0C61) |, -- Thaana | RANGE::create(0x0780,0x07A5) |, -- Thai | RANGE::create(0x0E01,0x0E2E), RANGE::create(0x0E30,0x0E3A), RANGE::create(0x0E40,0x0E46) |, -- Tibetan | RANGE::create(0x0F40,0x0F47), RANGE::create(0x0F49,0x0F6A) |, -- Yi | void |, -- Numerics | void | | ; -- The following constant array is given in the order established by -- the enumeration class SCRIPTS for ease of external referencing as further -- scripts are added to the standard. const Numeric : ARRAY{ARRAY{RANGE}} := | -- Arabic | RANGE::create(0x0660,0x0669), RANGE::create(0x06F0,0x06F9) |, -- Arabic Presentation | void |, -- Armenian | void |, -- Bengali | RANGE::create(0x09E6,0x09EF), RANGE::create(0x09F4,0x09F9) |, -- Bopomofo | void |, -- Canadian Aboriginal | void |, -- Cherokee | void |, -- CJK_Unified | RANGE::create(0x3007,0x3007), RANGE::create(0x4E00,0x4E00), RANGE::create(0x4E8C,0x4E8C), RANGE::create(0x4E09,0x4E09), RANGE::create(0x56DB,0x56DB), RANGE::create(0x4E94,0x4E94), RANGE::create(0x516D,0x516D), RANGE::create(0x4E03,0x4E03), RANGE::create(0x516B,0x516B), RANGE::create(0x4E5D,0x4E5D), RANGE::create(0x5341,0x5341), RANGE::create(0x767E,0x767E), RANGE::create(0x5343,0x5343), RANGE::create(0x4E07,0x4E07), RANGE::create(0x5104,0x5104), RANGE::create(0x5146,0x5146), RANGE::create(0x96F6,0x96F6), RANGE::create(0x58F9,0x58F9), RANGE::create(0x58F1,0x58F1), RANGE::create(0x5F0C,0x5F0C), RANGE::create(0x8CAE,0x8CAE), RANGE::create(0x8D30,0x8D30), RANGE::create(0x5F10,0x5F10), RANGE::create(0x5F0D,0x5F0D), RANGE::create(0x53C1,0x53C3), RANGE::create(0x5F0E,0x5F0E), RANGE::create(0x8086,0x8086), RANGE::create(0x4F0D,0x4F0D), RANGE::create(0x9678,0x9678), RANGE::create(0x9646,0x9646), RANGE::create(0x67D2,0x67D2), RANGE::create(0x634C,0x634C), RANGE::create(0x7396,0x7396), RANGE::create(0x62FE,0x62FE), RANGE::create(0x4F70,0x4F70), RANGE::create(0x964C,0x964C), RANGE::create(0x4EDF,0x4EDF), RANGE::create(0x842C,0x842C) |, -- Cyrillic | void |, -- Devanagari | RANGE::create(0x0966,0x096F) |, -- Ethiopic | RANGE::create(0x1369,0x137C) |, -- Georgian | void |, -- Greek | void |, -- Gujarati | RANGE::create(0x0AE6,0x0AEF) |, -- Gurmukhi | RANGE::create(0x0A66,0x0A6F) |, -- Hangul | void |, -- Hangul_Jamo | void |, -- Hebrew | void |, -- Hiragana | void |, -- IPA | void |, -- Kannada | RANGE::create(0x0CE6,0x0CEF) |, -- Katakana | RANGE::create(0xFF10,0xFF19) |, -- Khmer | RANGE::create(0x17E0,0x17E9) |, -- Lao | RANGE::create(0x0ED0,0x0ED9) |, -- Latin | void |, -- Malayalam | RANGE::create(0x0D66,0x0D6F) |, -- Mongolian | RANGE::create(0x1810,0x1819) |, -- Myanmar | RANGE::create(0x1040,0x1049) |, -- Ogham | void |, -- Oriya | RANGE::create(0x0B66,0x0B6F) |, -- Runic | RANGE::create(0x16EE,0x16F0) |, -- Sinhala | void |, -- Syriac | void |, -- Tamil | RANGE::create(0x0BE7,0x0BF2) |, -- Telugu | RANGE::create(0x0C66,0x0C6F) |, -- Thaana | void |, -- Thai | RANGE::create(0x0E50,0x0E59) |, -- Tibetan | RANGE::create(0x0F20,0x0F33) |, -- Yi | void |, -- Non-script Numerics | RANGE::create(0x0030,0x0039), RANGE::create(0x00B2,0x00B3), RANGE::create(0x00B9,0x00BE), RANGE::create(0x2070,0x2070), RANGE::create(0x2074,0x2079), RANGE::create(0x2080,0x2089), RANGE::create(0x2153,0x2183), RANGE::create(0x2460,0x249B), RANGE::create(0x24EA,0x24EA), RANGE::create(0x2776,0x2793), RANGE::create(0x3007,0x3007), RANGE::create(0x3021,0x3029), RANGE::create(0x3038,0x303A), RANGE::create(0x3192,0x3195), RANGE::create(0x3220,0x3229), RANGE::create(0x3280,0x3289) | | ; const Decimal : ARRAY{ARRAY{RANGE}} := | -- Arabic | RANGE::create(0x0660,0x0669), RANGE::create(0x06F0,0x06F9) |, -- Arabic Presentation | void |, -- Armenian | void |, -- Bengali | RANGE::create(0x09E6,0x09EF) |, -- Bopomofo | void |, -- Canadian Aboriginal | void |, -- Cherokee | void |, -- CJK_Unified | RANGE::create(0x3007,0x3007), RANGE::create(0x4E00,0x4E00), RANGE::create(0x4E8C,0x4E8C), RANGE::create(0x4E09,0x4E09), RANGE::create(0x56DB,0x56DB), RANGE::create(0x4E94,0x4E94), RANGE::create(0x516D,0x516D), RANGE::create(0x4E03,0x4E03), RANGE::create(0x516B,0x516B), RANGE::create(0x4E5D,0x4E5D), RANGE::create(0xFF10,0xFF19) |, -- Cyrillic | void |, -- Devanagari | RANGE::create(0x0966,0x096F) |, -- Ethiopic | RANGE::create(0x1369,0x1371) |, -- Georgian | void |, -- Greek | void |, -- Gujarati | RANGE::create(0x0AE6,0x0AEF) |, -- Gurmukhi | RANGE::create(0x0A66,0x0A6F) |, -- Hangul | void |, -- Hangul_Jamo | void |, -- Hebrew | void |, -- Hiragana | void |, -- IPA | void |, -- Kannada | RANGE::create(0x0CE6,0x0CEF) |, -- Katakana | RANGE::create(0xFF10,0xFF19) |, -- Khmer | RANGE::create(0x17E0,0x17E9) |, -- Lao | RANGE::create(0x0ED0,0x0ED9) |, -- Latin | void |, -- Malayalam | RANGE::create(0x0D66,0x0D6F) |, -- Mongolian | RANGE::create(0x1810,0x1819) |, -- Myanmar | RANGE::create(0x1040,0x1049) |, -- Ogham | void |, -- Oriya | RANGE::create(0x0B66,0x0B6F) |, -- Runic | void |, -- Sinhala | void |, -- Syriac | void |, -- Tamil | RANGE::create(0x0BE7,0x0BEF) |, -- Telugu | RANGE::create(0x0C66,0x0C6F) |, -- Thaana | void |, -- Thai | RANGE::create(0x0E50,0x0E59) |, -- Tibetan | RANGE::create(0x0F20,0x0F29) |, -- Yi | void |, -- Non-script Digits | RANGE::create(0x0030,0x0039) | | ; -- The following further constants are used in determining the case of -- letter encodings (if there is one). The last table in this group -- is used in converting from upper to lower case and vice versa. const Lower_only : ARRAY{RANGE} := | -- Armenian RANGE::create(0x0587,0x0587), RANGE::create(0xFB13,0xFB17), -- Greek RANGE::create(0x0390,0x0390), RANGE::create(0x03B0,0x03B0), RANGE::create(0x03C2,0x03C2), RANGE::create(0x1F50,0x1F50), RANGE::create(0x1F52,0x1F52), RANGE::create(0x1F54,0x1F54), RANGE::create(0x1F56,0x1F56), RANGE::create(0x1F70,0x1F7D), -- Latin RANGE::create(0x00DF,0x00DF), RANGE::create(0x00FF,0x00FF), RANGE::create(0x0131,0x0131), RANGE::create(0x0138,0x0138), RANGE::create(0x0149,0x0149), RANGE::create(0x017F,0x0180), RANGE::create(0x018D,0x018D), RANGE::create(0x0195,0x0195), RANGE::create(0x019A,0x019B), RANGE::create(0x019E,0x019E), RANGE::create(0x01AB,0x01AB), RANGE::create(0x01BA,0x01BA), RANGE::create(0x01DD,0x01DD), RANGE::create(0x01F0,0x01F0), RANGE::create(0x0250,0x0261), RANGE::create(0x0263,0x0269), RANGE::create(0x026B,0x0273), RANGE::create(0x0275,0x0275), RANGE::create(0x0277,0x027F), RANGE::create(0x0282,0x028E), RANGE::create(0x0290,0x0293), RANGE::create(0x029A,0x029A), RANGE::create(0x029D,0x029E), RANGE::create(0x02A0,0x02A0), RANGE::create(0x02A3,0x02A8) | ; const Upper_only : ARRAY{RANGE} := | RANGE::create(0x0130,0x0130), RANGE::create(0x0181,0x0181), RANGE::create(0x0186,0x0186), RANGE::create(0x0189,0x018A), RANGE::create(0x018E,0x0190), RANGE::create(0x0193,0x0194), RANGE::create(0x0196,0x0197), RANGE::create(0x019C,0x019D), RANGE::create(0x019F,0x019F), RANGE::create(0x01A9,0x01A9), RANGE::create(0x01AE,0x01AE), RANGE::create(0x01B1,0x01B2), RANGE::create(0x01B7,0x01B7), -- Greek RANGE::create(0x038E,0x038E) | ; const Combining : ARRAY{RANGE} := | -- Space/Non-space RANGE::create(0x07A6,0x07B0), RANGE::create(0x0901,0x0903), RANGE::create(0x0940,0x094C), RANGE::create(0x0962,0x0963), RANGE::create(0x09BE,0x09BE), RANGE::create(0x09C0,0x09C4), RANGE::create(0x09D7,0x09D7), RANGE::create(0x09E2,0x09E3), RANGE::create(0x0A02,0x0A02), RANGE::create(0x0A3E,0x0A3E), RANGE::create(0x0A40,0x0A42), RANGE::create(0x0A47,0x0A48), RANGE::create(0x0A4B,0x0A4C), RANGE::create(0x0A70,0x0A71), RANGE::create(0x0A81,0x0A83), RANGE::create(0x0ABE,0x0ABE), RANGE::create(0x0AC0,0x0ACC), RANGE::create(0x0B01,0x0B03), RANGE::create(0x0B3E,0x0B43), RANGE::create(0x0B56,0x0B57), RANGE::create(0x0B82,0x0B83), RANGE::create(0x0BBE,0x0BC2), RANGE::create(0x0BD7,0x0BD7), RANGE::create(0x0C01,0x0C03), RANGE::create(0x0C3E,0x0C44), RANGE::create(0x0C46,0x0C48), RANGE::create(0x0C4A,0x0C4C), RANGE::create(0x0C82,0x0C83), RANGE::create(0x0CBE,0x0CBF), RANGE::create(0x0CC1,0x0CC4), RANGE::create(0x0CC6,0x0CC6), RANGE::create(0x0CCC,0x0CCC), RANGE::create(0x0CD5,0x0CD6), RANGE::create(0x0D02,0x0D03), RANGE::create(0x0D3E,0x0D43), RANGE::create(0x0D57,0x0D57), RANGE::create(0x0D82,0x0D83), RANGE::create(0x0DCF,0x0DD4), RANGE::create(0x0DD6,0x0DD6), RANGE::create(0x0DD8,0x0DD8), RANGE::create(0x0DDF,0x0DDF), RANGE::create(0x0DF2,0x0DF3), RANGE::create(0x0E31,0x0E31), RANGE::create(0x0E34,0x0E37), RANGE::create(0x0E47,0x0E47), RANGE::create(0x0E4C,0x0E4E), RANGE::create(0x0EB1,0x0EB1), RANGE::create(0x0EB4,0x0EB7), RANGE::create(0x0EBB,0x0EBC), RANGE::create(0x0ECC,0x0ECD), RANGE::create(0x0F3E,0x0F3F), RANGE::create(0x0F73,0x0F79), RANGE::create(0x0F7E,0x0F7F), RANGE::create(0x0F81,0x0F81), RANGE::create(0x102C,0x1030), RANGE::create(0x1032,0x1032), RANGE::create(0x1036,0x1036), RANGE::create(0x1038,0x1038), RANGE::create(0x1056,0x1059), RANGE::create(0x17B4,0x17BD), RANGE::create(0x17C6,0x17D3), -- Split RANGE::create(0x09CB,0x09CC), RANGE::create(0x0B48,0x0B48), RANGE::create(0x0B4B,0x0B4C), RANGE::create(0x0BCA,0x0BCC), RANGE::create(0x0CC0,0x0CC0), RANGE::create(0x0CC7,0x0CC8), RANGE::create(0x0CCA,0x0CCB), RANGE::create(0x0D4A,0x0D4C), RANGE::create(0x0DDC,0x0DDE), RANGE::create(0x17BF,0x17C0), RANGE::create(0x17C4,0x17C5), -- Reordrant RANGE::create(0x093F,0x093F), RANGE::create(0x09BF,0x09BF), RANGE::create(0x09C7,0x09C8), RANGE::create(0x0A3F,0x0A3F), RANGE::create(0x0ABF,0x0ABF), RANGE::create(0x0B47,0x0B47), RANGE::create(0x0BC6,0x0BC8), RANGE::create(0x0D46,0x0D48), RANGE::create(0x0DD9,0x0DDB), RANGE::create(0x1031,0x1031), RANGE::create(0x17BE,0x17BE), RANGE::create(0x17C1,0x17C3), -- Tibetan sub-joined letters RANGE::create(0x0F90,0x0F97), RANGE::create(0x0F99,0x0FBC), -- Enclosing RANGE::create(0x0488,0x0489), RANGE::create(0x06DD,0x06DE), RANGE::create(0x20DD,0x20E0), RANGE::create(0x20E2,0x20E3), -- Overlays/Interior RANGE::create(0x0334,0x0338), RANGE::create(0x20D2,0x20D3), RANGE::create(0x20D8,0x20DA), -- Nuktas RANGE::create(0x093C,0x093C), RANGE::create(0x09BC,0x09BC), RANGE::create(0x0A3C,0x0A3C), RANGE::create(0x0B3C,0x0B3C), RANGE::create(0x1037,0x1037), -- Kana Voicing Marks RANGE::create(0x3099,0x309A), -- Viramas RANGE::create(0x094D,0x094D), RANGE::create(0x09CD,0x09CD), RANGE::create(0x0A4D,0x0A4D), RANGE::create(0x0ACD,0x0ACD), RANGE::create(0x0B4D,0x0B4D), RANGE::create(0x0BCD,0x0BCD), RANGE::create(0x0C4D,0x0C4D), RANGE::create(0x0CCD,0x0CCD), RANGE::create(0x0D4D,0x0D4D), RANGE::create(0x0DCA,0x0DCA), RANGE::create(0x0E3A,0x0E3A), RANGE::create(0x0F84,0x0F84), RANGE::create(0x1039,0x1039), RANGE::create(0x17D2,0x17D2), -- Fixed Position Classes RANGE::create(0x05B0,0x05B9), RANGE::create(0x05BB,0x05BF), RANGE::create(0x05C1,0x05C2), RANGE::create(0x064B,0x0652), RANGE::create(0x0670,0x0670), RANGE::create(0x0711,0x0711), RANGE::create(0x0C55,0x0C56), RANGE::create(0x0E38,0x0E39), RANGE::create(0x0E48,0x0E4B), RANGE::create(0x0EB8,0x0EB9), RANGE::create(0x0EC8,0x0ECB), RANGE::create(0x0F71,0x0F72), RANGE::create(0x0F7A,0x0F7D), RANGE::create(0x0F80,0x0F80), RANGE::create(0x0F74,0x0F74), RANGE::create(0xFB1E,0xFB1E), -- Below Left Attached -- Below Attached RANGE::create(0x0321,0x0322), RANGE::create(0x0327,0x0328), -- Below Right Attached -- Left Attached Reordrant -- Right Attached -- Above Left Attached -- Above Attached -- Above Right Attached RANGE::create(0x031B,0x031B), RANGE::create(0x0F39,0x0F39), -- Below Left RANGE::create(0x032A,0x032A), -- Below RANGE::create(0x0316,0x0319), RANGE::create(0x031C,0x0320), RANGE::create(0x0323,0x0326), RANGE::create(0x0329,0x0333), RANGE::create(0x0339,0x033C), RANGE::create(0x0347,0x0349), RANGE::create(0x034D,0x034E), RANGE::create(0x0591,0x0591), RANGE::create(0x0596,0x0596), RANGE::create(0x059B,0x059B), RANGE::create(0x05A3,0x05A7), RANGE::create(0x05AA,0x05AA), RANGE::create(0x0655,0x0655), RANGE::create(0x06E3,0x06E3), RANGE::create(0x06EA,0x06EA), RANGE::create(0x06ED,0x06ED), RANGE::create(0x0731,0x0731), RANGE::create(0x0734,0x0734), RANGE::create(0x0737,0x0739), RANGE::create(0x073B,0x073C), RANGE::create(0x073E,0x073E), RANGE::create(0x0742,0x0742), RANGE::create(0x0744,0x0744), RANGE::create(0x0746,0x0756), RANGE::create(0x0748,0x0748), RANGE::create(0x0952,0x0952), RANGE::create(0x0F18,0x0F19), RANGE::create(0x0F35,0x0F35), RANGE::create(0x0F37,0x0F37), RANGE::create(0x0FC6,0x0FC6), -- Below Right RANGE::create(0x059A,0x059A), RANGE::create(0x05AD,0x05AD), RANGE::create(0x302D,0x302D), -- Left RANGE::create(0x302E,0x302F), -- Right -- Above Left RANGE::create(0x05AE,0x05AE), RANGE::create(0x18A9,0x18A9), RANGE::create(0x302B,0x302B), -- Above RANGE::create(0x0300,0x0314), RANGE::create(0x033D,0x0344), RANGE::create(0x0346,0x0346), RANGE::create(0x034A,0x034C), RANGE::create(0x0483,0x0486), RANGE::create(0x0592,0x0599), RANGE::create(0x059C,0x05A1), RANGE::create(0x05A8,0x05AC), RANGE::create(0x05AF,0x05AF), RANGE::create(0x05C4,0x05C4), RANGE::create(0x0653,0x0654), RANGE::create(0x06D6,0x06DC), RANGE::create(0x06DF,0x06E4), RANGE::create(0x06E7,0x06E8), RANGE::create(0x06EB,0x06EC), RANGE::create(0x0730,0x0730), RANGE::create(0x0732,0x0733), RANGE::create(0x0735,0x0736), RANGE::create(0x073A,0x073A), RANGE::create(0x073D,0x073D), RANGE::create(0x073F,0x0741), RANGE::create(0x0743,0x0743), RANGE::create(0x0745,0x0745), RANGE::create(0x0747,0x0747), RANGE::create(0x0749,0x074A), RANGE::create(0x0951,0x0951), RANGE::create(0x0953,0x0954), RANGE::create(0x0F82,0x0F83), RANGE::create(0x0F86,0x0F87), RANGE::create(0x20D0,0x20D1), RANGE::create(0x20D4,0x20D7), RANGE::create(0x20DB,0x20DC), RANGE::create(0x20E1,0x20E1), RANGE::create(0xFE20,0xFE23), -- Above Right RANGE::create(0x0315,0x0315), RANGE::create(0x031A,0x031A), RANGE::create(0x302C,0x302C), -- Double Below RANGE::create(0x0362,0x0362), -- Double Above RANGE::create(0x0360,0x0361), -- Iota Subscript RANGE::create(0x0345,0x0345) | ; const Symbolics : ARRAY{ARRAY{RANGE}} := | -- Braille | RANGE::create(0x2800,0x28FF) |, -- Modifiers | RANGE::create(0x02B0,0x02EE) |, -- Spacing | RANGE::create(SPACE.card,SPACE.card), RANGE::create(0x00A0,0x00A0), RANGE::create(0x0200,0x020A), RANGE::create(0x2000,0x200B), RANGE::create(0x3000,0x3000) |, -- Punctuation | RANGE::create(0x0021,0x0023), -- Latin RANGE::create(0x0025,0x002F), RANGE::create(0x005B,0x0060), RANGE::create(0x007B,0x007E), RANGE::create(0x00A1,0x00A1), RANGE::create(0x00A6,0x00A8), RANGE::create(0x00B6,0x00B7), RANGE::create(0x00BB,0x00BB), RANGE::create(0x00BF,0x00BF), RANGE::create(0x0589,0x058A), -- Armenian RANGE::create(0x05BE,0x05BE), -- Hebrew RANGE::create(0x05C0,0x05C0), RANGE::create(0x05C3,0x05C3), RANGE::create(0x05F3,0x05F4), RANGE::create(0x066A,0x066D), -- Arabic RANGE::create(0x06D4,0x06D4), RANGE::create(0x0DF4,0x0DF4), -- Sinhala RANGE::create(0x0F3A,0x0F3D), -- Tibetan RANGE::create(0x104A,0x104B), -- Myanmar RANGE::create(0x10FB,0x10FB), -- Georgian RANGE::create(0x1361,0x1368), -- Ethiopic RANGE::create(0x166D,0x166E), -- Canadian Ab RANGE::create(0x169B,0x169C), -- Ogham RANGE::create(0x16EB,0x16ED), -- Runic RANGE::create(0x1800,0x180A), -- Mongolian RANGE::create(0x2000,0x2046), -- General RANGE::create(0x2048,0x204D), RANGE::create(0x206A,0x206F), RANGE::create(0x3000,0x3020), RANGE::create(0x208A,0x208E), RANGE::create(0xFE50,0xFE52), -- Chinese RANGE::create(0xFE54,0xFE66), RANGE::create(0xFE68,0xFE6B), RANGE::create(0xFF61,0xFF64) |, -- Currency | RANGE::create(0x0024,0x0024), -- Dollar sign RANGE::create(0x00A2,0x00A5), -- GBP,JPY, etc RANGE::create(0x09F2,0x09F3), -- Bengali RANGE::create(0x0E3F,0x0E3F), -- Thai baht RANGE::create(0x17DB,0x17DB), -- Khmer riel RANGE::create(0x20A0,0x20AF) |, -- Letter_Like | RANGE::create(0x2100,0x213A) |, -- Super- & Sub-scripts | RANGE::create(0x2070,0x2070), RANGE::create(0x2074,0x208E) |, -- Number_Forms | RANGE::create(0x2153,0x2183) |, -- Mathematical Operators | RANGE::create(0x2200,0x22F1) |, -- Arrows | RANGE::create(0x2190,0x21F3) |, -- Miscellaneous Technical | RANGE::create(0x2300,0x237B), RANGE::create(0x237D,0x239A) |, -- Control Code Pictures | RANGE::create(0x2400,0x2426) |, -- OCR Symbols | RANGE::create(0x2440,0x244A) |, -- Box Drawing | RANGE::create(0x2500,0x257F) |, -- Block Elements | RANGE::create(0x2580,0x2595) |, -- Geometric Shapes | RANGE::create(0x25A0,0x25F7) |, -- Miscellaneous | RANGE::create(0x2600,0x2613), RANGE::create(0x2619,0x2671) |, -- DingBats | RANGE::create(0x2701,0x2704), RANGE::create(0x2706,0x2709), RANGE::create(0x270C,0x2727), RANGE::create(0x2729,0x274B), RANGE::create(0x274D,0x274D), RANGE::create(0x274F,0x2752), RANGE::create(0x2756,0x2756), RANGE::create(0x2758,0x275E), RANGE::create(0x2761,0x2767), RANGE::create(0x2776,0x2794), RANGE::create(0x2798,0x27AF), RANGE::create(0x27B1,0x27BE) |, -- Enclosed Forms | RANGE::create(0x2460,0x24EA) |, -- Specials | RANGE::create(0xFFF9,0xFFFF) | | ; const Case_Pair : ARRAY{CASE_MAPLET} := | -- Armenian CASE_MAPLET::create(do_create(0x0531).code,0x30.int,19), -- Cyrillic CASE_MAPLET::create(do_create(0x0401).code,0x50.int,12), CASE_MAPLET::create(do_create(0x0410).code,0x20.int,32), CASE_MAPLET::create(do_create(0x040E).code,0x50.int,2), CASE_MAPLET::create(do_create(0x0460).code,1.int,17), CASE_MAPLET::create(do_create(0x0490).code,1.int,16), CASE_MAPLET::create(do_create(0x04C1).code,1.int,2), CASE_MAPLET::create(do_create(0x04C7).code,1.int,1), CASE_MAPLET::create(do_create(0x04CB).code,1.int,1), CASE_MAPLET::create(do_create(0x04D0).code,1.int,14), CASE_MAPLET::create(do_create(0x04EE).code,1.int,4), CASE_MAPLET::create(do_create(0x04F8).code,1.int,1), -- Georgian CASE_MAPLET::create(do_create(0x10A0).code,0x30.int,19), -- Greek CASE_MAPLET::create(do_create(0x0388).code,0x15.int,3), CASE_MAPLET::create(do_create(0x0391).code,0x20.int,17), CASE_MAPLET::create(do_create(0x03A3).code,0x20.int,9), CASE_MAPLET::create(do_create(0x1F08).code,-8,8), CASE_MAPLET::create(do_create(0x1F18).code,-8,6), CASE_MAPLET::create(do_create(0x1F28).code,-8,8), CASE_MAPLET::create(do_create(0x1F38).code,-8,8), CASE_MAPLET::create(do_create(0x1F48).code,-8,6), CASE_MAPLET::create(do_create(0x1F68).code,-8,8), CASE_MAPLET::create(do_create(0x0386).code,6.int,1), CASE_MAPLET::create(do_create(0x038C).code,0x40.int,1), CASE_MAPLET::create(do_create(0x038F).code,0x3F.int,1), CASE_MAPLET::create(do_create(0x03E2).code,1.int,7), CASE_MAPLET::create(do_create(0x1F59).code,-8,1), CASE_MAPLET::create(do_create(0x1F5B).code,-8,1), CASE_MAPLET::create(do_create(0x1F5D).code,-8,1), CASE_MAPLET::create(do_create(0x1F5F).code,-8,1), -- Latin CASE_MAPLET::create(do_create(0x0041).code,0x20.int,26), CASE_MAPLET::create(do_create(0x00C0).code,0x20.int,17), CASE_MAPLET::create(do_create(0x00D8).code,0x20.int,7), CASE_MAPLET::create(do_create(0x24B6).code,0x1A.int,26), CASE_MAPLET::create(do_create(0xFF21).code,0x20.int,26), CASE_MAPLET::create(do_create(0x0100).code,1.int,16), CASE_MAPLET::create(do_create(0x0132).code,1.int,3), CASE_MAPLET::create(do_create(0x0139).code,1.int,8), CASE_MAPLET::create(do_create(0x014A).code,1.int,26), CASE_MAPLET::create(do_create(0x0182).code,1.int,2), CASE_MAPLET::create(do_create(0x0187).code,1.int,1), CASE_MAPLET::create(do_create(0x018B).code,1.int,1), CASE_MAPLET::create(do_create(0x0191).code,1.int,1), CASE_MAPLET::create(do_create(0x0198).code,1.int,1), CASE_MAPLET::create(do_create(0x01A0).code,1.int,3), CASE_MAPLET::create(do_create(0x01A7).code,1.int,1), CASE_MAPLET::create(do_create(0x01AC).code,1.int,1), CASE_MAPLET::create(do_create(0x01AF).code,1.int,1), CASE_MAPLET::create(do_create(0x01B3).code,1.int,2), CASE_MAPLET::create(do_create(0x01B8).code,1.int,1), CASE_MAPLET::create(do_create(0x01BC).code,1.int,1), CASE_MAPLET::create(do_create(0x01C4).code,2.int,1), CASE_MAPLET::create(do_create(0x01C7).code,2.int,1), CASE_MAPLET::create(do_create(0x01CA).code,2.int,1), CASE_MAPLET::create(do_create(0x01CD).code,1.int,8), CASE_MAPLET::create(do_create(0x01DE).code,1.int,9), CASE_MAPLET::create(do_create(0x01F1).code,2.int,1), CASE_MAPLET::create(do_create(0x01F4).code,1.int,1), CASE_MAPLET::create(do_create(0x01FA).code,1.int,15), CASE_MAPLET::create(do_create(0x1E00).code,1.int,77), CASE_MAPLET::create(do_create(0x1EA0).code,1.int,45) | ; private do_card : CARD is -- This routine returns the integer version of self. builtin CARD_CARD end ; card : CARD -- pre ~void(self) post true is -- This routine returns the cardinal number corresponding to the -- bit-pattern of self. return do_card end ; nil : SAME is -- This routine returns the nil code value. return priv_nil end ; is_nil : BOOL is -- This predicate returns true if and only if self has the value nil. return is_eq(nil) end ; is_valid( code : CARD ) : BOOL is -- This predicate returns true if and only if code is a valid number -- for use as the encoding of this (Unicode, UCS4, UCS2) kind. if code >= Invalid_Val then return false end ; loop ranges : ARRAY{RANGE} := Code_Groups[ SCRIPTS::Arabic.card.upto!( SCRIPTS::Numerics.card) - 1] ; loop rng : RANGE := ranges.elt! ; if rng.contains(code) then return true end end end ; return false end ; private do_create( val : CARD ) : SAME is -- This routine merely makes use of a built-in to type 'cast' to -- UCS4. builtin CARD_QUAD end ; create( val : CARD ) : SAME pre true post (is_valid(val) and result = do_create(val)) or (result = nil) is -- This routine is used to create an encoding from a numeric value -- if such an encoding is valid, otherwise an invalid value is returned! -- This creation cannot take into account whether the encoding is in -- any sense other than as a bit-pattern correct. if is_valid(val) then return do_create(val) else return nil end end ; create( val : RUNE ) : SAME is -- This routine is used to create an encoding from a numeric value -- if such an encoding is valid, otherwise an invalid value is returned! -- This creation cannot take into account whether the encoding is in -- any sense other than as a bit-pattern correct. return create(val.code.card) end ; is_eq( other : SAME ) : BOOL is -- This predicate returns true if and only if self and other are the -- same code. return card = other.card end ; is_lt( other : SAME ) : BOOL is -- This predicate returns true if and only if self and other are the -- same code. return card < other.card end ; is_combining : BOOL is -- This predicate returns true if and only if self is a combining -- encoding. loop loc_rng : RANGE := Combining.elt! ; if loc_rng.contains(card) then return true end end ; return false end ; rune : RUNE is -- This routine is included for conformity between all repertoires -- which all provide a conversion operation -- in this case merely returning -- self provided that self is not a combining character encoding, when Invalid -- is returned! if is_combining then return RUNE::nil else return CHAR_CODE::create(card,LIBCHARS::default).rune end end ; code : CHAR_CODE is -- This routine returns the encoding as a raw code. loc_lib : LIBCHARS := LIBCHARS::default.dummy_lib(CODE_KINDS::Unicode) ; return CHAR_CODE::create(card,loc_lib) end ; is_letter( script : SCRIPTS ) : BOOL is -- This predicate returns true if and only if self is the encoding of -- a character deemed to be alphabetic in the given script. loop loc_rng : RANGE := Letters[script.card - 1].elt! ; if loc_rng.contains(card) then return true end end ; return false end ; is_letter : BOOL is -- This predicate returns true if and only if self is the encoding of -- a character deemed to be alphabetic irrespective of script. loop script : SCRIPTS := SCRIPTS::create(SCRIPTS::offset.upto!( SCRIPTS::cardinality + SCRIPTS::offset - 1)) ; if is_letter(script) then return true end end ; return false end ; private is_up_mapped( out map : CASE_MAPLET ) : BOOL is -- This private routine searches case maplets, returning the conversion -- maplet to lower case found if successful, otherwise void loop elem : CASE_MAPLET := Case_Pair.elt! ; if elem.in_range(code) then map := elem ; return true end end ; map := void ; return false end ; is_up_mapped : BOOL is -- This private routine searches case maplets, returning the conversion -- maplet to lower case found if successful, otherwise void dummy : CASE_MAPLET ; return is_up_mapped(out dummy) end ; is_lower : BOOL is -- This predicate returns true if and only if self is the encoding of -- a lower case letter in any script. if is_up_mapped then return true else -- no mapping to upper loop rng : RANGE := Lower_only.elt! ; if rng.contains(card) then return true end end ; return false end end ; to_lower : SAME pre is_down_mapped post true is -- This routine returns the lower-case encoding corresponding to self -- if self is an upper case letter and a mapping exists. map : CASE_MAPLET ; dummy : BOOL := is_down_mapped(out map) ; return create(map.map(code).card) end ; private is_down_mapped( out map : CASE_MAPLET ) : BOOL is -- This private routine searches case maplets, returning the conversion -- maplet to lower case found if successful, otherwise void loop elem : CASE_MAPLET := Case_Pair.elt! ; if elem.in_domain(code) then map := elem ; return true end end ; map := void ; return false end ; is_down_mapped : BOOL is -- This private routine searches case maplets, returning the conversion -- maplet to lower case found if successful, otherwise void dummy : CASE_MAPLET ; return is_down_mapped(out dummy) end ; is_upper : BOOL is -- This predicate returns true if and only if self is the encoding of an -- upper case letter in any script. if is_down_mapped then return true else -- no mapping to lower loop rng : RANGE := Upper_only.elt! ; if rng.contains(card) then return true end end ; return false end end ; to_upper : SAME pre is_up_mapped post true is -- This routine returns the lower-case encoding corresponding to self -- if self is a lower case letter, otherwise self. map : CASE_MAPLET ; dummy : BOOL := is_up_mapped(out map) ; return create(map.reverse_map(code).card) end ; is_octal_digit( script : SCRIPTS ) : BOOL is -- This predicate returns true if and only if self is an encoding -- representing an octal digit in the given script. loop rng : RANGE := Decimal[script.card - 1].elt! ; if ~void(rng) then if rng.contains(card) and ((rng.high - card) >= 2) then return true end end end ; return false end ; is_octal_digit : BOOL is -- This predicate returns true if and only if self is an encoding -- representing an octal digit in any script. loop script : SCRIPTS := SCRIPTS::create(SCRIPTS::offset.upto!( SCRIPTS::cardinality + SCRIPTS::offset - 1)) ; if is_octal_digit(script) then return true end end ; return false end ; private octal_value( script : SCRIPTS ) : CARD is -- This routine returns the numeric value of the octal digit encoded -- by self. loc_val : CARD := card ; loop rng : RANGE := Decimal[script.card - 1].elt! ; if ~(rng.is_empty) then if rng.contains(loc_val) and ((rng.high - loc_val) >= 2) then return loc_val - rng.low end end end end ; octal_value : CARD pre is_octal_digit post (result < OCTET::Octet_Bits) is -- This routine returns the numeric value of the octal digit encoded -- by self. loop index : SCRIPTS := SCRIPTS::create(SCRIPTS::offset.upto!( SCRIPTS::cardinality + SCRIPTS::offset - 1)) ; if is_octal_digit(index) then return octal_value(index) end end ; return CARD::nil -- to keep compiler happy! end ; is_numeric( script : SCRIPTS ) : BOOL is -- This predicate returns true if and only if self is an encoding -- representing a numeric value -- ie not necessarily a digit for -- calculation purposes -- in the given script. if script.is_nil then return false end ; loop rng : RANGE := Numeric[script.card - 1].elt! ; if ~rng.is_empty then if rng.contains(card) then return true end end end ; return false end ; is_numeric : BOOL is -- This predicate returns true if and only if self is an encoding -- representing a numeric value -- ie not necessarily a digit for -- calculation purposes -- in any script. loop script : SCRIPTS := SCRIPTS::create(SCRIPTS::offset.upto!( SCRIPTS::cardinality + SCRIPTS::offset - 1)) ; if is_numeric(script) then return true end end ; return false end ; is_digit( script : SCRIPTS ) : BOOL is -- This predicate returns true if and only if self is an encoding -- representing a digit for the purposes of calculation in the given script. if script.is_nil then return false end ; loop rng : RANGE := Decimal[script.card - 1].elt! ; if ~rng.is_empty then if rng.contains(card) then return true end end end ; return false end ; is_digit : BOOL is -- This predicate returns true if and only if self is an encoding -- representing a digit for the purposes of calculation, etc irrespective of -- script form. loop script : SCRIPTS := SCRIPTS::create(SCRIPTS::offset.upto!( SCRIPTS::cardinality + SCRIPTS::offset - 1)) ; if is_digit(script) then return true end end ; return false end ; private digit_value( script : SCRIPTS ) : CARD is -- This routine returns the numeric value of the octal digit encoded -- by self. loc_val : CARD := card ; loop rng : RANGE := Decimal[script.card - 1].elt! ; if ~(rng.is_empty) then if rng.contains(loc_val) then return loc_val - rng.low end end end end ; digit_value : CARD pre is_digit post (result < 10) is -- This routine returns the value corresponding to the encoding of self -- as a decimal digit, otherwise CARD::nil. -- This routine returns the numeric value of the octal digit encoded -- by self. loop index : SCRIPTS := SCRIPTS::create(SCRIPTS::offset.upto!( SCRIPTS::cardinality + SCRIPTS::offset - 1)) ; if is_digit(index) then return octal_value(index) end end ; return CARD::nil -- to keep compiler happy! end ; is_hex_digit : BOOL is -- This predicate returns true if and only if self is the encoding for -- a hexadecimal digit. Note that this is only possible in Latin script! case self when DIGIT_ZERO, DIGIT_ONE, DIGIT_TWO, DIGIT_THREE, DIGIT_FOUR, DIGIT_FIVE, DIGIT_SIX, DIGIT_SEVEN, DIGIT_EIGHT, DIGIT_NINE, LATIN_CAPITAL_LETTER_A, LATIN_SMALL_LETTER_A, LATIN_CAPITAL_LETTER_B, LATIN_SMALL_LETTER_B, LATIN_CAPITAL_LETTER_C, LATIN_SMALL_LETTER_C, LATIN_CAPITAL_LETTER_D, LATIN_SMALL_LETTER_D, LATIN_CAPITAL_LETTER_E, LATIN_SMALL_LETTER_E, LATIN_CAPITAL_LETTER_F, LATIN_SMALL_LETTER_F then return true else return false end end ; hex_digit_value : CARD pre is_hex_digit post (result < 16) is -- This routine returns the numeric value equivalent to the character -- digit encoded by self. case self when DIGIT_ZERO then return 0 when DIGIT_ONE then return 1 when DIGIT_TWO then return 2 when DIGIT_THREE then return 3 when DIGIT_FOUR then return 4 when DIGIT_FIVE then return 5 when DIGIT_SIX then return 6 when DIGIT_SEVEN then return 7 when DIGIT_EIGHT then return 8 when DIGIT_NINE then return 9 when LATIN_CAPITAL_LETTER_A, LATIN_SMALL_LETTER_A then return 10 when LATIN_CAPITAL_LETTER_B, LATIN_SMALL_LETTER_B then return 11 when LATIN_CAPITAL_LETTER_C, LATIN_SMALL_LETTER_C then return 12 when LATIN_CAPITAL_LETTER_D, LATIN_SMALL_LETTER_D then return 13 when LATIN_CAPITAL_LETTER_E, LATIN_SMALL_LETTER_E then return 14 when LATIN_CAPITAL_LETTER_F, LATIN_SMALL_LETTER_F then return 15 end end ; is_spacing : BOOL is -- This predicate returns true if and only if self is the encoding for -- an invisible mark which occupies space on a presentation medium. -- -- NOTE Control function encodings which provide 'spacing' do not form part -- of the ISO/IEC 10646-1 repertoire. spacing : ARRAY{RANGE} := Symbolics[SYMBOLS::Spacing.card - 1] ; loop index : CARD := 0.upto!(spacing.size - 1) ; rng : RANGE := spacing[index] ; if rng.contains(card) then return true end end ; return false end ; is_whitespace : BOOL is -- This predicate returns true if and only if self is the encoding for -- an invisible mark which occupies space on the presentation medium. return is_spacing or CONTROL_CODES::create(self.card).is_space end ; is_print : BOOL is -- This predicate returns true if and only if self is the encoding for -- a visible mark. return ~is_spacing end ; is_punct : BOOL is -- This predicate returns true if and only if self is an encoding for -- a punctuation symbol. punct : ARRAY{RANGE} := Symbolics[SYMBOLS::Punctuation.card - 1] ; loop index : CARD := 0.upto!(punct.size - 1) ; rng : RANGE := punct[index] ; if rng.contains(card) then return true end end ; return false end ; is_control : BOOL is -- This predicate returns false identically, since control codes are not -- part of this encoding. return false end ; is_646char : BOOL is -- This predicate returns true if and only if the value of self falls -- within the range of codes defined by ISO/IEC 646, otherwise false. return Basic_Latin.contains(card) end ; end ; -- UNICODE