From bbf6d6b2b9842af380959a5782ec8c7db130a374 Mon Sep 17 00:00:00 2001 From: Claude Fable 5 Date: Sun, 19 Jul 2026 14:07:44 -0500 Subject: [PATCH] Expand to twelve single-byte encodings via codegen; match msdos-encodings API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rework the crate on the msdos-encodings design: vendored Unicode Consortium VENDORS/APPLE mapping files in data/apple/, a tools/gen_tables.py generator (PEP 723 / uv run / rustfmt) emitting full [Option; 256] tables, and a fallible decode / decode_lossy / encode API with non_exhaustive thiserror errors. Encodings: Roman, Greek, Cyrillic, Central European Roman, Turkish, Croatian, Icelandic, Romanian, Celtic, Gaelic, Ukrainian (pre-9.0 Cyrillic variant), Inuit. The eight encodings Apple revised for the Euro carry a Revision payload (Classic = pre-8.5/9.0/9.2.2), generated from per-encoding deltas with invariant checks that fail regeneration if the vendored data drifts. Apple-specific API points beyond the msdos shape: from_text_encoding (kTextEncodingMac… base values, the HFS+ hint), from_script_code plus from_fd_script (bit-7 validity flag on the raw Finder Info byte), and decode_pstr for length-prefixed Str27/Str31 name fields with a TruncatedPascalString error for corrupt lengths. Co-Authored-By: Claude Fable 5 --- .gitignore | 3 + README.md | 84 +- data/apple/CELTIC.TXT | 328 +++ data/apple/CENTEURO.TXT | 327 +++ data/apple/CROATIAN.TXT | 351 +++ data/apple/CYRILLIC.TXT | 352 +++ data/apple/GAELIC.TXT | 337 +++ data/apple/GREEK.TXT | 355 +++ data/apple/ICELAND.TXT | 369 +++ data/apple/INUIT.TXT | 322 +++ data/apple/ROMAN.TXT | 370 +++ data/apple/ROMANIAN.TXT | 365 +++ data/apple/TURKISH.TXT | 341 +++ data/apple/UKRAINE.TXT | 106 + src/lib.rs | 842 ++++++- src/mac_roman.rs | 60 - src/tables/mac.rs | 5205 +++++++++++++++++++++++++++++++++++++++ src/tables/mod.rs | 5 + tools/gen_tables.py | 276 +++ 19 files changed, 10193 insertions(+), 205 deletions(-) create mode 100644 data/apple/CELTIC.TXT create mode 100644 data/apple/CENTEURO.TXT create mode 100644 data/apple/CROATIAN.TXT create mode 100644 data/apple/CYRILLIC.TXT create mode 100644 data/apple/GAELIC.TXT create mode 100644 data/apple/GREEK.TXT create mode 100644 data/apple/ICELAND.TXT create mode 100644 data/apple/INUIT.TXT create mode 100644 data/apple/ROMAN.TXT create mode 100644 data/apple/ROMANIAN.TXT create mode 100644 data/apple/TURKISH.TXT create mode 100644 data/apple/UKRAINE.TXT delete mode 100644 src/mac_roman.rs create mode 100644 src/tables/mac.rs create mode 100644 src/tables/mod.rs create mode 100644 tools/gen_tables.py diff --git a/.gitignore b/.gitignore index 96ef6c0..091fd85 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /target Cargo.lock +__pycache__/ +.mypy_cache/ +.ruff_cache/ diff --git a/README.md b/README.md index f05463f..462f0c7 100644 --- a/README.md +++ b/README.md @@ -4,28 +4,84 @@ Bidirectional, emulator-grade conversion between classic Mac OS text encodings and Unicode — without linking ICU. The crate owns the canonical Apple tables, so it stays small, self-contained, and cross-compiles cleanly. -```rust -use apple_encodings::{AppleEncoding, MacRomanRevision}; +These are strictly **Apple's** mappings as published by the Unicode Consortium +(`VENDORS/APPLE/`), vendored in `data/apple/`. -let enc = AppleEncoding::default(); // Mac OS Roman, post-8.5 -assert_eq!(enc.decode(b"Caf\x8e"), "Café"); +```rust +use apple_encodings::{AppleEncoding, Revision}; + +let enc = AppleEncoding::default(); // Mac OS Roman, modern revision +assert_eq!(enc.decode(b"Caf\x8e").unwrap(), "Café"); assert_eq!(enc.encode("Café").unwrap(), b"Caf\x8e"); -// Pick by the Finder Info `fdScript` byte: -let enc = AppleEncoding::from_script_code(apple_encodings::SCRIPT_ROMAN).unwrap(); +// Pick by the HFS+ `textEncoding` hint (kTextEncodingMac… base values): +let enc = AppleEncoding::from_text_encoding(7).unwrap(); +assert_eq!(enc.decode(&[0x80]).unwrap(), "А"); // Mac OS Cyrillic -// Revision matters for exactly one byte (0xDB): -let classic = AppleEncoding::MacRoman(MacRomanRevision::Classic); -assert_eq!(classic.decode(&[0xDB]), "¤"); // pre-8.5 currency sign, not € +// Or by the raw HFS Finder Info `fdScript` byte (bit 7 flags validity; +// a Cyrillic system writes 0x87). Script system, not table — the Roman +// regional variants all report script 0: +let enc = AppleEncoding::from_fd_script(0x87).unwrap(); +assert_eq!(enc.name(), "Mac OS Cyrillic"); + +// Classic Mac name fields are Pascal strings (Str27/Str31): +let name = enc.decode_pstr(b"\x08\x84\xEE\xEA\xF3\xEC\xE5\xED\xF2").unwrap(); +assert_eq!(name, "Документ"); + +// The Euro rollout revised several tables, at different bytes per encoding; +// pick the pre-Euro table for older-system fidelity: +let classic = AppleEncoding::MacRoman(Revision::Classic); +assert_eq!(classic.decode(&[0xDB]).unwrap(), "¤"); // pre-8.5, not € + +// Decode is fallible for API uniformity (Greek pre-9.2.2 leaves 0xFF +// undefined), or go lossy: +let greek = AppleEncoding::MacGreek(Revision::Classic); +assert!(greek.decode(&[0xFF]).is_err()); +assert_eq!(greek.decode_lossy(&[0xFF]), "\u{FFFD}"); ``` ## Status -- **Mac OS Roman** — implemented, both pre- and post-8.5 revisions, decode + encode. -- **Regional single-byte** (Cyrillic, Greek, Turkish, …) and **CJK double-byte** - (Japanese, Big5, GB, Korean) — planned, to be codegen'd from the Unicode - Consortium `VENDORS/APPLE/*.TXT` tables. The double-byte tables will be - feature-gated. +- **Twelve single-byte encodings** — implemented, decode + encode: Roman, + Greek, Cyrillic, Central European Roman, Turkish, Croatian, Icelandic, + Romanian, Celtic, Gaelic, Ukrainian (the pre-9.0 Cyrillic variant), and + Inuit. +- **Pre-Euro revisions** — implemented for the eight encodings Apple revised: + Roman/Croatian/Icelandic/Romanian/Celtic/Gaelic (`0xDB`, Mac OS 8.5), + Cyrillic (`0xA2`/`0xB6`/`0xFF`, Mac OS 9.0), Greek (`0x9C`/`0xFF`, + Mac OS 9.2.2). +- **CJK double-byte** (Japanese, Chinese, Korean) and the + **bidirectional/complex scripts** (Arabic, Hebrew, Thai, Indic — which need + multi-scalar decode) — planned, behind the same API; the double-byte tables + will be feature-gated. + +## Fidelity notes + +- Every table is a verified bijection: anything an encoding decodes re-encodes + to the identical bytes. +- Every table is total except Mac OS Greek at `Revision::Classic`, whose + `0xFF` was undefined before Mac OS 9.2.2 — so `decode` returns a `Result` + and `decode_lossy` substitutes U+FFFD, matching the `msdos-encodings` + sister crate. +- Apple's corporate Private Use Area mappings are preserved, not normalized: + the Apple logo (`0xF0` → `U+F8FF` in Roman) and Mac OS Turkish's explicit + "undefined character" slot (`0xF5` → `U+F8A0`) round-trip exactly. +- The pre-Euro revision tables are generated from per-encoding deltas taken + from each mapping file's own change history, with invariant checks that + fail regeneration loudly if the vendored data ever disagrees — the Euro + landed at different bytes per encoding, so nothing is hand-placed. +- Mac OS Ukrainian is derived from `CYRILLIC.TXT` plus its documented delta + (`UKRAINE.TXT` upstream is a notes-only stub: Mac OS 9.0 retired the + separate Ukrainian character set). + +## Regenerating tables + +Everything in `src/tables/` except `mod.rs` is generated from the vendored +mapping files in `data/apple/` (needs Python ≥ 3.10 and `rustfmt` on `PATH`): + +```sh +uv run tools/gen_tables.py +``` ## Scope diff --git a/data/apple/CELTIC.TXT b/data/apple/CELTIC.TXT new file mode 100644 index 0000000..5a90e06 --- /dev/null +++ b/data/apple/CELTIC.TXT @@ -0,0 +1,328 @@ +#======================================================================= +# File name: CELTIC.TXT +# +# Contents: Map (external version) from Mac OS Celtic +# character set to Unicode 2.1 and later +# +# Contacts: charsets@apple.com, everson@evertype.com +# +# Changes: +# +# c01 2005-Apr-01 First posted version. Matches internal xml +# and Text Encoding Converter 2.0. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Celtic code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Celtic code order. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Celtic character set uses the standard control characters +# at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Celtic (partly from Michael Everson): +# ----------------------------------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# This character set was developed by Michael Everson of Everson +# Typography (everson@evertype.com) and was used for the Irish +# localizations of Mac OS 6.0.8 and 7.1, for the Welsh localization of +# Mac OS 7.1, and for several fonts that can be used on any version of +# Mac OS 7.1 or later. Note that while Apple authorized +# the Irish and Welsh localizations mentioned above, they were not +# systems which shipped with Apple hardware, and were not otherwise +# supported by Apple. Fonts conforming to the Mac OS Celtic character +# set are available from Everson Typography (http://www.evertype.com) +# and MEU Cymru (http://www.meucymru.co.uk). Information about the use +# of this character set is available at +# http://www.evertype.com/celtscript/celtcode.html. +# +# The Mac OS Celtic encoding shares the script code smRoman (0) with +# the standard Mac OS Roman encoding. To determine if the Celtic +# encoding is being used in Mac OS 7-9, you should also check if the +# system region code is 50, verIreland, or 79, verWales. Otherwise, +# you can check for particular fonts that conform to this encoding. +# +# This character set is a variant of standard Mac OS Roman, adding +# capital and small y with acute, grave, and circumflex, and capital +# and small w with acute, grave, circumflex and diaeresis. It has 14 +# code point differences from standard Mac OS Roman (0xDE, 0xDF, 0xE2, +# 0xE3, 0xF6-0xFF). +# +# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was +# mapped to U+00A4. In Mac OS 8.5 and later versions, code point +# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard +# Apple fonts were updated for Mac OS 8.5 to reflect this. There is +# a "currency sign" variant of the Mac OS Celtic encoding that still +# maps 0xDB to U+00A4; this can be used for older fonts. +# Note: U+20AC is new with Unicode 2.1; for earlier Unicode +# versions, Mac OS Celtic 0xDB may be mapped to private-use +# character U+F8A0. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x00C6 # LATIN CAPITAL LETTER AE +0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x00A5 # YEN SIGN +0xB5 0x00B5 # MICRO SIGN +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x220F # N-ARY PRODUCT +0xB9 0x03C0 # GREEK SMALL LETTER PI +0xBA 0x222B # INTEGRAL +0xBB 0x00AA # FEMININE ORDINAL INDICATOR +0xBC 0x00BA # MASCULINE ORDINAL INDICATOR +0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xBE 0x00E6 # LATIN SMALL LETTER AE +0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xC0 0x00BF # INVERTED QUESTION MARK +0xC1 0x00A1 # INVERTED EXCLAMATION MARK +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS +0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xDA 0x2044 # FRACTION SLASH +0xDB 0x20AC # EURO SIGN # before Mac OS 8.5 this was U+00A4 CURRENCY SIGN +0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0xDF 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0xE0 0x2021 # DOUBLE DAGGER +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE +0xE3 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE +0xE4 0x2030 # PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0x2663 # BLACK CLUB SUIT = shamrock # future mapping U+2618 SHAMROCK +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I +0xF6 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xF7 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xF8 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0xF9 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX +0xFA 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS +0xFB 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS +0xFC 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE +0xFD 0x1E81 # LATIN SMALL LETTER W WITH GRAVE +0xFE 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE +0xFF 0x1E83 # LATIN SMALL LETTER W WITH ACUTE diff --git a/data/apple/CENTEURO.TXT b/data/apple/CENTEURO.TXT new file mode 100644 index 0000000..541e559 --- /dev/null +++ b/data/apple/CENTEURO.TXT @@ -0,0 +1,327 @@ +#======================================================================= +# File name: CENTEURO.TXT +# +# Contents: Map (external version) from Mac OS Central European +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-04 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update URLs. Matches internal utom. +# b02 1999-Sep-22 Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n05 1998-Feb-05 Update header comments to new format; no +# mapping changes. Matches internal utom, +# ufrm, and Text Encoding Converter +# version 1.3. +# n03 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Central European code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Central European code order. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Central European character set uses the standard control +# characters at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Central European: +# --------------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported directly in programming +# interfaces for QuickDraw Text, the Script Manager, and related +# Text Utilities. For other purposes it is supported via transcoding +# to and from Unicode. +# +# This character set is intended to cover the following languages: +# +# Polish, Czech, Slovak, Hungarian, Estonian, Latvian, Lithuanian +# +# These are written in Latin script, but using a different set of +# of accented characters than Mac OS Roman. The Mac OS Central +# European character set also includes a number of characters +# needed for the Mac OS user interface and localization (e.g. +# ellipsis, bullet, copyright sign), several typographic +# punctuation symbols, math symbols, etc. However, it has a +# smaller set of punctuation and symbols than Mac OS Roman. All of +# the characters in Mac OS Central European that are also in the +# Mac OS Roman character set are at the same code point in both +# character sets; this improves application compatibility. +# +# Note: This does not have the same letter repertoire as ISO +# 8859-2 (Latin-2); each has some accented letters that the other +# does not have. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x0100 # LATIN CAPITAL LETTER A WITH MACRON +0x82 0x0101 # LATIN SMALL LETTER A WITH MACRON +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0x89 0x010C # LATIN CAPITAL LETTER C WITH CARON +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x010D # LATIN SMALL LETTER C WITH CARON +0x8C 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0x8D 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE +0x90 0x017A # LATIN SMALL LETTER Z WITH ACUTE +0x91 0x010E # LATIN CAPITAL LETTER D WITH CARON +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x010F # LATIN SMALL LETTER D WITH CARON +0x94 0x0112 # LATIN CAPITAL LETTER E WITH MACRON +0x95 0x0113 # LATIN SMALL LETTER E WITH MACRON +0x96 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x011A # LATIN CAPITAL LETTER E WITH CARON +0x9E 0x011B # LATIN SMALL LETTER E WITH CARON +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x0123 # LATIN SMALL LETTER G WITH CEDILLA +0xAF 0x012E # LATIN CAPITAL LETTER I WITH OGONEK +0xB0 0x012F # LATIN SMALL LETTER I WITH OGONEK +0xB1 0x012A # LATIN CAPITAL LETTER I WITH MACRON +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON +0xB5 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x0142 # LATIN SMALL LETTER L WITH STROKE +0xB9 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA +0xBA 0x013C # LATIN SMALL LETTER L WITH CEDILLA +0xBB 0x013D # LATIN CAPITAL LETTER L WITH CARON +0xBC 0x013E # LATIN SMALL LETTER L WITH CARON +0xBD 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE +0xBE 0x013A # LATIN SMALL LETTER L WITH ACUTE +0xBF 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xC0 0x0146 # LATIN SMALL LETTER N WITH CEDILLA +0xC1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0144 # LATIN SMALL LETTER N WITH ACUTE +0xC5 0x0147 # LATIN CAPITAL LETTER N WITH CARON +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x0148 # LATIN SMALL LETTER N WITH CARON +0xCC 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0xCF 0x014C # LATIN CAPITAL LETTER O WITH MACRON +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0x014D # LATIN SMALL LETTER O WITH MACRON +0xD9 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE +0xDA 0x0155 # LATIN SMALL LETTER R WITH ACUTE +0xDB 0x0158 # LATIN CAPITAL LETTER R WITH CARON +0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0xDE 0x0159 # LATIN SMALL LETTER R WITH CARON +0xDF 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA +0xE0 0x0157 # LATIN SMALL LETTER R WITH CEDILLA +0xE1 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK +0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xE4 0x0161 # LATIN SMALL LETTER S WITH CARON +0xE5 0x015A # LATIN CAPITAL LETTER S WITH ACUTE +0xE6 0x015B # LATIN SMALL LETTER S WITH ACUTE +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x0164 # LATIN CAPITAL LETTER T WITH CARON +0xE9 0x0165 # LATIN SMALL LETTER T WITH CARON +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xEC 0x017E # LATIN SMALL LETTER Z WITH CARON +0xED 0x016A # LATIN CAPITAL LETTER U WITH MACRON +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0x016B # LATIN SMALL LETTER U WITH MACRON +0xF1 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x016F # LATIN SMALL LETTER U WITH RING ABOVE +0xF4 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0xF5 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0xF6 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK +0xF7 0x0173 # LATIN SMALL LETTER U WITH OGONEK +0xF8 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xF9 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFA 0x0137 # LATIN SMALL LETTER K WITH CEDILLA +0xFB 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xFC 0x0141 # LATIN CAPITAL LETTER L WITH STROKE +0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xFE 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xFF 0x02C7 # CARON diff --git a/data/apple/CROATIAN.TXT b/data/apple/CROATIAN.TXT new file mode 100644 index 0000000..c33a601 --- /dev/null +++ b/data/apple/CROATIAN.TXT @@ -0,0 +1,351 @@ +#======================================================================= +# File name: CROATIAN.TXT +# +# Contents: Map (external version) from Mac OS Croatian +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-04 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal +# utom. +# b02 1999-Sep-22 Encoding changed for Mac OS 8.5; change +# mapping of 0xDB from CURRENCY SIGN to EURO +# SIGN. Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n07 1998-Feb-05 Minor update to header comments +# n05 1997-Dec-14 Update to match internal utom<5>, ufrm<16>: +# Change standard mapping for 0xBD from U+2126 +# to its canonical decomposition, U+03A9. +# n03 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm<6>. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Croatian code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Croatian code order. +# +# One of these mappings requires the use of a corporate character. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Croatian character set uses the standard control characters +# at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Croatian: +# ------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# Mac OS Croatian is used for Croatian and Slovene. +# +# The Mac OS Croatian encoding shares the script code smRoman +# (0) with the standard Mac OS Roman encoding. To determine if +# the Croatian encoding is being used, you must check if the +# system region code is 68, verCroatia (or 25, verYugoCroatian, +# only used in older systems). +# +# This character set is a variant of standard Mac OS Roman +# encoding, adding five accented letter case pairs to handle +# Croatian. It has 20 code point differences from standard +# Mac OS Roman, but only 10 differences in repertoire. +# +# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was +# mapped to U+00A4. In Mac OS 8.5 and later versions, code point +# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard +# Apple fonts are updated for Mac OS 8.5 to reflect this. There is +# a "currency sign" variant of the Mac OS Croatian encoding that +# still maps 0xDB to U+00A4; this can be used for older fonts. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# The following corporate zone Unicode character is used in this +# mapping: +# +# 0xF8FF Apple logo +# +# NOTE: The graphic image associated with the Apple logo character +# is not authorized for use without permission of Apple, and +# unauthorized use might constitute trademark infringement. +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version n07 to version b02: +# +# - Encoding changed for Mac OS 8.5; change mapping of 0xDB from +# CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). +# +# Changes from version n03 to version n05: +# +# - Change mapping of 0xBD from U+2126 to its canonical +# decomposition, U+03A9. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x2206 # INCREMENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x220F # N-ARY PRODUCT +0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON +0xBA 0x222B # INTEGRAL +0xBB 0x00AA # FEMININE ORDINAL INDICATOR +0xBC 0x00BA # MASCULINE ORDINAL INDICATOR +0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON +0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xC0 0x00BF # INVERTED QUESTION MARK +0xC1 0x00A1 # INVERTED EXCLAMATION MARK +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0xF8FF # Apple logo +0xD9 0x00A9 # COPYRIGHT SIGN +0xDA 0x2044 # FRACTION SLASH +0xDB 0x20AC # EURO SIGN +0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0xDE 0x00C6 # LATIN CAPITAL LETTER AE +0xDF 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xE0 0x2013 # EN DASH +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK +0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xE4 0x2030 # PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I +0xF6 0x02C6 # MODIFIER LETTER CIRCUMFLEX ACCENT +0xF7 0x02DC # SMALL TILDE +0xF8 0x00AF # MACRON +0xF9 0x03C0 # GREEK SMALL LETTER PI +0xFA 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xFB 0x02DA # RING ABOVE +0xFC 0x00B8 # CEDILLA +0xFD 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xFE 0x00E6 # LATIN SMALL LETTER AE +0xFF 0x02C7 # CARON diff --git a/data/apple/CYRILLIC.TXT b/data/apple/CYRILLIC.TXT new file mode 100644 index 0000000..d569c2c --- /dev/null +++ b/data/apple/CYRILLIC.TXT @@ -0,0 +1,352 @@ +#======================================================================= +# File name: CYRILLIC.TXT +# +# Contents: Map (external version) from Mac OS Cyrillic +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c03 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal +# utom. +# b02 1999-Sep-22 Encoding changed for Mac OS 9.0 to merge +# with Mac OS Ukrainian and support EURO SIGN; +# Change mappings for 0xA2, 0xB6, and 0xFF. +# Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n05 1998-Feb-05 Update header comments to new format; no +# mapping changes. Matches internal utom, +# ufrm, and Text Encoding Converter +# version 1.3. +# n03 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Cyrillic code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Cyrillic code order. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Cyrillic character set uses the standard control characters +# at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Cyrillic: +# ------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported directly in programming +# interfaces for QuickDraw Text, the Script Manager, and related +# Text Utilities. For other purposes it is supported via transcoding +# to and from Unicode. +# +# This is the "Euro sign" version of Mac Cyrillic for Mac OS 9.0 and +# later. Before Mac OS 9.0, there were two separate Slavic Cyrillic +# encodings: +# +# 1. The Cyrillic currency sign variant (used for localized Russian +# and Bulgarian systems), which had the following: +# 0xA2 U+00A2 CENT SIGN +# 0xB6 U+2202 PARTIAL DIFFERENTIAL +# 0xFF U+00A4 CURRENCY SIGN +# +# 2. The Ukrainian currency sign variant (used for localized Ukrainian +# systems and the pre-9.0 Cyrillic Language Kit), which had the +# following: +# 0xA2 U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN +# 0xB6 U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN +# 0xFF U+00A4 CURRENCY SIGN +# +# This new Cyrillic Euro sign version is based on the old Ukrainian +# currency sign variant, with 0xFF changed to be EURO SIGN. +# +# The Mac OS Cyrillic encoding includes the Cyrillic letter repertoire +# of ISO 8859-5 (although not at the same code points). This covers +# most of the Slavic languages written in Cyrillic script. +# +# The Mac OS Cyrillic encoding also includes a number of characters +# needed for the Mac OS user interface and localization (e.g. +# ellipsis, bullet, copyright sign). All of the characters in Mac OS +# Cyrillic that are also in the Mac OS Roman encoding are at the +# same code point in both; this improves application compatibility. +# +# Note: There is a common Ukrainian glyph variation in which the glyph +# for CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I may or may not +# have a dot above. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version n05 to version b02: +# +# - Encoding changed for Mac OS 9.0 to merge with Mac OS Ukrainian and +# support EURO SIGN. 0xA2 changed from U+00A2 to U+0490; 0xB6 changed +# from U+2202 to U+0491; 0xFF changed from U+00A4 to U+20AC. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x0410 # CYRILLIC CAPITAL LETTER A +0x81 0x0411 # CYRILLIC CAPITAL LETTER BE +0x82 0x0412 # CYRILLIC CAPITAL LETTER VE +0x83 0x0413 # CYRILLIC CAPITAL LETTER GHE +0x84 0x0414 # CYRILLIC CAPITAL LETTER DE +0x85 0x0415 # CYRILLIC CAPITAL LETTER IE +0x86 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0x87 0x0417 # CYRILLIC CAPITAL LETTER ZE +0x88 0x0418 # CYRILLIC CAPITAL LETTER I +0x89 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0x8A 0x041A # CYRILLIC CAPITAL LETTER KA +0x8B 0x041B # CYRILLIC CAPITAL LETTER EL +0x8C 0x041C # CYRILLIC CAPITAL LETTER EM +0x8D 0x041D # CYRILLIC CAPITAL LETTER EN +0x8E 0x041E # CYRILLIC CAPITAL LETTER O +0x8F 0x041F # CYRILLIC CAPITAL LETTER PE +0x90 0x0420 # CYRILLIC CAPITAL LETTER ER +0x91 0x0421 # CYRILLIC CAPITAL LETTER ES +0x92 0x0422 # CYRILLIC CAPITAL LETTER TE +0x93 0x0423 # CYRILLIC CAPITAL LETTER U +0x94 0x0424 # CYRILLIC CAPITAL LETTER EF +0x95 0x0425 # CYRILLIC CAPITAL LETTER HA +0x96 0x0426 # CYRILLIC CAPITAL LETTER TSE +0x97 0x0427 # CYRILLIC CAPITAL LETTER CHE +0x98 0x0428 # CYRILLIC CAPITAL LETTER SHA +0x99 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0x9A 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0x9B 0x042B # CYRILLIC CAPITAL LETTER YERU +0x9C 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0x9D 0x042D # CYRILLIC CAPITAL LETTER E +0x9E 0x042E # CYRILLIC CAPITAL LETTER YU +0x9F 0x042F # CYRILLIC CAPITAL LETTER YA +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x0490 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x0402 # CYRILLIC CAPITAL LETTER DJE +0xAC 0x0452 # CYRILLIC SMALL LETTER DJE +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x0403 # CYRILLIC CAPITAL LETTER GJE +0xAF 0x0453 # CYRILLIC SMALL LETTER GJE +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xB5 0x00B5 # MICRO SIGN +0xB6 0x0491 # CYRILLIC SMALL LETTER GHE WITH UPTURN +0xB7 0x0408 # CYRILLIC CAPITAL LETTER JE +0xB8 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xB9 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE +0xBA 0x0407 # CYRILLIC CAPITAL LETTER YI +0xBB 0x0457 # CYRILLIC SMALL LETTER YI +0xBC 0x0409 # CYRILLIC CAPITAL LETTER LJE +0xBD 0x0459 # CYRILLIC SMALL LETTER LJE +0xBE 0x040A # CYRILLIC CAPITAL LETTER NJE +0xBF 0x045A # CYRILLIC SMALL LETTER NJE +0xC0 0x0458 # CYRILLIC SMALL LETTER JE +0xC1 0x0405 # CYRILLIC CAPITAL LETTER DZE +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x040B # CYRILLIC CAPITAL LETTER TSHE +0xCC 0x045B # CYRILLIC SMALL LETTER TSHE +0xCD 0x040C # CYRILLIC CAPITAL LETTER KJE +0xCE 0x045C # CYRILLIC SMALL LETTER KJE +0xCF 0x0455 # CYRILLIC SMALL LETTER DZE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xD8 0x040E # CYRILLIC CAPITAL LETTER SHORT U +0xD9 0x045E # CYRILLIC SMALL LETTER SHORT U +0xDA 0x040F # CYRILLIC CAPITAL LETTER DZHE +0xDB 0x045F # CYRILLIC SMALL LETTER DZHE +0xDC 0x2116 # NUMERO SIGN +0xDD 0x0401 # CYRILLIC CAPITAL LETTER IO +0xDE 0x0451 # CYRILLIC SMALL LETTER IO +0xDF 0x044F # CYRILLIC SMALL LETTER YA +0xE0 0x0430 # CYRILLIC SMALL LETTER A +0xE1 0x0431 # CYRILLIC SMALL LETTER BE +0xE2 0x0432 # CYRILLIC SMALL LETTER VE +0xE3 0x0433 # CYRILLIC SMALL LETTER GHE +0xE4 0x0434 # CYRILLIC SMALL LETTER DE +0xE5 0x0435 # CYRILLIC SMALL LETTER IE +0xE6 0x0436 # CYRILLIC SMALL LETTER ZHE +0xE7 0x0437 # CYRILLIC SMALL LETTER ZE +0xE8 0x0438 # CYRILLIC SMALL LETTER I +0xE9 0x0439 # CYRILLIC SMALL LETTER SHORT I +0xEA 0x043A # CYRILLIC SMALL LETTER KA +0xEB 0x043B # CYRILLIC SMALL LETTER EL +0xEC 0x043C # CYRILLIC SMALL LETTER EM +0xED 0x043D # CYRILLIC SMALL LETTER EN +0xEE 0x043E # CYRILLIC SMALL LETTER O +0xEF 0x043F # CYRILLIC SMALL LETTER PE +0xF0 0x0440 # CYRILLIC SMALL LETTER ER +0xF1 0x0441 # CYRILLIC SMALL LETTER ES +0xF2 0x0442 # CYRILLIC SMALL LETTER TE +0xF3 0x0443 # CYRILLIC SMALL LETTER U +0xF4 0x0444 # CYRILLIC SMALL LETTER EF +0xF5 0x0445 # CYRILLIC SMALL LETTER HA +0xF6 0x0446 # CYRILLIC SMALL LETTER TSE +0xF7 0x0447 # CYRILLIC SMALL LETTER CHE +0xF8 0x0448 # CYRILLIC SMALL LETTER SHA +0xF9 0x0449 # CYRILLIC SMALL LETTER SHCHA +0xFA 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0xFB 0x044B # CYRILLIC SMALL LETTER YERU +0xFC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0xFD 0x044D # CYRILLIC SMALL LETTER E +0xFE 0x044E # CYRILLIC SMALL LETTER YU +0xFF 0x20AC # EURO SIGN diff --git a/data/apple/GAELIC.TXT b/data/apple/GAELIC.TXT new file mode 100644 index 0000000..8c58aed --- /dev/null +++ b/data/apple/GAELIC.TXT @@ -0,0 +1,337 @@ +#======================================================================= +# File name: GAELIC.TXT +# +# Contents: Map (external version) from Mac OS Celtic +# character set to Unicode 3.0 and later +# +# Contacts: charsets@apple.com, everson@evertype.com +# +# Changes: +# +# c01 2005-Apr-01 First posted version. Matches internal xml +# and Text Encoding Converter 2.0. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Gaelic code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Gaelic code order. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Gaelic character set uses the standard control characters +# at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Gaelic (partly from Michael Everson): +# ----------------------------------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# This character set was developed by Michael Everson of Everson +# Typography (everson@evertype.com) and was used for fonts in his +# Celtic Utilities and CeltScript font packages for the Mac, as well +# as some fonts included with the Irish localizations of Mac OS 6.0.8 +# and 7.1. Note that while Apple authorized this Irish localization, +# it was not a system which shipped with Apple hardware, and was not +# otherwise supported by Apple. Fonts conforming to the Mac OS Gaelic +# character set are available from Everson Typography +# (http://www.evertype.com/celtscript/). Information about the use of +# this character set is available at +# http://www.evertype.com/celtscript/celtcode.html. +# +# The Mac OS Gaelic encoding shares the script code smRoman (0) with +# the standard Mac OS Roman encoding. To determine if the Gaelic +# encoding is being used in Mac OS 7-9, you should also check if the +# system region code is 81. Otherwise, you can check for particular +# fonts that conform to this encoding (since in practice Gaelic fonts +# are used with the ordinary US or UK system versions). +# +# This character set is a variant of standard Mac OS Roman, adding +# capital and small y with acute, grave, and circumflex; capital and +# small w with acute, grave, circumflex and diaeresis; capital and +# small b, c, d, f, g, m, p, s, t with dot above; tironian et; small +# long r, small long s, and small long s with dot above. It has 36 +# code point differences from standard Mac OS Roman. +# +# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was +# mapped to U+00A4. In Mac OS 8.5 and later versions, code point +# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard +# Apple fonts are updated for Mac OS 8.5 to reflect this. There is +# a "currency sign" variant of the Latin 8 Extended encoding that still +# maps 0xDB to U+00A4; this can be used for older fonts. +# Note: U+20AC is new with Unicode 2.1; for earlier Unicode +# versions, Latin 8 Extended 0xDB may be mapped to private-use +# character U+F8A0. +# +# Before Unicode 3.0, code point 0xE4 was PER MILLE SIGN, and was +# mapped to U+2030. Since August 1998, code point 0xE4 is changed +# to TIRONIAN SIGN ET and maps to U+204A. There is a "per mille +# sign" variant of the Mac OS Gaelic encoding that still +# maps 0xE4 to U+2030; this can be used for older fonts. +# Note: U+204A is new with Unicode 3.0; for earlier Unicode +# versions, Mac OS Gaelic was unified with AMPERSAND. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x00C6 # LATIN CAPITAL LETTER AE +0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xB0 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE +0xB5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +0xB6 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE +0xB7 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE +0xB8 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE +0xB9 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE +0xBA 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE +0xBB 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0xBC 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE +0xBD 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE +0xBE 0x00E6 # LATIN SMALL LETTER AE +0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xC0 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE +0xC1 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE +0xC2 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE +0xC3 0x027C # LATIN SMALL LETTER R WITH LONG LEG +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x017F # LATIN SMALL LETTER LONG S +0xC6 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE +0xD7 0x1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE +0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS +0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xDA 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE +0xDB 0x20AC # EURO SIGN # before Mac OS 8.5 this was U+00A4 CURRENCY SIGN +0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0xDF 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0xE0 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE +0xE3 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE +0xE4 0x204A # TIRONIAN SIGN ET # change from MacCeltic for Unicode 3.0; before Aug. 1998 this was U+2030 PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0x2663 # BLACK CLUB SUIT = shamrock # future mapping U+2618 SHAMROCK +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I +0xF6 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xF7 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xF8 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0xF9 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX +0xFA 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS +0xFB 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS +0xFC 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE +0xFD 0x1E81 # LATIN SMALL LETTER W WITH GRAVE +0xFE 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE +0xFF 0x1E83 # LATIN SMALL LETTER W WITH ACUTE diff --git a/data/apple/GREEK.TXT b/data/apple/GREEK.TXT new file mode 100644 index 0000000..f3374f1 --- /dev/null +++ b/data/apple/GREEK.TXT @@ -0,0 +1,355 @@ +#======================================================================= +# File name: GREEK.TXT +# +# Contents: Map (external version) from Mac OS Greek +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update to match changes in Mac OS Greek +# encoding for Mac OS 9.2.2 and later. +# Update URLs, notes. Matches internal +# utom. +# b02 1999-Sep-22 Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n06 1998-Feb-05 Update to match internal utom, ufrm, +# and Text Encoding Converter versions 1.3: +# Change mapping for 0xAF from U+0387 to its +# canonical decomposition, U+00B7. Also +# update header comments to new format. +# n04 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Greek code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Greek code order. +# +# One of these mappings requires the use of a corporate character. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Greek character set uses the standard control characters at +# 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Greek: +# ---------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# Although a Mac OS script code is defined for Greek (smGreek = 6), +# the Greek localized system does not currently use it (the font +# family IDs are in the Mac OS Roman range). To determine if the +# Greek encoding is being used when the script code is smRoman (0), +# you must check if the system region code is 20, verGreece. +# +# The Mac OS Greek encoding is a superset of the repertoire of +# ISO 8859-7 (although characters are not at the same code points), +# except that LEFT & RIGHT SINGLE QUOTATION MARK replace the +# MODIFIER LETTER REVERSED COMMA & APOSTROPHE (spacing versions of +# Greek rough & smooth breathing marks) that are in ISO 8859-7. +# The added characters in Mac OS Greek include more punctuation and +# symbols and several accented Latin letters. +# +# Before Mac OS 9.2.2, code point 0x9C was SOFT HYPHEN (U+00AD), and +# code point 0xFF was undefined. In Mac OS 9.2.2 and later versions, +# SOFT HYPHEN was moved to 0xFF, and code point 0x9C was changed to be +# EURO SIGN (U+20AC); the standard Apple fonts are updated for Mac OS +# 9.2.2 to reflect this. There is a "no Euro sign" variant of the Mac +# OS Greek encoding that uses the older mapping; this can be used for +# older fonts. +# +# This "no Euro sign" variant of Mac OS Greek was the character set +# used by Mac OS Greek systems before 9.2.2 except for system 6.0.7, +# which used a variant character set but was quickly replaced with +# Greek system 6.0.7.1 using the no Euro sign" character set +# documented here. Greek system 4.1 used a variant Greek set that had +# ISO 8859-7 in 0xA0-0xFF (with some holes filled in with DTP +# characters), and Mac OS Roman accented Roman letters in 0x80-0x9F. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version b02 to version b03/c01: +# +# - The Mac OS Greek encoding changed for Mac OS 9.2.2 and later +# as follows: +# 0x9C, changed from 0x00AD SOFT HYPHEN to 0x20AC EURO SIGN +# 0xFF, changed from undefined to 0x00AD SOFT HYPHEN +# +# Changes from version n04 to version n06: +# +# - Change mapping of 0xAF from U+0387 to its canonical +# decomposition, U+00B7. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00B9 # SUPERSCRIPT ONE +0x82 0x00B2 # SUPERSCRIPT TWO +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00B3 # SUPERSCRIPT THREE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x0385 # GREEK DIALYTIKA TONOS +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x0384 # GREEK TONOS +0x8C 0x00A8 # DIAERESIS +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00A3 # POUND SIGN +0x93 0x2122 # TRADE MARK SIGN +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x2022 # BULLET +0x97 0x00BD # VULGAR FRACTION ONE HALF +0x98 0x2030 # PER MILLE SIGN +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00A6 # BROKEN BAR +0x9C 0x20AC # EURO SIGN # before Mac OS 9.2.2, was SOFT HYPHEN +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x0393 # GREEK CAPITAL LETTER GAMMA +0xA2 0x0394 # GREEK CAPITAL LETTER DELTA +0xA3 0x0398 # GREEK CAPITAL LETTER THETA +0xA4 0x039B # GREEK CAPITAL LETTER LAMDA +0xA5 0x039E # GREEK CAPITAL LETTER XI +0xA6 0x03A0 # GREEK CAPITAL LETTER PI +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x03A3 # GREEK CAPITAL LETTER SIGMA +0xAB 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +0xAC 0x00A7 # SECTION SIGN +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x00B0 # DEGREE SIGN +0xAF 0x00B7 # MIDDLE DOT +0xB0 0x0391 # GREEK CAPITAL LETTER ALPHA +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x00A5 # YEN SIGN +0xB5 0x0392 # GREEK CAPITAL LETTER BETA +0xB6 0x0395 # GREEK CAPITAL LETTER EPSILON +0xB7 0x0396 # GREEK CAPITAL LETTER ZETA +0xB8 0x0397 # GREEK CAPITAL LETTER ETA +0xB9 0x0399 # GREEK CAPITAL LETTER IOTA +0xBA 0x039A # GREEK CAPITAL LETTER KAPPA +0xBB 0x039C # GREEK CAPITAL LETTER MU +0xBC 0x03A6 # GREEK CAPITAL LETTER PHI +0xBD 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +0xBE 0x03A8 # GREEK CAPITAL LETTER PSI +0xBF 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xC0 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS +0xC1 0x039D # GREEK CAPITAL LETTER NU +0xC2 0x00AC # NOT SIGN +0xC3 0x039F # GREEK CAPITAL LETTER OMICRON +0xC4 0x03A1 # GREEK CAPITAL LETTER RHO +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x03A4 # GREEK CAPITAL LETTER TAU +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x03A5 # GREEK CAPITAL LETTER UPSILON +0xCC 0x03A7 # GREEK CAPITAL LETTER CHI +0xCD 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS +0xCE 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2015 # HORIZONTAL BAR +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS +0xD8 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS +0xD9 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS +0xDA 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS +0xDB 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS +0xDC 0x03AE # GREEK SMALL LETTER ETA WITH TONOS +0xDD 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS +0xDE 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS +0xDF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS +0xE0 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS +0xE1 0x03B1 # GREEK SMALL LETTER ALPHA +0xE2 0x03B2 # GREEK SMALL LETTER BETA +0xE3 0x03C8 # GREEK SMALL LETTER PSI +0xE4 0x03B4 # GREEK SMALL LETTER DELTA +0xE5 0x03B5 # GREEK SMALL LETTER EPSILON +0xE6 0x03C6 # GREEK SMALL LETTER PHI +0xE7 0x03B3 # GREEK SMALL LETTER GAMMA +0xE8 0x03B7 # GREEK SMALL LETTER ETA +0xE9 0x03B9 # GREEK SMALL LETTER IOTA +0xEA 0x03BE # GREEK SMALL LETTER XI +0xEB 0x03BA # GREEK SMALL LETTER KAPPA +0xEC 0x03BB # GREEK SMALL LETTER LAMDA +0xED 0x03BC # GREEK SMALL LETTER MU +0xEE 0x03BD # GREEK SMALL LETTER NU +0xEF 0x03BF # GREEK SMALL LETTER OMICRON +0xF0 0x03C0 # GREEK SMALL LETTER PI +0xF1 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS +0xF2 0x03C1 # GREEK SMALL LETTER RHO +0xF3 0x03C3 # GREEK SMALL LETTER SIGMA +0xF4 0x03C4 # GREEK SMALL LETTER TAU +0xF5 0x03B8 # GREEK SMALL LETTER THETA +0xF6 0x03C9 # GREEK SMALL LETTER OMEGA +0xF7 0x03C2 # GREEK SMALL LETTER FINAL SIGMA +0xF8 0x03C7 # GREEK SMALL LETTER CHI +0xF9 0x03C5 # GREEK SMALL LETTER UPSILON +0xFA 0x03B6 # GREEK SMALL LETTER ZETA +0xFB 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA +0xFC 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +0xFD 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0xFE 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +0xFF 0x00AD # SOFT HYPHEN # before Mac OS 9.2.2, was undefined diff --git a/data/apple/ICELAND.TXT b/data/apple/ICELAND.TXT new file mode 100644 index 0000000..ceb1c40 --- /dev/null +++ b/data/apple/ICELAND.TXT @@ -0,0 +1,369 @@ +#======================================================================= +# File name: ICELAND.TXT +# +# Contents: Map (external version) from Mac OS Icelandic +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal +# utom. +# b02 1999-Sep-22 Encoding changed for Mac OS 8.5; change +# mapping of 0xDB from CURRENCY SIGN to EURO +# SIGN. Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n06 1998-Feb-05 Minor update to header comments, add +# information on font variants +# n03 1997-Dec-14 Update to match internal utom, ufrm: +# Change standard mapping for 0xBD from U+2126 +# to its canonical decomposition, U+03A9. +# n02 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Icelandic code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Icelandic code order. +# +# One of these mappings requires the use of a corporate character. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Icelandic character set uses the standard control characters +# at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Icelandic: +# -------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# 1. General +# +# Mac OS Icelandic is used for Icelandic and Faroese. +# +# The Mac OS Icelandic encoding shares the script code smRoman +# (0) with the standard Mac OS Roman encoding. To determine if +# the Icelandic encoding is being used, you must also check if +# the system region code is 21, verIceland. +# +# This character set is a variant of standard Mac OS Roman, +# adding upper and lower eth, thorn, and Y acute. It has 6 code +# point differences from standard Mac OS Roman. +# +# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was +# mapped to U+00A4. In Mac OS 8.5 and later versions, code point +# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard +# Apple fonts are updated for Mac OS 8.5 to reflect this. There are +# "currency sign" variants of the Mac OS Icelandic encoding that +# still map 0xDB to U+00A4; these can be used for older fonts. +# +# 2. Font variants +# +# The table in this file gives the Unicode mappings for the standard +# Mac OS Icelandic encoding. This encoding is supported by the +# Icelandic versions of the fonts Chicago, Geneva, Monaco, and New +# York, and is the encoding supported by the text processing +# utilities. However, other TrueType fonts implement a slightly +# different encoding; the difference is only in two code points. +# For the standard variant, these are: +# 0xBB -> 0x00AA FEMININE ORDINAL INDICATOR +# 0xBC -> 0x00BA MASCULINE ORDINAL INDICATOR +# +# For the TrueType variant (used by the Icelandic versions of the +# fonts Courier, Helvetica, Palatino, and Times), these are: +# 0xBB -> 0xFB01 LATIN SMALL LIGATURE FI +# 0xBC -> 0xFB02 LATIN SMALL LIGATURE FL +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# The following corporate zone Unicode character is used in this +# mapping: +# +# 0xF8FF Apple logo +# +# NOTE: The graphic image associated with the Apple logo character +# is not authorized for use without permission of Apple, and +# unauthorized use might constitute trademark infringement. +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version n06 to version b02: +# +# - Encoding changed for Mac OS 8.5; change mapping of 0xDB from +# CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). +# +# Changes from version n02 to version n03: +# +# - Change mapping of 0xBD from U+2126 to its canonical +# decomposition, U+03A9. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x00C6 # LATIN CAPITAL LETTER AE +0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x00A5 # YEN SIGN +0xB5 0x00B5 # MICRO SIGN +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x220F # N-ARY PRODUCT +0xB9 0x03C0 # GREEK SMALL LETTER PI +0xBA 0x222B # INTEGRAL +0xBB 0x00AA # FEMININE ORDINAL INDICATOR +0xBC 0x00BA # MASCULINE ORDINAL INDICATOR +0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xBE 0x00E6 # LATIN SMALL LETTER AE +0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xC0 0x00BF # INVERTED QUESTION MARK +0xC1 0x00A1 # INVERTED EXCLAMATION MARK +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS +0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xDA 0x2044 # FRACTION SLASH +0xDB 0x20AC # EURO SIGN +0xDC 0x00D0 # LATIN CAPITAL LETTER ETH +0xDD 0x00F0 # LATIN SMALL LETTER ETH +0xDE 0x00DE # LATIN CAPITAL LETTER THORN +0xDF 0x00FE # LATIN SMALL LETTER THORN +0xE0 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK +0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xE4 0x2030 # PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0xF8FF # Apple logo +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I +0xF6 0x02C6 # MODIFIER LETTER CIRCUMFLEX ACCENT +0xF7 0x02DC # SMALL TILDE +0xF8 0x00AF # MACRON +0xF9 0x02D8 # BREVE +0xFA 0x02D9 # DOT ABOVE +0xFB 0x02DA # RING ABOVE +0xFC 0x00B8 # CEDILLA +0xFD 0x02DD # DOUBLE ACUTE ACCENT +0xFE 0x02DB # OGONEK +0xFF 0x02C7 # CARON diff --git a/data/apple/INUIT.TXT b/data/apple/INUIT.TXT new file mode 100644 index 0000000..21ae9f0 --- /dev/null +++ b/data/apple/INUIT.TXT @@ -0,0 +1,322 @@ +#======================================================================= +# File name: INUIT.TXT +# +# Contents: Map (external version) from Mac OS Inuit +# character set to Unicode 3.0 and later +# +# Contacts: charsets@apple.com, everson@evertype.com +# +# Changes: +# +# c01 2005-Apr-01 First posted version. Matches internal xml +# and Text Encoding Converter 2.0. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Inuit code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Inuit code order. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Inuit character set uses the standard control characters +# at 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Inuit (partly from Michael Everson): +# ---------------------------------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# This character set was developed by Michael Everson of Everson +# Typography (everson@evertype.com) and was used for the Inuktitut +# localizations of Mac OS, as well as for the Inuktitut utilities +# package from Everson Typography. Note that while Apple authorized +# the Inuktitut localization mentioned above, it was not shipped with +# Apple hardware, and was not otherwise supported by Apple. Fonts +# conforming to the Mac OS Inuit character set are available from +# Everson Typography (http://www.evertype.com/software/apple/). +# Information about the use of this character set is available at +# http://www.evertype.com/standards/iu/. +# +# The Mac OS Inuit character set shares the script code smEthiopic +# (28) with the Ethiopic encoding. To determine if the Inuktitut +# encoding is being used, you must also check if the system region +# code is 78, verNunavut. +# +# The Mac OS Inuit character set includes the full syllabic letter +# repertoire required for Inuktitut; it is a subset of the Unified +# Canadian Aboriginal Syllabics set encoded in Unicode. The encoding +# is InuitSCII, designed by Doug Hitch for the Government of the +# Northwest Territories. +# +# The Mac OS Inuit character set also includes a number of characters +# that were needed for the classic Mac OS user interface and +# localization (e.g. ellipsis, bullet, copyright sign). All of the +# characters in Mac OS Inuit that are also in the Mac OS Roman +# encoding are at the same code point in both; this improves +# application compatibility. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x1403 # CANADIAN SYLLABICS I +0x81 0x1404 # CANADIAN SYLLABICS II +0x82 0x1405 # CANADIAN SYLLABICS O +0x83 0x1406 # CANADIAN SYLLABICS OO +0x84 0x140A # CANADIAN SYLLABICS A +0x85 0x140B # CANADIAN SYLLABICS AA +0x86 0x1431 # CANADIAN SYLLABICS PI +0x87 0x1432 # CANADIAN SYLLABICS PII +0x88 0x1433 # CANADIAN SYLLABICS PO +0x89 0x1434 # CANADIAN SYLLABICS POO +0x8A 0x1438 # CANADIAN SYLLABICS PA +0x8B 0x1439 # CANADIAN SYLLABICS PAA +0x8C 0x1449 # CANADIAN SYLLABICS P +0x8D 0x144E # CANADIAN SYLLABICS TI +0x8E 0x144F # CANADIAN SYLLABICS TII +0x8F 0x1450 # CANADIAN SYLLABICS TO +0x90 0x1451 # CANADIAN SYLLABICS TOO +0x91 0x1455 # CANADIAN SYLLABICS TA +0x92 0x1456 # CANADIAN SYLLABICS TAA +0x93 0x1466 # CANADIAN SYLLABICS T +0x94 0x146D # CANADIAN SYLLABICS KI +0x95 0x146E # CANADIAN SYLLABICS KII +0x96 0x146F # CANADIAN SYLLABICS KO +0x97 0x1470 # CANADIAN SYLLABICS KOO +0x98 0x1472 # CANADIAN SYLLABICS KA +0x99 0x1473 # CANADIAN SYLLABICS KAA +0x9A 0x1483 # CANADIAN SYLLABICS K +0x9B 0x148B # CANADIAN SYLLABICS CI +0x9C 0x148C # CANADIAN SYLLABICS CII +0x9D 0x148D # CANADIAN SYLLABICS CO +0x9E 0x148E # CANADIAN SYLLABICS COO +0x9F 0x1490 # CANADIAN SYLLABICS CA +0xA0 0x1491 # CANADIAN SYLLABICS CAA +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x14A1 # CANADIAN SYLLABICS C +0xA3 0x14A5 # CANADIAN SYLLABICS MI +0xA4 0x14A6 # CANADIAN SYLLABICS MII +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x14A7 # CANADIAN SYLLABICS MO +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x14A8 # CANADIAN SYLLABICS MOO +0xAC 0x14AA # CANADIAN SYLLABICS MA +0xAD 0x14AB # CANADIAN SYLLABICS MAA +0xAE 0x14BB # CANADIAN SYLLABICS M +0xAF 0x14C2 # CANADIAN SYLLABICS NI +0xB0 0x14C3 # CANADIAN SYLLABICS NII +0xB1 0x14C4 # CANADIAN SYLLABICS NO +0xB2 0x14C5 # CANADIAN SYLLABICS NOO +0xB3 0x14C7 # CANADIAN SYLLABICS NA +0xB4 0x14C8 # CANADIAN SYLLABICS NAA +0xB5 0x14D0 # CANADIAN SYLLABICS N +0xB6 0x14EF # CANADIAN SYLLABICS SI +0xB7 0x14F0 # CANADIAN SYLLABICS SII +0xB8 0x14F1 # CANADIAN SYLLABICS SO +0xB9 0x14F2 # CANADIAN SYLLABICS SOO +0xBA 0x14F4 # CANADIAN SYLLABICS SA +0xBB 0x14F5 # CANADIAN SYLLABICS SAA +0xBC 0x1505 # CANADIAN SYLLABICS S +0xBD 0x14D5 # CANADIAN SYLLABICS LI +0xBE 0x14D6 # CANADIAN SYLLABICS LII +0xBF 0x14D7 # CANADIAN SYLLABICS LO +0xC0 0x14D8 # CANADIAN SYLLABICS LOO +0xC1 0x14DA # CANADIAN SYLLABICS LA +0xC2 0x14DB # CANADIAN SYLLABICS LAA +0xC3 0x14EA # CANADIAN SYLLABICS L +0xC4 0x1528 # CANADIAN SYLLABICS YI +0xC5 0x1529 # CANADIAN SYLLABICS YII +0xC6 0x152A # CANADIAN SYLLABICS YO +0xC7 0x152B # CANADIAN SYLLABICS YOO +0xC8 0x152D # CANADIAN SYLLABICS YA +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x152E # CANADIAN SYLLABICS YAA +0xCC 0x153E # CANADIAN SYLLABICS Y +0xCD 0x1555 # CANADIAN SYLLABICS FI +0xCE 0x1556 # CANADIAN SYLLABICS FII +0xCF 0x1557 # CANADIAN SYLLABICS FO +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x1558 # CANADIAN SYLLABICS FOO +0xD7 0x1559 # CANADIAN SYLLABICS FA +0xD8 0x155A # CANADIAN SYLLABICS FAA +0xD9 0x155D # CANADIAN SYLLABICS F +0xDA 0x1546 # CANADIAN SYLLABICS RI +0xDB 0x1547 # CANADIAN SYLLABICS RII +0xDC 0x1548 # CANADIAN SYLLABICS RO +0xDD 0x1549 # CANADIAN SYLLABICS ROO +0xDE 0x154B # CANADIAN SYLLABICS RA +0xDF 0x154C # CANADIAN SYLLABICS RAA +0xE0 0x1550 # CANADIAN SYLLABICS R +0xE1 0x157F # CANADIAN SYLLABICS QI +0xE2 0x1580 # CANADIAN SYLLABICS QII +0xE3 0x1581 # CANADIAN SYLLABICS QO +0xE4 0x1582 # CANADIAN SYLLABICS QOO +0xE5 0x1583 # CANADIAN SYLLABICS QA +0xE6 0x1584 # CANADIAN SYLLABICS QAA +0xE7 0x1585 # CANADIAN SYLLABICS Q +0xE8 0x158F # CANADIAN SYLLABICS NGI +0xE9 0x1590 # CANADIAN SYLLABICS NGII +0xEA 0x1591 # CANADIAN SYLLABICS NGO +0xEB 0x1592 # CANADIAN SYLLABICS NGOO +0xEC 0x1593 # CANADIAN SYLLABICS NGA +0xED 0x1594 # CANADIAN SYLLABICS NGAA +0xEE 0x1595 # CANADIAN SYLLABICS NG +0xEF 0x1671 # CANADIAN SYLLABICS NNGI +0xF0 0x1672 # CANADIAN SYLLABICS NNGII +0xF1 0x1673 # CANADIAN SYLLABICS NNGO +0xF2 0x1674 # CANADIAN SYLLABICS NNGOO +0xF3 0x1675 # CANADIAN SYLLABICS NNGA +0xF4 0x1676 # CANADIAN SYLLABICS NNGAA +0xF5 0x1596 # CANADIAN SYLLABICS NNG +0xF6 0x15A0 # CANADIAN SYLLABICS LHI +0xF7 0x15A1 # CANADIAN SYLLABICS LHII +0xF8 0x15A2 # CANADIAN SYLLABICS LHO +0xF9 0x15A3 # CANADIAN SYLLABICS LHOO +0xFA 0x15A4 # CANADIAN SYLLABICS LHA +0xFB 0x15A5 # CANADIAN SYLLABICS LHAA +0xFC 0x15A6 # CANADIAN SYLLABICS LH +0xFD 0x157C # CANADIAN SYLLABICS NUNAVUT H +0xFE 0x0141 # LATIN CAPITAL LETTER L WITH STROKE +0xFF 0x0142 # LATIN SMALL LETTER L WITH STROKE diff --git a/data/apple/ROMAN.TXT b/data/apple/ROMAN.TXT new file mode 100644 index 0000000..5b3b8b4 --- /dev/null +++ b/data/apple/ROMAN.TXT @@ -0,0 +1,370 @@ +#======================================================================= +# File name: ROMAN.TXT +# +# Contents: Map (external version) from Mac OS Roman +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1994-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b4,c1 2002-Dec-19 Update URLs, notes. Matches internal +# utom. +# b03 1999-Sep-22 Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# b02 1998-Aug-18 Encoding changed for Mac OS 8.5; change +# mapping of 0xDB from CURRENCY SIGN to +# EURO SIGN. Matches internal utom, +# ufrm. +# n08 1998-Feb-05 Minor update to header comments +# n06 1997-Dec-14 Add warning about future changes to 0xDB +# from CURRENCY SIGN to EURO SIGN. Clarify +# some header information +# n04 1997-Dec-01 Update to match internal utom, ufrm: +# Change standard mapping for 0xBD from U+2126 +# to its canonical decomposition, U+03A9. +# n03 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Roman code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Roman code order. +# +# One of these mappings requires the use of a corporate character. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Roman character set uses the standard control characters at +# 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Roman: +# ---------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported directly in programming +# interfaces for QuickDraw Text, the Script Manager, and related +# Text Utilities. For other purposes it is supported via transcoding +# to and from Unicode. +# +# This character set is used for at least the following Mac OS +# localizations: U.S., British, Canadian French, French, Swiss +# French, German, Swiss German, Italian, Swiss Italian, Dutch, +# Swedish, Norwegian, Danish, Finnish, Spanish, Catalan, +# Portuguese, Brazilian, and the default International system. +# +# Variants of Mac OS Roman are used for Croatian, Icelandic, +# Turkish, Romanian, and other encodings. Separate mapping tables +# are available for these encodings. +# +# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was +# mapped to U+00A4. In Mac OS 8.5 and later versions, code point +# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard +# Apple fonts are updated for Mac OS 8.5 to reflect this. There is +# a "currency sign" variant of the Mac OS Roman encoding that still +# maps 0xDB to U+00A4; this can be used for older fonts. +# +# Before Mac OS 8.5, the ROM bitmap versions of the fonts Chicago, +# New York, Geneva, and Monaco did not implement the full Mac OS +# Roman character set; they only supported character codes up to +# 0xD8. The TrueType versions of these fonts have always implemented +# the full character set, as with the bitmap and TrueType versions +# of the other standard Roman fonts. +# +# In all Mac OS encodings, fonts such as Chicago which are used +# as "system" fonts (for menus, dialogs, etc.) have four glyphs +# at code points 0x11-0x14 for transient use by the Menu Manager. +# These glyphs are not intended as characters for use in normal +# text, and the associated code points are not generally +# interpreted as associated with these glyphs; they are usually +# interpreted (if at all) as the control codes DC1-DC4. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# The following corporate zone Unicode character is used in this +# mapping: +# +# 0xF8FF Apple logo +# +# NOTE: The graphic image associated with the Apple logo character +# is not authorized for use without permission of Apple, and +# unauthorized use might constitute trademark infringement. +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version n08 to version b02: +# +# - Encoding changed for Mac OS 8.5; change mapping of 0xDB from +# CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). +# +# Changes from version n03 to version n04: +# +# - Change mapping of 0xBD from U+2126 to its canonical +# decomposition, U+03A9. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x00C6 # LATIN CAPITAL LETTER AE +0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x00A5 # YEN SIGN +0xB5 0x00B5 # MICRO SIGN +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x220F # N-ARY PRODUCT +0xB9 0x03C0 # GREEK SMALL LETTER PI +0xBA 0x222B # INTEGRAL +0xBB 0x00AA # FEMININE ORDINAL INDICATOR +0xBC 0x00BA # MASCULINE ORDINAL INDICATOR +0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xBE 0x00E6 # LATIN SMALL LETTER AE +0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xC0 0x00BF # INVERTED QUESTION MARK +0xC1 0x00A1 # INVERTED EXCLAMATION MARK +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS +0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xDA 0x2044 # FRACTION SLASH +0xDB 0x20AC # EURO SIGN +0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0xDE 0xFB01 # LATIN SMALL LIGATURE FI +0xDF 0xFB02 # LATIN SMALL LIGATURE FL +0xE0 0x2021 # DOUBLE DAGGER +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK +0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xE4 0x2030 # PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0xF8FF # Apple logo +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I +0xF6 0x02C6 # MODIFIER LETTER CIRCUMFLEX ACCENT +0xF7 0x02DC # SMALL TILDE +0xF8 0x00AF # MACRON +0xF9 0x02D8 # BREVE +0xFA 0x02D9 # DOT ABOVE +0xFB 0x02DA # RING ABOVE +0xFC 0x00B8 # CEDILLA +0xFD 0x02DD # DOUBLE ACUTE ACCENT +0xFE 0x02DB # OGONEK +0xFF 0x02C7 # CARON diff --git a/data/apple/ROMANIAN.TXT b/data/apple/ROMANIAN.TXT new file mode 100644 index 0000000..074959f --- /dev/null +++ b/data/apple/ROMANIAN.TXT @@ -0,0 +1,365 @@ +#======================================================================= +# File name: ROMANIAN.TXT +# +# Contents: Map (external version) from Mac OS Romanian +# character set to Unicode 3.0 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update mappings for 0xAF, 0xBF, 0xDE, 0xDF +# to use new composed characters added in +# Unicode 3.0. Update URLs, notes. Matches +# internal utom. +# b02 1999-Sep-22 Encoding changed for Mac OS 8.5; change +# mapping of 0xDB from CURRENCY SIGN to EURO +# SIGN. Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n05 1998-Feb-05 Minor update to header comments +# n03 1997-Dec-14 Update to match internal utom, ufrm: +# Change standard mapping for 0xBD from U+2126 +# to its canonical decomposition, U+03A9. +# Change mapping of 0xAF,0xBF,0xDE,0xDF from +# composed S/T WITH CEDILLA to S/T with +# COMBINING COMMA BELOW (to match our +# decomposition mappings). +# n02 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Romanian code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Romanian code order. +# +# One of these mappings requires the use of a corporate character. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Romanian character set uses the standard control characters at +# 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Romanian: +# ------------------------- +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# Mac OS Romanian is used only for Romanian. +# +# The Mac OS Romanian encoding shares the script code smRoman +# (0) with the standard Mac OS Roman encoding. To determine if +# the Romanian encoding is being used, you must also check if the +# system region code is 39, verRomania. +# +# This character set is a variant of standard Mac OS Roman, adding +# upper and lower A breve, S comma below, and T comma below. It +# has 6 code point differences from standard Mac OS Roman. +# +# Before Mac OS 8.5, code point 0xDB was CURRENCY SIGN, and was +# mapped to U+00A4. In Mac OS 8.5 and later versions, code point +# 0xDB is changed to EURO SIGN and maps to U+20AC; the standard +# Apple fonts are updated for Mac OS 8.5 to reflect this. There is +# a "currency sign" variant of the Mac OS Romanian encoding that +# still maps 0xDB to U+00A4; this can be used for older fonts. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# The following corporate zone Unicode character is used in this +# mapping: +# +# 0xF8FF Apple logo +# +# NOTE: The graphic image associated with the Apple logo character +# is not authorized for use without permission of Apple, and +# unauthorized use might constitute trademark infringement. +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version b02 to version b03/c01: +# +# - Update the mappings for 0xAF, 0xBF, 0xDE, 0xDF to use new +# composed Unicode characters 0x0218-0x021B added in Unicode 3.0; +# the previous mappings were to the equivalent decomposition +# sequences. +# +# Changes from version n05 to version b02: +# +# - Encoding changed for Mac OS 8.5; change mapping of 0xDB from +# CURRENCY SIGN (U+00A4) to EURO SIGN (U+20AC). +# +# Changes from version n02 to version n03: +# +# - Change mapping of 0xBD from U+2126 to its canonical +# decomposition, U+03A9. +# - Change mapping of 0xAF,0xBF,0xDE,0xDF from composed S or T +# WITH CEDILLA to S or T with COMBINING COMMA BELOW (to match +# our decomposition mappings). +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x0102 # LATIN CAPITAL LETTER A WITH BREVE +0xAF 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x00A5 # YEN SIGN +0xB5 0x00B5 # MICRO SIGN +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x220F # N-ARY PRODUCT +0xB9 0x03C0 # GREEK SMALL LETTER PI +0xBA 0x222B # INTEGRAL +0xBB 0x00AA # FEMININE ORDINAL INDICATOR +0xBC 0x00BA # MASCULINE ORDINAL INDICATOR +0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xBE 0x0103 # LATIN SMALL LETTER A WITH BREVE +0xBF 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW # for Unicode 3.0 and later +0xC0 0x00BF # INVERTED QUESTION MARK +0xC1 0x00A1 # INVERTED EXCLAMATION MARK +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS +0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xDA 0x2044 # FRACTION SLASH +0xDB 0x20AC # EURO SIGN +0xDC 0x2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +0xDD 0x203A # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later +0xDF 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW # for Unicode 3.0 and later +0xE0 0x2021 # DOUBLE DAGGER +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK +0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xE4 0x2030 # PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0xF8FF # Apple logo +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0x0131 # LATIN SMALL LETTER DOTLESS I +0xF6 0x02C6 # MODIFIER LETTER CIRCUMFLEX ACCENT +0xF7 0x02DC # SMALL TILDE +0xF8 0x00AF # MACRON +0xF9 0x02D8 # BREVE +0xFA 0x02D9 # DOT ABOVE +0xFB 0x02DA # RING ABOVE +0xFC 0x00B8 # CEDILLA +0xFD 0x02DD # DOUBLE ACUTE ACCENT +0xFE 0x02DB # OGONEK +0xFF 0x02C7 # CARON diff --git a/data/apple/TURKISH.TXT b/data/apple/TURKISH.TXT new file mode 100644 index 0000000..1583a88 --- /dev/null +++ b/data/apple/TURKISH.TXT @@ -0,0 +1,341 @@ +#======================================================================= +# File name: TURKISH.TXT +# +# Contents: Map (external version) from Mac OS Turkish +# character set to Unicode 2.1 and later. +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. Matches internal xml +# and Text Encoding Converter 2.0. +# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal +# utom. +# b02 1999-Sep-22 Update contact e-mail address. Matches +# internal utom, ufrm, and Text +# Encoding Converter version 1.5. +# n05 1998-Feb-05 Minor update to header comments +# n03 1997-Dec-14 Update to match internal utom, ufrm: +# Change standard mapping for 0xBD from U+2126 +# to its canonical decomposition, U+03A9. +# n02 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Format: +# ------- +# +# Three tab-separated columns; +# '#' begins a comment which continues to the end of the line. +# Column #1 is the Mac OS Turkish code (in hex as 0xNN) +# Column #2 is the corresponding Unicode (in hex as 0xNNNN) +# Column #3 is a comment containing the Unicode name +# +# The entries are in Mac OS Turkish code order. +# +# Two of these mappings requires the use of a corporate character. +# See the file "CORPCHAR.TXT" and notes below. +# +# Control character mappings are not shown in this table, following +# the conventions of the standard UTC mapping tables. However, the +# Mac OS Turkish character set uses the standard control characters at +# 0x00-0x1F and 0x7F. +# +# Notes on Mac OS Turkish: +# ------------------------ +# +# This is a legacy Mac OS encoding; in the Mac OS X Carbon and Cocoa +# environments, it is only supported via transcoding to and from +# Unicode. +# +# Mac OS Turkish is used for Turkish. +# +# The Mac OS Turkish encoding shares the script code smRoman +# (0) with the Mac OS Roman encoding. To determine if the Turkish +# encoding is being used, you must also check if the system region +# code is 24, verTurkey. +# +# This character set is a variant of standard Mac OS Roman. It adds +# upper & lower G with breve, upper & lower S with cedilla, upper I +# with dot, and moves the dotless lower i from its position at 0xF5 +# in standard Mac OS Roman to a position at 0xDD here (leaving the +# 0xF5 code point undefined in Mac OS Turkish). This gives a total +# of 7 code point differences from standard Mac OS Roman. +# +# Unicode mapping issues and notes: +# --------------------------------- +# +# The following corporate zone Unicode characters are used in this +# mapping: +# +# 0xF8A0 undefined1, used to map the single undefined code point +# in Mac OS Turkish (to obtain roundtrip fidelity for all +# code points). +# 0xF8FF Apple logo +# +# NOTE: The graphic image associated with the Apple logo character +# is not authorized for use without permission of Apple, and +# unauthorized use might constitute trademark infringement. +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version n02 to version n03: +# +# - Change mapping of 0xBD from U+2126 to its canonical +# decomposition, U+03A9. +# +################## + +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +# +0x80 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x81 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x82 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x83 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x84 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x85 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x86 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x87 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x88 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x89 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x8A 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x8B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x8C 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x8D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x8E 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x8F 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x90 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x91 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0x92 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0x93 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x94 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x95 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0x96 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x97 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0x98 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x99 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x9A 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x9B 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x9C 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0x9D 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x9E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x9F 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xA0 0x2020 # DAGGER +0xA1 0x00B0 # DEGREE SIGN +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A7 # SECTION SIGN +0xA5 0x2022 # BULLET +0xA6 0x00B6 # PILCROW SIGN +0xA7 0x00DF # LATIN SMALL LETTER SHARP S +0xA8 0x00AE # REGISTERED SIGN +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x2122 # TRADE MARK SIGN +0xAB 0x00B4 # ACUTE ACCENT +0xAC 0x00A8 # DIAERESIS +0xAD 0x2260 # NOT EQUAL TO +0xAE 0x00C6 # LATIN CAPITAL LETTER AE +0xAF 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xB0 0x221E # INFINITY +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x2264 # LESS-THAN OR EQUAL TO +0xB3 0x2265 # GREATER-THAN OR EQUAL TO +0xB4 0x00A5 # YEN SIGN +0xB5 0x00B5 # MICRO SIGN +0xB6 0x2202 # PARTIAL DIFFERENTIAL +0xB7 0x2211 # N-ARY SUMMATION +0xB8 0x220F # N-ARY PRODUCT +0xB9 0x03C0 # GREEK SMALL LETTER PI +0xBA 0x222B # INTEGRAL +0xBB 0x00AA # FEMININE ORDINAL INDICATOR +0xBC 0x00BA # MASCULINE ORDINAL INDICATOR +0xBD 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xBE 0x00E6 # LATIN SMALL LETTER AE +0xBF 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xC0 0x00BF # INVERTED QUESTION MARK +0xC1 0x00A1 # INVERTED EXCLAMATION MARK +0xC2 0x00AC # NOT SIGN +0xC3 0x221A # SQUARE ROOT +0xC4 0x0192 # LATIN SMALL LETTER F WITH HOOK +0xC5 0x2248 # ALMOST EQUAL TO +0xC6 0x2206 # INCREMENT +0xC7 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC8 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xC9 0x2026 # HORIZONTAL ELLIPSIS +0xCA 0x00A0 # NO-BREAK SPACE +0xCB 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xCC 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xCD 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xCE 0x0152 # LATIN CAPITAL LIGATURE OE +0xCF 0x0153 # LATIN SMALL LIGATURE OE +0xD0 0x2013 # EN DASH +0xD1 0x2014 # EM DASH +0xD2 0x201C # LEFT DOUBLE QUOTATION MARK +0xD3 0x201D # RIGHT DOUBLE QUOTATION MARK +0xD4 0x2018 # LEFT SINGLE QUOTATION MARK +0xD5 0x2019 # RIGHT SINGLE QUOTATION MARK +0xD6 0x00F7 # DIVISION SIGN +0xD7 0x25CA # LOZENGE +0xD8 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS +0xD9 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +0xDA 0x011E # LATIN CAPITAL LETTER G WITH BREVE +0xDB 0x011F # LATIN SMALL LETTER G WITH BREVE +0xDC 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE +0xDD 0x0131 # LATIN SMALL LETTER DOTLESS I +0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xDF 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xE0 0x2021 # DOUBLE DAGGER +0xE1 0x00B7 # MIDDLE DOT +0xE2 0x201A # SINGLE LOW-9 QUOTATION MARK +0xE3 0x201E # DOUBLE LOW-9 QUOTATION MARK +0xE4 0x2030 # PER MILLE SIGN +0xE5 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xE6 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xE7 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xE8 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xE9 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xEA 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xEB 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xEC 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xED 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xEE 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xEF 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xF0 0xF8FF # Apple logo +0xF1 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xF2 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xF3 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xF4 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xF5 0xF8A0 # undefined1 +0xF6 0x02C6 # MODIFIER LETTER CIRCUMFLEX ACCENT +0xF7 0x02DC # SMALL TILDE +0xF8 0x00AF # MACRON +0xF9 0x02D8 # BREVE +0xFA 0x02D9 # DOT ABOVE +0xFB 0x02DA # RING ABOVE +0xFC 0x00B8 # CEDILLA +0xFD 0x02DD # DOUBLE ACUTE ACCENT +0xFE 0x02DB # OGONEK +0xFF 0x02C7 # CARON diff --git a/data/apple/UKRAINE.TXT b/data/apple/UKRAINE.TXT new file mode 100644 index 0000000..3daad9d --- /dev/null +++ b/data/apple/UKRAINE.TXT @@ -0,0 +1,106 @@ +#======================================================================= +# File name: UKRAINE.TXT +# +# Contents: Notes on Mac OS Ukrainian character set +# +# Copyright: (c) 1995-2002, 2005 by Apple Computer, Inc., all rights +# reserved. +# +# Contact: charsets@apple.com +# +# Changes: +# +# c02 2005-Apr-05 Update header comments. +# b3,c1 2002-Dec-19 Update URLs. Matches internal utom. +# b02 1999-Sep-22 Encoding changed for Mac OS 9.0 to merge +# with Mac OS Cyrillic and support EURO SIGN; +# change mappings for 0xFF. For Mac OS 9.0 +# there is no longer a separate Mac OS +# Ukrainian character set; the mappings are +# in CYRILLIC.TXT. Update contact e-mail +# address. Matches internal utom, ufrm, +# and Text Encoding Converter version 1.5. +# n04 1998-Feb-05 Update header comments to new format; no +# mapping changes. Matches internal utom<2>, +# ufrm<13>, and Text Encoding Converter +# version 1.3. +# n02 1995-Apr-15 First version (after fixing some typos). +# Matches internal ufrm<4>. +# +# Standard header: +# ---------------- +# +# Apple, the Apple logo, and Macintosh are trademarks of Apple +# Computer, Inc., registered in the United States and other countries. +# Unicode is a trademark of Unicode Inc. For the sake of brevity, +# throughout this document, "Macintosh" can be used to refer to +# Macintosh computers and "Unicode" can be used to refer to the +# Unicode standard. +# +# Apple Computer, Inc. ("Apple") makes no warranty or representation, +# either express or implied, with respect to this document and the +# included data, its quality, accuracy, or fitness for a particular +# purpose. In no event will Apple be liable for direct, indirect, +# special, incidental, or consequential damages resulting from any +# defect or inaccuracy in this document or the included data. +# +# These mapping tables and character lists are subject to change. +# The latest tables should be available from the following: +# +# +# +# For general information about Mac OS encodings and these mapping +# tables, see the file "README.TXT". +# +# Notes on Mac OS Ukrainian and Mac OS Cyrillic: +# ---------------------------------------------- +# +# Before Mac OS 9.0, there were two separate Slavic Cyrillic +# encodings for the Mac OS: +# +# 1. The Cyrillic currency sign variant (used for localized Russian +# and Bulgarian systems), which had the following: +# 0xA2 U+00A2 CENT SIGN +# 0xB6 U+2202 PARTIAL DIFFERENTIAL +# 0xFF U+00A4 CURRENCY SIGN +# +# 2. The Ukrainian currency sign variant (used for localized Ukrainian +# systems and the pre-9.0 Cyrillic Language Kit), which had the +# following: +# 0xA2 U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN +# 0xB6 U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN +# 0xFF U+00A4 CURRENCY SIGN +# +# Before Mac OS 9.0, The Ukrainian currency sign variant shared the +# script code smCyrillic (7) with the Cyrillic currency sign variant. +# The Ukrainian currency sign variant was being used if one of the +# following was true: +# - The system region code was 62, verUkraine (indicates Ukrainian +# localized system), or +# - The system script was not 7, smCyrillic (indicates Cyrillic +# Language Kit instead of localized system). +# +# For Mac OS 9.0 and later, both currency sign variants were replaced +# with a new Euro sign version of Mac OS Cyrillic, which is similar to +# the old Ukrainian currency sign variant but changes 0xFF to EURO +# SIGN. Mappings for this are in CYRILLIC.TXT. +# +# Note: There is a common glyph variation in Ukrainian, in which the +# glyph for CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I may or +# may not have a dot above. +# +# Details of mapping changes in each version: +# ------------------------------------------- +# +# Changes from version n04 to version b02: +# +# - Encoding changed for Mac OS 9.0 to merge with Mac OS Cyrillic and +# support EURO SIGN; 0xFF changed from U+00A4 to U+20AC. For Mac OS +# 9.0 there is no longer a separate Mac OS Ukrainian character set, so +# the mappings here are deleted; see the mappings in CYRILLIC.TXT. +# +################## + +################## +# For mappings, see CYRILLIC.TXT +################## diff --git a/src/lib.rs b/src/lib.rs index b847452..d72ed05 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,21 +1,34 @@ //! Bidirectional conversion between classic Mac OS text encodings and Unicode. //! //! Classic Mac OS named files, volumes, and Finder comments in one of a family -//! of script encodings — Mac OS Roman and its regional/CJK relatives — selected -//! by a *script code*. This crate converts those bytes to and from Unicode with -//! emulator-grade fidelity: it owns the canonical tables rather than linking ICU, -//! so it stays small, self-contained, and cross-compiles cleanly. +//! of script encodings — Mac OS Roman and its regional relatives — selected by +//! a *script code* (HFS) or a *text encoding* value (HFS+). This crate converts +//! those bytes to and from Unicode with emulator-grade fidelity: it owns the +//! canonical tables rather than linking ICU, so it stays small, self-contained, +//! and cross-compiles cleanly. //! -//! Today it implements **Mac OS Roman** (both the pre- and post-8.5 revisions). -//! The [`AppleEncoding`] enum and [`AppleEncoding::from_script_code`] are the -//! growth points for the remaining single-byte scripts and the (table-heavy, -//! codegen'd) double-byte CJK encodings. +//! The tables are **Apple's** mappings as published by the Unicode Consortium +//! (`VENDORS/APPLE/`), vendored in `data/apple/` and generated by +//! `tools/gen_tables.py`. Twelve single-byte encodings are implemented; the +//! (table-heavy) double-byte CJK encodings and the bidirectional/complex +//! scripts are future growth points behind the same API. +//! +//! Apple revised several tables when the Euro sign rolled out — at different +//! byte positions and OS versions per encoding. Each affected encoding carries +//! a [`Revision`]: the default [`Modern`](Revision::Modern) is the current +//! table, [`Classic`](Revision::Classic) the pre-Euro one for emulator +//! fidelity against older systems. +//! +//! Decoding is fallible for API uniformity, though today only Mac OS Greek at +//! the classic revision has an undefined byte (`0xFF`); the `decode_lossy` +//! method substitutes U+FFFD instead. Every byte an encoding decodes +//! re-encodes to itself. //! //! ``` //! use apple_encodings::AppleEncoding; //! -//! let enc = AppleEncoding::default(); // Mac OS Roman, post-8.5 -//! assert_eq!(enc.decode(b"Caf\x8e"), "Café"); +//! let enc = AppleEncoding::default(); // Mac OS Roman, modern revision +//! assert_eq!(enc.decode(b"Caf\x8e").unwrap(), "Café"); //! assert_eq!(enc.encode("Café").unwrap(), b"Caf\x8e"); //! ``` #![forbid(unsafe_code)] @@ -23,64 +36,278 @@ use std::fmt; -mod mac_roman; +mod tables; -pub use mac_roman::MacRomanRevision; +use tables::mac; -/// Mac script code for the Roman script system (`smRoman`). +/// Which revision of an encoding's table to use. /// -/// This is the value carried in the Finder Info `fdScript` byte; pass it to -/// [`AppleEncoding::from_script_code`] to pick the matching encoding. -pub const SCRIPT_ROMAN: u8 = 0; +/// The Euro rollout (Mac OS 8.5 for the Roman regional family, 9.0 for +/// Cyrillic, 9.2.2 for Greek) changed a handful of byte slots per encoding. +/// Defaults to [`Modern`](Revision::Modern); choose +/// [`Classic`](Revision::Classic) for pre-Euro / emulator fidelity. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] +pub enum Revision { + /// The current table: Euro sign present where the encoding gained one. + #[default] + Modern, + /// The pre-Euro table (pre-8.5 / pre-9.0 / pre-9.2.2 per encoding). + Classic, +} /// A classic Mac OS text encoding. /// -/// Non-exhaustive: more script systems will be added without it being a breaking -/// change, so external matches must include a wildcard arm. -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +/// Variants carry a [`Revision`] where Apple revised the table for the Euro +/// rollout; the rest never changed. Mac OS Ukrainian is the pre-9.0 variant +/// of Cyrillic that Mac OS 9.0 retired (modern Cyrillic *is* its successor), +/// so it has no revision of its own. +/// +/// Non-exhaustive: more script systems will be added without it being a +/// breaking change, so external matches must include a wildcard arm. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] #[non_exhaustive] pub enum AppleEncoding { - /// Mac OS Roman, at the given table revision. - MacRoman(MacRomanRevision), + /// Mac OS Roman — the base Latin-script encoding. + MacRoman(Revision), + /// Mac OS Greek. + MacGreek(Revision), + /// Mac OS Cyrillic (the Mac OS 9.0 unified table at + /// [`Modern`](Revision::Modern); the pre-9.0 Russian/Bulgarian + /// currency-sign variant at [`Classic`](Revision::Classic)). + MacCyrillic(Revision), + /// Mac OS Central European Roman (Czech, Slovak, Polish, Hungarian, + /// Baltic). + MacCentralEurRoman, + /// Mac OS Turkish. Byte `0xF5` is Apple's "undefined character" + /// (`U+F8A0`), preserved as mapped for round-trip fidelity. + MacTurkish, + /// Mac OS Croatian. + MacCroatian(Revision), + /// Mac OS Icelandic. + MacIcelandic(Revision), + /// Mac OS Romanian. + MacRomanian(Revision), + /// Mac OS Celtic. + MacCeltic(Revision), + /// Mac OS Gaelic. + MacGaelic(Revision), + /// Mac OS Ukrainian — the pre-9.0 Ukrainian currency-sign variant of + /// Cyrillic (identical to modern Cyrillic except `0xFF` is `¤`). + MacUkrainian, + /// Mac OS Inuit (Inuktitut syllabics). + MacInuit, } impl Default for AppleEncoding { - /// Mac OS Roman at the modern (post-8.5) revision — the common default. + /// Mac OS Roman at the modern revision — the common default. fn default() -> Self { - Self::MacRoman(MacRomanRevision::Modern) + Self::MacRoman(Revision::Modern) } } impl AppleEncoding { - /// Select an encoding from a Mac `fdScript` script code, or `None` if this - /// crate does not yet implement it. + /// Every encoding this crate implements, at the default + /// ([`Modern`](Revision::Modern)) revision, in text-encoding order. + pub const ALL: &'static [AppleEncoding] = &[ + Self::MacRoman(Revision::Modern), + Self::MacGreek(Revision::Modern), + Self::MacCyrillic(Revision::Modern), + Self::MacCentralEurRoman, + Self::MacTurkish, + Self::MacCroatian(Revision::Modern), + Self::MacIcelandic(Revision::Modern), + Self::MacRomanian(Revision::Modern), + Self::MacCeltic(Revision::Modern), + Self::MacGaelic(Revision::Modern), + Self::MacUkrainian, + Self::MacInuit, + ]; + + /// Select an encoding from its Mac `TextEncoding` base value (the + /// `kTextEncodingMac…` constants, as carried in the HFS+ `textEncoding` + /// hint), or `None` if this crate does not implement it. Resolves to the + /// modern revision; callers wanting pre-Euro fidelity construct the + /// variant with [`Revision::Classic`] directly. + #[must_use] + pub fn from_text_encoding(base: u32) -> Option { + Self::ALL + .iter() + .copied() + .find(|enc| enc.text_encoding() == base) + } + + /// Select an encoding from a Mac script code (`smRoman` = 0, …), or + /// `None` if this crate does not implement it. For a raw Finder Info + /// `fdScript` byte — which carries a validity flag in bit 7 — use + /// [`from_fd_script`](Self::from_fd_script) instead. /// - /// Roman resolves to the modern revision; callers wanting pre-8.5 fidelity - /// construct [`AppleEncoding::MacRoman`] with [`MacRomanRevision::Classic`]. + /// A script code names a script *system*, not a table: the Roman regional + /// variants (Turkish, Croatian, …) all report script 0 and are selected by + /// the system's region code, so script 0 resolves to plain Mac OS Roman — + /// use [`from_text_encoding`](Self::from_text_encoding) when the regional + /// distinction matters. Script 28 is nominally `smEthiopic`, but Apple + /// assigned it to Mac OS Inuit (per `TextCommon.h`), which is what it + /// resolves to here. Resolves to the modern revision. #[must_use] pub fn from_script_code(code: u8) -> Option { match code { - SCRIPT_ROMAN => Some(Self::MacRoman(MacRomanRevision::default())), + 0 => Some(Self::MacRoman(Revision::Modern)), + 6 => Some(Self::MacGreek(Revision::Modern)), + 7 => Some(Self::MacCyrillic(Revision::Modern)), + 28 => Some(Self::MacInuit), + 29 => Some(Self::MacCentralEurRoman), _ => None, } } - /// Decode every byte of `bytes` to Unicode, faithfully (control bytes and a - /// trailing `NUL` included). Use [`decode_cstr`](Self::decode_cstr) for - /// `NUL`-terminated fixed-width fields. + /// Select an encoding from a raw Finder Info `fdScript` byte. + /// + /// On disk, the byte is a script code only when its high bit is set (the + /// low seven bits are then the code — a Cyrillic system writes `0x87`, + /// not `0x07`). With the high bit clear the field holds Finder flags + /// instead, meaning *no per-file script was recorded*: this returns + /// `None` and the caller falls back to its default (conventionally Mac + /// OS Roman). #[must_use] - pub fn decode(self, bytes: &[u8]) -> String { + pub fn from_fd_script(byte: u8) -> Option { + (byte & 0x80 != 0) + .then_some(byte & 0x7F) + .and_then(Self::from_script_code) + } + + /// The Mac `TextEncoding` base value (`kTextEncodingMacRoman` = 0, …). + /// Revisions share their encoding's base value. + #[must_use] + pub fn text_encoding(self) -> u32 { match self { - Self::MacRoman(revision) => decode_single_byte(bytes, &mac_roman::high_table(revision)), + Self::MacRoman(_) => 0, + Self::MacGreek(_) => 6, + Self::MacCyrillic(_) => 7, + Self::MacCentralEurRoman => 29, + Self::MacTurkish => 35, + Self::MacCroatian(_) => 36, + Self::MacIcelandic(_) => 37, + Self::MacRomanian(_) => 38, + Self::MacCeltic(_) => 39, + Self::MacGaelic(_) => 40, + Self::MacUkrainian => 0x98, + Self::MacInuit => 0xEC, } } - /// Decode up to (but not including) the first `NUL` byte — the convention for - /// classic fixed-width name fields. + /// The Mac script code (`smRoman` = 0, …) this encoding serves. Not + /// injective: every Roman regional variant reports 0, and Ukrainian + /// shares `smCyrillic` (7). Inuit occupies script 28 per `TextCommon.h`. #[must_use] - pub fn decode_cstr(self, bytes: &[u8]) -> String { - let end = bytes.iter().position(|&b| b == 0).unwrap_or(bytes.len()); - self.decode(&bytes[..end]) + pub fn script_code(self) -> u8 { + match self { + Self::MacRoman(_) + | Self::MacTurkish + | Self::MacCroatian(_) + | Self::MacIcelandic(_) + | Self::MacRomanian(_) + | Self::MacCeltic(_) + | Self::MacGaelic(_) => 0, + Self::MacGreek(_) => 6, + Self::MacCyrillic(_) | Self::MacUkrainian => 7, + Self::MacInuit => 28, + Self::MacCentralEurRoman => 29, + } + } + + /// A short human-readable name, e.g. "Mac OS Roman". Revision-independent; + /// [`Display`](fmt::Display) appends the pre-Euro qualifier. + #[must_use] + pub fn name(self) -> &'static str { + match self { + Self::MacRoman(_) => "Mac OS Roman", + Self::MacGreek(_) => "Mac OS Greek", + Self::MacCyrillic(_) => "Mac OS Cyrillic", + Self::MacCentralEurRoman => "Mac OS Central European Roman", + Self::MacTurkish => "Mac OS Turkish", + Self::MacCroatian(_) => "Mac OS Croatian", + Self::MacIcelandic(_) => "Mac OS Icelandic", + Self::MacRomanian(_) => "Mac OS Romanian", + Self::MacCeltic(_) => "Mac OS Celtic", + Self::MacGaelic(_) => "Mac OS Gaelic", + Self::MacUkrainian => "Mac OS Ukrainian", + Self::MacInuit => "Mac OS Inuit", + } + } + + /// Decode every byte of `bytes` to Unicode, faithfully (control bytes and + /// a trailing `NUL` included). Use [`decode_cstr`](Self::decode_cstr) for + /// `NUL`-terminated fixed-width fields. + /// + /// # Errors + /// + /// Returns [`DecodeError::Undefined`] for a byte value the encoding + /// leaves unmapped. Today that is only `0xFF` under Mac OS Greek at + /// [`Revision::Classic`]; every other table is total. + pub fn decode(self, bytes: &[u8]) -> Result { + let table = self.table(); + bytes + .iter() + .map(|&byte| { + table[usize::from(byte)].ok_or(DecodeError::Undefined { + byte, + encoding: self, + }) + }) + .collect() + } + + /// Decode like [`decode`](Self::decode), substituting U+FFFD REPLACEMENT + /// CHARACTER for any byte the encoding leaves undefined. + #[must_use] + pub fn decode_lossy(self, bytes: &[u8]) -> String { + let table = self.table(); + bytes + .iter() + .map(|&byte| table[usize::from(byte)].unwrap_or(REPLACEMENT)) + .collect() + } + + /// Decode up to (but not including) the first `NUL` byte, for + /// NUL-terminated or NUL-padded fields. Note that classic Mac OS *name* + /// fields (`Str27`/`Str31`) are length-prefixed Pascal strings — use + /// [`decode_pstr`](Self::decode_pstr) for those. + /// + /// # Errors + /// + /// Returns [`DecodeError`] as [`decode`](Self::decode) does. + pub fn decode_cstr(self, bytes: &[u8]) -> Result { + self.decode(cstr_prefix(bytes)) + } + + /// Decode a Pascal string (`Str255`/`Str31`/`Str27`): the first byte is + /// the length, the following `length` bytes the text — the convention for + /// classic Mac OS name fields. Trailing padding beyond the length is + /// ignored. + /// + /// # Errors + /// + /// Returns [`DecodeError::TruncatedPascalString`] if the buffer is empty + /// or shorter than the declared length (a corrupt record, not a value to + /// silently clamp), and otherwise [`DecodeError`] as + /// [`decode`](Self::decode) does. + pub fn decode_pstr(self, bytes: &[u8]) -> Result { + let [length, rest @ ..] = bytes else { + return Err(DecodeError::TruncatedPascalString { + declared: 0, + available: 0, + encoding: self, + }); + }; + let declared = usize::from(*length); + let Some(text) = rest.get(..declared) else { + return Err(DecodeError::TruncatedPascalString { + declared, + available: rest.len(), + encoding: self, + }); + }; + self.decode(text) } /// Encode `text` back to this encoding's bytes. @@ -89,27 +316,117 @@ impl AppleEncoding { /// /// Returns [`EncodeError::Unmappable`] for the first character with no /// representation in this encoding (e.g. a Euro sign under - /// [`MacRomanRevision::Classic`]). + /// [`Revision::Classic`], or any character outside the script). pub fn encode(self, text: &str) -> Result, EncodeError> { + let table = self.table(); + text.chars() + .map(|ch| { + table + .iter() + .position(|&slot| slot == Some(ch)) + .map(|i| i as u8) + .ok_or(EncodeError::Unmappable { ch, encoding: self }) + }) + .collect() + } + + /// The full byte-to-scalar table for this encoding and revision. + fn table(self) -> &'static [Option; 256] { + use Revision::{Classic, Modern}; match self { - Self::MacRoman(revision) => { - encode_single_byte(text, &mac_roman::high_table(revision), self) - } + Self::MacRoman(Modern) => &mac::MAC_ROMAN, + Self::MacRoman(Classic) => &mac::MAC_ROMAN_CLASSIC, + Self::MacGreek(Modern) => &mac::MAC_GREEK, + Self::MacGreek(Classic) => &mac::MAC_GREEK_CLASSIC, + Self::MacCyrillic(Modern) => &mac::MAC_CYRILLIC, + Self::MacCyrillic(Classic) => &mac::MAC_CYRILLIC_CLASSIC, + Self::MacCentralEurRoman => &mac::MAC_CENTRAL_EUR_ROMAN, + Self::MacTurkish => &mac::MAC_TURKISH, + Self::MacCroatian(Modern) => &mac::MAC_CROATIAN, + Self::MacCroatian(Classic) => &mac::MAC_CROATIAN_CLASSIC, + Self::MacIcelandic(Modern) => &mac::MAC_ICELANDIC, + Self::MacIcelandic(Classic) => &mac::MAC_ICELANDIC_CLASSIC, + Self::MacRomanian(Modern) => &mac::MAC_ROMANIAN, + Self::MacRomanian(Classic) => &mac::MAC_ROMANIAN_CLASSIC, + Self::MacCeltic(Modern) => &mac::MAC_CELTIC, + Self::MacCeltic(Classic) => &mac::MAC_CELTIC_CLASSIC, + Self::MacGaelic(Modern) => &mac::MAC_GAELIC, + Self::MacGaelic(Classic) => &mac::MAC_GAELIC_CLASSIC, + Self::MacUkrainian => &mac::MAC_UKRAINIAN, + Self::MacInuit => &mac::MAC_INUIT, + } + } + + /// The Euro-cutover qualifier for the classic revision, or `None` when + /// this variant is not a classic revision. + fn classic_qualifier(self) -> Option<&'static str> { + match self { + Self::MacRoman(Revision::Classic) + | Self::MacCroatian(Revision::Classic) + | Self::MacIcelandic(Revision::Classic) + | Self::MacRomanian(Revision::Classic) + | Self::MacCeltic(Revision::Classic) + | Self::MacGaelic(Revision::Classic) => Some("pre-8.5"), + Self::MacCyrillic(Revision::Classic) => Some("pre-9.0"), + Self::MacGreek(Revision::Classic) => Some("pre-9.2.2"), + _ => None, } } } impl fmt::Display for AppleEncoding { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::MacRoman(MacRomanRevision::Modern) => f.write_str("Mac OS Roman (post-8.5)"), - Self::MacRoman(MacRomanRevision::Classic) => f.write_str("Mac OS Roman (pre-8.5)"), + match self.classic_qualifier() { + Some(qualifier) => write!(f, "{} ({qualifier})", self.name()), + None => f.write_str(self.name()), } } } -/// A character could not be encoded into the target Mac encoding. +/// U+FFFD REPLACEMENT CHARACTER, used by the lossy decoder. +const REPLACEMENT: char = '\u{FFFD}'; + +/// Everything before the first `NUL` byte (or all of `bytes` if there is +/// none) — the trim behind [`AppleEncoding::decode_cstr`]. +fn cstr_prefix(bytes: &[u8]) -> &[u8] { + let end = bytes.iter().position(|&b| b == 0).unwrap_or(bytes.len()); + &bytes[..end] +} + +/// A byte sequence could not be decoded from the source encoding. +/// +/// Non-exhaustive so future variants are not a breaking change. #[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +#[non_exhaustive] +pub enum DecodeError { + /// `byte` has no mapping in `encoding`. + #[error("byte {byte:#04x} is undefined in {encoding}")] + Undefined { + /// The offending byte value. + byte: u8, + /// The encoding that leaves it undefined. + encoding: AppleEncoding, + }, + /// A Pascal string's buffer was empty or shorter than its declared + /// length. + #[error( + "Pascal string declares {declared} bytes but only {available} are present ({encoding})" + )] + TruncatedPascalString { + /// The length the leading byte declared (0 if the buffer was empty). + declared: usize, + /// The bytes actually available after the length byte. + available: usize, + /// The encoding being decoded. + encoding: AppleEncoding, + }, +} + +/// A character could not be encoded into the target Mac encoding. +/// +/// Non-exhaustive so future variants are not a breaking change. +#[derive(Debug, Clone, PartialEq, Eq, thiserror::Error)] +#[non_exhaustive] pub enum EncodeError { /// `ch` has no representation in `encoding`. #[error("character {ch:?} has no mapping in {encoding}")] @@ -121,128 +438,391 @@ pub enum EncodeError { }, } -/// Decode a single-byte encoding: ASCII passes through, high bytes index `high`. -fn decode_single_byte(bytes: &[u8], high: &[char; 128]) -> String { - bytes - .iter() - .map(|&b| { - if b < 0x80 { - b as char - } else { - high[(b - 0x80) as usize] - } - }) - .collect() -} - -/// Encode to a single-byte encoding. ASCII maps to itself; other characters are -/// looked up in `high` (a bijection over `0x80..=0xFF`), erroring if absent. -fn encode_single_byte( - text: &str, - high: &[char; 128], - encoding: AppleEncoding, -) -> Result, EncodeError> { - text.chars() - .map(|ch| { - if (ch as u32) < 0x80 { - Ok(ch as u8) - } else { - high.iter() - .position(|&c| c == ch) - .map(|i| 0x80 + i as u8) - .ok_or(EncodeError::Unmappable { ch, encoding }) - } - }) - .collect() -} - #[cfg(test)] mod tests { use super::*; + /// Every revision-bearing encoding at its classic revision. + const ALL_CLASSIC: &[AppleEncoding] = &[ + AppleEncoding::MacRoman(Revision::Classic), + AppleEncoding::MacGreek(Revision::Classic), + AppleEncoding::MacCyrillic(Revision::Classic), + AppleEncoding::MacCroatian(Revision::Classic), + AppleEncoding::MacIcelandic(Revision::Classic), + AppleEncoding::MacRomanian(Revision::Classic), + AppleEncoding::MacCeltic(Revision::Classic), + AppleEncoding::MacGaelic(Revision::Classic), + ]; + + /// Every table the crate ships: modern and classic revisions. + fn every_encoding() -> Vec { + AppleEncoding::ALL + .iter() + .chain(ALL_CLASSIC) + .copied() + .collect() + } + fn roman() -> AppleEncoding { AppleEncoding::default() } #[test] fn ascii_passthrough() { - assert_eq!(roman().decode(b"Macintosh HD"), "Macintosh HD"); - assert_eq!(roman().encode("Macintosh HD").unwrap(), b"Macintosh HD"); + for &enc in AppleEncoding::ALL { + assert_eq!(enc.decode(b"Macintosh HD").unwrap(), "Macintosh HD"); + assert_eq!(enc.encode("Macintosh HD").unwrap(), b"Macintosh HD"); + } } #[test] fn known_high_mappings() { - // Same golden cases the fsinspect table was validated against. - assert_eq!(roman().decode(&[0x80]), "Ä"); - assert_eq!(roman().decode(&[0x8E]), "é"); - assert_eq!(roman().decode(&[0xA9]), "©"); - assert_eq!(roman().decode(&[0xAA]), "™"); - assert_eq!(roman().decode(&[0xF0]), "\u{F8FF}"); // Apple logo (PUA) - } + // Golden values straight from the Apple tables. + assert_eq!(roman().decode(&[0x80]).unwrap(), "Ä"); + assert_eq!(roman().decode(&[0x8E]).unwrap(), "é"); + assert_eq!(roman().decode(&[0xA9]).unwrap(), "©"); + assert_eq!(roman().decode(&[0xAA]).unwrap(), "™"); + assert_eq!(roman().decode(&[0xF0]).unwrap(), "\u{F8FF}"); // Apple logo (PUA) - #[test] - fn euro_revision_split() { - let modern = AppleEncoding::MacRoman(MacRomanRevision::Modern); - let classic = AppleEncoding::MacRoman(MacRomanRevision::Classic); - assert_eq!(modern.decode(&[0xDB]), "€"); - assert_eq!(classic.decode(&[0xDB]), "¤"); - // Euro round-trips only under the modern table. - assert_eq!(modern.encode("€").unwrap(), vec![0xDB]); - assert_eq!(classic.encode("¤").unwrap(), vec![0xDB]); - assert!(matches!( - classic.encode("€"), - Err(EncodeError::Unmappable { ch: '€', .. }) - )); - } - - #[test] - fn decode_cstr_stops_at_nul() { - assert_eq!(roman().decode_cstr(b"Test\x00garbage"), "Test"); + let modern = Revision::Modern; assert_eq!( - roman().decode(b"Test\x00garbage").len(), - "Test garbage".len() + AppleEncoding::MacCyrillic(modern).decode(&[0x80]).unwrap(), + "А" + ); + assert_eq!( + AppleEncoding::MacCyrillic(modern).decode(&[0xDE]).unwrap(), + "ё" + ); + assert_eq!( + AppleEncoding::MacGreek(modern).decode(&[0xA1]).unwrap(), + "Γ" + ); + assert_eq!( + AppleEncoding::MacGreek(modern).decode(&[0xB0]).unwrap(), + "Α" + ); + assert_eq!( + AppleEncoding::MacCentralEurRoman.decode(&[0xDB]).unwrap(), + "Ř" + ); + assert_eq!( + AppleEncoding::MacCentralEurRoman.decode(&[0xFF]).unwrap(), + "ˇ" + ); + assert_eq!(AppleEncoding::MacTurkish.decode(&[0xDA]).unwrap(), "Ğ"); + assert_eq!(AppleEncoding::MacTurkish.decode(&[0xDB]).unwrap(), "ğ"); + assert_eq!( + AppleEncoding::MacCeltic(modern).decode(&[0xDE]).unwrap(), + "Ŷ" + ); + assert_eq!( + AppleEncoding::MacGaelic(modern).decode(&[0xB0]).unwrap(), + "\u{1E02}" + ); + assert_eq!( + AppleEncoding::MacGaelic(modern).decode(&[0xF0]).unwrap(), + "♣" // Apple maps the shamrock to BLACK CLUB SUIT + ); + assert_eq!( + AppleEncoding::MacIcelandic(modern).decode(&[0xDE]).unwrap(), + "Þ" + ); + assert_eq!( + AppleEncoding::MacCroatian(modern).decode(&[0xDE]).unwrap(), + "Æ" + ); + assert_eq!( + AppleEncoding::MacRomanian(modern).decode(&[0xAF]).unwrap(), + "\u{0218}" // S WITH COMMA BELOW + ); + assert_eq!( + AppleEncoding::MacInuit.decode(&[0x80]).unwrap(), + "\u{1403}" // CANADIAN SYLLABICS I ); } #[test] - fn high_bytes_round_trip_both_revisions() { - for revision in [MacRomanRevision::Modern, MacRomanRevision::Classic] { - let enc = AppleEncoding::MacRoman(revision); - for byte in 0x80u8..=0xFF { - let decoded = enc.decode(&[byte]); - assert_eq!( - enc.encode(&decoded).unwrap(), - vec![byte], - "byte {byte:#04x} failed to round-trip under {enc}" - ); + fn euro_revision_split_roman_family() { + for classic in [ + AppleEncoding::MacRoman(Revision::Classic), + AppleEncoding::MacCroatian(Revision::Classic), + AppleEncoding::MacIcelandic(Revision::Classic), + AppleEncoding::MacRomanian(Revision::Classic), + AppleEncoding::MacCeltic(Revision::Classic), + AppleEncoding::MacGaelic(Revision::Classic), + ] { + let modern = match classic { + AppleEncoding::MacRoman(_) => AppleEncoding::MacRoman(Revision::Modern), + AppleEncoding::MacCroatian(_) => AppleEncoding::MacCroatian(Revision::Modern), + AppleEncoding::MacIcelandic(_) => AppleEncoding::MacIcelandic(Revision::Modern), + AppleEncoding::MacRomanian(_) => AppleEncoding::MacRomanian(Revision::Modern), + AppleEncoding::MacCeltic(_) => AppleEncoding::MacCeltic(Revision::Modern), + AppleEncoding::MacGaelic(_) => AppleEncoding::MacGaelic(Revision::Modern), + other => panic!("unexpected encoding {other}"), + }; + assert_eq!(modern.decode(&[0xDB]).unwrap(), "€", "{modern}"); + assert_eq!(classic.decode(&[0xDB]).unwrap(), "¤", "{classic}"); + assert_eq!(modern.encode("€").unwrap(), vec![0xDB]); + assert_eq!(classic.encode("¤").unwrap(), vec![0xDB]); + assert!(matches!( + classic.encode("€"), + Err(EncodeError::Unmappable { ch: '€', .. }) + )); + } + } + + #[test] + fn cyrillic_revision_changed_three_bytes() { + let modern = AppleEncoding::MacCyrillic(Revision::Modern); + let classic = AppleEncoding::MacCyrillic(Revision::Classic); + // Mac OS 9.0: 0xA2/0xB6 became GHE WITH UPTURN, 0xFF became Euro. + assert_eq!(modern.decode(&[0xA2]).unwrap(), "\u{0490}"); + assert_eq!(modern.decode(&[0xB6]).unwrap(), "\u{0491}"); + assert_eq!(modern.decode(&[0xFF]).unwrap(), "€"); + assert_eq!(classic.decode(&[0xA2]).unwrap(), "¢"); + assert_eq!(classic.decode(&[0xB6]).unwrap(), "∂"); + assert_eq!(classic.decode(&[0xFF]).unwrap(), "¤"); + } + + #[test] + fn ukrainian_is_modern_cyrillic_with_currency_sign() { + let ukrainian = AppleEncoding::MacUkrainian; + let cyrillic = AppleEncoding::MacCyrillic(Revision::Modern); + assert_eq!(ukrainian.decode(&[0xA2]).unwrap(), "\u{0490}"); + assert_eq!(ukrainian.decode(&[0xB6]).unwrap(), "\u{0491}"); + assert_eq!(ukrainian.decode(&[0xFF]).unwrap(), "¤"); + for byte in 0x00..=0xFE_u8 { + assert_eq!( + ukrainian.decode(&[byte]).unwrap(), + cyrillic.decode(&[byte]).unwrap(), + "byte {byte:#04x}" + ); + } + } + + #[test] + fn greek_revision_moved_soft_hyphen() { + let modern = AppleEncoding::MacGreek(Revision::Modern); + let classic = AppleEncoding::MacGreek(Revision::Classic); + // Mac OS 9.2.2: soft hyphen moved 0x9C -> 0xFF, Euro landed at 0x9C. + assert_eq!(modern.decode(&[0x9C]).unwrap(), "€"); + assert_eq!(modern.decode(&[0xFF]).unwrap(), "\u{00AD}"); + assert_eq!(classic.decode(&[0x9C]).unwrap(), "\u{00AD}"); + assert_eq!( + classic.decode(b"a\xFFb"), + Err(DecodeError::Undefined { + byte: 0xFF, + encoding: classic + }) + ); + assert_eq!(classic.decode_lossy(b"a\xFFb"), "a\u{FFFD}b"); + } + + #[test] + fn turkish_undefined_slot_is_pua_and_round_trips() { + // Apple maps the undefined 0xF5 to U+F8A0 (corporate PUA) rather + // than omitting it; preserving that keeps byte round-trips exact. + let enc = AppleEncoding::MacTurkish; + assert_eq!(enc.decode(&[0xF5]).unwrap(), "\u{F8A0}"); + assert_eq!(enc.encode("\u{F8A0}").unwrap(), vec![0xF5]); + } + + #[test] + fn every_encoding_round_trips_every_byte() { + for enc in every_encoding() { + for byte in 0x00..=0xFF_u8 { + match enc.decode(&[byte]) { + Ok(decoded) => assert_eq!( + enc.encode(&decoded).unwrap(), + vec![byte], + "byte {byte:#04x} failed to round-trip under {enc}" + ), + Err(DecodeError::Undefined { .. }) => { + assert_eq!(enc.decode_lossy(&[byte]), "\u{FFFD}"); + } + Err(other) => panic!("unexpected error for {byte:#04x}: {other}"), + } } } } #[test] - fn high_table_is_a_bijection() { - // No duplicate glyphs, else encode would be ambiguous. - let table = mac_roman::high_table(MacRomanRevision::Modern); - for i in 0..table.len() { - for j in (i + 1)..table.len() { - assert_ne!(table[i], table[j], "duplicate glyph at {i} and {j}"); + fn every_table_is_a_bijection() { + // No duplicate scalars, else encode would be ambiguous. + for enc in every_encoding() { + let mut seen = std::collections::HashSet::new(); + for slot in enc.table().iter().flatten() { + assert!(seen.insert(*slot), "duplicate scalar {slot:?} in {enc}"); + } + } + } + + #[test] + fn only_classic_greek_has_undefined_slots() { + for enc in every_encoding() { + let undefined: Vec = enc + .table() + .iter() + .enumerate() + .filter_map(|(i, slot)| slot.is_none().then_some(i)) + .collect(); + if enc == AppleEncoding::MacGreek(Revision::Classic) { + assert_eq!(undefined, vec![0xFF], "{enc}"); + } else { + assert!(undefined.is_empty(), "{enc} has undefined slots"); } } } #[test] fn unmappable_character_errors() { - // A CJK character has no place in Mac OS Roman. + // A CJK character has no place in any of these encodings. let err = roman().encode("空").unwrap_err(); assert!(matches!(err, EncodeError::Unmappable { ch: '空', .. })); + // ñ exists in Roman but not in Greek (which does keep é and Ä). + assert!(AppleEncoding::MacGreek(Revision::Modern) + .encode("ñ") + .is_err()); } #[test] - fn from_script_code_roman_only() { + fn decode_cstr_stops_at_nul() { + assert_eq!(roman().decode_cstr(b"Test\x00garbage").unwrap(), "Test"); + assert_eq!(roman().decode_cstr(b"Test").unwrap(), "Test"); // no NUL at all + assert_eq!(roman().decode_cstr(b"\x00Test").unwrap(), ""); assert_eq!( - AppleEncoding::from_script_code(SCRIPT_ROMAN), - Some(AppleEncoding::MacRoman(MacRomanRevision::Modern)) + roman().decode(b"Test\x00garbage").unwrap().len(), + "Test garbage".len() + ); + } + + #[test] + fn decode_pstr_reads_length_prefixed_names() { + // Str27 volume-name style: length byte, text, NUL padding. + let field = b"\x0AMacintosh\x8E\x00\x00\x00"; + assert_eq!(roman().decode_pstr(field).unwrap(), "Macintoshé"); + assert_eq!(roman().decode_pstr(b"\x00junk").unwrap(), ""); + // A length byte overrunning the buffer is corruption, not a clamp. + assert_eq!( + roman().decode_pstr(b"\x0Fshort"), + Err(DecodeError::TruncatedPascalString { + declared: 15, + available: 5, + encoding: roman() + }) + ); + assert_eq!( + roman().decode_pstr(b""), + Err(DecodeError::TruncatedPascalString { + declared: 0, + available: 0, + encoding: roman() + }) + ); + } + + #[test] + fn from_fd_script_requires_the_validity_flag() { + // Bit 7 set: low seven bits are the script code. + assert_eq!( + AppleEncoding::from_fd_script(0x87), + Some(AppleEncoding::MacCyrillic(Revision::Modern)) + ); + assert_eq!( + AppleEncoding::from_fd_script(0x80), + Some(AppleEncoding::MacRoman(Revision::Modern)) + ); + // Bit 7 clear: the field is Finder flags, not a script. + assert_eq!(AppleEncoding::from_fd_script(0x07), None); + assert_eq!(AppleEncoding::from_fd_script(0x00), None); + // Flagged but unimplemented script. + assert_eq!(AppleEncoding::from_fd_script(0x82), None); // smTradChinese + } + + #[test] + fn empty_input_is_empty_output() { + assert_eq!(roman().decode(b"").unwrap(), ""); + assert_eq!(roman().decode_lossy(b""), ""); + assert_eq!(roman().encode("").unwrap(), Vec::::new()); + } + + #[test] + fn from_text_encoding_round_trips() { + for &enc in AppleEncoding::ALL { + assert_eq!( + AppleEncoding::from_text_encoding(enc.text_encoding()), + Some(enc) + ); + } + assert_eq!(AppleEncoding::from_text_encoding(1), None); // MacJapanese, not yet + assert_eq!( + AppleEncoding::from_text_encoding(0x98), + Some(AppleEncoding::MacUkrainian) + ); + assert_eq!( + AppleEncoding::from_text_encoding(0xEC), + Some(AppleEncoding::MacInuit) + ); + } + + #[test] + fn from_script_code_resolves_script_systems() { + assert_eq!( + AppleEncoding::from_script_code(0), + Some(AppleEncoding::MacRoman(Revision::Modern)) + ); + assert_eq!( + AppleEncoding::from_script_code(6), + Some(AppleEncoding::MacGreek(Revision::Modern)) + ); + assert_eq!( + AppleEncoding::from_script_code(7), + Some(AppleEncoding::MacCyrillic(Revision::Modern)) + ); + assert_eq!( + AppleEncoding::from_script_code(28), + Some(AppleEncoding::MacInuit) // Apple parked Inuit on smEthiopic's code + ); + assert_eq!( + AppleEncoding::from_script_code(29), + Some(AppleEncoding::MacCentralEurRoman) + ); + assert_eq!(AppleEncoding::from_script_code(2), None); // smTradChinese, not yet + } + + #[test] + fn script_codes_are_consistent_with_lookup() { + for &enc in AppleEncoding::ALL { + // Whatever script an encoding reports, looking that script up + // must yield an encoding of the same script. + let resolved = AppleEncoding::from_script_code(enc.script_code()) + .unwrap_or_else(|| panic!("{enc} reports an unresolvable script")); + assert_eq!(resolved.script_code(), enc.script_code()); + } + } + + #[test] + fn display_names() { + assert_eq!(roman().to_string(), "Mac OS Roman"); + assert_eq!( + AppleEncoding::MacRoman(Revision::Classic).to_string(), + "Mac OS Roman (pre-8.5)" + ); + assert_eq!( + AppleEncoding::MacCyrillic(Revision::Classic).to_string(), + "Mac OS Cyrillic (pre-9.0)" + ); + assert_eq!( + AppleEncoding::MacGreek(Revision::Classic).to_string(), + "Mac OS Greek (pre-9.2.2)" + ); + assert_eq!(AppleEncoding::MacUkrainian.to_string(), "Mac OS Ukrainian"); + let err = AppleEncoding::MacGreek(Revision::Modern) + .encode("ñ") + .unwrap_err(); + assert_eq!( + err.to_string(), + "character 'ñ' has no mapping in Mac OS Greek" ); - assert_eq!(AppleEncoding::from_script_code(2), None); // smJapanese, not yet } } diff --git a/src/mac_roman.rs b/src/mac_roman.rs deleted file mode 100644 index e1219eb..0000000 --- a/src/mac_roman.rs +++ /dev/null @@ -1,60 +0,0 @@ -//! Mac OS Roman: the high half of the table and revision handling. -//! -//! The lower 128 byte values are identical to ASCII; only `0x80..=0xFF` carry -//! Mac-specific glyphs. The table below is the **post-Mac OS 8.5** revision -//! (byte `0xDB` is the Euro sign); [`MacRomanRevision::Classic`] swaps that one -//! slot back to the pre-8.5 currency sign. See `docs` in the consuming projects -//! for why revision pinning is per-encoding. -//! -//! Source: the Unicode Consortium `VENDORS/APPLE/ROMAN.TXT` mapping. - -/// Unicode scalars for Mac OS Roman bytes `0x80..=0xFF` (post-8.5 revision). -/// -/// Index `i` corresponds to byte value `0x80 + i` — e.g. index 0 is `0x80` → 'Ä'. -pub(crate) const MAC_ROMAN_HIGH: [char; 128] = [ - 'Ä', 'Å', 'Ç', 'É', 'Ñ', 'Ö', 'Ü', 'á', // 0x80-0x87 - 'à', 'â', 'ä', 'ã', 'å', 'ç', 'é', 'è', // 0x88-0x8F - 'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ñ', 'ó', // 0x90-0x97 - 'ò', 'ô', 'ö', 'õ', 'ú', 'ù', 'û', 'ü', // 0x98-0x9F - '†', '°', '¢', '£', '§', '•', '¶', 'ß', // 0xA0-0xA7 - '®', '©', '™', '´', '¨', '≠', 'Æ', 'Ø', // 0xA8-0xAF - '∞', '±', '≤', '≥', '¥', 'µ', '∂', '∑', // 0xB0-0xB7 - '∏', 'π', '∫', 'ª', 'º', 'Ω', 'æ', 'ø', // 0xB8-0xBF - '¿', '¡', '¬', '√', 'ƒ', '≈', '∆', '«', // 0xC0-0xC7 - '»', '…', '\u{00A0}', 'À', 'Ã', 'Õ', 'Œ', 'œ', // 0xC8-0xCF - '–', '—', '\u{201C}', '\u{201D}', '\u{2018}', '\u{2019}', '÷', '◊', // 0xD0-0xD7 - 'ÿ', 'Ÿ', '⁄', '€', '‹', '›', '\u{FB01}', '\u{FB02}', // 0xD8-0xDF (0xDB € post-8.5) - '‡', '·', '‚', '„', '‰', 'Â', 'Ê', 'Á', // 0xE0-0xE7 - 'Ë', 'È', 'Í', 'Î', 'Ï', 'Ì', 'Ó', 'Ô', // 0xE8-0xEF - '\u{F8FF}', 'Ò', 'Ú', 'Û', 'Ù', 'ı', 'ˆ', '˜', // 0xF0-0xF7 (0xF0 = Apple logo, PUA) - '¯', '˘', '˙', '˚', '¸', '˝', '˛', 'ˇ', // 0xF8-0xFF -]; - -/// Index of byte `0xDB`, the only slot that differs across the 8.5 revision. -const EURO_SLOT: usize = (0xDB - 0x80) as usize; - -/// The pre-8.5 glyph at `0xDB`: CURRENCY SIGN. -const CLASSIC_CURRENCY: char = '\u{00A4}'; - -/// Which revision of Mac OS Roman to use. -/// -/// The Mac OS 8.5 Euro update changed exactly one byte (`0xDB`). Defaults to -/// [`Modern`](MacRomanRevision::Modern); choose [`Classic`](MacRomanRevision::Classic) -/// for pre-8.5 / emulator fidelity. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] -pub enum MacRomanRevision { - /// Mac OS 8.5 and later: `0xDB` is EURO SIGN (`U+20AC`). - #[default] - Modern, - /// Before Mac OS 8.5: `0xDB` is CURRENCY SIGN (`U+00A4`). - Classic, -} - -/// The effective high-half table for `revision` (a cheap 512-byte stack copy). -pub(crate) fn high_table(revision: MacRomanRevision) -> [char; 128] { - let mut table = MAC_ROMAN_HIGH; - if revision == MacRomanRevision::Classic { - table[EURO_SLOT] = CLASSIC_CURRENCY; - } - table -} diff --git a/src/tables/mac.rs b/src/tables/mac.rs new file mode 100644 index 0000000..a4fdca1 --- /dev/null +++ b/src/tables/mac.rs @@ -0,0 +1,5205 @@ +//! Generated by `tools/gen_tables.py` — do not edit by hand. +//! +//! Source: the Unicode Consortium's Apple mapping tables, vendored in +//! `data/apple/`. `*_CLASSIC` tables are the pre-Euro revisions, +//! reconstructed from the deltas documented in each file's change history. + +/// ROMAN.TXT, byte value to Unicode scalar. +pub(crate) const MAC_ROMAN: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('€'), + Some('‹'), + Some('›'), + Some('fi'), + Some('fl'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// ROMAN.TXT at the pre-Euro revision. +pub(crate) const MAC_ROMAN_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('¤'), + Some('‹'), + Some('›'), + Some('fi'), + Some('fl'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// GREEK.TXT, byte value to Unicode scalar. +pub(crate) const MAC_GREEK: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('¹'), + Some('²'), + Some('É'), + Some('³'), + Some('Ö'), + Some('Ü'), + Some('΅'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('΄'), + Some('¨'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('£'), + Some('™'), + Some('î'), + Some('ï'), + Some('•'), + Some('½'), // 0x90-0x97 + Some('‰'), + Some('ô'), + Some('ö'), + Some('¦'), + Some('€'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('Γ'), + Some('Δ'), + Some('Θ'), + Some('Λ'), + Some('Ξ'), + Some('Π'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('Σ'), + Some('Ϊ'), + Some('§'), + Some('≠'), + Some('°'), + Some('·'), // 0xa8-0xaf + Some('Α'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('Β'), + Some('Ε'), + Some('Ζ'), // 0xb0-0xb7 + Some('Η'), + Some('Ι'), + Some('Κ'), + Some('Μ'), + Some('Φ'), + Some('Ϋ'), + Some('Ψ'), + Some('Ω'), // 0xb8-0xbf + Some('ά'), + Some('Ν'), + Some('¬'), + Some('Ο'), + Some('Ρ'), + Some('≈'), + Some('Τ'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('Υ'), + Some('Χ'), + Some('Ά'), + Some('Έ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('―'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('Ή'), // 0xd0-0xd7 + Some('Ί'), + Some('Ό'), + Some('Ύ'), + Some('έ'), + Some('ή'), + Some('ί'), + Some('ό'), + Some('Ώ'), // 0xd8-0xdf + Some('ύ'), + Some('α'), + Some('β'), + Some('ψ'), + Some('δ'), + Some('ε'), + Some('φ'), + Some('γ'), // 0xe0-0xe7 + Some('η'), + Some('ι'), + Some('ξ'), + Some('κ'), + Some('λ'), + Some('μ'), + Some('ν'), + Some('ο'), // 0xe8-0xef + Some('π'), + Some('ώ'), + Some('ρ'), + Some('σ'), + Some('τ'), + Some('θ'), + Some('ω'), + Some('ς'), // 0xf0-0xf7 + Some('χ'), + Some('υ'), + Some('ζ'), + Some('ϊ'), + Some('ϋ'), + Some('ΐ'), + Some('ΰ'), + Some('\u{00AD}'), // 0xf8-0xff +]; + +/// GREEK.TXT at the pre-Euro revision. +pub(crate) const MAC_GREEK_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('¹'), + Some('²'), + Some('É'), + Some('³'), + Some('Ö'), + Some('Ü'), + Some('΅'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('΄'), + Some('¨'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('£'), + Some('™'), + Some('î'), + Some('ï'), + Some('•'), + Some('½'), // 0x90-0x97 + Some('‰'), + Some('ô'), + Some('ö'), + Some('¦'), + Some('\u{00AD}'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('Γ'), + Some('Δ'), + Some('Θ'), + Some('Λ'), + Some('Ξ'), + Some('Π'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('Σ'), + Some('Ϊ'), + Some('§'), + Some('≠'), + Some('°'), + Some('·'), // 0xa8-0xaf + Some('Α'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('Β'), + Some('Ε'), + Some('Ζ'), // 0xb0-0xb7 + Some('Η'), + Some('Ι'), + Some('Κ'), + Some('Μ'), + Some('Φ'), + Some('Ϋ'), + Some('Ψ'), + Some('Ω'), // 0xb8-0xbf + Some('ά'), + Some('Ν'), + Some('¬'), + Some('Ο'), + Some('Ρ'), + Some('≈'), + Some('Τ'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('Υ'), + Some('Χ'), + Some('Ά'), + Some('Έ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('―'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('Ή'), // 0xd0-0xd7 + Some('Ί'), + Some('Ό'), + Some('Ύ'), + Some('έ'), + Some('ή'), + Some('ί'), + Some('ό'), + Some('Ώ'), // 0xd8-0xdf + Some('ύ'), + Some('α'), + Some('β'), + Some('ψ'), + Some('δ'), + Some('ε'), + Some('φ'), + Some('γ'), // 0xe0-0xe7 + Some('η'), + Some('ι'), + Some('ξ'), + Some('κ'), + Some('λ'), + Some('μ'), + Some('ν'), + Some('ο'), // 0xe8-0xef + Some('π'), + Some('ώ'), + Some('ρ'), + Some('σ'), + Some('τ'), + Some('θ'), + Some('ω'), + Some('ς'), // 0xf0-0xf7 + Some('χ'), + Some('υ'), + Some('ζ'), + Some('ϊ'), + Some('ϋ'), + Some('ΐ'), + Some('ΰ'), + None, // 0xf8-0xff +]; + +/// CYRILLIC.TXT, byte value to Unicode scalar. +pub(crate) const MAC_CYRILLIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('А'), + Some('Б'), + Some('В'), + Some('Г'), + Some('Д'), + Some('Е'), + Some('Ж'), + Some('З'), // 0x80-0x87 + Some('И'), + Some('Й'), + Some('К'), + Some('Л'), + Some('М'), + Some('Н'), + Some('О'), + Some('П'), // 0x88-0x8f + Some('Р'), + Some('С'), + Some('Т'), + Some('У'), + Some('Ф'), + Some('Х'), + Some('Ц'), + Some('Ч'), // 0x90-0x97 + Some('Ш'), + Some('Щ'), + Some('Ъ'), + Some('Ы'), + Some('Ь'), + Some('Э'), + Some('Ю'), + Some('Я'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('Ґ'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('І'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('Ђ'), + Some('ђ'), + Some('≠'), + Some('Ѓ'), + Some('ѓ'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('і'), + Some('µ'), + Some('ґ'), + Some('Ј'), // 0xb0-0xb7 + Some('Є'), + Some('є'), + Some('Ї'), + Some('ї'), + Some('Љ'), + Some('љ'), + Some('Њ'), + Some('њ'), // 0xb8-0xbf + Some('ј'), + Some('Ѕ'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('Ћ'), + Some('ћ'), + Some('Ќ'), + Some('ќ'), + Some('ѕ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('„'), // 0xd0-0xd7 + Some('Ў'), + Some('ў'), + Some('Џ'), + Some('џ'), + Some('№'), + Some('Ё'), + Some('ё'), + Some('я'), // 0xd8-0xdf + Some('а'), + Some('б'), + Some('в'), + Some('г'), + Some('д'), + Some('е'), + Some('ж'), + Some('з'), // 0xe0-0xe7 + Some('и'), + Some('й'), + Some('к'), + Some('л'), + Some('м'), + Some('н'), + Some('о'), + Some('п'), // 0xe8-0xef + Some('р'), + Some('с'), + Some('т'), + Some('у'), + Some('ф'), + Some('х'), + Some('ц'), + Some('ч'), // 0xf0-0xf7 + Some('ш'), + Some('щ'), + Some('ъ'), + Some('ы'), + Some('ь'), + Some('э'), + Some('ю'), + Some('€'), // 0xf8-0xff +]; + +/// CYRILLIC.TXT at the pre-Euro revision. +pub(crate) const MAC_CYRILLIC_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('А'), + Some('Б'), + Some('В'), + Some('Г'), + Some('Д'), + Some('Е'), + Some('Ж'), + Some('З'), // 0x80-0x87 + Some('И'), + Some('Й'), + Some('К'), + Some('Л'), + Some('М'), + Some('Н'), + Some('О'), + Some('П'), // 0x88-0x8f + Some('Р'), + Some('С'), + Some('Т'), + Some('У'), + Some('Ф'), + Some('Х'), + Some('Ц'), + Some('Ч'), // 0x90-0x97 + Some('Ш'), + Some('Щ'), + Some('Ъ'), + Some('Ы'), + Some('Ь'), + Some('Э'), + Some('Ю'), + Some('Я'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('І'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('Ђ'), + Some('ђ'), + Some('≠'), + Some('Ѓ'), + Some('ѓ'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('і'), + Some('µ'), + Some('∂'), + Some('Ј'), // 0xb0-0xb7 + Some('Є'), + Some('є'), + Some('Ї'), + Some('ї'), + Some('Љ'), + Some('љ'), + Some('Њ'), + Some('њ'), // 0xb8-0xbf + Some('ј'), + Some('Ѕ'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('Ћ'), + Some('ћ'), + Some('Ќ'), + Some('ќ'), + Some('ѕ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('„'), // 0xd0-0xd7 + Some('Ў'), + Some('ў'), + Some('Џ'), + Some('џ'), + Some('№'), + Some('Ё'), + Some('ё'), + Some('я'), // 0xd8-0xdf + Some('а'), + Some('б'), + Some('в'), + Some('г'), + Some('д'), + Some('е'), + Some('ж'), + Some('з'), // 0xe0-0xe7 + Some('и'), + Some('й'), + Some('к'), + Some('л'), + Some('м'), + Some('н'), + Some('о'), + Some('п'), // 0xe8-0xef + Some('р'), + Some('с'), + Some('т'), + Some('у'), + Some('ф'), + Some('х'), + Some('ц'), + Some('ч'), // 0xf0-0xf7 + Some('ш'), + Some('щ'), + Some('ъ'), + Some('ы'), + Some('ь'), + Some('э'), + Some('ю'), + Some('¤'), // 0xf8-0xff +]; + +/// CENTEURO.TXT, byte value to Unicode scalar. +pub(crate) const MAC_CENTRAL_EUR_ROMAN: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Ā'), + Some('ā'), + Some('É'), + Some('Ą'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('ą'), + Some('Č'), + Some('ä'), + Some('č'), + Some('Ć'), + Some('ć'), + Some('é'), + Some('Ź'), // 0x88-0x8f + Some('ź'), + Some('Ď'), + Some('í'), + Some('ď'), + Some('Ē'), + Some('ē'), + Some('Ė'), + Some('ó'), // 0x90-0x97 + Some('ė'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('Ě'), + Some('ě'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('Ę'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('ę'), + Some('¨'), + Some('≠'), + Some('ģ'), + Some('Į'), // 0xa8-0xaf + Some('į'), + Some('Ī'), + Some('≤'), + Some('≥'), + Some('ī'), + Some('Ķ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('ł'), + Some('Ļ'), + Some('ļ'), + Some('Ľ'), + Some('ľ'), + Some('Ĺ'), + Some('ĺ'), + Some('Ņ'), // 0xb8-0xbf + Some('ņ'), + Some('Ń'), + Some('¬'), + Some('√'), + Some('ń'), + Some('Ň'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('ň'), + Some('Ő'), + Some('Õ'), + Some('ő'), + Some('Ō'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ō'), + Some('Ŕ'), + Some('ŕ'), + Some('Ř'), + Some('‹'), + Some('›'), + Some('ř'), + Some('Ŗ'), // 0xd8-0xdf + Some('ŗ'), + Some('Š'), + Some('‚'), + Some('„'), + Some('š'), + Some('Ś'), + Some('ś'), + Some('Á'), // 0xe0-0xe7 + Some('Ť'), + Some('ť'), + Some('Í'), + Some('Ž'), + Some('ž'), + Some('Ū'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('ū'), + Some('Ů'), + Some('Ú'), + Some('ů'), + Some('Ű'), + Some('ű'), + Some('Ų'), + Some('ų'), // 0xf0-0xf7 + Some('Ý'), + Some('ý'), + Some('ķ'), + Some('Ż'), + Some('Ł'), + Some('ż'), + Some('Ģ'), + Some('ˇ'), // 0xf8-0xff +]; + +/// TURKISH.TXT, byte value to Unicode scalar. +pub(crate) const MAC_TURKISH: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('Ğ'), + Some('ğ'), + Some('İ'), + Some('ı'), + Some('Ş'), + Some('ş'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('\u{F8A0}'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// CROATIAN.TXT, byte value to Unicode scalar. +pub(crate) const MAC_CROATIAN: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('Š'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Ž'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('∆'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('š'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('ž'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('Ć'), + Some('«'), // 0xc0-0xc7 + Some('Č'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('Đ'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('\u{F8FF}'), + Some('©'), + Some('⁄'), + Some('€'), + Some('‹'), + Some('›'), + Some('Æ'), + Some('»'), // 0xd8-0xdf + Some('–'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('ć'), + Some('Á'), // 0xe0-0xe7 + Some('č'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('đ'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('π'), + Some('Ë'), + Some('˚'), + Some('¸'), + Some('Ê'), + Some('æ'), + Some('ˇ'), // 0xf8-0xff +]; + +/// CROATIAN.TXT at the pre-Euro revision. +pub(crate) const MAC_CROATIAN_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('Š'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Ž'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('∆'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('š'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('ž'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('Ć'), + Some('«'), // 0xc0-0xc7 + Some('Č'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('Đ'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('\u{F8FF}'), + Some('©'), + Some('⁄'), + Some('¤'), + Some('‹'), + Some('›'), + Some('Æ'), + Some('»'), // 0xd8-0xdf + Some('–'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('ć'), + Some('Á'), // 0xe0-0xe7 + Some('č'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('đ'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('π'), + Some('Ë'), + Some('˚'), + Some('¸'), + Some('Ê'), + Some('æ'), + Some('ˇ'), // 0xf8-0xff +]; + +/// ICELAND.TXT, byte value to Unicode scalar. +pub(crate) const MAC_ICELANDIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('Ý'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('€'), + Some('Ð'), + Some('ð'), + Some('Þ'), + Some('þ'), // 0xd8-0xdf + Some('ý'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// ICELAND.TXT at the pre-Euro revision. +pub(crate) const MAC_ICELANDIC_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('Ý'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('¤'), + Some('Ð'), + Some('ð'), + Some('Þ'), + Some('þ'), // 0xd8-0xdf + Some('ý'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// ROMANIAN.TXT, byte value to Unicode scalar. +pub(crate) const MAC_ROMANIAN: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Ă'), + Some('Ș'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('ă'), + Some('ș'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('€'), + Some('‹'), + Some('›'), + Some('Ț'), + Some('ț'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// ROMANIAN.TXT at the pre-Euro revision. +pub(crate) const MAC_ROMANIAN_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Ă'), + Some('Ș'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('ă'), + Some('ș'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('¤'), + Some('‹'), + Some('›'), + Some('Ț'), + Some('ț'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('‚'), + Some('„'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('\u{F8FF}'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('ˆ'), + Some('˜'), // 0xf0-0xf7 + Some('¯'), + Some('˘'), + Some('˙'), + Some('˚'), + Some('¸'), + Some('˝'), + Some('˛'), + Some('ˇ'), // 0xf8-0xff +]; + +/// CELTIC.TXT, byte value to Unicode scalar. +pub(crate) const MAC_CELTIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('€'), + Some('‹'), + Some('›'), + Some('Ŷ'), + Some('ŷ'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('Ỳ'), + Some('ỳ'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('♣'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('Ý'), + Some('ý'), // 0xf0-0xf7 + Some('Ŵ'), + Some('ŵ'), + Some('Ẅ'), + Some('ẅ'), + Some('Ẁ'), + Some('ẁ'), + Some('Ẃ'), + Some('ẃ'), // 0xf8-0xff +]; + +/// CELTIC.TXT at the pre-Euro revision. +pub(crate) const MAC_CELTIC_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('¥'), + Some('µ'), + Some('∂'), + Some('∑'), // 0xb0-0xb7 + Some('∏'), + Some('π'), + Some('∫'), + Some('ª'), + Some('º'), + Some('Ω'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('¿'), + Some('¡'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('◊'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('⁄'), + Some('¤'), + Some('‹'), + Some('›'), + Some('Ŷ'), + Some('ŷ'), // 0xd8-0xdf + Some('‡'), + Some('·'), + Some('Ỳ'), + Some('ỳ'), + Some('‰'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('♣'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('Ý'), + Some('ý'), // 0xf0-0xf7 + Some('Ŵ'), + Some('ŵ'), + Some('Ẅ'), + Some('ẅ'), + Some('Ẁ'), + Some('ẁ'), + Some('Ẃ'), + Some('ẃ'), // 0xf8-0xff +]; + +/// GAELIC.TXT, byte value to Unicode scalar. +pub(crate) const MAC_GAELIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('Ḃ'), + Some('±'), + Some('≤'), + Some('≥'), + Some('ḃ'), + Some('Ċ'), + Some('ċ'), + Some('Ḋ'), // 0xb0-0xb7 + Some('ḋ'), + Some('Ḟ'), + Some('ḟ'), + Some('Ġ'), + Some('ġ'), + Some('Ṁ'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('ṁ'), + Some('Ṗ'), + Some('ṗ'), + Some('ɼ'), + Some('ƒ'), + Some('ſ'), + Some('Ṡ'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('ṡ'), + Some('ẛ'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('Ṫ'), + Some('€'), + Some('‹'), + Some('›'), + Some('Ŷ'), + Some('ŷ'), // 0xd8-0xdf + Some('ṫ'), + Some('·'), + Some('Ỳ'), + Some('ỳ'), + Some('⁊'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('♣'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('Ý'), + Some('ý'), // 0xf0-0xf7 + Some('Ŵ'), + Some('ŵ'), + Some('Ẅ'), + Some('ẅ'), + Some('Ẁ'), + Some('ẁ'), + Some('Ẃ'), + Some('ẃ'), // 0xf8-0xff +]; + +/// GAELIC.TXT at the pre-Euro revision. +pub(crate) const MAC_GAELIC_CLASSIC: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('Ä'), + Some('Å'), + Some('Ç'), + Some('É'), + Some('Ñ'), + Some('Ö'), + Some('Ü'), + Some('á'), // 0x80-0x87 + Some('à'), + Some('â'), + Some('ä'), + Some('ã'), + Some('å'), + Some('ç'), + Some('é'), + Some('è'), // 0x88-0x8f + Some('ê'), + Some('ë'), + Some('í'), + Some('ì'), + Some('î'), + Some('ï'), + Some('ñ'), + Some('ó'), // 0x90-0x97 + Some('ò'), + Some('ô'), + Some('ö'), + Some('õ'), + Some('ú'), + Some('ù'), + Some('û'), + Some('ü'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('¢'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('ß'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('´'), + Some('¨'), + Some('≠'), + Some('Æ'), + Some('Ø'), // 0xa8-0xaf + Some('Ḃ'), + Some('±'), + Some('≤'), + Some('≥'), + Some('ḃ'), + Some('Ċ'), + Some('ċ'), + Some('Ḋ'), // 0xb0-0xb7 + Some('ḋ'), + Some('Ḟ'), + Some('ḟ'), + Some('Ġ'), + Some('ġ'), + Some('Ṁ'), + Some('æ'), + Some('ø'), // 0xb8-0xbf + Some('ṁ'), + Some('Ṗ'), + Some('ṗ'), + Some('ɼ'), + Some('ƒ'), + Some('ſ'), + Some('Ṡ'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('À'), + Some('Ã'), + Some('Õ'), + Some('Œ'), + Some('œ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('ṡ'), + Some('ẛ'), // 0xd0-0xd7 + Some('ÿ'), + Some('Ÿ'), + Some('Ṫ'), + Some('¤'), + Some('‹'), + Some('›'), + Some('Ŷ'), + Some('ŷ'), // 0xd8-0xdf + Some('ṫ'), + Some('·'), + Some('Ỳ'), + Some('ỳ'), + Some('⁊'), + Some('Â'), + Some('Ê'), + Some('Á'), // 0xe0-0xe7 + Some('Ë'), + Some('È'), + Some('Í'), + Some('Î'), + Some('Ï'), + Some('Ì'), + Some('Ó'), + Some('Ô'), // 0xe8-0xef + Some('♣'), + Some('Ò'), + Some('Ú'), + Some('Û'), + Some('Ù'), + Some('ı'), + Some('Ý'), + Some('ý'), // 0xf0-0xf7 + Some('Ŵ'), + Some('ŵ'), + Some('Ẅ'), + Some('ẅ'), + Some('Ẁ'), + Some('ẁ'), + Some('Ẃ'), + Some('ẃ'), // 0xf8-0xff +]; + +/// CYRILLIC.TXT with 0xFF flipped back to CURRENCY SIGN — the pre-9.0 Ukrainian variant per the notes in UKRAINE.TXT. +pub(crate) const MAC_UKRAINIAN: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('А'), + Some('Б'), + Some('В'), + Some('Г'), + Some('Д'), + Some('Е'), + Some('Ж'), + Some('З'), // 0x80-0x87 + Some('И'), + Some('Й'), + Some('К'), + Some('Л'), + Some('М'), + Some('Н'), + Some('О'), + Some('П'), // 0x88-0x8f + Some('Р'), + Some('С'), + Some('Т'), + Some('У'), + Some('Ф'), + Some('Х'), + Some('Ц'), + Some('Ч'), // 0x90-0x97 + Some('Ш'), + Some('Щ'), + Some('Ъ'), + Some('Ы'), + Some('Ь'), + Some('Э'), + Some('Ю'), + Some('Я'), // 0x98-0x9f + Some('†'), + Some('°'), + Some('Ґ'), + Some('£'), + Some('§'), + Some('•'), + Some('¶'), + Some('І'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('Ђ'), + Some('ђ'), + Some('≠'), + Some('Ѓ'), + Some('ѓ'), // 0xa8-0xaf + Some('∞'), + Some('±'), + Some('≤'), + Some('≥'), + Some('і'), + Some('µ'), + Some('ґ'), + Some('Ј'), // 0xb0-0xb7 + Some('Є'), + Some('є'), + Some('Ї'), + Some('ї'), + Some('Љ'), + Some('љ'), + Some('Њ'), + Some('њ'), // 0xb8-0xbf + Some('ј'), + Some('Ѕ'), + Some('¬'), + Some('√'), + Some('ƒ'), + Some('≈'), + Some('∆'), + Some('«'), // 0xc0-0xc7 + Some('»'), + Some('…'), + Some('\u{00A0}'), + Some('Ћ'), + Some('ћ'), + Some('Ќ'), + Some('ќ'), + Some('ѕ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('÷'), + Some('„'), // 0xd0-0xd7 + Some('Ў'), + Some('ў'), + Some('Џ'), + Some('џ'), + Some('№'), + Some('Ё'), + Some('ё'), + Some('я'), // 0xd8-0xdf + Some('а'), + Some('б'), + Some('в'), + Some('г'), + Some('д'), + Some('е'), + Some('ж'), + Some('з'), // 0xe0-0xe7 + Some('и'), + Some('й'), + Some('к'), + Some('л'), + Some('м'), + Some('н'), + Some('о'), + Some('п'), // 0xe8-0xef + Some('р'), + Some('с'), + Some('т'), + Some('у'), + Some('ф'), + Some('х'), + Some('ц'), + Some('ч'), // 0xf0-0xf7 + Some('ш'), + Some('щ'), + Some('ъ'), + Some('ы'), + Some('ь'), + Some('э'), + Some('ю'), + Some('¤'), // 0xf8-0xff +]; + +/// INUIT.TXT, byte value to Unicode scalar. +pub(crate) const MAC_INUIT: [Option; 256] = [ + Some('\u{0000}'), + Some('\u{0001}'), + Some('\u{0002}'), + Some('\u{0003}'), + Some('\u{0004}'), + Some('\u{0005}'), + Some('\u{0006}'), + Some('\u{0007}'), // 0x00-0x07 + Some('\u{0008}'), + Some('\u{0009}'), + Some('\u{000A}'), + Some('\u{000B}'), + Some('\u{000C}'), + Some('\u{000D}'), + Some('\u{000E}'), + Some('\u{000F}'), // 0x08-0x0f + Some('\u{0010}'), + Some('\u{0011}'), + Some('\u{0012}'), + Some('\u{0013}'), + Some('\u{0014}'), + Some('\u{0015}'), + Some('\u{0016}'), + Some('\u{0017}'), // 0x10-0x17 + Some('\u{0018}'), + Some('\u{0019}'), + Some('\u{001A}'), + Some('\u{001B}'), + Some('\u{001C}'), + Some('\u{001D}'), + Some('\u{001E}'), + Some('\u{001F}'), // 0x18-0x1f + Some(' '), + Some('!'), + Some('"'), + Some('#'), + Some('$'), + Some('%'), + Some('&'), + Some('\u{0027}'), // 0x20-0x27 + Some('('), + Some(')'), + Some('*'), + Some('+'), + Some(','), + Some('-'), + Some('.'), + Some('/'), // 0x28-0x2f + Some('0'), + Some('1'), + Some('2'), + Some('3'), + Some('4'), + Some('5'), + Some('6'), + Some('7'), // 0x30-0x37 + Some('8'), + Some('9'), + Some(':'), + Some(';'), + Some('<'), + Some('='), + Some('>'), + Some('?'), // 0x38-0x3f + Some('@'), + Some('A'), + Some('B'), + Some('C'), + Some('D'), + Some('E'), + Some('F'), + Some('G'), // 0x40-0x47 + Some('H'), + Some('I'), + Some('J'), + Some('K'), + Some('L'), + Some('M'), + Some('N'), + Some('O'), // 0x48-0x4f + Some('P'), + Some('Q'), + Some('R'), + Some('S'), + Some('T'), + Some('U'), + Some('V'), + Some('W'), // 0x50-0x57 + Some('X'), + Some('Y'), + Some('Z'), + Some('['), + Some('\u{005C}'), + Some(']'), + Some('^'), + Some('_'), // 0x58-0x5f + Some('`'), + Some('a'), + Some('b'), + Some('c'), + Some('d'), + Some('e'), + Some('f'), + Some('g'), // 0x60-0x67 + Some('h'), + Some('i'), + Some('j'), + Some('k'), + Some('l'), + Some('m'), + Some('n'), + Some('o'), // 0x68-0x6f + Some('p'), + Some('q'), + Some('r'), + Some('s'), + Some('t'), + Some('u'), + Some('v'), + Some('w'), // 0x70-0x77 + Some('x'), + Some('y'), + Some('z'), + Some('{'), + Some('|'), + Some('}'), + Some('~'), + Some('\u{007F}'), // 0x78-0x7f + Some('ᐃ'), + Some('ᐄ'), + Some('ᐅ'), + Some('ᐆ'), + Some('ᐊ'), + Some('ᐋ'), + Some('ᐱ'), + Some('ᐲ'), // 0x80-0x87 + Some('ᐳ'), + Some('ᐴ'), + Some('ᐸ'), + Some('ᐹ'), + Some('ᑉ'), + Some('ᑎ'), + Some('ᑏ'), + Some('ᑐ'), // 0x88-0x8f + Some('ᑑ'), + Some('ᑕ'), + Some('ᑖ'), + Some('ᑦ'), + Some('ᑭ'), + Some('ᑮ'), + Some('ᑯ'), + Some('ᑰ'), // 0x90-0x97 + Some('ᑲ'), + Some('ᑳ'), + Some('ᒃ'), + Some('ᒋ'), + Some('ᒌ'), + Some('ᒍ'), + Some('ᒎ'), + Some('ᒐ'), // 0x98-0x9f + Some('ᒑ'), + Some('°'), + Some('ᒡ'), + Some('ᒥ'), + Some('ᒦ'), + Some('•'), + Some('¶'), + Some('ᒧ'), // 0xa0-0xa7 + Some('®'), + Some('©'), + Some('™'), + Some('ᒨ'), + Some('ᒪ'), + Some('ᒫ'), + Some('ᒻ'), + Some('ᓂ'), // 0xa8-0xaf + Some('ᓃ'), + Some('ᓄ'), + Some('ᓅ'), + Some('ᓇ'), + Some('ᓈ'), + Some('ᓐ'), + Some('ᓯ'), + Some('ᓰ'), // 0xb0-0xb7 + Some('ᓱ'), + Some('ᓲ'), + Some('ᓴ'), + Some('ᓵ'), + Some('ᔅ'), + Some('ᓕ'), + Some('ᓖ'), + Some('ᓗ'), // 0xb8-0xbf + Some('ᓘ'), + Some('ᓚ'), + Some('ᓛ'), + Some('ᓪ'), + Some('ᔨ'), + Some('ᔩ'), + Some('ᔪ'), + Some('ᔫ'), // 0xc0-0xc7 + Some('ᔭ'), + Some('…'), + Some('\u{00A0}'), + Some('ᔮ'), + Some('ᔾ'), + Some('ᕕ'), + Some('ᕖ'), + Some('ᕗ'), // 0xc8-0xcf + Some('–'), + Some('—'), + Some('“'), + Some('”'), + Some('‘'), + Some('’'), + Some('ᕘ'), + Some('ᕙ'), // 0xd0-0xd7 + Some('ᕚ'), + Some('ᕝ'), + Some('ᕆ'), + Some('ᕇ'), + Some('ᕈ'), + Some('ᕉ'), + Some('ᕋ'), + Some('ᕌ'), // 0xd8-0xdf + Some('ᕐ'), + Some('ᕿ'), + Some('ᖀ'), + Some('ᖁ'), + Some('ᖂ'), + Some('ᖃ'), + Some('ᖄ'), + Some('ᖅ'), // 0xe0-0xe7 + Some('ᖏ'), + Some('ᖐ'), + Some('ᖑ'), + Some('ᖒ'), + Some('ᖓ'), + Some('ᖔ'), + Some('ᖕ'), + Some('ᙱ'), // 0xe8-0xef + Some('ᙲ'), + Some('ᙳ'), + Some('ᙴ'), + Some('ᙵ'), + Some('ᙶ'), + Some('ᖖ'), + Some('ᖠ'), + Some('ᖡ'), // 0xf0-0xf7 + Some('ᖢ'), + Some('ᖣ'), + Some('ᖤ'), + Some('ᖥ'), + Some('ᖦ'), + Some('ᕼ'), + Some('Ł'), + Some('ł'), // 0xf8-0xff +]; diff --git a/src/tables/mod.rs b/src/tables/mod.rs new file mode 100644 index 0000000..74d9cfb --- /dev/null +++ b/src/tables/mod.rs @@ -0,0 +1,5 @@ +//! Encoding tables. Everything except this module file is generated by +//! `tools/gen_tables.py` from the vendored Apple mapping tables in +//! `data/apple/` — regenerate rather than editing by hand. + +pub(crate) mod mac; diff --git a/tools/gen_tables.py b/tools/gen_tables.py new file mode 100644 index 0000000..97a8233 --- /dev/null +++ b/tools/gen_tables.py @@ -0,0 +1,276 @@ +#!/usr/bin/env python3 +# /// script +# requires-python = ">=3.10" +# /// +"""Generate src/tables/mac.rs from the Apple mapping tables in data/apple/. + +The inputs are the canonical Apple character set tables published by the +Unicode Consortium (https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/), +vendored in ``data/apple/``. Each single-byte encoding becomes a full +256-entry ``[Option; 256]`` table. + +The vendored files carry the *modern* (post-Euro) mappings; the pre-Euro +revisions are reconstructed from the per-encoding deltas documented in each +file's change history (the Mac OS 8.5/9.0/9.2.2 Euro rollout landed at +different byte positions per encoding, which is why these are configured +data with invariant checks rather than hand-edited tables). Mac OS +Ukrainian, retired as a separate character set in Mac OS 9.0, is likewise +derived from CYRILLIC.TXT plus its documented delta (UKRAINE.TXT is a +notes-only stub). + +Every delta records the scalar the vendored file is expected to hold, so +regeneration fails loudly if an upstream file ever changes underneath us. + +Run from the crate root: ``uv run tools/gen_tables.py`` +(needs ``rustfmt`` on PATH). +""" + +from __future__ import annotations + +import subprocess +from collections.abc import Mapping, Sequence +from dataclasses import dataclass, field +from pathlib import Path + +DATA_DIR = Path(__file__).resolve().parent.parent / "data" / "apple" +OUTPUT_PATH = Path(__file__).resolve().parent.parent / "src" / "tables" / "mac.rs" + +GENERATED_NOTE = """\ +//! Generated by `tools/gen_tables.py` — do not edit by hand. +//! +//! Source: the Unicode Consortium's Apple mapping tables, vendored in +//! `data/apple/`. `*_CLASSIC` tables are the pre-Euro revisions, +//! reconstructed from the deltas documented in each file's change history. +""" + +SURROGATE_RANGE = range(0xD800, 0xE000) + +# Apple's files list 0x20-0x7E and 0x80-0xFF; the C0 controls and DELETE are +# omitted because they map to themselves. +CONTROL_BYTES = frozenset(range(0x20)) | {0x7F} +LISTED_BYTES = frozenset(range(0x100)) - CONTROL_BYTES + +EURO = 0x20AC +CURRENCY_SIGN = 0x00A4 +SOFT_HYPHEN = 0x00AD + +# The Mac OS 8.5 Euro rollout for the Roman regional family: 0xDB flipped +# from CURRENCY SIGN to EURO SIGN. +ROMAN_FAMILY_EURO_DELTA: Mapping[int, tuple[int, int | None]] = { + 0xDB: (EURO, CURRENCY_SIGN), +} + + +class TableError(Exception): + """A mapping table failed to parse or violated an invariant.""" + + +@dataclass(frozen=True) +class EncodingSpec: + """One generated encoding. + + Attributes: + const: Rust constant name for the modern table. + file: Mapping file name under ``data/apple/``. + base_delta: Byte to ``(expected_modern_scalar, scalar_or_None)`` + applied to *derive* this encoding from the file (Mac OS + Ukrainian is CYRILLIC.TXT with 0xFF back-flipped to CURRENCY + SIGN). ``None`` marks the byte undefined. + classic_delta: Byte to ``(expected_modern_scalar, scalar_or_None)`` + producing an additional ``*_CLASSIC`` (pre-Euro) table. + doc: Override for the generated table's doc comment (used where the + table is not simply the file's contents, e.g. Ukrainian). + """ + + const: str + file: str + base_delta: Mapping[int, tuple[int, int | None]] = field(default_factory=dict) + classic_delta: Mapping[int, tuple[int, int | None]] = field(default_factory=dict) + doc: str | None = None + + +SPECS: Sequence[EncodingSpec] = ( + EncodingSpec("MAC_ROMAN", "ROMAN.TXT", classic_delta=ROMAN_FAMILY_EURO_DELTA), + # Mac OS 9.2.2 moved SOFT HYPHEN from 0x9C to the previously undefined + # 0xFF and put EURO SIGN at 0x9C. + EncodingSpec( + "MAC_GREEK", + "GREEK.TXT", + classic_delta={0x9C: (EURO, SOFT_HYPHEN), 0xFF: (SOFT_HYPHEN, None)}, + ), + # Mac OS 9.0 merged Cyrillic with Ukrainian (0xA2/0xB6 became GHE WITH + # UPTURN) and put EURO SIGN at 0xFF. + EncodingSpec( + "MAC_CYRILLIC", + "CYRILLIC.TXT", + classic_delta={ + 0xA2: (0x0490, 0x00A2), + 0xB6: (0x0491, 0x2202), + 0xFF: (EURO, CURRENCY_SIGN), + }, + ), + EncodingSpec("MAC_CENTRAL_EUR_ROMAN", "CENTEURO.TXT"), + EncodingSpec("MAC_TURKISH", "TURKISH.TXT"), + EncodingSpec("MAC_CROATIAN", "CROATIAN.TXT", classic_delta=ROMAN_FAMILY_EURO_DELTA), + EncodingSpec("MAC_ICELANDIC", "ICELAND.TXT", classic_delta=ROMAN_FAMILY_EURO_DELTA), + EncodingSpec("MAC_ROMANIAN", "ROMANIAN.TXT", classic_delta=ROMAN_FAMILY_EURO_DELTA), + EncodingSpec("MAC_CELTIC", "CELTIC.TXT", classic_delta=ROMAN_FAMILY_EURO_DELTA), + EncodingSpec("MAC_GAELIC", "GAELIC.TXT", classic_delta=ROMAN_FAMILY_EURO_DELTA), + # The pre-9.0 Ukrainian currency sign variant: modern Cyrillic except + # 0xFF stayed CURRENCY SIGN (per the notes in UKRAINE.TXT). + EncodingSpec( + "MAC_UKRAINIAN", + "CYRILLIC.TXT", + base_delta={0xFF: (EURO, CURRENCY_SIGN)}, + doc="CYRILLIC.TXT with 0xFF flipped back to CURRENCY SIGN — the " + "pre-9.0 Ukrainian variant per the notes in UKRAINE.TXT.", + ), + EncodingSpec("MAC_INUIT", "INUIT.TXT"), +) + + +def parse_table(path: Path) -> dict[int, int]: + """Parse one Apple mapping file into a full 256-entry byte-to-scalar map. + + The omitted C0 controls and DELETE are filled in as identity mappings. + + Raises: + TableError: If the file is unreadable, lists a byte twice or outside + the expected set, maps to anything but one BMP scalar, or is not + ASCII-transparent over 0x20-0x7E. + """ + try: + text = path.read_text(encoding="ascii") + except (OSError, UnicodeDecodeError) as error: + raise TableError(f"{path.name}: unreadable mapping table") from error + table = {byte: byte for byte in CONTROL_BYTES} + seen: set[int] = set() + for line in text.splitlines(): + line = line.strip() + if not line.startswith("0x"): + continue + columns = line.split("\t") + try: + byte = int(columns[0], 16) + except ValueError as error: + raise TableError(f"{path.name}: malformed byte {columns[0]!r}") from error + if byte in seen: + raise TableError(f"{path.name}: byte {byte:#04x} listed twice") + seen.add(byte) + if byte not in LISTED_BYTES: + raise TableError(f"{path.name}: unexpected byte {byte:#04x}") + if len(columns) < 2 or not columns[1].startswith("0x"): + raise TableError(f"{path.name}: byte {byte:#04x} has no mapping") + scalar_text = columns[1] + if "+" in scalar_text: + raise TableError(f"{path.name}: byte {byte:#04x} maps to a sequence") + try: + scalar = int(scalar_text, 16) + except ValueError as error: + raise TableError( + f"{path.name}: malformed scalar {scalar_text!r}" + ) from error + if scalar in SURROGATE_RANGE or scalar > 0xFFFF: + raise TableError(f"{path.name}: scalar {scalar:#06x} not a BMP char") + if 0x20 <= byte <= 0x7E and scalar != byte: + raise TableError(f"{path.name}: byte {byte:#04x} is not ASCII") + table[byte] = scalar + if seen != LISTED_BYTES: + missing = sorted(LISTED_BYTES - seen) + raise TableError(f"{path.name}: bytes never listed: {missing}") + return table + + +def apply_delta( + name: str, table: Mapping[int, int], delta: Mapping[int, tuple[int, int | None]] +) -> dict[int, int | None]: + """Apply a revision delta, verifying the modern scalars it replaces. + + Raises: + TableError: If the vendored table does not hold the expected modern + scalar at a delta byte — i.e. upstream data changed and the + configured delta no longer describes it. + """ + result: dict[int, int | None] = dict(table) + for byte, (expected_modern, replacement) in delta.items(): + if table.get(byte) != expected_modern: + raise TableError( + f"{name}: delta expects U+{expected_modern:04X} at {byte:#04x}, " + f"file has U+{table[byte]:04X}" + ) + result[byte] = replacement + return result + + +def check_bijection(name: str, table: Mapping[int, int | None]) -> None: + """Require every mapped scalar to have exactly one byte. + + Raises: + TableError: If two bytes map to the same scalar. + """ + scalars = [scalar for scalar in table.values() if scalar is not None] + if len(scalars) != len(set(scalars)): + raise TableError(f"{name}: table is not a bijection") + + +def rust_char(scalar: int) -> str: + """Render a Unicode scalar as a Rust char literal.""" + ch = chr(scalar) + if ch.isprintable() and ch not in ("'", "\\"): + return f"'{ch}'" + return f"'\\u{{{scalar:04X}}}'" + + +def render_table(const: str, doc: str, table: Mapping[int, int | None]) -> str: + """Render one encoding as an ``[Option; 256]``.""" + lines = [f"/// {doc}", f"pub(crate) const {const}: [Option; 256] = ["] + for row_start in range(0, 256, 8): + entries = [] + for byte in range(row_start, row_start + 8): + scalar = table[byte] + entries.append("None" if scalar is None else f"Some({rust_char(scalar)})") + lines.append( + f" {', '.join(entries)}, // {row_start:#04x}-{row_start + 7:#04x}" + ) + lines.append("];\n") + return "\n".join(lines) + + +def render_spec(spec: EncodingSpec) -> list[str]: + """Render a spec's modern table, plus its classic table if it has one. + + Raises: + TableError: If parsing, a delta, or a bijection check fails. + """ + file_table = parse_table(DATA_DIR / spec.file) + modern = apply_delta(spec.const, file_table, spec.base_delta) + check_bijection(spec.const, modern) + doc = spec.doc or f"{spec.file}, byte value to Unicode scalar." + rendered = [render_table(spec.const, doc, modern)] + if spec.classic_delta: + if spec.base_delta: + raise TableError(f"{spec.const}: base and classic deltas both set") + classic = apply_delta(spec.const, file_table, spec.classic_delta) + check_bijection(f"{spec.const}_CLASSIC", classic) + rendered.append( + render_table( + f"{spec.const}_CLASSIC", + f"{spec.file} at the pre-Euro revision.", + classic, + ) + ) + return rendered + + +def main() -> None: + """Regenerate src/tables/mac.rs from every configured encoding.""" + rendered = [GENERATED_NOTE] + for spec in SPECS: + rendered.extend(render_spec(spec)) + OUTPUT_PATH.write_text("\n".join(rendered), encoding="utf-8") + subprocess.run(["rustfmt", "--edition", "2021", str(OUTPUT_PATH)], check=True) + print(f"wrote {OUTPUT_PATH}") + + +if __name__ == "__main__": + main()