NC Picto · Docs

PostScript font resolution

PSD text may identify a face by its PostScript name as well as a family/style. The PostScript prefix need not match the family name, and the family stored with a run can be a guess made from that name.

Resolution

FontDb::resolve_postscript first looks for an installed face with that exact PostScript name (families that share the guessed prefix are read first), then falls back to a heuristic split of the name. The heuristic splits at the last hyphen. A name without a hyphen loses a trailing capitalised style word (GmarketSansBold → Gmarket Sans, 700; ExampleSansSemiBoldItalic → Example Sans, 600, italic). A lowercase ending is not a style (Daylight), and a style word after the vendor tag MT stays in the family (ArialRoundedMTBold → Arial Rounded MT Bold).

The heuristic also gives the family, weight and slant stored on PSD import when the exact face is absent. A legacy family whose name ends in a style word and has no MT tag before it (CooperBlack) is then stored as the shorter family (Cooper, 900) until the face is installed.

Missing fonts

Opening a PSD or Affinity file already replaces a run's guessed family with the installed family its PostScript name resolves to. A guess still stays on a run when the face was absent at import and the document is reopened from .pcraft after the font is installed, when fonts are registered after opening, or when a command sets font and postscriptName together.

Missing-font detection (missing_fonts and missing_fonts_in_layer) and Replace Missing Fonts therefore use the same decision as layout: a run is missing only when neither its stored family, its exact PostScript face nor the heuristic family is installed. A run that resolves is not replaced because an unresolved run shares its family label.

Cost

Detection resolves the PostScript name only for runs whose stored family is not installed. The first such lookup reads the name tables of installed faces; the result is cached until fonts are registered or system fonts are loaded, and layout performs the same lookup for those runs.