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