##Adobe File Version: 1.000
#=======================================================================
#   FTP file name:  README.TXT
#
#   Contents:       Background information on Unicode mapping tables
#                   for Mac OS text encodings
#
#   Copyright:      (c) 1995-1999 by Apple Computer, Inc., all rights
#                   reserved.
#
#   Contact:        charsets@apple.com
#
#   Changes:
#
#       b02  1999-Sep-22    Update information on Cyrillic. Update
#                           contact e-mail address.
#       n07  1998-Feb-05    Rewrite to provide additional information
#                           relevant to using the accompanying mapping
#                           tables, and to delete some extraneous
#                           information. Delete Bulgarian (no special
#                           encoding, uses standard Cyrillic), add
#                           Farsi, Devanagari, Gurmukhi, Gujarati,
#                           Celtic, Gaelic, Inuit, Tibetan.
#       n04  1995-Nov-15    Update info for Hebrew and Thai
#       n03  1995-Apr-15    First version (after fixing some typos).
#
##################

0. Preliminaries
----------------

For maximum interchangeability, this file and the accompanying Mac OS 
mapping tables use only ASCII characters. They are intended to be 
displayed in a monospaced font.

Apple, the Apple logo, Mac, and Macintosh are trademarks of Apple 
Computer, Inc., registered in the United States and other countries. 
QuickDraw and TrueType are trademarks of Apple Computer, Inc. Unicode is 
a trademark of Unicode Inc. PostScript is a trademark of Adobe Systems 
Inc., which may be registered in certain jurisdictions. IBM is a 
registered trademark of International Business Machines Corporation. ITC 
Zapf Dingbats is a registered trademark of the International Typeface 
Corporation. For the sake of brevity, throughout this document and the 
accompanying tables, "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 
accompanying tables, their 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 accompanying tables.

1. Introduction
---------------

This document summarizes some Unicode mapping considerations that are
relevant for the accompanying mapping tables. It also provides an
overview of Mac OS encodings.

These mapping tables and character lists are subject to change.
The latest tables should be available from the following:

<ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/APPLE/>
<ftp://dev.apple.com/devworld/Technical_Documentation/Misc._Standards/>

2. Round-trip fidelity and overview of mapping techniques
---------------------------------------------------------

For a particular set of national and international standards, Unicode
provides round-trip fidelity: Text in one of those encodings can be
mapped to Unicode and back again, yielding the original characters.
Characters which are distinct in one of these source standards have 
a distinct counterpart in Unicode. Note that this counterpart might not
be a single Unicode character; as is pointed out in "The Unicode
Standard, Version 2.0" (page 2-10), "sometimes a single code value in
another standard corresponds to a sequence of code values in the Unicode
Standard, or vice versa."

However, Unicode does not attempt to provide round-trip fidelity for 
most vendor standards. Nevertheless, Apple and other platform vendors 
may need to provide such round-trip fidelity for their current encodings 
(this can be important in file systems, for example). In order to do 
this, Apple makes use of some Unicode characters in the corporate-use
zone (the upper end of the private use area).

Corporate-zone characters must be used with care. Indiscriminate use of
such characters can result in text which is not easily interchanged with
other systems, since these characters have no standard meaning outside a
particular platform. The mappings provided here are intended to minimize
the use of private use characters, or to use them in such a way that
basic text content will not be lost if the corporate zone characters are
dropped when text is transferred to another system.

The tables provided here have three goals, in the following order of
importance:
1. Provide 100% round-trip mapping from a Mac OS encoding to Unicode
and back (even if the mappings here are converted to maximal
decompositions, see below).
2. Map characters in a Mac OS encoding into the Unicode characters
that best represent the interpretation and usage of the Mac OS
characters.
3. When mapping text in a Mac OS encoding to Unicode using the tables,
the resulting Unicode text should be as interchangeable as possible.

To satisfy these goals, the mappings use a variety of techniques. First
we attempt to achieve round-trip mappings using any standard Unicode
feature at our disposal, without resorting to corporate-zone characters.
This can includes the following techniques:
- Use of all Unicode characters defined in Unicode 2.1, including
  compatibility characters.
- Mapping a single character in a Mac OS encoding to a sequence of
  standard Unicode characters, or vice versa. This requires grouping
  characters into appropriate chunks for lookup before mapping them
  (this mainly applies to sequences of Unicode characters).
- Using Unicode direction overrides to force direction attributes when
  mapping to Unicode. This requires resolution of Unicode character
  direction, and use of this information, when mapping from Unicode back
  to certain Mac OS encodings.
