Reference
Writing systems, and what each one needs beyond a font
A font containing the characters is necessary and not sufficient. Most of the world's scripts also need the font's layout tables, a language declared on the element, a normalisation form decided before the text arrives, or a line breaking rule that no default implements. Those are the nine pages below.
Each one has a mechanism the existing font pages do not cover, and links out to the adjacent page rather than restating it. If your text is not rendering at all, start with fonts falling back to a default instead: these pages assume the font loaded.
Indic scripts
- Devanagari
Hindi, Marathi, Nepali and Sanskrit are written in a script where the order characters are stored in is not the order they are drawn in.
- Tamil
Tamil avoids the stacked conjuncts of Devanagari and instead has vowel signs that wrap around the consonant they belong to, which breaks anything that counts characters.
Southeast Asian scripts
- Thai
Thai is written without spaces between words and stacks marks up to three levels above the baseline, so both line breaking and line height need deciding rather than defaulting.
East Asian scripts
- Japanese
Japanese shares code points with Chinese while wanting different glyph shapes for them, and has line-breaking rules that no default implements.
- Chinese
Simplified and Traditional are different character sets rather than different fonts, and a face covering one may genuinely not contain the other.
- Korean
Hangul syllables exist in two forms in Unicode, precomposed and assembled from parts, and a font can support one and not the other.
Extended Latin
- Vietnamese
Vietnamese is Latin with two diacritics stacked on one letter, and most Latin fonts contain the characters while positioning the second mark badly or not at all.
European scripts
- Cyrillic
Most Latin fonts include some Cyrillic, usually the Russian subset, and several languages written in Cyrillic need letters or letter shapes that subset does not have.
- Greek
Greek has two accent systems, a letter whose shape changes at the end of a word, and a capitalisation rule that a CSS text transform gets wrong.
Covered elsewhere on this site
Deliberately not repeated here. These pages already say it properly, and a second version would compete with them for the same reader.
- Arabic and Hebrew render backwards or disconnected
Direction and contextual joining, which is the whole story for right-to-left scripts.
- CJK characters show as boxes
Coverage and tofu, and choosing a face that has the range at all.
- Emoji do not render
Colour font formats, and why inline SVG is usually the better answer.
- Custom fonts fall back to a default
The font never loaded, which is a different problem from the font being wrong.
- @font-face in a PDF render
Getting a font to the renderer in the first place.
- unicode-range and subsetting
Splitting a stack so Latin and a second script use different faces.