Belleek: TEX Virtual T1-Encoded Fonts for Windows TrueType

Richard J. Kinch

March 15, 1995

Abstract

The Belleek software is an implementation of T1-encoded fonts using TrueType scaling technology under Microsoft Windows. Belleek consists of TrueType fonts which render elements of METAFONT glyphs in scalable form, plus TEX virtual fonts which remap and compose T1 characters from these elements. Belleek attempts to achieve five goals in harmony: (1) To be efficient in using available TrueType codes, so as to minimize the number of actual fonts required in the implementation, (2) To yield TrueType fonts which follow closely the Windows-ANSI encoding, so that the fonts are maximally compatible with non-TEX applications, (3) To make non-TEX TrueType fonts available as T1-encoded TEX fonts by automatically generating virtual font files and TEX font metric files, (4) To make the text of most TEX documents viewable and printable with Windows when TEX fonts are not installed on the system, and (5) To make TEX documents compatible with document-portability tools like Adobe Acrobat and No Hands Common Ground without the need to embed TEX text fonts.

1 Introduction

TEX users have extended the original 7-bit text encodings of Knuth’s Computer Modern fonts to an 8-bit encoding known as T1 encoding. T1-encoded fonts are a key aspect of the internationalization of L^{A}TEX, and thus are a vital component of the future of TEX worldwide.

The 256 T1 characters can be encoded without virtualization into a single 8-bit font when using bit-mapped (.pk) or PostScript (.pfb) fonts. These two methods are a common means of rendering fonts when translating DVI files to tangible form, and to date are the only means of rendering T1-encoded TEX documents.

To implement TEX on Microsoft Windows, we need a careful approach to the integration of Windows fonts into the TEX document model. TrueType (.ttf) fonts in Windows have three limitations which prevent their direct use for T1 encoding: (1) Only 215 encoding slots are available,^{1} (2) No system-level method of reencoding is available (such as PostScript does provide), and (3) TrueType fonts must be Windows-ANSI encoded if they are to be available to other applications and to conversions such as PDF (Portable Document Format).

The initial application of Belleek^{2} will be to produce a set of TEX virtual fonts in scalable TrueType form very close to the TEX DC fonts. The implementation of Belleek will consist of a set of TrueType fonts (.ttf’s) for Windows which render various DC glyphs and a set of virtual font files (.vf’s) which create virtual “almost-DC” fonts using the TrueType fonts as actual fonts.

1Windows applications cannot render 41 of the 256 eight-bit codes, 32 from the ASCII control codes and 9 from the extended control codes.

2“Belleek” is a trademark of Kinch Computer Company for a brand of software which implements the scheme described herein. “Belleek” is also a brand of fine chinaware named after the town of Belleek, Ireland. T1 encoding is also known as “Cork encoding” after the city of Cork, Ireland, which was the locale of the TEX Users Group 1990 annual conference which established the T1 encoding standard; thus we thought it appropriate to choose another Irish name for the TrueType implementation. While the Belleek software implementation is proprietary, the scheme itself is not, and the author welcomes the refinement and adoption of the scheme as a standard for TEX under Windows.

By “almost-DC” we indicate that certain accented letters in the virtual fonts are composed from unaccented letters and separate accents, while the autograph DC fonts (as authoritatively standardized in the METAFONT programs) often customize the shape of accents placed on letters. However, we will describe a refinement of the scheme which would implement true DC fonts in scalable form.

2 Characters and Encodings

We will hereinafter use the PostScript character names (A, …, Z, a, …, z, parenleft, etc.) to unambiguously identify characters, and C format hex integers (0x00 to 0xff) or octal integers (000 to 0377) to identify codes. Reference tables at the end of this paper set forth our understanding various encoding standards using this notation.

Fitting the T1 characters into Windows-ANSI is essentially a set-theory covering problem. We are dealing with the following ordered sets:

• Windows-ANSI (which is a superset of Latin-1)

• Latin-1 (formally titled ISO 8859-1)

• T1 (the TEX Cork encoding)

For an exhaustive reference document for characters and character set standards, see:

                         ftp://ftp.uu.net/pub/inet/rfc/rfc1345.Z

and for a reference on Latin-1 in particular:

                  ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/faq-iso-8859-1

3 Belleek T1 Subsets

The following table partitions the 256 T1 characters into subsets T1_{0} … T1_{3} which are important to Belleek:

DC Character Set Partitioning for Virtualization on Windows-ANSI

Composable Not in Windows-ANSI In Windows-ANSI

No T1_{0} = {Lslash Ng breve caron compwordmark dbar dotaccent dotlessi dotlessj ff ffi ffl fi fl hungarumlaut lslash ng ogonek perthousandzero ring visiblespace } T1_{1} = {A–Z a–z zero–nine AE Eth OE Oslash Thorn acute ae ampersand asciicircum asciitilde asterisk at backslash bar braceleft braceright bracketleft bracketright cedilla circumflex colon comma dieresis dollar emdash endash equal eth exclam exclamdown germandbls grave greater guillemotleft guillemotright guilsinglleft guilsinglright hyphen less macron numbersign oe oslash parenleft parenright percent period plus question questiondown quotedbl quotedblbase quotedblleft quotedblright quoteleft quoteright quotesinglbase section semicolon slash sterling thorn tilde underscore }