The requirements imposed on Unicode handling are necessary for other,
non-transcoding operations in a full Unicode implementation anyway, so
requiring them for transcoding should not impose much of a burden.

Next, if round-trip fidelity cannot be achieved using the above
techniques, we attempt to use corporate-zone characters only as
"transcoding hints" (more on this below). These are combined with one or
more standard Unicode characters to mark them as special for
transcoding, but have no other function and can be deleted with no loss
of basic text content (only of round-trip fidelity).

Finally, if a character in a Mac OS encoding is unrelated to any Unicode
or Unicode sequence, we may map it to a single corporate-zone Unicode
code point.

These techniques are described in more detail in the following sections.

Some clients of these tables may have a different set of goals. For
example, some clients may prefer to avoid compatibility characters,
perhaps sacrificing round-trip fidelity if necessary. In most cases it
is fairly easy to construct other types of mappings from the mappings
given here. In particular, the mappings here have been designed so that
if they are converted to maximal decomposition mappings (by recursive
application of the canonical decompositions in the Unicode database),
the resulting mappings will still provide 100% roundtrip fidelity.

There is one more round-trip issue that should be mentioned. If a
Unicode character or sequence can be mapped at all into a particular
Mac encoding, then the reverse mapping back to Unicode should yield
the original Unicode character or sequence (except for possible 
differences in direction overrides or other Unicode characters in the
"Other, Format" category). The tables here also provide this. For a
related issue, see the next section.

3. Mapping tolerance: Strict and loose
--------------------------------------

In many character sets, a single character may have multiple semantics, 
either by explicit definition, ambiguous definition, or established 
usage. For example, the JIS character 0x2142, or 0x8161 in Shift-JIS, 
is specified in the JIS X0208 standard to have two meanings: "double 
vertical line" and "parallel". Each of these meanings corresponds to a 
different Unicode character: 0x2016 DOUBLE VERTICAL LINE and 0x2225 
PARALLEL TO. When mapping from Unicode to Shift-JIS, it is normally 
desirable to map both of these Unicode characters to the single
Shift-JIS character. However, when mapping the Shift-JIS character to
Unicode, we can choose only one of the possible Unicode characters.

For two encodings X and Y, we can define a set of "strict" mappings
from one to the other as follows: If text in X can be mapped to Y using
the strict mappings from X to Y, then the resulting text can be mapped
back using the strict mappings from Y to X to end up with the original
text from X. Similarly, if text in Y can be mapped to X using the strict
mappings from Y to X, then the resulting text can be mapped back using
the strict mappings from X to Y to end up with the original text from Y.

There may be several characters in one encoding that all map to a
single character in another encoding, but only one of these mappings
can be strict; the others are "loose".

The mappings given in the accompanying tables are strict mappings.
However, the Mac OS Text Encoding Converter also supports loose
mappings and fallback mappings. Some of the accompanying tables provide
suggestions about possible loose mappings.

4. Mapping a Mac encoding character to a Unicode sequence or vice versa
-----------------------------------------------------------------------

In some cases, a character in a Mac OS encoding maps to a sequence of
Unicode characters. For example, the Mac OS Japanese encoding includes
a character for the circled CJK ideograph "big". Although Unicode
encodes other circled ideographs as single characters, it does not
encode this one. However, this character can be unambiguously
represented in Unicode as the Unicode sequence 0x5927+0x20DD, the CJK 
ideograph for "big" followed by COMBINING ENCLOSING CIRCLE.

To handle the reverse mapping, a transcoding process must group the
Unicode sequence 0x5927+0x20DD as a single element for lookup (The
Mac OS Text Encoding Converter does this).

In a few cases, a sequence of characters in a Mac OS encoding must
be grouped for mapping to a single Unicode character or a sequence
of Unicode characters. For example, in Mac OS Devanagari (based on
ISCII-91), DEVANAGARI LETTER VOCALIC L is represented as 0xA6+0xE9;
but this is represented in Unicode by the single character 0x090C.
Furthermore, explicit halant is represented in Mac OS Devanagari as
0xE8+0xE8 (double halant) and in Unicode as 0x094D+0x200C (VIRAMA
plus ZERO WIDTH NON-JOINER). The latter can also be considered as
a context-dependent mapping of 0xE8, halant.

