Compare commits

1 Commits
main ... v0.1.0

Author SHA1 Message Date
Claude Fable 5
bbf6d6b2b9 Expand to twelve single-byte encodings via codegen; match msdos-encodings API
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<char>; 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 <noreply@anthropic.com>
2026-07-19 14:07:44 -05:00
19 changed files with 10193 additions and 205 deletions

3
.gitignore vendored
View File

@@ -1,2 +1,5 @@
/target
Cargo.lock
__pycache__/
.mypy_cache/
.ruff_cache/

View File

@@ -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

328
data/apple/CELTIC.TXT Normal file
View File

@@ -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
# <c1.1> 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

327
data/apple/CENTEURO.TXT Normal file
View File

@@ -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
# <c1.1> and Text Encoding Converter 2.0.
# b3,c1 2002-Dec-19 Update URLs. Matches internal utom<b1>.
# b02 1999-Sep-22 Update contact e-mail address. Matches
# internal utom<b1>, ufrm<b1>, and Text
# Encoding Converter version 1.5.
# n05 1998-Feb-05 Update header comments to new format; no
# mapping changes. Matches internal utom<n3>,
# ufrm<n13>, and Text Encoding Converter
# version 1.3.
# n03 1995-Apr-15 First version (after fixing some typos).
# Matches internal ufrm<n5>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

351
data/apple/CROATIAN.TXT Normal file
View File

@@ -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
# <c1.1> and Text Encoding Converter 2.0.
# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal
# utom<b3>.
# 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<b2>, ufrm<b2>, 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

352
data/apple/CYRILLIC.TXT Normal file
View File

@@ -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
# <c1.1> and Text Encoding Converter 2.0.
# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal
# utom<b2>.
# 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<b2>, ufrm<b2>, and Text
# Encoding Converter version 1.5.
# n05 1998-Feb-05 Update header comments to new format; no
# mapping changes. Matches internal utom<n3>,
# ufrm<n13>, and Text Encoding Converter
# version 1.3.
# n03 1995-Apr-15 First version (after fixing some typos).
# Matches internal ufrm<n5>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

337
data/apple/GAELIC.TXT Normal file
View File

@@ -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
# <c1.1> 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

355
data/apple/GREEK.TXT Normal file
View File

@@ -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
# <c1.1> 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<b3>.
# b02 1999-Sep-22 Update contact e-mail address. Matches
# internal utom<b1>, ufrm<b1>, and Text
# Encoding Converter version 1.5.
# n06 1998-Feb-05 Update to match internal utom<n4>, ufrm<n17>,
# 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<n7>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

369
data/apple/ICELAND.TXT Normal file
View File

@@ -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
# <c1.1> and Text Encoding Converter 2.0.
# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal
# utom<b3>.
# 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<b2>, ufrm<b2>, 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<n4>, ufrm<n16>:
# 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<n5>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

322
data/apple/INUIT.TXT Normal file
View File

@@ -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
# <c1.1> 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

370
data/apple/ROMAN.TXT Normal file
View File

@@ -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
# <c1.1> and Text Encoding Converter 2.0.
# b4,c1 2002-Dec-19 Update URLs, notes. Matches internal
# utom<b5>.
# b03 1999-Sep-22 Update contact e-mail address. Matches
# internal utom<b4>, ufrm<b3>, 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<b3>,
# ufrm<b3>.
# 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<n3>, ufrm<n22>:
# 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<n9>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

365
data/apple/ROMANIAN.TXT Normal file
View File

@@ -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
# <c1.2> 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<b3>.
# 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<b2>, ufrm<b2>, 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<n5>, ufrm<n16>:
# 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<n4>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

341
data/apple/TURKISH.TXT Normal file
View File

@@ -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
# <c1.1> and Text Encoding Converter 2.0.
# b3,c1 2002-Dec-19 Update URLs, notes. Matches internal
# utom<b1>.
# b02 1999-Sep-22 Update contact e-mail address. Matches
# internal utom<b1>, ufrm<b1>, 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<n5>, ufrm<n15>:
# 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<n4>.
#
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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

106
data/apple/UKRAINE.TXT Normal file
View File

@@ -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<b1>.
# 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<b1>, ufrm<b1>,
# 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:
#
# <http://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
#
# 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
##################

View File

@@ -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> {
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<Self> {
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<Self> {
(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<String, DecodeError> {
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<String, DecodeError> {
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<String, DecodeError> {
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<Vec<u8>, 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<char>; 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<Vec<u8>, 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> {
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<usize> = 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::<u8>::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
}
}

View File

@@ -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
}

5205
src/tables/mac.rs Normal file

File diff suppressed because it is too large Load Diff

5
src/tables/mod.rs Normal file
View File

@@ -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;

276
tools/gen_tables.py Normal file
View File

@@ -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<char>; 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<char>; 256]``."""
lines = [f"/// {doc}", f"pub(crate) const {const}: [Option<char>; 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()