Yes T1_{2} = {[CLNRSZclnrsz]acute [AGag]breve [CDELNRTZcdelnrtz]caron [STst]cedilla [IZz]dotaccent [OUou]hungarumlaut [AEae]ogonek [Uu]ring IJ SS hyphenchar ij } T1_{3} = {[AEIOUYaeiouy]acute [AEIOUYaeiouy]dieresis [AEIOUaeiou]circumflex [AEIOUaeiou]grave [ANOano]tilde [Aa]ring [Cc]cedilla [Ss]caron }

The T1_{n} subsets have the following significance:

T1_{0} Characters which must either be encoded into unspecified Windows-ANSI codes (if there are enough such codes), or else overloaded into occupied Windows-ANSI codes.

T1_{1} Characters common to T1 and Windows-ANSI which can simply inherit the

Windows-ANSI encoding.

T1_{2} Characters which must be virtually composed from T1_{0} or T1_{1}, because

they are not in Windows-ANSI.

T1_{3} Characters which could be virtual composites from T1_{0} or T1_{1}, or else put into Windows-ANSI codes, depending on whether we have populated the TrueType font with the accented characters of Windows-ANSI in positions 0xc0–0xff.

T1_{1} + T1_{3} The greatest common subset of T1 and Windows-ANSI.

T1_{0} + T1_{1} The characters of T1 which cannot be additively composed from other T1

characters.

T1_{0} + T1_{2} The problematic T1 characters which are absent from Windows-ANSI.

To implement a virtual T1 font we create:

• A TrueType font consisting of the Windows-ANSI glyphs in their Windows-ANSI codes, plus (as needed) any overloaded characters.

• A virtual font file (.vf) which does the following:

– Maps T1_{0} and T1_{1} glyphs to their Windows-ANSI codes.

– Composes T1_{2} glyphs from T1_{0} and T1_{1} glyphs.

– Either composes T1_{3} glyphs from T1_{0} and T1_{1} glyphs or maps T1_{3} glyphs to their Windows-ANSI codes.

We will also consider a partition of Windows-ANSI codes 0x7f–0x9f into two sets W_{0} and W_{1}:

Covering of Windows-ANSI 0x7f–0x9f on T1

Not in T1  In T1

W_{0} = {bullet dagger daggerdbl ellipsis florin perthousand trademark .notdef×9  } W_{1} = {OE Scaron Ydieresis circumflex emdash endash guilsinglleft guilsinglright oe quotedblbase quotedblleft quotedblright quoteleft quoteright quotesinglbase scaron tilde }

4 Overloading

The Belleek scheme involves a matter of judgment, namely which Windows-ANSI characters will be “overloaded” and replaced in the Belleek TrueType fonts with non-standard characters. Of course we want to minimize the number of such “victims,” and to choose as victims those characters which are most rarely used or which have alternatives. In general we are trying make choices that will minimize the likelihood of documents suffering from two complementary encoding incompatibilities: first, that non-TEX applications will access overloaded characters, and second, that TEX documents will render incorrectly when non-TEX fonts get substituted^{3}.

We would prefer to assign codes for T1_{0} members from undefined (.notdef) codes in Windows-ANSI, since overloading these characters should not produce incompatible results when non-TEX applications use the fonts. But unfortunately, Windows 3.1 and its device drivers remap all 41 of these codes in such a way as to make them unusable by applications. As a last resort we must therefore choose which of the genuine Windows-ANSI characters we want to sacrifice.

In so choosing, we must not choose a character which appears in T1_{1} or T1_{3} (and therefore in W_{1}), because this would upset the assumptions we made in constructing those subsets. We do not necessarily want to overload W_{0} characters which are commonly used in non-TEX Windows applications. Windows is unable to render codes 0x00–0x1f, and we ought not to overload the remaining ASCII (0x20–0x7e) or Latin-1 (0xa0–0xff) codes. The remnant consists of the Latin-1 “extended control block” codes 0x80–0x9f and the peculiar 0x7f, which in ASCII was once a “delete” control code and which is now thoroughly obsolete and eligible for overloading. As a last resort we can raid 0xa0–0xbf (non-accented Latin-1 codes) based on rarity of use, mathematical use, or resemblance to a T1_{0} character.

The following table describes our overloading choices and the resulting cover of T1_{0}. The “Rationale” column gives the rationale for overloading each Windows-ANSI character: “Unassigned” means the Windows-ANSI code has no character specified, “Both rare” means both the Windows-ANSI or T1 characters are rarely used and are therefore appropriate to be paired together, “Math character” means that the Latin-1 character is a mathematical symbol which ordinarily would be composed from other characters, “Non-marking” means no code is needed since the T1 character does not render any marks, “Resemblance” means there is some resemblance between the Windows-ANSI and T1 character shapes or semantics. “Currency” means the Windows-ANSI character is a rarely-used currency symbol. “Composable” means the Windows-ANSI character can be rendered by other characters in the Windows-ANSI set. “Cousin” means a related Windows-ANSI character was overloaded. The table also defines set W_{2}, the Windows-ANSI characters which are overloaded.

3PDF (without embedded fonts) cross-platform portability and the TrueTEX “blue font” replacement problems are examples where this incompatibility occurs.

Belleek Overloading

