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