mirror of
https://github.com/storytold/designcraft.git
synced 2026-10-14 19:27:07 -04:00
The fonts in a document's Document Fonts folder are registered under a font scope that the document holds while it is open (Document::font_scope, runtime only; DocState keeps the scope alive and closes it when the last copy of the state goes: file.close, closing a tab, revert, a book chapter's export, the session ending). Composition, preflight, font.list, Package and the font menus, Glyphs panel and previews look fonts up through FontDb::scoped(scope): the document's own faces first, then the shared ones. Other open documents don't see them, and two documents with fonts of the same name each set text in their own. Composite fonts' member fonts and the fallback for kenten marks are looked up the same way. Font files stay in memory for the session (FaceRef keeps faces for the process); a document opened again reuses the faces of its unchanged files (same path, length and modification time) instead of reading them again. The composition cache's signature includes the scope; the word cache and the outline and PDF font caches are keyed by face. Variable font instances are kept per base face. A family's installed faces join the shared fonts all at once, and a face two lookups load at the same time is kept once, so a parallel fallback lookup never takes a family's bold before its regular has loaded.