T1_{0} Code W_{2} = Windows-ANSI Rationale for
Character  Assignment Overloaded Characters Overloading
Lslash  0xd7  multiply  Math character
Ng  0xaa  ordfeminine  Both rare
breve  0xbc  onequarter  Math character
caron  0xb5  mu  Math character
compwordmark —  Non-marking
dbar  0x86  dagger  Both rare
dotaccent  0xb7  middot  Resemblance
dotlessi  0xac  logicalnot  Math character
dotlessj  0xb1  plusminus  Math character
ff  0xa4  currency  Currency
ffi  0xa2  cent  Currency
ffl  0xad  sfthyphen  Composable
fi  0x85  ellipsis  Composable
fl  0x87  daggerdbl  Cousin
hungarumlaut  0xbd  onehalf  Math character
lslash  0xf7  divide  Math character
ng  0xba  ordmasculine  Both rare
ogonek  0xbe  threequarters  Math character
perthousandzero 0x89  perthousand  Resemblance
ring  0xb0  degree  Resemblance
visiblespace  0xa0  nbspace  Resemblance

When we apply the overloading above to Windows-ANSI, the result is the Belleek variant of Windows-ANSI, which is given in tabular form at the end of this document. Note that the Belleek encoding set contains:

T1 − T1_{2} + { Windows-ANSI − T1 − W_{2} } + .notdef

The expression in braces gives the characters which are not needed to actualize a T1 virtual font, but which are needed for the TrueType fonts to be maximally compatible with non-TEX applications.

5 Maximizing Portability and Interchangeability

In implementing a Belleek-encoded font, we may supply more than one virtual font file: the usual one for “native” use and others for use in exporting documents. The native virtual font assumes the underlying Belleek-encoded font is installed on the system. The export virtual font(s) assume that a Windows-ANSI, AdobeStandardEncoding, or Macintosh-encoded font (respectively) is being substituted for Belleek-encoded fonts, and synthesizes the T1_{0} set (or its analog in each alternate encoding) from the other subsets.

A maximal-portability virtual font would assume that only the greatest-common-subset of Windows-ANSI, AdobeStandardEncoding, and Macintosh character sets are available when computing the T1_{n} subsets. This would be suitable for use with document portability standards like Acrobat PDF or Common Ground.

A similar analysis shows how to make virtual T1 fonts for non-TEX fonts which may be available on a given platform. For example, the TrueTEX Previewer exports TFM files for non-TEX TrueType fonts on a Windows platform, and we plan to extend this capability to export various T1-encoded TFM/VF files for such fonts.

The Belleek-style analysis and implementation may also be applied to the TEX seven-bit OT1-OML-OMS-OMX) font encodings. The resulting virtual fonts could be constructed partly from corresponding T1 fonts where a correspondence exists (such as cmr10 being almost a subset of dcr10). Or conversely, T1 fonts can partly be virtualized from seven-bit fonts. While the set-covering problems become complex in these cases, the solutions are vital to modernizing how TEX uses fonts.

While we constructed Belleek from the Windows-ANSI encoding, we can also analyze the PostScript Type 1 fonts in a similar fashion by starting with the AdobeStandardEncoding character set. While Type 1 fonts do not suffer from the paucity of codes and the lack of a reencoding mechanism like Windows TrueType, we would gain the ability to virtualize non-TEX PostScript fonts into T1-encoded fonts. The L^{A}TEX DCPS package by Sebastian Rahtz attempts to achieve many of the same goals, but without the ability to analyze and modify glyph outlines as METAFOG does.

6 Production Methods

As of this writing the Belleek scheme is still experimental. Conversion of the METAFONT DC programs to outline glyphs and mapping the glyph elements to TrueType codes will be done using the author’s METAFOG converter, which handles all aspects of METAFONT conversion from outline conversion to virtualization. An “evaluation kit” of Belleek as applied to the DC font dcr10 is available via the Internet

at ftp://ftp.netcom.com/pub/Tr/TrueTeX in the following files:

dcr10.zip  The font files proper
belleek.zip Latest revision of this paper

7 Additional Considerations

The following considerations also entered into the design of Belleek:

• Windows-ANSI (and Latin-1) imply a practical prohibition on using codes 0x00–0x1f.

• Latin-1 consists of the 96 ASCII characters plus 96 more in the upper 128. Codes 0x00–0x1f and 0x7f–0x9f in Latin-1 are specified as “control codes” which we can freely overload in an encoding scheme.

• Windows-ANSI consists of a superset of Latin-1, adding 2 more (in Windows 3.0) or 24 more (in Windows 3.1) characters in the 0x7f–0x9f range. We have included these 24 additions in the covering analysis.

• The “ISOLatin1Encoding” encoding vector in Adobe PostScript (Table E.7 in the red book) is actually Latin-1 set plus certain assignments (some redundant) in 0x7f–0x9f range. An example of redundancy is cedilla appearing at both 0xb8 (the Latin-1 position) and 0x9b (peculiar to Adobe “ISOLatin1Encoding”). Furthermore, table E.5 in the red book has errors in the ISO listings: acute is listed twice but cedilla and dieresis only once (all three are similarly redundant); overscore (0xaf) is omitted altogether in E.5 but present in E.7; macron has an incorrect value 0257 in E.5 when is should give 0225.

• Code 0x60 is grave in ASCII and Latin-1, although it seems to get used as quoteleft while 0x27 (quotesingle) gets used as quoteright (TEX typists will be familiar with this common overloading). Microsoft, ANSI, and ISO all unambiguously specify this code as grave. We have exploited this in the covering to gain an extra code, since quoteleft appears elsewhere in Windows-ANSI (0x91).

• Rendering hyphens, dashes, bars, etc., with virtual font ruled lines is not possible in general, since these glyphs are often parallelograms instead of rectangles, such as in slanted fonts.

