# Tutorial #8

- Font Creation
- Creating a glyph (tracing outlines)
- Navigating to other glyphs
- On to the next glyph (consistent directions)
- Consistent serifs and stem widths
- Building accented glyphs
- Building a ligature
- Examining metrics
- Kerning
- Glyph variants
- Anchoring marks
- Checking your font
- Generating it
- Font Families
- Final Summary
- Notes on various scripts

## Special thoughts for special scripts

Microsoft provides some information on what features a word processor should support by default for certain scripts.

Caveat: Uniscribe (MS unicode text layout routines) may ignore either the GPOS or the GSUB table depending on the script, and may even refuse to use the font at all if it doesn't have the right stuff in GPOS/GSUB. A Hebrew font must have both a GPOS and a GSUB. If it doesn't the font is not used. A latin font need not have either, but if it doesn't have GSUB then GPOS won't be used. So now if one is present and the other isn't, FontForge will generate a dummy version of the other.

Sergey Malkin from MicroSoft tells me:

> Each shaping engine in Uniscribe can decide on its requirements for layout tables - some of them require both GSUB and GPOS, in some cases any table present is enough, or it can work without any table.

> Sometimes, purpose of the check is to determine if font is supporting particular script - if required tables are not there font is just rejected by this shaping engine. Sometimes, shaping engine can not just reject the font because there are fonts using older shaping technologies we still have to support, so it uses some logic when to fallback to legacy layout code.

> In your case this is Hebrew, where both tables are required to use OpenType processing. Arabic requires both tables too, Latin requires GSUB to execute GPOS. But in general, if you have both tables you should be safe with any script to get fully featured OpenType shaping.

### Latin

There are not many special complications in latin. Latin fonts can generally fit in a single byte encoding with no (or few) font tables. There are a plethora of accented glyphs which should be built. Kerning should be generated for some glyph combinations. A few ligatures need to be generated (the "f" ligatures: ff, fi, fl, ffi, ffl and perhaps st).

You may want to add a set of smallcaps. If you do, Adobe has reserved a block in the private use area for latin small-caps.

Some languages have specific requirements of their own

- For Polish

### Greek

Greek also does not have many complications. Modern Greek fonts generally fit in a single byte encoding. There are a few accented glyphs that need to be built. Kerning should be generated. I am not aware of any standard ligatures for modern greek (ancient greek had ligatures and variants on some of the glyphs though).

Small caps are again an option, and I have reserved a block in the private use area for them.

### Cyrillic

Cyrillic fonts also fit in a single byte encoding. There are a few accented glyphs. Kerning should be generated. I am not aware of any standard ligatures.

I am not aware of any need for small caps (in most cyrillic fonts most lower case letters are already small caps).

Again some languages need different glyphs

- Serbian/Macedonian

### Arabic

Arabic needs a complete set of initial, medial, final and isolated forms -- Unicode has reserved space for these. Arabic also needs a vast set of ligatures -- Unicode has reserved space for many, but I'd guess that extra ligatures will be needed sometimes. Arabic also needs a set of mark (mark to base, mark to ligature) attachments to position vowels above letters. Arabic may need a glyph decomposition table.

I'm told that in good Arabic typography there need to be many more than 4 forms per glyph. I'm not sure how this should be supported.

Right to left.

### Hebrew

Hebrew has a few final forms but no special tables are needed for these. Hebrew may need kerning. Hebrew should have a set of mark (mark to base) tables to position vowels over letters. Hebrew may need a glyph decomposition table. I am not aware of any needed ligatures.

Right to left

### Indic scripts

Indic scripts need a set of ligatures.

(they probably need a lot more but I'm not aware of what)

### Korean Hangul

The Hangul script consists of a set of syllables built out of a phonetic alphabet. Generally fonts consist of a set of precomposed syllables.

Complications are introduced by the massive combinatorial explosion of all these syllables. These are eased in postscript by CID-keyed fonts.

Vertical writing and left to right writing are used, and some glyphs have a different orientation when drawn vertically (parentheses for example).

### Japanese and Chinese (and Korean Hanja)

Again a massive collection of glyphs is needed, and postscript uses CID keyed fonts to deal with this.

Vertical writing and left to right writing are used, and some glyphs have a different orientation when drawn vertically (parentheses for example).

-- Prev -- TOC -- Next --