Loose mappings from Unicode to a Mac OS encoding often map a single
Unicode to a sequence of characters in the Mac OS encoding. For example,
the Unicode character 0x00BD VULGAR FRACTION ONE HALF cannot be mapped
into the Mac OS Roman character set as a single character, but it has a
loose mapping to the sequence 0x31+0xDA+0x32, "digit one" + "fraction
slash" + "digit two".

In some cases a Unicode character such as a direction override may
simply be discarded when mapping to a Mac OS encoding, since the
information carried by the override may be represented in a different
way by the Mac OS encoding. See the next section for an example.

5. Mappings that depend on directionality (or other attributes)
---------------------------------------------------------------

Strict mappings from Unicode to Mac OS encodings may depend on resolved
character direction. Loose mappings may depend on additional attributes
such as the state of symmetric swapping and whether the text should use
vertical form codes if available (i.e. whether the text is intended for
vertical display on a system that cannot automatically substitute
vertical forms).

a) Resolved character direction

The Mac OS Arabic and Hebrew character sets were developed in 1986-1987.
At that time the bidirectional line layout algorithm used in the Mac OS
was fairly simple; it used only a few direction classes (instead of the
13 or so now used in the Unicode bidirectional algorithm). In order to
permit users to handle some tricky layout problems, certain punctuation
and symbol characters have duplicate code points, one with a left-right 
direction attribute and the other with a right-left direction attribute.

For example, plus sign is encoded at 0x2B with a left-right attribute,
and at 0xAB with a right-left attribute. However, there is only one PLUS
SIGN character in Unicode. This leads to some interesting problems when
mapping between Mac OS Arabic or Hebrew and Unicode.

We need a way to map both of these plus signs to Unicode and back. Using
a single corporate character for one of these plus signs is not a good
solution, since both of the plus sign characters are likely to be used
in text that is interchanged, and thus content would be lost.

The problem is solved with the use of direction override characters and
direction-dependent mappings. When mapping from Mac OS Arabic or Hebrew
to Unicode, we use direction overrides as necessary to force the
direction of the resulting Unicode characters. When mapping back from
Unicode, the Unicode bidirectional algorithm should be used to determine
resolved direction of the Unicode characters. The mapping from Unicode
to Mac OS Arabic or Hebrew can then be disambiguated as necessary by
using the resolved direction.

For example, when mapping from Mac OS Arabic or Hebrew, we can use
LEFT-RIGHT OVERRIDE (LRO), RIGHT-LEFT OVERRIDE (RLO), and POP DIRECTION
FORMATTING (PDF) as follows:

  0x2B ->  0x202D (LRO) + 0x002B (PLUS SIGN) + 0x202C (PDF)
  0xAB ->  0x202E (RLO) + 0x002B (PLUS SIGN) + 0x202C (PDF)

When mapping back, we resolve the direction of the Unicode character
0x002B, and use this information to determine which of the Mac OS
encoding characters to use:

  0x002B -> 0x2B (if LR) or 0xAB (if RL)
  
After direction overrides have been used in this way to force a
particular resolved direction, they may be discarded when mapping from
Unicode to Mac OS Arabic and Hebrew (since the information they carried
in Unicode is represented in the Mac OS encoding by the code point of
the plus sign).

Even when not required for round-trip fidelity, direction overrides
may be used when mapping from a Mac OS encoding to Unicode in order to
preserve proper text layout. For example, the single Mac OS Arabic
ellipsis character has direction class right-left, while the Unicode
HORIZONTAL ELLIPSIS character has direction class neutral. When 
mapping the Mac OS ellipsis to Unicode, it is surrounded with a
direction override to help preserve proper text layout. However,
resolved direction is not needed or used when mapping the Unicode
HORIZONTAL ELLIPSIS back to Mac OS Arabic.

b) Symmetric swapping

In loose mappings from Unicode to the Mac OS Arabic character set, the 
state of symmetric swapping (which may be changed by the Unicode 
characters 0x206A, 0x206B) affects the mapping of paired characters such 
as punctuation and brackets. This does not affect the strict mappings 
given in the accompanying tables.

c) Horizontal or vertical display

The Mac OS Japanese encoding includes separately-encoded vertical forms
for some punctuation and kana. When Unicode characters in the CJK
punctuation and kana ranges are mapped to Mac OS Japanese characters and
(1) those characters are intended for vertical display, (2) they will be
displayed in an environment that does not provide automatic vertical
form substitution, and (3) loose mappings are desired, the Unicode
characters can be mapped to the corresponding vertical form codes in the
Mac OS Japanese encoding.

This does not affect mapping of the Unicode vertical presentation forms
(which always map to the Mac OS Japanese vertical form codes).

