(Это приложение является
информативным, а не формальным)
HTML documents may contain any of the about 30,000 different
characters defined by Unicode. Many documents only need a few hundred. Many
fonts also only contain just a few hundred glyphs. In combination with section
5.2, this appendix explains how the characters in the document and the
glyphs in a font are matched.
The content of an HTML document is a sequence of characters and
markup. To send it "over the wire", it is encoded as a sequence of
bytes, using one of several possible encodings. The HTML document has to be
decoded to find the characters. For example, in Western Europe it is customary
to use the byte 224 for an a-with-grave-accent (à), but in Hebrew, it is
more common to use 224 for an Aleph. In Japanese, the meaning of a byte usually
depends on the bytes that preceded it. In some encodings, one character is
encoded as two (or more) bytes.
The UA knows how to decode the bytes by looking at the
"charset" parameter in the HTTP header. Typical encodings (charset
values) are "ASCII" (for English), "ISO-8859-1" (for Western
Europe), "ISO-8859-8" (for Hebrew), "Shift-JIS" (for
Japanese).
HTML [2][4], allows some
30,000 different characters, namely those defined by Unicode. Not many documents
will use that many different characters, and choosing the right encoding will
usually ensure that the document only needs one byte per character. Occasional
characters outside the encoded range can still be entered as numerical character
references: 'Π' will always mean the Greek uppercase Pi, no matter what
encoding was used. Note that this entails that UAs have to be prepared for any
Unicode character, even if they only handle a few encodings.
A font doesn't contain characters, it contains pictures of
characters, known as glyphs. The glyphs, in the form of outlines or bitmaps,
constitute a particular representation of a character. Either explicitly or
implicitly, each font has a table associated with it, the font encoding table,
that tells for each glyph what character it is a representation for. In Type 1
fonts, the table is referred to as an encoding vector.
In fact, many fonts contain several glyphs for the same
character. Which of those glyphs should be used depends either on the rules of
the language, or on the preference of the designer.
In Arabic, for example, all letters have four different shapes,
depending on whether the letter is used at the start of a word, in the middle,
at the end, or in isolation. It is the same character in all cases, and thus
there is only one character in the HTML document, but when printed, it looks
differently each time.
There are also fonts that leave it to the graphic designer to
choose from among various alternative shapes provided. Unfortunately, CSS1
doesn't yet provide the means to select those alternatives. Currently, it is
always the default shape that is chosen from such fonts.
To deal with the problem that a single font may not be enough to
display all the characters in a document, or even a single element, CSS1 allows
the use of font sets.
A font set in CSS1 is a list of fonts, all of the same style and
size, that are tried in sequence to see if they contain a glyph for a certain
character. An element that contains English text mixed with mathematical symbols
may need a font set of two fonts, one containing letters and digits, the other
containing mathematical symbols. See section 5.2
for a detailed description of the selection mechanism for font sets.
Here is an example of a font set suitable for a text that is
expected to contain text with Latin characters, Japanese characters, and
mathematical symbols:
BODY { font-family: Baskerville,
Mincho, Symbol, serif }
The characters available in the Baskerville font (a font with
only Latin characters) will be taken from that font, Japanese will be taken from
Mincho, and the mathematical symbols will come from Symbol. Any other characters
will (hopefully) come from the generic font family 'serif'. The 'serif' font
family will also be used if one or more of the other fonts is unavailable.