A manifest passed through host now reaches every document you open, in the editor and the viewer,
so a theme's FONT_n fonts apply, and POD settings gives a document's font families those handles. And text in a font the document does not have is no longer set in
its paragraph style's font without a word: the document check now reports the missing font.
FONT_1, and
every piece of text in that family carries it: frames, paragraphs, table cells and styles, and the
family's entries in the manifest. A theme manifest that binds FONT_1 to a family of its own then
sets all that text in its family. Each row's popup offers FONT_1 … FONT_10, leaving out the
handles other families already have, and you can type another handle. Two families cannot share a
handle; swapping two is fine. The dialog's lists now scroll, so it keeps its size however many
colours and fonts a document has.
typograph.substitute_font(). See
Theme fonts: FONT_n handles.FONT_n, while the document still holds a layout in
the old family. typograph.validate() now reports it beforehand as font_not_printed, naming the
family, the style and the frames.Undo after replacing a font or a colour in POD settings restores everything. It used to leave text runs, table cells and styles changed. Replacing a font also reaches text in tables now; it used to skip it.
The host's manifest is applied to every document you open. A manifest passed through
host.manifest or host.manifest_data — for example a theme manifest that binds FONT_1,
FONT_2 … to a customer's font families — used to be applied only when the Images panel loaded a
document without images of its own. A converted template always has images, so its FONT_n text
kept its placeholder font; in the viewer the manifest was never applied at all. It is now applied
after every document opens, in both, on top of the document's own manifest. A pull provider is
called once per document opened. See
Templates, images, the manifest and clips.
A missing font is reported instead of silently swapped. Text whose font was missing — typically
a converted InDesign document whose package did not include every font — was set in its paragraph
style's font instead (for example Minion Pro where the document asked for Barlow Semi Condensed),
and nothing said so. It now asks for its own font: where that font is installed on your computer it
shows correctly, otherwise the browser's fallback stands in. Either way typograph.validate() now
reports it as font_missing, naming the font and style, so it can be supplied before printing.
message names the font (with the converter
service's own update).TYP-909 (editor-ui fix/TYP-909-host-manifest-on-open): apply_host_manifest() (new
hostmanifest.ts) runs on typograph_document_opened in editorapp.ts and viewer.ts, after
canvas's OpenDocument() has replaced the manifest with the document's own; set_manifest_data()
merges, loads the fonts, binds their uuids and re-resolves the text. The Images panel uses the same
function; php/get_manifest.php is still tried only there. Part of epic TYP-908.
TYP-907 (canvas fix/TYP-907-missing-font-family): story_style_to_font() let a font uuid
INHERITED from the paragraph style chain (the root $ID/[No paragraph style] carries one) outrank a
family the run states itself. A uuid now outranks a family only when the run or its character style
states it. A run whose own family is not loaded is recorded as not_loaded
(FontManager.note_missing_family()), not for a frame's cached default font (a converted frame's
"Arial" placeholder sets no text) nor canvas's default. reset_to_default_fonts() clears the font
issues on every document open: on canvas-service's shared page they carried over. Browser suite
run_font_uuid_tests(): 81 passed. A missing family is noted once per document, not per run.
TYP-912 (editor-ui feat/TYP-912-font-handles): the Font handles section of
PodSettingsDialog; the rules live in the new fonthandles.ts. These are what a handle may look
like, which handles to suggest, and the ORDER of the assign_font_handle() calls. canvas refuses
a handle another family still carries, so a handle passed on goes after the family giving it up,
and a swap goes through a temporary handle. Vitest fonthandles.test.ts. Part of epic TYP-908.
TYP-911 (canvas feat/TYP-911-font-handles): typograph.assign_font_handle(family, handle)
and typograph.font_handles(). Along the way, substitute_font() now reaches table cells. Every
substitution also used to write into property bags the undo snapshot shares (run overrides, styles
and manifest entries, which the snapshot keeps by slot), so undo left them changed; they are now
replaced in their slot. Browser suite run_font_handles_tests().
TYP-913 (canvas feat/TYP-913-font-not-printed): the font_not_printed check, an error. It
covers the manifest's fonts plus the document's active font_data files, .ttf only, compared
the way TcPdfGenerator::getFontNameByFamily() compares (TYP-910). Browser suite
run_font_not_printed_tests().
Canvas pin 4313af8: TYP-913 (PR #188), on top of TYP-911 (PR #187) and TYP-907 (PR #186, 1291bf8).