6. Use of corporate characters
------------------------------

Apple has defined a block of 32 corporate characters as "transcoding
hints." These are used in combination with standard Unicode characters
to force them to be treated in a special way for mapping to other
encodings; they have no other effect. Sixteen of these transcoding
hints are "grouping hints" - they indicate that the next 2-4 Unicode
characters should be treated as a single entity for transcoding. The
other sixteen transcoding hints are "variant tags" - they are like
combining characters, and can follow a standard Unicode (or a sequence
consisting of a base character and other combining characters) to
cause it to be treated in a special way for transcoding. These always
terminate a combining-character sequence.

Whenever possible, mappings that require corporate-zone characters
use standard Unicode characters in combination with a single
transcoding hint (no mapping uses more than one transcoding hint).
For these mappings, even if the corporate-zone characters are lost in
interchange, the basic text content will be preserved.

However, some characters in a Mac OS encoding - such as the Apple
logo character - bear no relation to any standard Unicode character.
In these cases, the Mac OS character is mapped to a single corporate
zone character defined by Apple. Fewer than 15 corporate characters
are used in this way.

All of the corporate characters defined by Apple are listed in the
accompanying file "CORPCHAR.TXT", including old Apple corporate
character assignments which are now deprecated (but which are still
supported as loose mappings by the Mac OS Text Encoding Converter).

7. Font variants
----------------

For some Mac OS encodings, certain fonts used with that encoding may
actually implement a slight variant of the standard encoding specified
in the accompanying mapping tables. The header comments in the mapping
table files for each encoding describe any font variants associated with
that encoding.

8. Mac OS encodings
-------------------

The Mac OS can support multiple encodings. In the current Mac OS  
architecture these encodings are distinguished primarily by script code:
font family IDs are grouped into ranges, and each range is associated
with a script code. 

In some cases, there are several encodings that share a single script
code. Usually these are closely related. To distinguish among these,
additional information is required, such as font name or system
region code (locale code).

The encodings described here (and in the accompanying tables) are the 
encodings used in Mac OS versions 7.1 and later. In some cases, certain 
earlier system versions have used different encodings.

In all Mac OS encodings, character codes 0x00-0x7F are identical to
ASCII, except that
  - in Mac OS Japanese, reverse solidus is replaced by yen sign
  - in Mac OS Arabic, Farsi, and Hebrew, some of the punctuation in this
    range is treated as having strong left-right directionality,
	although the corresponding Unicode characters have neutral
	directionality
Fonts 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. (However, a "system font variant" mapping table could
provide mappings for these).

Note that in general, character sets cannot be determined from font 
layouts (they are not the same thing!). This is very noticeable with 
Arabic, Hebrew, and Devanagari, for example.

The following is a list of current Mac OS encodings. The accompanying
tables provide mappings from these encodings to Unicode 2.1.

a) Mac OS encodings for script code 0, smRoman.

* Roman - this is the default for script code 0 (when the special
  cases listed below do not apply). It covers several western European
  languages, and includes math operators and various symbols.

* Symbol - this is the encoding for the font named "Symbol". It includes
  Greek letters, math operators, and miscellaneous symbols. The layout
  of the Symbol character set is identical to the layout of the Adobe
  Symbol encoding vector, with the addition of the Apple logo at 0xF0
  and the EURO SIGN at 0xA0.

* Dingbats - this is the encoding for the font named "Zapf Dingbats".
  The layout of the Dingbats character set is identical to or a superset
  of the layout of the Adobe Zapf Dingbats encoding vector.

* Turkish - this is the encoding if the script code is 0 and the system
  region code is 24, verTurkey. It has 7 code point differences from
  Mac OS Roman.

* Croatian - this is the encoding if the script code is 0 and the system
  region code is any of the following:
    68, verCroatia
	66, verSlovenian
	25, verYugoCroatian (only used in older systems)
  It has 20 code point differences from standard Roman, but only 10
  differences in repertoire.

* Icelandic - this is the encoding if the script code is 0 and the
  system region code is either of the following:
    21, verIceland
	47, verFaroeIsl
  It has 6 code point differences from standard Roman. It also has one
  font variant.

* Romanian - this is the encoding if the script code is 0 and the system
  region code is 39, verRomania . It has 6 code point differences from
  standard Roman.

* Celtic - this is the encoding if the script code is 0 and the system
  region code is any of the following:
    50, verIreland
	75, verScottishGaelic
	76, verManxGaelic
	77, verBreton
	79, verWelsh
  It is a variant of Mac OS Roman with a few extra accented characters
  for Welsh.

