PeachPDF prefers a font's real OpenType GSUB substitution for font-variant-caps, font-variant-numeric and font-variant-position, falling back to a synthesized approximation only where the standard specifically allows one.
Source Sans 3 has real smcp/c2sc/titl data, so its small-caps/all-small-caps/titling-caps below use actual substituted glyphs and the text stays a single run. Source Code Pro has none of those features, so the same CSS instead synthesizes small-caps/all-small-caps by upper-casing and shrinking the affected letters - petite-caps/unicase never synthesize, so on a font that lacks them (both bundled fonts here) they render identically to normal text.
| font-variant-caps | Source Sans 3 (real GSUB) | Source Code Pro (synthesized/none) |
|---|---|---|
| small-caps | Hello World | Hello World |
| all-small-caps | Hello World | Hello World |
| titling-caps | Hello World | Hello World |
| petite-caps | Hello World | Hello World |
Source Sans 3 has real onum/tnum/zero data - oldstyle figures use lowercase-height/descending forms instead of the default lining figures, tabular figures fix every digit to the same advance width for column alignment, and slashed-zero adds a distinguishing slash through the digit 0.
| font-variant-numeric | Sample |
|---|---|
| normal (lining, default) | 1234567890 |
| oldstyle-nums | 1234567890 |
| tabular-nums | 1234567890 |
| slashed-zero | 1002000 |
Source Sans 3 has real sups/subs data, so its superscripts and subscripts below are the font's own purpose-drawn glyphs. STIX Two Math has neither (28 GSUB features, none of them positional), so the same CSS is synthesized instead - drawn at a reduced size with a shifted baseline, using the scale and offset that font's own OS/2 table recommends. Neither form changes the line's height, unlike vertical-align.
| font-variant-position | Source Sans 3 (real GSUB) | STIX Two Math (synthesized) |
|---|---|---|
| normal | E = mc2 and H2O | E = mc2 and H2O |
| super | E = mc2 | E = mc2 |
| sub | H2O | H2O |