• The debates over character sets often produce objections to encoding ligatures (AE/ae is considered a letter and not a ligature in some languages). Since we must have ligatures to implement T1 encoding, this issue is decided for us.

• The various slashes in [Oo]slash and [Ll]slash are all different, so we have not considered these characters to be composable. Lslash and lslash are close enough that one code could be gained without an obvious visual disturbance.

• Although virtual fonts can additively compose accented characters, they cannot “take away” marks, such as making a dotless i from a dotted i. Non-portable TEX tricks (PostScript specials, etc.) have been applied to do this, but we want to keep our method portable in this regard.

8 TrueType DC Fonts for the Purist

We made the “almost-DC” qualification earlier, because METAFONT DC font programs customize the shape of accents for some accented characters. Composing a virtual accented character from the unaccented character plus the separate accent is not as typographically precise. To some extent we can perfect this imprecision by implementing TrueType glyphs instead of virtual composites for the accented characters in Latin-1, but Latin-1 does not cover all the accented characters of T1 encoding. To get a perfect result for each DC font will require an extra “expert” TrueType font having the T1_{2} glyphs in a non-standard encoding, together with adjustments to the virtual font file to map the T1 glyphs to the expert font codes. Extra fonts would also obviate the overloading of Windows-ANSI, allowing us to add glyphs to the METAFONT programs and make completely Windows-ANSI compatible fonts.

Since T1_{2} contains 52 such codes (53 members total less hyphenchar), and a TrueType font provides 215 possible codes, one expert TrueType font could cover the T1_{2} glyphs of about four DC fonts. Thus, implementing the 104 canonical DC fonts without composed approximations would require 130 = 104 + 104/4 Windows TrueType fonts.

9 Conclusion

Belleek hides much of the archaic nature of how TEX handles fonts, and harmonizes TEX with the sometimes disparate principles of today’s scalable fonts. Belleek is efficient in using available TrueType codes, because it requires only one actual (TrueType) font for each virtual T1-encoded font. The TrueType fonts are mostly compatible with non-TEX applications, since their encoding is nearly that of the Latin-1 specifications. The tools which create Belleek virtual font files can also virtualize non-TEX TrueType fonts for use as T1 TEX fonts. DVI translators based on Belleek can render the text of most TEX documents in the absence of TEX fonts. The scheme may also be extended to other scalable font technologies, such as PostScript Type 1.

Author’s address:

Kinch Computer Company

Publishers of TrueTEX Typesetting Software 611 Mitchell Street Ithaca NY 14850 USA Telephone (607) 273-0222 FAX (607) 273-0484

                                           kinch@netcom.com

10 Encoding Reference Tables

Latin-1

00 .notdef  01 .notdef  02 .notdef  03 .notdef
04 .notdef  05 .notdef  06 .notdef  07 .notdef
08 .notdef  09 .notdef  0a .notdef  0b .notdef
0c .notdef  0d .notdef  0e .notdef  0f .notdef
10 .notdef  11 .notdef  12 .notdef  13 .notdef
14 .notdef  15 .notdef  16 .notdef  17 .notdef
18 .notdef  19 .notdef  1a .notdef  1b .notdef
1c .notdef  1d .notdef  1e .notdef  1f .notdef
20 space  21 exclam  22 quotedbl  23 numbersign
24 dollar  25 percent  26 ampersand  27 quotesingle
28 parenleft  29 parenright  2a asterisk  2b plus
2c comma  2d hyphen  2e period  2f slash
30 zero  31 one  32 two  33 three
34 four  35 five  36 six  37 seven
38 eight  39 nine  3a colon  3b semicolon
3c less  3d equal  3e greater  3f question
40 at  41 A  42 B  43 C
44 D  45 E  46 F  47 G
48 H  49 I  4a J  4b K
4c L  4d M  4e N  4f O
50 P  51 Q  52 R  53 S
54 T  55 U  56 V  57 W
58 X  59 Y  5a Z  5b bracketleft
5c backslash  5d bracketright 5e asciicircum  5f underscore
60 quoteleft  61 a  62 b  63 c
64 d  65 e  66 f  67 g
68 h  69 i  6a j  6b k
6c l  6d m  6e n  6f o
70 p  71 q  72 r  73 s
74 t  75 u  76 v  77 w
78 x  79 y  7a z  7b braceleft
7c bar  7d braceright  7e asciitilde  7f .notdef
80 .notdef  81 .notdef  82 .notdef  83 .notdef
84 .notdef  85 .notdef  86 .notdef  87 .notdef
88 .notdef  89 .notdef  8a .notdef  8b .notdef
8c .notdef  8d .notdef  8e .notdef  8f .notdef
90 .notdef  91 .notdef  92 .notdef  93 .notdef
94 .notdef  95 .notdef  96 .notdef  97 .notdef
98 .notdef  99 .notdef  9a .notdef  9b .notdef
9c .notdef  9d .notdef  9e .notdef  9f .notdef
a0 nbspace  a1 exclamdown a2 cent  a3 sterling
a4 currency  a5 yen  a6 brokenbar  a7 section
a8 dieresis  a9 copyright  aa ordfeminine  ab guillemotleft
ac logicalnot  ad sfthyphen  ae registered  af macron
b0 degree  b1 plusminus  b2 twosuperior  b3 threesuperior
b4 acute  b5 mu  b6 paragraph  b7 middot
b8 cedilla  b9 onesuperior ba ordmasculine bb guillemotright
bc onequarter  bd onehalf  be threequarters bf questiondown
c0 Agrave  c1 Aacute  c2 Acircumflex  c3 Atilde
c4 Adieresis  c5 Aring  c6 AE  c7 Ccedilla
c8 Egrave  c9 Eacute  ca Ecircumflex  cb Edieresis
cc Igrave  cd Iacute  ce Icircumflex  cf Idieresis
d0 Eth  d1 Ntilde  d2 Ograve  d3 Oacute
d4 Ocircumflex d5 Otilde  d6 Odieresis  d7 multiply
d8 Oslash  d9 Ugrave  da Uacute  db Ucircumflex
dc Udieresis  dd Yacute  de Thorn  df germandbls
e0 agrave  e1 aacute  e2 acircumflex  e3 atilde
e4 adieresis  e5 aring  e6 ae  e7 ccedilla
e8 egrave  e9 eacute  ea ecircumflex  eb edieresis
ec igrave  ed iacute  ee icircumflex  ef idieresis
f0 eth  f1 ntilde  f2 ograve  f3 oacute
f4 ocircumflex f5 otilde  f6 odieresis  f7 divide
f8 oslash  f9 ugrave  fa uacute  fb ucircumflex
fc udieresis  fd yacute  fe thorn  ff  ydieresis