* Gaelic - this is the encoding if the script code is 0 and the system
  region code is 81, verIrishGaelicScript. It is a variant of Mac OS
  Roman, and supports the older Irish orthography using dot above.

* Greek (monotonic) - this is the encoding if the script code is 0 and
  the system region code is 20, verGreece. Although a script code is
  defined for Greek, the Greek localized system does not use it (the
  font family IDs are in the smRoman range). This encoding is based on
  the ISO/IEC 8859-7 repertoire with additional Roman characters for
  French and German, as well as additional symbols. Greek system 4.1
  used a different encoding that matched 8859-7 code points for Greek
  letters. Greek system 6.0.7 also used a variant of the standard
  encoding, but it was quickly replaced by Greek system 6.0.7.1 which
  used the standard encoding.

  See also the Central European encoding under script code 29 below.

b) Mac OS encodings for script code 1, smJapanese.

* Japanese - this is the default for script code 1. It is based on a
  Shift-JIS implementation of JIS X0208-1990 ("fullwidth") and
  JIS X0201-1976 ("halfwidth"), with 5 additional one-byte characters
  and one modified character, a set of Apple extension characters which
  include many industry standard extensions, and separate codes for
  vertical forms of some punctuation and kana. There are several font
  variants.

c) Mac OS encodings for script code 2, smTradChinese.

* Chinese Traditional - this is an extension of Big-5.

d) Mac OS encodings for script code 3, smKorean.

* Korean - this is an extension of EUC-KR.

e) Mac OS encodings for script code 4, smArabic.

* Arabic - This is the default for script code 4 (when the special
  case listed below does not apply). It is based on the ISO/IEC 8859-6
  repertoire, with additional Arabic letters for Persian and Urdu and
  with accented Roman letters for European languages. It has the
  interesting feature mentioned above that certain ASCII punctuation
  and symbol characters are encoded twice, once for each direction. It
  has several font variants.
 
* Farsi - This is the encoding if the script code is 4 and the system
  region code is 48, verIran. It is similar to Mac OS Arabic, but has
  the "extended" or Persian digits instead of the standard Arabic
  digits. It has one font variant.

f) Mac OS encodings for script code 5, smHebrew.

* Hebrew - This is based on the ISO/IEC 8859-8 Hebrew letter repertoire,
  but adds Hebrew points, some Hebrew ligatures, some accented Roman
  letters for European languages, and some non-ASCII punctuation. As 
  with Mac OS Arabic, certain ASCII punctuation and symbol characters
  are encoded twice, once for each direction. This is also true for the
  European digits. This has one font variant.

g) Mac OS encodings for script code 6, smGreek.

  None currently - see smRoman.

h) Mac OS encodings for script code 7, smCyrillic.

* Cyrillic - This is based on the ISO/IEC 8859-5 Cyrillic character
  repertoire plus an additional case pair for Ukrainian.

i) Mac OS encodings for script code 9, smDevanagari.

* Devanagari - This is based on IS 13194:1991 (ISCII-91), and adds some
  punctuation and symbols.

j) Mac OS encodings for script code 10, smGurmukhi.

* Gurmukhi - This is based on IS 13194:1991 (ISCII-91), and adds some
  punctuation and symbols.

k) Mac OS encodings for script code 11, smGujarati.

* Gujarati - This is based on IS 13194:1991 (ISCII-91), and adds some
  punctuation and symbols.

l) Mac OS encodings for script code 21, smThai.

* Thai - This is based on TIS 620-2533, except that three of the
  TIS 620-2533 characters are replaced with other characters. Some
  undefined code points in TIS 620-2533 are used for additional
  punctuation characters.

m) Mac OS encodings for script code 25, smSimpChinese.

* Chinese Simplified - this is an extension of EUC-CN.

n) Mac OS encodings for script code 26, smTibetan.

* Tibetan

o) Mac OS encodings for script code 28, smEthiopic.

* Inuit - this is the encoding if the script code is 28 and the
  system region code is 78, verNunavut (for Inuktitut language).
  There is no script code for Inuit, so it shares the script code
  with Ethiopic.

p) Mac OS encodings for script code 29, smCentralEuroRoman.

* Central European - This is similar to standard Roman, but with a
  different (and larger) set of European characters and with fewer
  symbols. It is used for Polish, Czech, Slovak, Hungarian, Estonian,
  Latvian, and Lithuanian.
