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. #OUT+"unicode1\n"; --REP_LIB_LIST::inspect; assert REP_LIB_LIST::check; #OUT+"unicode2\n"; loc_lib : LIBCHARS := LIBCHARS::default.dummy_lib(CODE_KINDS::Unicode) ; -- #OUT+"unicode3\n"; REP_LIB_LIST::inspect; assert REP_LIB_LIST::check; #OUT+"unicode4\n"; 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