Adobe ISOLatin1Encoding

00 .notdef  01 .notdef  02 .notdef  03 .notdef
04 .notdef  05 .notdef  06 .notdef  07 .notdef
08 .notdef  09 .notdef  0a .notdef  0b .notdef
0c .notdef  0d .notdef  0e .notdef  0f .notdef
10 .notdef  11 .notdef  12 .notdef  13 .notdef
14 .notdef  15 .notdef  16 .notdef  17 .notdef
18 .notdef  19 .notdef  1a .notdef  1b .notdef
1c .notdef  1d .notdef  1e .notdef  1f .notdef
20 space  21 exclam  22 quotedbl  23 numbersign
24 dollar  25 percent  26 ampersand  27 quotesingle
28 parenleft  29 parenright  2a asterisk  2b plus
2c comma  2d hyphen  2e period  2f slash
30 zero  31 one  32 two  33 three
34 four  35 five  36 six  37 seven
38 eight  39 nine  3a colon  3b semicolon
3c less  3d equal  3e greater  3f question
40 at  41 A  42 B  43 C
44 D  45 E  46 F  47 G
48 H  49 I  4a J  4b K
4c L  4d M  4e N  4f O
50 P  51 Q  52 R  53 S
54 T  55 U  56 V  57 W
58 X  59 Y  5a Z  5b bracketleft
5c backslash  5d bracketright  5e asciicircum  5f underscore
60 quoteleft  61 a  62 b  63 c
64 d  65 e  66 f  67 g
68 h  69 i  6a j  6b k
6c l  6d m  6e n  6f o
70 p  71 q  72 r  73 s
74 t  75 u  76 v  77 w
78 x  79 y  7a z  7b braceleft
7c bar  7d braceright  7e asciitilde  7f .notdef
80 .notdef  81 .notdef  82 .notdef  83 .notdef
84 .notdef  85 .notdef  86 .notdef  87 .notdef
88 .notdef  89 .notdef  8a .notdef  8b .notdef
8c .notdef  8d .notdef  8e .notdef  8f .notdef
90 dotlessi  91 grave  92 acute  93 circumflex
94 tilde  95 macron  96 breve  97 dotaccent
98 dieresis  99 .notdef  9a ring  9b cedilla
9c .notdef  9d hungarumlaut 9e ogonek  9f caron
a0 nbspace  a1 exclamdown  a2 cent  a3 sterling
a4 currency  a5 yen  a6 brokenbar  a7 section
a8 dieresis  a9 copyright  aa ordfeminine  ab guillemotleft
ac logicalnot  ad sfthyphen  ae registered  af overscore
b0 degree  b1 plusminus  b2 twosuperior  b3 threesuperior
b4 acute  b5 mu  b6 paragraph  b7 middot
b8 cedilla  b9 onesuperior  ba ordmasculine bb guillemotright
bc onequarter  bd onehalf  be threequarters bf questiondown
c0 Agrave  c1 Aacute  c2 Acircumflex  c3 Atilde
c4 Adieresis  c5 Aring  c6 AE  c7 Ccedilla
c8 Egrave  c9 Eacute  ca Ecircumflex  cb Edieresis
cc Igrave  cd Iacute  ce Icircumflex  cf Idieresis
d0 Eth  d1 Ntilde  d2 Ograve  d3 Oacute
d4 Ocircumflex d5 Otilde  d6 Odieresis  d7 multiply
d8 Oslash  d9 Ugrave  da Uacute  db Ucircumflex
dc Udieresis  dd Yacute  de Thorn  df germandbls
e0 agrave  e1 aacute  e2 acircumflex  e3 atilde
e4 adieresis  e5 aring  e6 ae  e7 ccedilla
e8 egrave  e9 eacute  ea ecircumflex  eb edieresis
ec igrave  ed iacute  ee icircumflex  ef idieresis
f0 eth  f1 ntilde  f2 ograve  f3 oacute
f4 ocircumflex f5 otilde  f6 odieresis  f7 divide
f8 oslash  f9 ugrave  fa uacute  fb ucircumflex
fc udieresis  fd yacute  fe thorn  ff  ydieresis

Adobe StandardEncoding

