postext 1.24.0 → 1.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -5
- package/dist/__tests__/bundle/cjkRulesPin.test.d.ts +2 -0
- package/dist/__tests__/bundle/cjkRulesPin.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/cjkRulesPin.test.js +78 -0
- package/dist/__tests__/bundle/cjkRulesPin.test.js.map +1 -0
- package/dist/__tests__/bundle/contextDefaultsBundle.test.d.ts +2 -0
- package/dist/__tests__/bundle/contextDefaultsBundle.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/contextDefaultsBundle.test.js +104 -0
- package/dist/__tests__/bundle/contextDefaultsBundle.test.js.map +1 -0
- package/dist/__tests__/bundle/designOverflowPin.test.js +4 -2
- package/dist/__tests__/bundle/designOverflowPin.test.js.map +1 -1
- package/dist/__tests__/bundle/flowColumnsPin.test.d.ts +2 -0
- package/dist/__tests__/bundle/flowColumnsPin.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/flowColumnsPin.test.js +40 -0
- package/dist/__tests__/bundle/flowColumnsPin.test.js.map +1 -0
- package/dist/__tests__/bundle/gridBalancingPin.test.d.ts +2 -0
- package/dist/__tests__/bundle/gridBalancingPin.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/gridBalancingPin.test.js +72 -0
- package/dist/__tests__/bundle/gridBalancingPin.test.js.map +1 -0
- package/dist/__tests__/bundle/inlineTableSplitPin.test.d.ts +2 -0
- package/dist/__tests__/bundle/inlineTableSplitPin.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/inlineTableSplitPin.test.js +43 -0
- package/dist/__tests__/bundle/inlineTableSplitPin.test.js.map +1 -0
- package/dist/__tests__/bundle/openerHeadFloatsPin.test.d.ts +2 -0
- package/dist/__tests__/bundle/openerHeadFloatsPin.test.d.ts.map +1 -0
- package/dist/__tests__/bundle/openerHeadFloatsPin.test.js +50 -0
- package/dist/__tests__/bundle/openerHeadFloatsPin.test.js.map +1 -0
- package/dist/__tests__/bundle.test.js +11 -1
- package/dist/__tests__/bundle.test.js.map +1 -1
- package/dist/__tests__/cjk/annotationsRender.test.js +5 -2
- package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -1
- package/dist/__tests__/cjk/circledNumbers.test.d.ts +2 -0
- package/dist/__tests__/cjk/circledNumbers.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/circledNumbers.test.js +83 -0
- package/dist/__tests__/cjk/circledNumbers.test.js.map +1 -0
- package/dist/__tests__/cjk/gridBalancing.test.d.ts +2 -0
- package/dist/__tests__/cjk/gridBalancing.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/gridBalancing.test.js +227 -0
- package/dist/__tests__/cjk/gridBalancing.test.js.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.js +2 -1
- package/dist/__tests__/cjk/justifyRender.test.js.map +1 -1
- package/dist/__tests__/cjk/titleBreaks.test.d.ts +2 -0
- package/dist/__tests__/cjk/titleBreaks.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/titleBreaks.test.js +76 -0
- package/dist/__tests__/cjk/titleBreaks.test.js.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.js +13 -4
- package/dist/__tests__/cjk/wordJoiner.test.js.map +1 -1
- package/dist/__tests__/codeBlocks.test.js +1 -1
- package/dist/__tests__/defaults/stripContextDefaults.test.d.ts +2 -0
- package/dist/__tests__/defaults/stripContextDefaults.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/stripContextDefaults.test.js +265 -0
- package/dist/__tests__/defaults/stripContextDefaults.test.js.map +1 -0
- package/dist/__tests__/design/cjkDesignDash.test.d.ts +2 -0
- package/dist/__tests__/design/cjkDesignDash.test.d.ts.map +1 -0
- package/dist/__tests__/design/cjkDesignDash.test.js +395 -0
- package/dist/__tests__/design/cjkDesignDash.test.js.map +1 -0
- package/dist/__tests__/design/cjkDesignText.test.d.ts +2 -0
- package/dist/__tests__/design/cjkDesignText.test.d.ts.map +1 -0
- package/dist/__tests__/design/cjkDesignText.test.js +130 -0
- package/dist/__tests__/design/cjkDesignText.test.js.map +1 -0
- package/dist/__tests__/design/cjkDesignTextRender.test.d.ts +2 -0
- package/dist/__tests__/design/cjkDesignTextRender.test.d.ts.map +1 -0
- package/dist/__tests__/design/cjkDesignTextRender.test.js +100 -0
- package/dist/__tests__/design/cjkDesignTextRender.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +49 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/hardBreaks.test.js +1 -1
- package/dist/__tests__/headingInlineMarks.test.js +1 -1
- package/dist/__tests__/headingNumberSpans.test.d.ts +2 -0
- package/dist/__tests__/headingNumberSpans.test.d.ts.map +1 -0
- package/dist/__tests__/headingNumberSpans.test.js +96 -0
- package/dist/__tests__/headingNumberSpans.test.js.map +1 -0
- package/dist/__tests__/mathSizeMigration.test.js +2 -2
- package/dist/__tests__/multipleColumns.test.js +207 -0
- package/dist/__tests__/multipleColumns.test.js.map +1 -1
- package/dist/__tests__/parse/citations.test.js +29 -0
- package/dist/__tests__/parse/citations.test.js.map +1 -1
- package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +10 -6
- package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js.map +1 -1
- package/dist/__tests__/pipeline/calloutOverflow.test.js +4 -2
- package/dist/__tests__/pipeline/calloutOverflow.test.js.map +1 -1
- package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
- package/dist/__tests__/pipeline/calloutTallKeepTogether.test.js +6 -5
- package/dist/__tests__/pipeline/calloutTallKeepTogether.test.js.map +1 -1
- package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
- package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/floatCitingPage.test.d.ts +2 -0
- package/dist/__tests__/pipeline/floatCitingPage.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/floatCitingPage.test.js +241 -0
- package/dist/__tests__/pipeline/floatCitingPage.test.js.map +1 -0
- package/dist/__tests__/pipeline/floatOverInlineResource.test.js +18 -6
- package/dist/__tests__/pipeline/floatOverInlineResource.test.js.map +1 -1
- package/dist/__tests__/pipeline/floatPlacement.test.js +3 -3
- package/dist/__tests__/pipeline/floatPlacement.test.js.map +1 -1
- package/dist/__tests__/pipeline/flowColumns.test.d.ts +2 -0
- package/dist/__tests__/pipeline/flowColumns.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/flowColumns.test.js +261 -0
- package/dist/__tests__/pipeline/flowColumns.test.js.map +1 -0
- package/dist/__tests__/pipeline/headingKeepFitEps.test.d.ts +2 -0
- package/dist/__tests__/pipeline/headingKeepFitEps.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/headingKeepFitEps.test.js +83 -0
- package/dist/__tests__/pipeline/headingKeepFitEps.test.js.map +1 -0
- package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
- package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
- package/dist/__tests__/pipeline/inlineTableSplit.test.d.ts +2 -0
- package/dist/__tests__/pipeline/inlineTableSplit.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/inlineTableSplit.test.js +238 -0
- package/dist/__tests__/pipeline/inlineTableSplit.test.js.map +1 -0
- package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
- package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
- package/dist/__tests__/pipeline/resolvedPaletteCopy.test.js +3 -2
- package/dist/__tests__/pipeline/resolvedPaletteCopy.test.js.map +1 -1
- package/dist/__tests__/pipeline/sideBoxAfterText.test.d.ts +2 -0
- package/dist/__tests__/pipeline/sideBoxAfterText.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/sideBoxAfterText.test.js +163 -0
- package/dist/__tests__/pipeline/sideBoxAfterText.test.js.map +1 -0
- package/dist/__tests__/prepareFonts.test.d.ts +2 -0
- package/dist/__tests__/prepareFonts.test.d.ts.map +1 -0
- package/dist/__tests__/prepareFonts.test.js +548 -0
- package/dist/__tests__/prepareFonts.test.js.map +1 -0
- package/dist/__tests__/svgFonts.test.d.ts +2 -0
- package/dist/__tests__/svgFonts.test.d.ts.map +1 -0
- package/dist/__tests__/svgFonts.test.js +286 -0
- package/dist/__tests__/svgFonts.test.js.map +1 -0
- package/dist/__tests__/verseLines.test.js +1 -1
- package/dist/__tests__/vertical/measurePaint.test.js +16 -0
- package/dist/__tests__/vertical/measurePaint.test.js.map +1 -1
- package/dist/bundle/adapters.d.ts +31 -7
- package/dist/bundle/adapters.d.ts.map +1 -1
- package/dist/bundle/adapters.js +113 -34
- package/dist/bundle/adapters.js.map +1 -1
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +37 -4
- package/dist/bundle/codec.js.map +1 -1
- package/dist/bundle/configVersion.d.ts +127 -10
- package/dist/bundle/configVersion.d.ts.map +1 -1
- package/dist/bundle/configVersion.js +260 -9
- package/dist/bundle/configVersion.js.map +1 -1
- package/dist/bundle/index.d.ts +3 -3
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/index.js +2 -2
- package/dist/bundle/index.js.map +1 -1
- package/dist/bundle/manifest.d.ts.map +1 -1
- package/dist/bundle/manifest.js +3 -2
- package/dist/bundle/manifest.js.map +1 -1
- package/dist/bundle/types.d.ts +4 -0
- package/dist/bundle/types.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +18 -3
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/columnRule.d.ts.map +1 -1
- package/dist/columnRule.js +5 -2
- package/dist/columnRule.js.map +1 -1
- package/dist/configWarnings.js +1 -1
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/bodyText.d.ts +2 -1
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +13 -2
- package/dist/defaults/bodyText.js.map +1 -1
- package/dist/defaults/cjk.d.ts +2 -1
- package/dist/defaults/cjk.d.ts.map +1 -1
- package/dist/defaults/cjk.js +17 -1
- package/dist/defaults/cjk.js.map +1 -1
- package/dist/defaults/diagramStyle.d.ts.map +1 -1
- package/dist/defaults/diagramStyle.js +6 -0
- package/dist/defaults/diagramStyle.js.map +1 -1
- package/dist/defaults/headings.d.ts +22 -2
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +34 -2
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +11 -2
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +34 -9
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/indexConfig.d.ts +6 -2
- package/dist/defaults/indexConfig.d.ts.map +1 -1
- package/dist/defaults/indexConfig.js +10 -5
- package/dist/defaults/indexConfig.js.map +1 -1
- package/dist/defaults/layout.d.ts +5 -0
- package/dist/defaults/layout.d.ts.map +1 -1
- package/dist/defaults/layout.js +32 -0
- package/dist/defaults/layout.js.map +1 -1
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +8 -2
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/tableStyle.d.ts.map +1 -1
- package/dist/defaults/tableStyle.js +6 -0
- package/dist/defaults/tableStyle.js.map +1 -1
- package/dist/design/cjkText.d.ts +34 -0
- package/dist/design/cjkText.d.ts.map +1 -0
- package/dist/design/cjkText.js +88 -0
- package/dist/design/cjkText.js.map +1 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +103 -5
- package/dist/design/layout.js.map +1 -1
- package/dist/design/richText.d.ts +28 -0
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js +37 -1
- package/dist/design/richText.js.map +1 -1
- package/dist/fonts/buildWithFonts.d.ts +19 -0
- package/dist/fonts/buildWithFonts.d.ts.map +1 -0
- package/dist/fonts/buildWithFonts.js +16 -0
- package/dist/fonts/buildWithFonts.js.map +1 -0
- package/dist/fonts/faces.d.ts +101 -0
- package/dist/fonts/faces.d.ts.map +1 -0
- package/dist/fonts/faces.js +282 -0
- package/dist/fonts/faces.js.map +1 -0
- package/dist/fonts/fontSet.d.ts +37 -0
- package/dist/fonts/fontSet.d.ts.map +1 -0
- package/dist/fonts/fontSet.js +181 -0
- package/dist/fonts/fontSet.js.map +1 -0
- package/dist/fonts/prepare.d.ts +125 -0
- package/dist/fonts/prepare.d.ts.map +1 -0
- package/dist/fonts/prepare.js +380 -0
- package/dist/fonts/prepare.js.map +1 -0
- package/dist/html-backend.d.ts +17 -0
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +98 -4
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +25 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/measure/cache.d.ts.map +1 -1
- package/dist/measure/cache.js +32 -2
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/canvas.d.ts +15 -0
- package/dist/measure/canvas.d.ts.map +1 -1
- package/dist/measure/canvas.js +68 -4
- package/dist/measure/canvas.js.map +1 -1
- package/dist/measure/cjk.d.ts.map +1 -1
- package/dist/measure/cjk.js +4 -1
- package/dist/measure/cjk.js.map +1 -1
- package/dist/measure/cjkClasses.d.ts +17 -0
- package/dist/measure/cjkClasses.d.ts.map +1 -1
- package/dist/measure/cjkClasses.js +41 -1
- package/dist/measure/cjkClasses.js.map +1 -1
- package/dist/measure/cjkCompose.d.ts.map +1 -1
- package/dist/measure/cjkCompose.js +119 -7
- package/dist/measure/cjkCompose.js.map +1 -1
- package/dist/measure/cjkPunctuation.d.ts +18 -1
- package/dist/measure/cjkPunctuation.d.ts.map +1 -1
- package/dist/measure/cjkPunctuation.js +13 -1
- package/dist/measure/cjkPunctuation.js.map +1 -1
- package/dist/measure/font.d.ts +8 -0
- package/dist/measure/font.d.ts.map +1 -1
- package/dist/measure/font.js +13 -2
- package/dist/measure/font.js.map +1 -1
- package/dist/measure/fontString.d.ts +14 -0
- package/dist/measure/fontString.d.ts.map +1 -0
- package/dist/measure/fontString.js +55 -0
- package/dist/measure/fontString.js.map +1 -0
- package/dist/measure/index.d.ts +4 -1
- package/dist/measure/index.d.ts.map +1 -1
- package/dist/measure/index.js +3 -1
- package/dist/measure/index.js.map +1 -1
- package/dist/measure/types.d.ts +4 -0
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js.map +1 -1
- package/dist/parse/citations.d.ts.map +1 -1
- package/dist/parse/citations.js +7 -3
- package/dist/parse/citations.js.map +1 -1
- package/dist/pipeline/build.d.ts +36 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +1065 -193
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +20 -6
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +6 -0
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +3 -2
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +59 -0
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +287 -65
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/columnBalancing.d.ts +20 -0
- package/dist/pipeline/columnBalancing.d.ts.map +1 -1
- package/dist/pipeline/columnBalancing.js +22 -4
- package/dist/pipeline/columnBalancing.js.map +1 -1
- package/dist/pipeline/columnsGroup.d.ts +61 -0
- package/dist/pipeline/columnsGroup.d.ts.map +1 -0
- package/dist/pipeline/columnsGroup.js +88 -0
- package/dist/pipeline/columnsGroup.js.map +1 -0
- package/dist/pipeline/config.d.ts +16 -0
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +51 -9
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +28 -0
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +16 -2
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +12 -4
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/floatSlots.d.ts +9 -3
- package/dist/pipeline/floatSlots.d.ts.map +1 -1
- package/dist/pipeline/floatSlots.js +15 -6
- package/dist/pipeline/floatSlots.js.map +1 -1
- package/dist/pipeline/flowColumns.d.ts +41 -0
- package/dist/pipeline/flowColumns.d.ts.map +1 -0
- package/dist/pipeline/flowColumns.js +116 -0
- package/dist/pipeline/flowColumns.js.map +1 -0
- package/dist/pipeline/measureContentBlock.d.ts +13 -1
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +20 -5
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/partPalette.d.ts +3 -0
- package/dist/pipeline/partPalette.d.ts.map +1 -1
- package/dist/pipeline/partPalette.js +5 -0
- package/dist/pipeline/partPalette.js.map +1 -1
- package/dist/pipeline/placement.d.ts +19 -0
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +5 -2
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +26 -0
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +53 -3
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +6 -1
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/svg/fontRegistry.d.ts +66 -0
- package/dist/svg/fontRegistry.d.ts.map +1 -0
- package/dist/svg/fontRegistry.js +294 -0
- package/dist/svg/fontRegistry.js.map +1 -0
- package/dist/svg/fonts.d.ts +140 -0
- package/dist/svg/fonts.d.ts.map +1 -0
- package/dist/svg/fonts.js +642 -0
- package/dist/svg/fonts.js.map +1 -0
- package/dist/svg/image.d.ts +44 -0
- package/dist/svg/image.d.ts.map +1 -0
- package/dist/svg/image.js +67 -0
- package/dist/svg/image.js.map +1 -0
- package/dist/types.d.ts +145 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/util/stableHash.d.ts +20 -0
- package/dist/util/stableHash.d.ts.map +1 -0
- package/dist/util/stableHash.js +59 -0
- package/dist/util/stableHash.js.map +1 -0
- package/dist/vdt.d.ts +127 -3
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/dist/worker/client.d.ts +8 -0
- package/dist/worker/client.d.ts.map +1 -1
- package/dist/worker/client.js +22 -0
- package/dist/worker/client.js.map +1 -1
- package/dist/worker/fonts.d.ts +1 -13
- package/dist/worker/fonts.d.ts.map +1 -1
- package/dist/worker/fonts.js +3 -61
- package/dist/worker/fonts.js.map +1 -1
- package/dist/worker/layout.worker.js +23 -16
- package/dist/worker/layout.worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { PostextConfig, PostextContent } from '../types';
|
|
2
|
+
import type { VDTDocument } from '../vdt';
|
|
3
|
+
import { type FontContentText } from './usage';
|
|
4
|
+
import { type FontFaceLike, type FontFaceRequest, type FontFaceSetLike, type FontFallbackOptions } from './faces';
|
|
5
|
+
/** A font file: its bytes, or the URL to fetch it from (a CSS `src`
|
|
6
|
+
* value — `url(…)`, `local(…)` — is taken as written). */
|
|
7
|
+
export type FontFileSource = ArrayBuffer | ArrayBufferView | string;
|
|
8
|
+
/** A font file with the descriptors of its face, when they are not the
|
|
9
|
+
* ones asked for: the slice a file covers (`unicodeRange`), a variable
|
|
10
|
+
* weight range (`'100 900'`), an upright file given for an italic. */
|
|
11
|
+
export interface FontFile {
|
|
12
|
+
source: FontFileSource;
|
|
13
|
+
unicodeRange?: string;
|
|
14
|
+
weight?: number | string;
|
|
15
|
+
style?: 'normal' | 'italic' | string;
|
|
16
|
+
}
|
|
17
|
+
/** What a resolver answers: one file, several (the slices of a face, in
|
|
18
|
+
* the order they are added to the font set), or nothing (it has no such
|
|
19
|
+
* face). Throwing counts as nothing. */
|
|
20
|
+
export type FontResolverAnswer = FontFileSource | FontFile | readonly (FontFileSource | FontFile)[] | null | undefined;
|
|
21
|
+
export interface FontResolveRequest {
|
|
22
|
+
/** The characters the document sets (a space included), for a resolver
|
|
23
|
+
* serving a family as slices: only the files holding them. */
|
|
24
|
+
text: string;
|
|
25
|
+
codePoints: Set<number>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A host's font files, asked for each face no `FontFace` of the font set
|
|
29
|
+
* declares: `(family, weight, style, { text, codePoints })`. The shape of
|
|
30
|
+
* postext-pdf's `PdfFontProvider`, so one function serves the screen and
|
|
31
|
+
* the PDF. A resolver may also declare the face itself (add a style sheet,
|
|
32
|
+
* a `FontFace`) and answer null: the engine then loads what it declared.
|
|
33
|
+
*/
|
|
34
|
+
export type FontResolver = (family: string, weight: number, style: 'normal' | 'italic', request: FontResolveRequest) => FontResolverAnswer | Promise<FontResolverAnswer>;
|
|
35
|
+
type FontFaceConstructor = new (family: string, source: string | ArrayBuffer | ArrayBufferView, descriptors?: FontFaceDescriptors) => FontFaceLike;
|
|
36
|
+
export interface PrepareFontsOptions {
|
|
37
|
+
/** The font set to load into: by default `document.fonts`, or
|
|
38
|
+
* `self.fonts` in a worker. */
|
|
39
|
+
fontSet?: FontFaceSetLike | null;
|
|
40
|
+
/** Files for the faces nothing declares. */
|
|
41
|
+
resolve?: FontResolver;
|
|
42
|
+
/** Give up waiting after this many ms (default 10 000): a face still
|
|
43
|
+
* loading then is reported missing. */
|
|
44
|
+
timeoutMs?: number;
|
|
45
|
+
/** Watch the font set afterwards ({@link watchFonts}). Default true. */
|
|
46
|
+
watch?: boolean;
|
|
47
|
+
/** Register the resolved files with the font registry, for SVG
|
|
48
|
+
* pictures and layout workers. Default true. */
|
|
49
|
+
register?: boolean;
|
|
50
|
+
/** Faces to load beyond the configuration's. */
|
|
51
|
+
faces?: readonly FontFaceRequest[];
|
|
52
|
+
/** The `FontFace` constructor (default the global one). */
|
|
53
|
+
FontFace?: FontFaceConstructor;
|
|
54
|
+
/** The probe that tells an installed family from a missing one. */
|
|
55
|
+
measureWidth?: FontFallbackOptions['measureWidth'];
|
|
56
|
+
}
|
|
57
|
+
/** What a preparation found. */
|
|
58
|
+
export interface FontReport {
|
|
59
|
+
/** Faces a loaded face of their weight and slant answers for (or an
|
|
60
|
+
* installed family). */
|
|
61
|
+
loaded: FontFaceRequest[];
|
|
62
|
+
/** Faces no loaded face answers for (none of the family, or the one
|
|
63
|
+
* that would is still loading): their text is measured with a fallback
|
|
64
|
+
* face. */
|
|
65
|
+
missing: FontFaceRequest[];
|
|
66
|
+
/** Faces the family has no face for, which the browser draws from
|
|
67
|
+
* another weight or slant of it (the nearest weight as it is, bold
|
|
68
|
+
* made heavier, italic slanted). */
|
|
69
|
+
synthesized: FontFaceRequest[];
|
|
70
|
+
/** `FontFace`s added from the resolver's files. */
|
|
71
|
+
added: number;
|
|
72
|
+
}
|
|
73
|
+
/** The texts of a build's content: the Markdown, the metadata and the
|
|
74
|
+
* resources' captions, notes and cells. */
|
|
75
|
+
export declare function contentTexts(content: PostextContent | FontContentText): string[];
|
|
76
|
+
/**
|
|
77
|
+
* The characters a document sets — its text, its resources' and
|
|
78
|
+
* metadata's, the configuration's own texts, the ASCII digits and letters
|
|
79
|
+
* of folios and labels — once each: the sample a face is loaded for, so a
|
|
80
|
+
* family served as slices (`unicode-range`: Latin Extended, Greek, Arabic,
|
|
81
|
+
* the CJK slices) brings the files the document needs.
|
|
82
|
+
*/
|
|
83
|
+
export declare function fontSampleText(content: PostextContent | FontContentText, config?: PostextConfig): string;
|
|
84
|
+
/** The faces a configuration and its text ask for, in a fixed order:
|
|
85
|
+
* families as `configFontFamilies` lists them, then the weights from light
|
|
86
|
+
* to heavy, upright before italic. */
|
|
87
|
+
export declare function configFontFaces(config: PostextConfig | undefined, text?: FontContentText): FontFaceRequest[];
|
|
88
|
+
/**
|
|
89
|
+
* Load every face `config` and its text ask for (body, headings, lists,
|
|
90
|
+
* callout titles and bodies, tables, design texts, running heads,
|
|
91
|
+
* contents, code, comic lettering, in each weight and slant the
|
|
92
|
+
* configuration sets) into the font set, for the characters the document
|
|
93
|
+
* sets, before the first build. A face the set declares is loaded through
|
|
94
|
+
* it (`fontSet.load`); one it does not is asked of `options.resolve`, and
|
|
95
|
+
* the files it gives are added as `FontFace`s (and registered for SVG
|
|
96
|
+
* pictures). The measurements of the families that changed are dropped.
|
|
97
|
+
* Resolves with which faces are there, which are missing and which the
|
|
98
|
+
* browser would synthesize. Where there is no font set (Node), every face
|
|
99
|
+
* is reported loaded and nothing is done.
|
|
100
|
+
*/
|
|
101
|
+
export declare function prepareFonts(content: PostextContent | FontContentText, config?: PostextConfig, options?: PrepareFontsOptions): Promise<FontReport>;
|
|
102
|
+
/** A document, or several (the chapters of a book). */
|
|
103
|
+
export type BuiltDocuments = VDTDocument | readonly VDTDocument[];
|
|
104
|
+
export interface LoadedFontsOptions extends PrepareFontsOptions {
|
|
105
|
+
/** The text the documents set, for the sample faces are loaded for.
|
|
106
|
+
* Default: the text of the documents' lines. */
|
|
107
|
+
text?: FontContentText;
|
|
108
|
+
/** Extra builds at most (default 2). */
|
|
109
|
+
maxRounds?: number;
|
|
110
|
+
/** Told what the last round found. */
|
|
111
|
+
onFonts?: (report: FontReport) => void;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Run `build`, then load the faces its pages set text in that the font set
|
|
115
|
+
* could not give (a weight the configuration did not name, a face
|
|
116
|
+
* resolved only now; one a neighbour of the family answered for is asked
|
|
117
|
+
* of the resolver like any other, #650), drop their measurements and
|
|
118
|
+
* build again — at most `maxRounds` extra builds (2). `build` returns a
|
|
119
|
+
* document or several.
|
|
120
|
+
* Faces that stay missing are reported (`onFonts`) and listed by each
|
|
121
|
+
* document's `fontFallback` warnings.
|
|
122
|
+
*/
|
|
123
|
+
export declare function withLoadedFonts<T extends BuiltDocuments>(build: () => T | Promise<T>, options?: LoadedFontsOptions): Promise<T>;
|
|
124
|
+
export {};
|
|
125
|
+
//# sourceMappingURL=prepare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../src/fonts/prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
// Font preparation (#629): load every face a configuration and its text
|
|
2
|
+
// ask for before the first build, from the font set's declared faces or a
|
|
3
|
+
// host resolver, and lay out again with any face the pages used that the
|
|
4
|
+
// configuration did not name. Loading stays the host's: the resolver
|
|
5
|
+
// answers with files (the shape of the PDF font provider), the engine adds
|
|
6
|
+
// them to the font set and to the font registry SVG pictures read (#630).
|
|
7
|
+
import { evictFontFamilies } from '../measure/font';
|
|
8
|
+
import { collectFontUsage, configFontFamilies } from './usage';
|
|
9
|
+
import { defaultFontSet, documentFontFaces, faceRequestKey, fontFallbacks, isGenericFamily, } from './faces';
|
|
10
|
+
import { isFontSetTracked, syncFontSet, watchFonts } from './fontSet';
|
|
11
|
+
import { registerFontBytes, registerFontUrl } from '../svg/fontRegistry';
|
|
12
|
+
/** The texts of a build's content: the Markdown, the metadata and the
|
|
13
|
+
* resources' captions, notes and cells. */
|
|
14
|
+
export function contentTexts(content) {
|
|
15
|
+
if (content === undefined)
|
|
16
|
+
return [];
|
|
17
|
+
if (typeof content === 'string')
|
|
18
|
+
return [content];
|
|
19
|
+
if (Array.isArray(content))
|
|
20
|
+
return [...content];
|
|
21
|
+
const c = content;
|
|
22
|
+
const out = [c.markdown];
|
|
23
|
+
const strings = [];
|
|
24
|
+
const walk = (node, depth) => {
|
|
25
|
+
if (depth > 10 || !node)
|
|
26
|
+
return;
|
|
27
|
+
if (typeof node === 'string') {
|
|
28
|
+
strings.push(node);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (typeof node !== 'object')
|
|
32
|
+
return;
|
|
33
|
+
if (Array.isArray(node)) {
|
|
34
|
+
for (const item of node)
|
|
35
|
+
walk(item, depth + 1);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
for (const [key, value] of Object.entries(node)) {
|
|
39
|
+
if (/file|url|src|markup|data|id$/i.test(key))
|
|
40
|
+
continue;
|
|
41
|
+
walk(value, depth + 1);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
walk(c.metadata, 0);
|
|
45
|
+
walk(c.resources, 0);
|
|
46
|
+
if (strings.length > 0)
|
|
47
|
+
out.push(strings.join(' '));
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
/** Text the configuration itself sets: design texts, running heads,
|
|
51
|
+
* labels, contents titles. */
|
|
52
|
+
function configTexts(config) {
|
|
53
|
+
const strings = [];
|
|
54
|
+
const walk = (node, key, depth) => {
|
|
55
|
+
if (depth > 12 || !node)
|
|
56
|
+
return;
|
|
57
|
+
if (typeof node === 'string') {
|
|
58
|
+
if (!/color|colour|family|id$|url|src|file/i.test(key))
|
|
59
|
+
strings.push(node);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (typeof node !== 'object')
|
|
63
|
+
return;
|
|
64
|
+
if (Array.isArray(node)) {
|
|
65
|
+
for (const item of node)
|
|
66
|
+
walk(item, key, depth + 1);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
for (const [k, value] of Object.entries(node))
|
|
70
|
+
walk(value, k, depth + 1);
|
|
71
|
+
};
|
|
72
|
+
walk(config, '', 0);
|
|
73
|
+
return strings.join(' ');
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The characters a document sets — its text, its resources' and
|
|
77
|
+
* metadata's, the configuration's own texts, the ASCII digits and letters
|
|
78
|
+
* of folios and labels — once each: the sample a face is loaded for, so a
|
|
79
|
+
* family served as slices (`unicode-range`: Latin Extended, Greek, Arabic,
|
|
80
|
+
* the CJK slices) brings the files the document needs.
|
|
81
|
+
*/
|
|
82
|
+
export function fontSampleText(content, config) {
|
|
83
|
+
const seen = new Set([' ']);
|
|
84
|
+
for (let c = 0x21; c < 0x7f; c++)
|
|
85
|
+
seen.add(String.fromCharCode(c));
|
|
86
|
+
for (const text of [...contentTexts(content), configTexts(config)]) {
|
|
87
|
+
for (const ch of text)
|
|
88
|
+
if (ch > ' ' && ch !== '')
|
|
89
|
+
seen.add(ch);
|
|
90
|
+
}
|
|
91
|
+
return [...seen].join('');
|
|
92
|
+
}
|
|
93
|
+
/** The faces a configuration and its text ask for, in a fixed order:
|
|
94
|
+
* families as `configFontFamilies` lists them, then the weights from light
|
|
95
|
+
* to heavy, upright before italic. */
|
|
96
|
+
export function configFontFaces(config, text) {
|
|
97
|
+
const cfg = config ?? {};
|
|
98
|
+
const usage = collectFontUsage(cfg, { markdown: text });
|
|
99
|
+
const families = [...new Set([...configFontFamilies(cfg, text), ...usage.keys()])];
|
|
100
|
+
const out = [];
|
|
101
|
+
for (const family of families) {
|
|
102
|
+
if (isGenericFamily(family))
|
|
103
|
+
continue;
|
|
104
|
+
const uses = usage.get(family) ?? [{ weight: 400, style: 'normal' }];
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
const faces = uses
|
|
107
|
+
.filter((u) => {
|
|
108
|
+
const key = `${u.weight}|${u.style}`;
|
|
109
|
+
if (seen.has(key))
|
|
110
|
+
return false;
|
|
111
|
+
seen.add(key);
|
|
112
|
+
return true;
|
|
113
|
+
})
|
|
114
|
+
.sort((a, b) => a.weight - b.weight || (a.style === b.style ? 0 : a.style === 'normal' ? -1 : 1));
|
|
115
|
+
for (const u of faces)
|
|
116
|
+
out.push({ family, weight: u.weight, style: u.style });
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
function fontSpec(f) {
|
|
121
|
+
return `${f.style === 'italic' ? 'italic ' : ''}${f.weight} 16px ${JSON.stringify(f.family)}`;
|
|
122
|
+
}
|
|
123
|
+
function normalizeAnswer(answer) {
|
|
124
|
+
if (answer === null || answer === undefined)
|
|
125
|
+
return [];
|
|
126
|
+
const list = Array.isArray(answer) ? answer : [answer];
|
|
127
|
+
const out = [];
|
|
128
|
+
for (const item of list) {
|
|
129
|
+
if (item === null || item === undefined)
|
|
130
|
+
continue;
|
|
131
|
+
if (typeof item === 'string' || item instanceof ArrayBuffer || ArrayBuffer.isView(item))
|
|
132
|
+
out.push({ source: item });
|
|
133
|
+
else if (typeof item === 'object' && 'source' in item)
|
|
134
|
+
out.push(item);
|
|
135
|
+
}
|
|
136
|
+
return out.filter((f) => (typeof f.source === 'string' ? f.source.length > 0 : f.source.byteLength > 0));
|
|
137
|
+
}
|
|
138
|
+
function cssSource(url) {
|
|
139
|
+
return /^\s*(url|local)\(/i.test(url) ? url : `url(${JSON.stringify(url)})`;
|
|
140
|
+
}
|
|
141
|
+
function bytesOf(source) {
|
|
142
|
+
return source instanceof ArrayBuffer ? new Uint8Array(source) : new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
|
|
143
|
+
}
|
|
144
|
+
/** `promise`, or `fallback` once `deadline` (ms, `Date.now()` scale) passes. */
|
|
145
|
+
function until(promise, deadline, fallback) {
|
|
146
|
+
const left = deadline - Date.now();
|
|
147
|
+
if (left <= 0)
|
|
148
|
+
return Promise.resolve(fallback);
|
|
149
|
+
let timer;
|
|
150
|
+
return Promise.race([
|
|
151
|
+
promise.catch(() => fallback),
|
|
152
|
+
new Promise((resolve) => {
|
|
153
|
+
timer = setTimeout(() => resolve(fallback), left);
|
|
154
|
+
}),
|
|
155
|
+
]).finally(() => {
|
|
156
|
+
if (timer !== undefined)
|
|
157
|
+
clearTimeout(timer);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function hasExactFace(declared, f) {
|
|
161
|
+
return declared.some((d) => {
|
|
162
|
+
const style = /italic|oblique/i.test(d.style ?? '') ? 'italic' : 'normal';
|
|
163
|
+
if (style !== f.style)
|
|
164
|
+
return false;
|
|
165
|
+
const parts = (d.weight ?? '400').trim().split(/\s+/).map((w) => (w === 'bold' ? 700 : w === 'normal' ? 400 : Number(w)));
|
|
166
|
+
const lo = Number.isFinite(parts[0]) ? parts[0] : 400;
|
|
167
|
+
const hi = Number.isFinite(parts[1]) ? parts[1] : lo;
|
|
168
|
+
return f.weight >= Math.min(lo, hi) && f.weight <= Math.max(lo, hi);
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function declaredFaces(fontSet, family) {
|
|
172
|
+
const lower = family.toLowerCase();
|
|
173
|
+
const out = [];
|
|
174
|
+
for (const face of fontSet) {
|
|
175
|
+
const f = face.family.trim().replace(/^(["'])(.*)\1$/, '$2').toLowerCase();
|
|
176
|
+
if (f === lower)
|
|
177
|
+
out.push(face);
|
|
178
|
+
}
|
|
179
|
+
return out;
|
|
180
|
+
}
|
|
181
|
+
/** Load `faces` into `fontSet`: what it declares through `fontSet.load`,
|
|
182
|
+
* the rest through the resolver. Faces from the resolver are added once
|
|
183
|
+
* all have loaded, in the order of `faces` and of each answer (latin
|
|
184
|
+
* before latin-ext before greek when the resolver answers so), so the
|
|
185
|
+
* set is the same whatever order the files arrive in. */
|
|
186
|
+
async function loadFaces(faces, fontSet, sample, options) {
|
|
187
|
+
const deadline = Date.now() + (options.timeoutMs ?? 10_000);
|
|
188
|
+
const FontFaceCtor = options.FontFace ?? globalThis.FontFace;
|
|
189
|
+
const codePoints = new Set();
|
|
190
|
+
for (const ch of sample)
|
|
191
|
+
codePoints.add(ch.codePointAt(0));
|
|
192
|
+
const request = { text: sample, codePoints };
|
|
193
|
+
const touched = new Set();
|
|
194
|
+
const toAdd = faces.map(() => []);
|
|
195
|
+
await Promise.all(faces.map(async (f, i) => {
|
|
196
|
+
let declared = declaredFaces(fontSet, f.family);
|
|
197
|
+
if (!hasExactFace(declared, f) && options.resolve) {
|
|
198
|
+
let files = [];
|
|
199
|
+
try {
|
|
200
|
+
files = normalizeAnswer(await until(Promise.resolve(options.resolve(f.family, f.weight, f.style, request)), deadline, null));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
files = [];
|
|
204
|
+
}
|
|
205
|
+
if (files.length > 0 && FontFaceCtor) {
|
|
206
|
+
const made = files.map((file) => {
|
|
207
|
+
const descriptors = {
|
|
208
|
+
weight: String(file.weight ?? f.weight),
|
|
209
|
+
style: file.style ?? f.style,
|
|
210
|
+
...(file.unicodeRange ? { unicodeRange: file.unicodeRange } : {}),
|
|
211
|
+
};
|
|
212
|
+
const source = typeof file.source === 'string' ? cssSource(file.source) : file.source;
|
|
213
|
+
return { file, face: new FontFaceCtor(f.family, source, descriptors), descriptors };
|
|
214
|
+
});
|
|
215
|
+
const loaded = await Promise.all(made.map(async ({ face }) => (face.load ? until(face.load().then(() => true), deadline, false) : true)));
|
|
216
|
+
made.forEach(({ file, face, descriptors }, k) => {
|
|
217
|
+
if (!loaded[k])
|
|
218
|
+
return;
|
|
219
|
+
toAdd[i].push(face);
|
|
220
|
+
if (options.register !== false) {
|
|
221
|
+
const style = String(descriptors.style);
|
|
222
|
+
if (typeof file.source === 'string') {
|
|
223
|
+
if (!/^\s*local\(/i.test(file.source))
|
|
224
|
+
registerFontUrl(f.family, String(descriptors.weight), style, file.source.replace(/^\s*url\(\s*["']?|["']?\s*\)\s*$/g, ''), { unicodeRange: file.unicodeRange });
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
registerFontBytes(f.family, String(descriptors.weight), style, bytesOf(file.source), { unicodeRange: file.unicodeRange });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
if (toAdd[i].length > 0) {
|
|
232
|
+
touched.add(f.family);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// The resolver may have declared the face itself.
|
|
237
|
+
declared = declaredFaces(fontSet, f.family);
|
|
238
|
+
}
|
|
239
|
+
if (declared.length > 0) {
|
|
240
|
+
const before = declared.filter((d) => d.status === 'loaded').length;
|
|
241
|
+
await until(fontSet.load(fontSpec(f), sample), deadline, []);
|
|
242
|
+
const after = declaredFaces(fontSet, f.family).filter((d) => d.status === 'loaded').length;
|
|
243
|
+
if (after !== before)
|
|
244
|
+
touched.add(f.family);
|
|
245
|
+
}
|
|
246
|
+
}));
|
|
247
|
+
let added = 0;
|
|
248
|
+
for (const list of toAdd) {
|
|
249
|
+
for (const face of list) {
|
|
250
|
+
fontSet.add(face);
|
|
251
|
+
added++;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return { added, touched };
|
|
255
|
+
}
|
|
256
|
+
/** Whether `fontSet` has a loaded face, or an installed family, for each
|
|
257
|
+
* face; split into the report's lists. */
|
|
258
|
+
function classify(faces, fontSet, options, added) {
|
|
259
|
+
const fallbacks = new Map(fontFallbacks(faces, fontSet, { measureWidth: options.measureWidth }).map((f) => [faceRequestKey(f), f]));
|
|
260
|
+
const report = { loaded: [], missing: [], synthesized: [], added };
|
|
261
|
+
for (const f of faces) {
|
|
262
|
+
const fb = fallbacks.get(faceRequestKey(f));
|
|
263
|
+
if (!fb)
|
|
264
|
+
report.loaded.push(f);
|
|
265
|
+
else if (fb.reason === 'missing')
|
|
266
|
+
report.missing.push(f);
|
|
267
|
+
else
|
|
268
|
+
report.synthesized.push(f);
|
|
269
|
+
}
|
|
270
|
+
return report;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Load every face `config` and its text ask for (body, headings, lists,
|
|
274
|
+
* callout titles and bodies, tables, design texts, running heads,
|
|
275
|
+
* contents, code, comic lettering, in each weight and slant the
|
|
276
|
+
* configuration sets) into the font set, for the characters the document
|
|
277
|
+
* sets, before the first build. A face the set declares is loaded through
|
|
278
|
+
* it (`fontSet.load`); one it does not is asked of `options.resolve`, and
|
|
279
|
+
* the files it gives are added as `FontFace`s (and registered for SVG
|
|
280
|
+
* pictures). The measurements of the families that changed are dropped.
|
|
281
|
+
* Resolves with which faces are there, which are missing and which the
|
|
282
|
+
* browser would synthesize. Where there is no font set (Node), every face
|
|
283
|
+
* is reported loaded and nothing is done.
|
|
284
|
+
*/
|
|
285
|
+
export async function prepareFonts(content, config, options = {}) {
|
|
286
|
+
const texts = contentTexts(content);
|
|
287
|
+
const wanted = configFontFaces(config, texts);
|
|
288
|
+
for (const f of options.faces ?? [])
|
|
289
|
+
if (!wanted.some((w) => faceRequestKey(w) === faceRequestKey(f)))
|
|
290
|
+
wanted.push(f);
|
|
291
|
+
const fontSet = options.fontSet === undefined ? defaultFontSet() : options.fontSet;
|
|
292
|
+
if (!fontSet)
|
|
293
|
+
return { loaded: wanted, missing: [], synthesized: [], added: 0 };
|
|
294
|
+
return prepareFaces(wanted, fontSet, fontSampleText(content, config), options);
|
|
295
|
+
}
|
|
296
|
+
async function prepareFaces(wanted, fontSet, sample, options) {
|
|
297
|
+
if (!isFontSetTracked(fontSet))
|
|
298
|
+
syncFontSet(fontSet);
|
|
299
|
+
const { added, touched } = await loadFaces(wanted, fontSet, sample, options);
|
|
300
|
+
// Drop what was measured in the families whose faces changed: those
|
|
301
|
+
// the set's record shows, and every family this call loaded faces for.
|
|
302
|
+
// The set is read whatever it reports (#649): `fontSet.load` resolves a
|
|
303
|
+
// task before the set's `loadingdone`, and a declared face that loads
|
|
304
|
+
// leaves the size as it was, so a set known from an earlier build would
|
|
305
|
+
// pass for unchanged and the builds that follow would keep the widths
|
|
306
|
+
// of the fallback face. Recording it here also leaves that
|
|
307
|
+
// `loadingdone` nothing to drop a second time.
|
|
308
|
+
const changed = new Set(syncFontSet(fontSet, { evict: false, force: true }));
|
|
309
|
+
for (const family of touched)
|
|
310
|
+
changed.add(family.toLowerCase());
|
|
311
|
+
if (changed.size > 0)
|
|
312
|
+
evictFontFamilies(changed);
|
|
313
|
+
if (options.watch !== false)
|
|
314
|
+
watchFonts(fontSet);
|
|
315
|
+
return classify(wanted, fontSet, options, added);
|
|
316
|
+
}
|
|
317
|
+
function documentsOf(result) {
|
|
318
|
+
return Array.isArray(result) ? [...result] : [result];
|
|
319
|
+
}
|
|
320
|
+
/** The text of a document's lines (for the sample). */
|
|
321
|
+
function documentText(docs) {
|
|
322
|
+
const parts = [];
|
|
323
|
+
for (const doc of docs)
|
|
324
|
+
for (const block of doc.blocks)
|
|
325
|
+
for (const line of block.lines)
|
|
326
|
+
for (const seg of line.segments ?? [])
|
|
327
|
+
parts.push(seg.text);
|
|
328
|
+
return parts.join('');
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Run `build`, then load the faces its pages set text in that the font set
|
|
332
|
+
* could not give (a weight the configuration did not name, a face
|
|
333
|
+
* resolved only now; one a neighbour of the family answered for is asked
|
|
334
|
+
* of the resolver like any other, #650), drop their measurements and
|
|
335
|
+
* build again — at most `maxRounds` extra builds (2). `build` returns a
|
|
336
|
+
* document or several.
|
|
337
|
+
* Faces that stay missing are reported (`onFonts`) and listed by each
|
|
338
|
+
* document's `fontFallback` warnings.
|
|
339
|
+
*/
|
|
340
|
+
export async function withLoadedFonts(build, options = {}) {
|
|
341
|
+
const fontSet = options.fontSet === undefined ? defaultFontSet() : options.fontSet;
|
|
342
|
+
let result = await build();
|
|
343
|
+
if (!fontSet)
|
|
344
|
+
return result;
|
|
345
|
+
const tried = new Set();
|
|
346
|
+
const rounds = options.maxRounds ?? 2;
|
|
347
|
+
let report;
|
|
348
|
+
for (let round = 0;; round++) {
|
|
349
|
+
const docs = documentsOf(result);
|
|
350
|
+
const faces = new Map();
|
|
351
|
+
for (const doc of docs)
|
|
352
|
+
for (const f of documentFontFaces(doc))
|
|
353
|
+
faces.set(faceRequestKey(f), f);
|
|
354
|
+
const all = [...faces.values()];
|
|
355
|
+
const fresh = fontFallbacks(all, fontSet, { measureWidth: options.measureWidth })
|
|
356
|
+
.filter((f) => !tried.has(faceRequestKey(f)))
|
|
357
|
+
.map(({ family, weight, style }) => ({ family, weight, style }));
|
|
358
|
+
if (fresh.length === 0 || round >= rounds) {
|
|
359
|
+
report = classify(all, fontSet, options, report?.added ?? 0);
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
for (const f of fresh)
|
|
363
|
+
tried.add(faceRequestKey(f));
|
|
364
|
+
const sample = fontSampleText(options.text ?? documentText(docs));
|
|
365
|
+
const before = new Set(fontFallbacks(fresh, fontSet, { measureWidth: options.measureWidth }).map(faceRequestKey));
|
|
366
|
+
const step = await prepareFaces(fresh, fontSet, sample, { ...options, watch: false });
|
|
367
|
+
const stillMissing = new Set([...step.missing, ...step.synthesized].map(faceRequestKey));
|
|
368
|
+
const gained = [...before].some((k) => !stillMissing.has(k));
|
|
369
|
+
if (step.added === 0 && !gained) {
|
|
370
|
+
report = classify(all, fontSet, options, 0);
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
result = await build();
|
|
374
|
+
}
|
|
375
|
+
if (options.watch !== false)
|
|
376
|
+
watchFonts(fontSet);
|
|
377
|
+
options.onFonts?.(report);
|
|
378
|
+
return result;
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../src/fonts/prepare.ts"],"names":[],"mappings":"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"}
|
package/dist/html-backend.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { VDTDocument, RenderWarning } from './vdt';
|
|
2
|
+
import { type SvgFontSyncProvider } from './svg/fonts';
|
|
2
3
|
export interface RenderHtmlOptions {
|
|
3
4
|
/** Layout mode: single vertical column or many columns laid out horizontally. */
|
|
4
5
|
mode?: 'single' | 'multi';
|
|
@@ -66,6 +67,22 @@ export interface RenderHtmlOptions {
|
|
|
66
67
|
* the resources all of them place ({@link anchoredResourceIds}), so a
|
|
67
68
|
* reference to a figure an earlier chapter placed links to it. */
|
|
68
69
|
refTargets?: Iterable<string>;
|
|
70
|
+
/** Embed the document's fonts in the SVG pictures `resourceImageUrl`
|
|
71
|
+
* serves as `data:image/svg+xml` URIs (#630): the faces their text
|
|
72
|
+
* names, as `@font-face` data URIs, so an `<img>` sets the labels in
|
|
73
|
+
* them. `true` takes the faces held in memory by the registry
|
|
74
|
+
* (`registerFontBytes`, `loadBundleFonts`); an object names another
|
|
75
|
+
* provider, the size cap per SVG and families to leave out. Skipped
|
|
76
|
+
* under `diagramStyle.inlineFonts: false` and for a resource with
|
|
77
|
+
* `svg.inlineFonts: false`. A family with no face is reported as
|
|
78
|
+
* `svgFontUnavailable`, the cap as `svgFontsTooLarge`. Default off
|
|
79
|
+
* (object URLs cannot be read synchronously; `bundleImageUrl` inlines
|
|
80
|
+
* on its own). */
|
|
81
|
+
inlineSvgFonts?: boolean | {
|
|
82
|
+
fonts?: SvgFontSyncProvider;
|
|
83
|
+
maxBytes?: number;
|
|
84
|
+
withhold?: (family: string) => boolean;
|
|
85
|
+
};
|
|
69
86
|
}
|
|
70
87
|
/**
|
|
71
88
|
* The resources this document anchors in its HTML (`id="pt-res-<id>"`):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-backend.d.ts","sourceRoot":"","sources":["../src/html-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAqBX,aAAa,EACd,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"html-backend.d.ts","sourceRoot":"","sources":["../src/html-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAqBX,aAAa,EACd,MAAM,OAAO,CAAC;AAIf,OAAO,EAA8B,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AA8DnF,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kDAI8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;QAC5D;;;0BAGkB;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF;;;;;;;;;;;;iEAY6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;4DAGwD;IACxD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D;;;;;;;2DAOuD;IACvD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;IACnG;;;wDAGoD;IACpD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C;;;;;;;uEAOmE;IACnE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;;;;;;uBAUmB;IACnB,cAAc,CAAC,EAAE,OAAO,GAAG;QACzB,KAAK,CAAC,EAAE,mBAAmB,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;KACxC,CAAC;CACH;AAmKD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;AAiuED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB;4EACwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,QAS4B,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,iBAAsB,GAC9B,eAAe,CAmFjB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAEtF"}
|