00 .notdef  01 .notdef  02 .notdef  03 .notdef
04 .notdef  05 .notdef  06 .notdef  07 .notdef
08 .notdef  09 .notdef  0a .notdef  0b .notdef
0c .notdef  0d .notdef  0e .notdef  0f .notdef
10 .notdef  11 .notdef  12 .notdef  13 .notdef
14 .notdef  15 .notdef  16 .notdef  17 .notdef
18 .notdef  19 .notdef  1a .notdef  1b .notdef
1c .notdef  1d .notdef  1e .notdef  1f .notdef
20 space  21 exclam  22 quotedbl  23 numbersign
24 dollar  25 percent  26 ampersand  27 quoteright
28 parenleft  29 parenright  2a asterisk  2b plus
2c comma  2d hyphen  2e period  2f slash
30 zero  31 one  32 two  33 three
34 four  35 five  36 six  37 seven
38 eight  39 nine  3a colon  3b semicolon
3c less  3d equal  3e greater  3f question
40 at  41 A  42 B  43 C
44 D  45 E  46 F  47 G
48 H  49 I  4a J  4b K
4c L  4d M  4e N  4f O
50 P  51 Q  52 R  53 S
54 T  55 U  56 V  57 W
58 X  59 Y  5a Z  5b bracketleft
5c backslash  5d bracketright  5e asciicircum  5f underscore
60 quoteleft  61 a  62 b  63 c
64 d  65 e  66 f  67 g
68 h  69 i  6a j  6b k
6c l  6d m  6e n  6f o
70 p  71 q  72 r  73 s
74 t  75 u  76 v  77 w
78 x  79 y  7a z  7b braceleft
7c bar  7d braceright  7e asciitilde  7f .notdef
80 .notdef  81 .notdef  82 .notdef  83 .notdef
84 .notdef  85 .notdef  86 .notdef  87 .notdef
88 .notdef  89 .notdef  8a .notdef  8b .notdef
8c .notdef  8d .notdef  8e .notdef  8f .notdef
90 .notdef  91 .notdef  92 .notdef  93 .notdef
94 .notdef  95 .notdef  96 .notdef  97 .notdef
98 .notdef  99 .notdef  9a .notdef  9b .notdef
9c .notdef  9d .notdef  9e .notdef  9f .notdef
a0 .notdef  a1 exclamdown  a2 cent  a3 sterling
a4 fraction  a5 yen  a6 florin  a7 section
a8 currency  a9 quotesingle  aa quotedblleft  ab guillemotleft
ac guilsinglleft  ad guilsinglright ae fi  af fl
b0 .notdef  b1 endash  b2 dagger  b3 daggerdbl
b4 periodcentered b5 .notdef  b6 paragraph  b7 bullet
b8 quotesinglbase b9 quotedblbase ba quotedblright bb guillemotright
bc ellipsis  bd perthousand  be .notdef  bf questiondown
c0 .notdef  c1 grave  c2 acute  c3 circumflex
c4 tilde  c5 macron  c6 breve  c7 dotaccent
c8 dieresis  c9 .notdef  ca ring  cb cedilla
cc .notdef  cd hungarumlaut ce ogonek  cf caron
d0 emdash  d1 .notdef  d2 .notdef  d3 .notdef
d4 .notdef  d5 .notdef  d6 .notdef  d7 .notdef
d8 .notdef  d9 .notdef  da .notdef  db .notdef
dc .notdef  dd .notdef  de .notdef  df .notdef
e0 .notdef  e1 AE  e2 .notdef  e3 ordfeminine
e4 .notdef  e5 .notdef  e6 .notdef  e7 .notdef
e8 Lslash  e9 Oslash  ea OE  eb ordmasculine
ec .notdef  ed .notdef  ee .notdef  ef .notdef
f0 .notdef  f1 ae  f2 .notdef  f3 .notdef
f4 .notdef  f5 dotlessi  f6 .notdef  f7 .notdef
f8 lslash  f9 oslash  fa oe  fb germandbls
fc .notdef  fd .notdef  fe .notdef  ff  .notdef

Windows ANSI

00 .notdef  01 .notdef  02 .notdef  03 .notdef
04 .notdef  05 .notdef  06 .notdef  07 .notdef
08 .notdef  09 .notdef  0a .notdef  0b .notdef
0c .notdef  0d .notdef  0e .notdef  0f .notdef
10 .notdef  11 .notdef  12 .notdef  13 .notdef
14 .notdef  15 .notdef  16 .notdef  17 .notdef
18 .notdef  19 .notdef  1a .notdef  1b .notdef
1c .notdef  1d .notdef  1e .notdef  1f .notdef
20 space  21 exclam  22 quotedbl  23 numbersign
24 dollar  25 percent  26 ampersand  27 quotesingle
28 parenleft  29 parenright  2a asterisk  2b plus
2c comma  2d hyphen  2e period  2f slash
30 zero  31 one  32 two  33 three
34 four  35 five  36 six  37 seven
38 eight  39 nine  3a colon  3b semicolon
3c less  3d equal  3e greater  3f question
40 at  41 A  42 B  43 C
44 D  45 E  46 F  47 G
48 H  49 I  4a J  4b K
4c L  4d M  4e N  4f O
50 P  51 Q  52 R  53 S
54 T  55 U  56 V  57 W
58 X  59 Y  5a Z  5b bracketleft
5c backslash  5d bracketright 5e asciicircum  5f underscore
60 quoteleft  61 a  62 b  63 c
64 d  65 e  66 f  67 g
68 h  69 i  6a j  6b k
6c l  6d m  6e n  6f o
70 p  71 q  72 r  73 s
74 t  75 u  76 v  77 w
78 x  79 y  7a z  7b braceleft
7c bar  7d braceright  7e asciitilde  7f .notdef
80 .notdef  81 .notdef  82 quotesinglbase 83 florin
84 quotedblbase 85 ellipsis  86 dagger  87 daggerdbl
88 circumflex  89 perthousand 8a Scaron  8b guilsinglleft
8c OE  8d .notdef  8e .notdef  8f .notdef
90 .notdef  91 quoteleft  92 quoteright  93 quotedblleft
94 quotedblright 95 bullet  96 endash  97 emdash
98 tilde  99 trademark  9a scaron  9b guilsinglright
9c oe  9d .notdef  9e .notdef  9f Ydieresis
a0 nbspace  a1 exclamdown a2 cent  a3 sterling
a4 currency  a5 yen  a6 brokenbar  a7 section
a8 dieresis  a9 copyright  aa ordfeminine  ab guillemotleft
ac logicalnot  ad sfthyphen  ae registered  af macron
b0 degree  b1 plusminus  b2 twosuperior  b3 threesuperior
b4 acute  b5 mu  b6 paragraph  b7 middot
b8 cedilla  b9 onesuperior ba ordmasculine  bb guillemotright
bc onequarter  bd onehalf  be threequarters  bf questiondown
c0 Agrave  c1 Aacute  c2 Acircumflex  c3 Atilde
c4 Adieresis  c5 Aring  c6 AE  c7 Ccedilla
c8 Egrave  c9 Eacute  ca Ecircumflex  cb Edieresis
cc Igrave  cd Iacute  ce Icircumflex  cf Idieresis
d0 Eth  d1 Ntilde  d2 Ograve  d3 Oacute
d4 Ocircumflex  d5 Otilde  d6 Odieresis  d7 multiply
d8 Oslash  d9 Ugrave  da Uacute  db Ucircumflex
dc Udieresis  dd Yacute  de Thorn  df germandbls
e0 agrave  e1 aacute  e2 acircumflex  e3 atilde
e4 adieresis  e5 aring  e6 ae  e7 ccedilla
e8 egrave  e9 eacute  ea ecircumflex  eb edieresis
ec igrave  ed iacute  ee icircumflex  ef idieresis
f0 eth  f1 ntilde  f2 ograve  f3 oacute
f4 ocircumflex  f5 otilde  f6 odieresis  f7 divide
f8 oslash  f9 ugrave  fa uacute  fb ucircumflex
fc udieresis  fd yacute  fe thorn  ff  ydieresis

T1

00 grave  01 acute  02 circumflex  03 tilde
04 dieresis  05 hungarumlaut 06 ring  07 caron
08 breve  09 macron  0a dotaccent  0b cedilla
0c ogonek  0d quotesinglbase 0e guilsinglleft  0f guilsinglright
10 quotedblleft  11 quotedblright 12 quotedblbase  13 guillemotleft
14 guillemotright  15 endash  16 emdash  17 compwordmark
18 perthousandzero 19 dotlessi  1a dotlessj  1b ff
1c fi  1d fl  1e ffi  1f ffl
20 visiblespace  21 exclam  22 quotedbl  23 numbersign
24 dollar  25 percent  26 ampersand  27 quoteright
28 parenleft  29 parenright  2a asterisk  2b plus
2c comma  2d hyphen  2e period  2f slash
30 zero  31 one  32 two  33 three
34 four  35 five  36 six  37 seven
38 eight  39 nine  3a colon  3b semicolon
3c less  3d equal  3e greater  3f question
40 at  41 A  42 B  43 C
44 D  45 E  46 F  47 G
48 H  49 I  4a J  4b K
4c L  4d M  4e N  4f O
50 P  51 Q  52 R  53 S
54 T  55 U  56 V  57 W
58 X  59 Y  5a Z  5b bracketleft
5c backslash  5d bracketright  5e asciicircum  5f underscore
60 quoteleft  61 a  62 b  63 c
64 d  65 e  66 f  67 g
68 h  69 i  6a j  6b k
6c l  6d m  6e n  6f o
70 p  71 q  72 r  73 s
74 t  75 u  76 v  77 w
78 x  79 y  7a z  7b braceleft
7c bar  7d braceright  7e asciitilde  7f hyphenchar
80 Abreve  81 Aogonek  82 Cacute  83 Ccaron
84 Dcaron  85 Ecaron  86 Eogonek  87 Gbreve
88 Lacute  89 Lcaron  8a Lslash  8b Nacute
8c Ncaron  8d Ng  8e Ohungarumlaut 8f Racute
90 Rcaron  91 Sacute  92 Scaron  93 Scedilla
94 Tcaron  95 Tcedilla  96 Uhungarumlaut 97 Uring
98 Ydieresis  99 Zacute  9a Zcaron  9b Zdotaccent
9c IJ  9d Idotaccent  9e dbar  9f section
a0 abreve  a1 aogonek  a2 cacute  a3 ccaron
a4 dcaron  a5 ecaron  a6 eogonek  a7 gbreve
a8 lacute  a9 lcaron  aa lslash  ab nacute
ac ncaron  ad ng  ae ohungarumlaut af racute
b0 rcaron  b1 sacute  b2 scaron  b3 scedilla
b4 tcaron  b5 tcedilla  b6 uhungarumlaut b7 uring
b8 ydieresis  b9 zacute  ba zcaron  bb zdotaccent
bc ij  bd exclamdown  be questiondown  bf sterling
c0 Agrave  c1 Aacute  c2 Acircumflex  c3 Atilde
c4 Adieresis  c5 Aring  c6 AE  c7 Ccedilla
c8 Egrave  c9 Eacute  ca Ecircumflex  cb Edieresis
cc Igrave  cd Iacute  ce Icircumflex  cf Idieresis
d0 Eth  d1 Ntilde  d2 Ograve  d3 Oacute
d4 Ocircumflex  d5 Otilde  d6 Odieresis  d7 OE
d8 Oslash  d9 Ugrave  da Uacute  db Ucircumflex
dc Udieresis  dd Yacute  de Thorn  df SS
e0 agrave  e1 aacute  e2 acircumflex  e3 atilde
e4 adieresis  e5 aring  e6 ae  e7 ccedilla
e8 egrave  e9 eacute  ea ecircumflex  eb edieresis
ec igrave  ed iacute  ee icircumflex  ef idieresis
f0 eth  f1 ntilde  f2 ograve  f3 oacute
f4 ocircumflex  f5 otilde  f6 odieresis  f7 oe
f8 oslash  f9 ugrave  fa uacute  fb ucircumflex
fc udieresis  fd yacute  fe thorn  ff  germandbls

Belleek Variant of Windows-ANSI

00 .notdef  01 .notdef  02 .notdef  03 .notdef
04 .notdef  05 .notdef  06 .notdef  07 .notdef
08 .notdef  09 .notdef  0a .notdef  0b .notdef
0c .notdef  0d .notdef  0e .notdef  0f .notdef
10 .notdef  11 .notdef  12 .notdef  13 .notdef
14 .notdef  15 .notdef  16 .notdef  17 .notdef
18 .notdef  19 .notdef  1a .notdef  1b .notdef
1c .notdef  1d .notdef  1e .notdef  1f .notdef
20 space  21 exclam  22 quotedbl  23 numbersign
24 dollar  25 percent  26 ampersand  27 quotesingle
28 parenleft  29 parenright  2a asterisk  2b plus
2c comma  2d hyphen  2e period  2f slash
30 zero  31 one  32 two  33 three
34 four  35 five  36 six  37 seven
38 eight  39 nine  3a colon  3b semicolon
3c less  3d equal  3e greater  3f question
40 at  41 A  42 B  43 C
44 D  45 E  46 F  47 G
48 H  49 I  4a J  4b K
4c L  4d M  4e N  4f O
50 P  51 Q  52 R  53 S
54 T  55 U  56 V  57 W
58 X  59 Y  5a Z  5b bracketleft
5c backslash  5d bracketright  5e asciicircum  5f underscore
60 grave  61 a  62 b  63 c
64 d  65 e  66 f  67 g
68 h  69 i  6a j  6b k
6c l  6d m  6e n  6f o
70 p  71 q  72 r  73 s
74 t  75 u  76 v  77 w
78 x  79 y  7a z  7b braceleft
7c bar  7d braceright  7e asciitilde  7f .notdef
80 .notdef  81 .notdef  82 quotesinglbase 83 florin
84 quotedblbase 85 fi  86 dbar  87 fl
88 circumflex  89 perthousandzero 8a Scaron  8b guilsinglleft
8c OE  8d .notdef  8e .notdef  8f .notdef
90 .notdef  91 quoteleft  92 quoteright  93 quotedblleft
94 quotedblright 95 bullet  96 endash  97 emdash
98 tilde  99 trademark  9a scaron  9b guilsinglright
9c oe  9d .notdef  9e .notdef  9f Ydieresis
a0 visiblespace  a1 exclamdown  a2 ffi  a3 sterling
a4 ff  a5 yen  a6 brokenbar  a7 section
a8 dieresis  a9 copyright  aa Ng  ab guillemotleft
ac dotlessi  ad ffl  ae registered  af macron
b0 ring  b1 dotlessj  b2 twosuperior  b3 threesuperior
b4 acute  b5 caron  b6 paragraph  b7 dotaccent
b8 cedilla  b9 onesuperior  ba ng  bb guillemotright
bc breve  bd hungarumlaut  be ogonek  bf questiondown
c0 Agrave  c1 Aacute  c2 Acircumflex  c3 Atilde
c4 Adieresis  c5 Aring  c6 AE  c7 Ccedilla
c8 Egrave  c9 Eacute  ca Ecircumflex  cb Edieresis
cc Igrave  cd Iacute  ce Icircumflex  cf Idieresis
d0 Eth  d1 Ntilde  d2 Ograve  d3 Oacute
d4 Ocircumflex  d5 Otilde  d6 Odieresis  d7 Lslash
d8 Oslash  d9 Ugrave  da Uacute  db Ucircumflex
dc Udieresis  dd Yacute  de Thorn  df germandbls
e0 agrave  e1 aacute  e2 acircumflex  e3 atilde
e4 adieresis  e5 aring  e6 ae  e7 ccedilla
e8 egrave  e9 eacute  ea ecircumflex  eb edieresis
ec igrave  ed iacute  ee icircumflex  ef idieresis
f0 eth  f1 ntilde  f2 ograve  f3 oacute
f4 ocircumflex  f5 otilde  f6 odieresis  f7 lslash
f8 oslash  f9 ugrave  fa uacute  fb ucircumflex
fc udieresis  fd yacute  fe thorn  ff  ydieresis