postext 1.25.0 → 1.25.2
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/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/gridBalancingPin.test.js +19 -0
- package/dist/__tests__/bundle/gridBalancingPin.test.js.map +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__/prepareFonts.test.js +191 -1
- package/dist/__tests__/prepareFonts.test.js.map +1 -1
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +36 -4
- package/dist/bundle/codec.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +15 -2
- package/dist/canvas-backend/headerFooter.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/headings.d.ts +22 -2
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +31 -2
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +10 -1
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +33 -8
- 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/page.d.ts.map +1 -1
- package/dist/defaults/page.js +8 -2
- package/dist/defaults/page.js.map +1 -1
- package/dist/design/cjkText.d.ts.map +1 -1
- package/dist/design/cjkText.js +9 -3
- package/dist/design/cjkText.js.map +1 -1
- package/dist/design/richText.d.ts +4 -0
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js.map +1 -1
- package/dist/fonts/faces.d.ts +24 -11
- package/dist/fonts/faces.d.ts.map +1 -1
- package/dist/fonts/faces.js +30 -12
- package/dist/fonts/faces.js.map +1 -1
- package/dist/fonts/fontSet.d.ts +6 -3
- package/dist/fonts/fontSet.d.ts.map +1 -1
- package/dist/fonts/fontSet.js +17 -9
- package/dist/fonts/fontSet.js.map +1 -1
- package/dist/fonts/prepare.d.ts +12 -7
- package/dist/fonts/prepare.d.ts.map +1 -1
- package/dist/fonts/prepare.js +16 -11
- package/dist/fonts/prepare.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +13 -3
- package/dist/html-backend.js.map +1 -1
- package/dist/pipeline/config.d.ts +2 -14
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +2 -19
- package/dist/pipeline/config.js.map +1 -1
- package/dist/types.d.ts +7 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +12 -3
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ postext is a layout engine that takes semantic content — enriched markdown wit
|
|
|
12
12
|
npm install postext
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
The main entry has no framework dependency. React (>= 18, a peer dependency) is used only by the `postext/react` subpath. PDF output
|
|
15
|
+
The main entry has no framework dependency. React (>= 18, a peer dependency) is used only by the `postext/react` subpath. PDF and EPUB output live in the companion packages [`postext-pdf`](https://www.npmjs.com/package/postext-pdf) and [`postext-epub`](https://www.npmjs.com/package/postext-epub).
|
|
16
16
|
|
|
17
17
|
From a CDN, import it as a module — no build step:
|
|
18
18
|
|
|
@@ -70,6 +70,7 @@ document.body.append(...doc.pages.map((page) => renderPage(page, doc)));
|
|
|
70
70
|
| Export | What it does |
|
|
71
71
|
|---|---|
|
|
72
72
|
| `buildDocument(content, config?)` | Lays the content out and returns the VDT (`VDTDocument`). |
|
|
73
|
+
| `buildDocumentWithFonts(content, config?, options?)`, `prepareFonts(content, config?, options?)` | Load the faces the document sets, then lay it out (or only load them). See [Fonts](#fonts). |
|
|
73
74
|
| `renderPage(page, doc)`, `renderPageToCanvas(page, doc, canvas, { scale? })` | Paint one page on a canvas. |
|
|
74
75
|
| `renderToHtml(doc, options?)` | Absolutely positioned HTML for the pages. Pages are transparent unless you pass `background`. |
|
|
75
76
|
| `renderToPdf(doc, { fontProvider })` | From `postext-pdf`: a print-ready, tagged PDF. |
|
|
@@ -88,18 +89,20 @@ The resolvers (`resolve*Config`), strippers (`strip*Defaults`), `DEFAULT_*` cons
|
|
|
88
89
|
|
|
89
90
|
| Field | Type | Description |
|
|
90
91
|
|---|---|---|
|
|
91
|
-
| `markdown` | `string` | Enriched markdown: headings, lists, `:ref{id="…"}`
|
|
92
|
+
| `markdown` | `string` | Enriched markdown: headings, lists, code blocks, `[^id]` footnotes, `[@key]` citations, `:ref{id="…"}` references, `::resource{id="…"}` embeds, `:::callout`, `:::verse`, `:::part`, `:::toc`, `:::index`, `$…$` math, … |
|
|
92
93
|
| `resources?` | `Resource[]` | Bitmaps, SVGs, tables and videos, referenced by `id` from the markdown. Binary payloads (pictures, a video's poster and own file) are referenced by `fileId`; tables carry their model inline. |
|
|
93
94
|
| `metadata?` | `DocumentMetadata` | Title, author and dates (also read from the markdown's YAML frontmatter). |
|
|
94
95
|
| `continuation?` | `LayoutContinuation` | Counters, page numbering and parity carried over from the chapters before, for a book laid out chapter by chapter. |
|
|
95
96
|
| `outline?` | `OutlineEntry[]` | The book's outline, for a `:::toc` in a chapter laid out on its own. |
|
|
96
|
-
| `notes?` | `PostextNote[]` |
|
|
97
|
+
| `notes?` | `PostextNote[]` | Accepted, but the engine does not read it: notes are written in the markdown (below). |
|
|
97
98
|
|
|
98
|
-
Footnotes are
|
|
99
|
+
Footnotes are written in the markdown: a `[^id]` marker where the note is cited and a paragraph that opens with `[^id]:` for its text. Each note is set at the foot of the column that cites it; `footnotes.placement: 'chapterEnd'` gathers them after the chapter instead. See [Footnotes](https://postext.dev/en/docs/document-format#footnotes).
|
|
99
100
|
|
|
100
101
|
## Fonts
|
|
101
102
|
|
|
102
|
-
postext measures text with the browser's canvas, so the document's web fonts must be loaded before `
|
|
103
|
+
postext measures text with the browser's canvas, so the document's web fonts must be loaded before layout. `await buildDocumentWithFonts(content, config)` does both: it loads every face the configuration and the text ask for, lays the document out, and lays it out again when the pages used a face that was missing. `await prepareFonts(content, config)` only loads them, before a `buildDocument` of your own. Both load the faces the page declares (an `@font-face` rule, a `FontFace` you added) and take a `resolve(family, weight, style)` option that hands over the files of the rest.
|
|
104
|
+
|
|
105
|
+
Measured widths follow the faces. When a face arrives after a build, the engine drops what it measured in that family and the next build measures it again, with no call from you; up to 1.24 that took `clearMeasurementCache()` and a second build. `doc.contentWarnings` lists a face that was measured with a fallback as `fontFallback`. A layout worker has its own font set; send it the font files with `registerFonts`.
|
|
103
106
|
|
|
104
107
|
## Bundles (`.postext` files)
|
|
105
108
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextDefaultsBundle.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/bundle/contextDefaultsBundle.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { unzipSync } from 'fflate';
|
|
3
|
+
import { createBundle, openBundle } from '../../bundle';
|
|
4
|
+
import { CONFIG_VERSION, migrateConfig } from '../../bundle/configVersion';
|
|
5
|
+
import { resolveAllConfig } from '../../pipeline/config';
|
|
6
|
+
// #651: a bundle stores its configuration stripped of defaults. The strip
|
|
7
|
+
// dropped `headings.balancing.enabled: true` as the default it is on a
|
|
8
|
+
// plain page, so a bundle written from a character grid (or from vertical
|
|
9
|
+
// text) with balancing on opened with balancing off.
|
|
10
|
+
const GRID = { enabled: true, charsPerLine: 28, linesPerPage: 22 };
|
|
11
|
+
const grid = (extra = {}) => ({ locale: 'zh-Hans', cjk: { grid: GRID }, ...extra });
|
|
12
|
+
const manifestOf = (bytes) => JSON.parse(new TextDecoder().decode(unzipSync(bytes)['preset.json']));
|
|
13
|
+
const balancing = (config) => resolveAllConfig(config).headings.balancing;
|
|
14
|
+
describe('a bundle keeps the balancing its configuration turns on (#651)', () => {
|
|
15
|
+
it('on a character grid', async () => {
|
|
16
|
+
const config = grid({ headings: { balancing: { enabled: true, gridLines: 'off' } } });
|
|
17
|
+
const { bytes, manifest } = await createBundle({ name: 'Grid', locale: 'zh-Hans', markdown: '# 题\n\n正文。', config });
|
|
18
|
+
expect(manifest.configVersion).toBe(CONFIG_VERSION);
|
|
19
|
+
expect(manifest.config.headings).toEqual({ balancing: { enabled: true, gridLines: 'off' } });
|
|
20
|
+
const opened = await openBundle(bytes);
|
|
21
|
+
expect(balancing(opened.config).enabled).toBe(true);
|
|
22
|
+
expect(balancing(opened.config).gridLines).toBe('off');
|
|
23
|
+
// Written again from what was read, it is the same bundle.
|
|
24
|
+
const again = await createBundle({ name: 'Grid', locale: 'zh-Hans', markdown: '# 题\n\n正文。', config: opened.config });
|
|
25
|
+
expect(again.manifest.config.headings).toEqual(manifest.config.headings);
|
|
26
|
+
});
|
|
27
|
+
it('in vertical text', async () => {
|
|
28
|
+
const config = { locale: 'ja', layout: { writingMode: 'vertical-rl' }, headings: { balancing: { enabled: true } } };
|
|
29
|
+
const { bytes } = await createBundle({ name: 'Tate', locale: 'ja', markdown: '# 題\n\n本文。', config });
|
|
30
|
+
expect(manifestOf(bytes).config.headings).toEqual({ balancing: { enabled: true } });
|
|
31
|
+
expect(balancing((await openBundle(bytes)).config).enabled).toBe(true);
|
|
32
|
+
});
|
|
33
|
+
it('writes nothing where the configuration restates the default', async () => {
|
|
34
|
+
const off = await createBundle({ name: 'Off', markdown: '# T', config: grid({ headings: { balancing: { enabled: false } } }) });
|
|
35
|
+
expect(off.manifest.config.headings).toBeUndefined();
|
|
36
|
+
expect(balancing((await openBundle(off.bytes)).config).enabled).toBe(false);
|
|
37
|
+
const on = await createBundle({ name: 'On', markdown: '# T', config: { headings: { balancing: { enabled: true } } } });
|
|
38
|
+
expect(on.manifest.config.headings).toBeUndefined();
|
|
39
|
+
expect(balancing((await openBundle(on.bytes)).config).enabled).toBe(true);
|
|
40
|
+
const plainOff = await createBundle({ name: 'Plain', markdown: '# T', config: { headings: { balancing: { enabled: false } } } });
|
|
41
|
+
expect(balancing((await openBundle(plainOff.bytes)).config).enabled).toBe(false);
|
|
42
|
+
});
|
|
43
|
+
it('keeps the grid pin of a document stored by 1.24 through the bundle', async () => {
|
|
44
|
+
const stored = grid({ headings: { fontFamily: 'Noto Serif SC' } });
|
|
45
|
+
const migrated = migrateConfig(stored, 10);
|
|
46
|
+
expect(balancing(migrated).enabled).toBe(true);
|
|
47
|
+
const { bytes } = await createBundle({ name: 'Old', locale: 'zh-Hans', markdown: '# 题', config: migrated });
|
|
48
|
+
expect(balancing((await openBundle(bytes)).config).enabled).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
// A locale's configuration is read as its keys over the shared ones, so
|
|
52
|
+
// its defaults are those of the two together.
|
|
53
|
+
describe('a locale of a bundle is stripped as the whole it is read as (#651)', () => {
|
|
54
|
+
const read = async (bytes, locale) => (await openBundle(bytes, { locale })).config;
|
|
55
|
+
it('keeps balancing a locale turns on over a shared character grid', async () => {
|
|
56
|
+
const { bytes, manifest } = await createBundle({
|
|
57
|
+
name: 'Two', locale: 'zh-Hans', markdown: '# 题', config: grid(),
|
|
58
|
+
localized: { 'zh-Hant': { config: { locale: 'zh-Hant', headings: { balancing: { enabled: true } } } } },
|
|
59
|
+
});
|
|
60
|
+
expect(manifest.localized['zh-Hant'].config.headings).toEqual({ balancing: { enabled: true } });
|
|
61
|
+
expect(balancing(await read(bytes, 'zh-Hant')).enabled).toBe(true);
|
|
62
|
+
expect(balancing(await read(bytes, 'zh-Hans')).enabled).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it('writes a shared key for a locale whose own defaults keep what the shared ones drop', async () => {
|
|
65
|
+
// Shared: a plain page, where `enabled: true` restates the default.
|
|
66
|
+
// The Chinese edition sets a grid and nothing else: read over the
|
|
67
|
+
// shared keys it is `{ grid, enabled: true }`.
|
|
68
|
+
const shared = { locale: 'en', headings: { fontFamily: 'EB Garamond', balancing: { enabled: true } } };
|
|
69
|
+
const chinese = { locale: 'zh-Hans', cjk: { grid: GRID } };
|
|
70
|
+
const { bytes, manifest } = await createBundle({
|
|
71
|
+
name: 'Two', locale: 'en', markdown: '# T', config: shared,
|
|
72
|
+
localized: { 'zh-Hans': { config: chinese } },
|
|
73
|
+
});
|
|
74
|
+
expect(manifest.config.headings).toEqual({ fontFamily: 'EB Garamond' });
|
|
75
|
+
expect(manifest.localized['zh-Hans'].config.headings).toEqual({ fontFamily: 'EB Garamond', balancing: { enabled: true } });
|
|
76
|
+
const opened = resolveAllConfig(await read(bytes, 'zh-Hans')).headings;
|
|
77
|
+
expect(opened.balancing).toEqual(resolveAllConfig({ ...shared, ...chinese }).headings.balancing);
|
|
78
|
+
expect(opened.balancing.enabled).toBe(true);
|
|
79
|
+
expect(opened.fontFamily).toBe('EB Garamond');
|
|
80
|
+
expect(balancing(await read(bytes, 'en')).enabled).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
it('writes no shared key a locale reads the same', async () => {
|
|
83
|
+
const shared = grid({ headings: { fontFamily: 'Noto Serif SC', balancing: { enabled: true } }, index: { see: { italic: true } } });
|
|
84
|
+
const { manifest } = await createBundle({
|
|
85
|
+
name: 'Two', locale: 'zh-Hans', markdown: '# 题', config: shared,
|
|
86
|
+
// Horizontal and off the grid: `enabled: true` is the default there,
|
|
87
|
+
// and the shared `headings` still says so.
|
|
88
|
+
localized: { en: { config: { locale: 'en', cjk: { grid: { enabled: false } } } } },
|
|
89
|
+
});
|
|
90
|
+
expect(Object.keys(manifest.localized.en.config).sort()).toEqual(['cjk', 'locale']);
|
|
91
|
+
// A full configuration for the locale: its `headings` no longer
|
|
92
|
+
// restates the shared one, which keeps `enabled: true` for the grid.
|
|
93
|
+
const english = { ...shared, locale: 'en', cjk: { grid: { enabled: false } } };
|
|
94
|
+
const full = await createBundle({
|
|
95
|
+
name: 'Two', locale: 'zh-Hans', markdown: '# 题', config: shared,
|
|
96
|
+
localized: { en: { config: english } },
|
|
97
|
+
});
|
|
98
|
+
expect(full.manifest.localized.en.config).toEqual({ locale: 'en', cjk: { grid: { enabled: false } }, headings: { fontFamily: 'Noto Serif SC' } });
|
|
99
|
+
const opened = resolveAllConfig((await openBundle(full.bytes, { locale: 'en' })).config);
|
|
100
|
+
expect(opened.headings.balancing).toEqual(resolveAllConfig(english).headings.balancing);
|
|
101
|
+
expect(opened.index.see.italic).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=contextDefaultsBundle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contextDefaultsBundle.test.js","sourceRoot":"","sources":["../../../src/__tests__/bundle/contextDefaultsBundle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest';
|
|
2
2
|
import { migrateBundleConfig, migrateConfig, pinLegacyGridBalancing } from '../../bundle/configVersion';
|
|
3
|
+
import { stripConfigDefaults } from '../../defaults';
|
|
3
4
|
import { resolveAllConfig } from '../../pipeline/config';
|
|
4
5
|
// #632: a configuration stored before a horizontal page on a character
|
|
5
6
|
// grid was left unbalanced by default (configVersion 10 or older, postext
|
|
@@ -41,6 +42,24 @@ describe('pinLegacyGridBalancing (#632)', () => {
|
|
|
41
42
|
const current = grid();
|
|
42
43
|
expect(migrateConfig(current, 11)).toBe(current);
|
|
43
44
|
});
|
|
45
|
+
// #651: the first save stores the migrated configuration stripped of
|
|
46
|
+
// defaults under the current stamp. The strip took `true` for the
|
|
47
|
+
// default it is on a plain page and dropped the pin, and the next load,
|
|
48
|
+
// stamped 11, did not pin again.
|
|
49
|
+
it('survives a save: the stripped configuration still turns balancing on', () => {
|
|
50
|
+
for (const config of [grid(), grid({ headings: { fontFamily: 'Noto Serif SC', balancing: { maxTracking: 20 } } })]) {
|
|
51
|
+
const migrated = migrateConfig(config, 10);
|
|
52
|
+
const saved = stripConfigDefaults(migrated);
|
|
53
|
+
expect(saved.headings?.balancing?.enabled).toBe(true);
|
|
54
|
+
const reloaded = migrateConfig(saved, 11);
|
|
55
|
+
expect(reloaded).toBe(saved);
|
|
56
|
+
expect(resolveAllConfig(reloaded).headings.balancing).toEqual(resolveAllConfig(migrated).headings.balancing);
|
|
57
|
+
expect(resolveAllConfig(reloaded).headings.balancing.enabled).toBe(true);
|
|
58
|
+
}
|
|
59
|
+
// Saved again and again, it stays.
|
|
60
|
+
const twice = stripConfigDefaults(stripConfigDefaults(migrateConfig(grid(), 10)));
|
|
61
|
+
expect(twice.headings).toEqual({ balancing: { enabled: true } });
|
|
62
|
+
});
|
|
44
63
|
it('pins a bundle on its merged layers', () => {
|
|
45
64
|
const base = { headings: { fontFamily: 'Noto Serif SC' } };
|
|
46
65
|
const merged = migrateBundleConfig(base, [grid(), { layout: { layoutType: 'double' } }], 10);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gridBalancingPin.test.js","sourceRoot":"","sources":["../../../src/__tests__/bundle/gridBalancingPin.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gridBalancingPin.test.js","sourceRoot":"","sources":["../../../src/__tests__/bundle/gridBalancingPin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripContextDefaults.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/defaults/stripContextDefaults.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { balancingOnByDefault, stripConfigDefaults, stripHeadingsDefaults, stripIndexDefaults, stripPageDefaults } from '../../defaults';
|
|
3
|
+
import * as configVersion from '../../bundle/configVersion';
|
|
4
|
+
import { resolveAllConfig } from '../../pipeline/config';
|
|
5
|
+
import { stableStringify } from '../../util/stableHash';
|
|
6
|
+
// #651: a default that depends on the rest of the configuration is the
|
|
7
|
+
// default of that configuration. `stripConfigDefaults` dropped every value
|
|
8
|
+
// equal to the default of a plain document, so the one value that turned
|
|
9
|
+
// column balancing on for a character grid or for vertical text was lost
|
|
10
|
+
// on the way to a bundle or to the Sandbox's storage.
|
|
11
|
+
const GRID = { enabled: true, charsPerLine: 26, linesPerPage: 24 };
|
|
12
|
+
const CONTEXTS = {
|
|
13
|
+
horizontal: {},
|
|
14
|
+
grid: { cjk: { grid: GRID } },
|
|
15
|
+
vertical: { layout: { writingMode: 'vertical-rl' } },
|
|
16
|
+
verticalGrid: { layout: { writingMode: 'vertical-rl' }, cjk: { grid: GRID } },
|
|
17
|
+
};
|
|
18
|
+
const withBalancing = (context, balancing) => ({
|
|
19
|
+
...context,
|
|
20
|
+
headings: { balancing },
|
|
21
|
+
});
|
|
22
|
+
const roundTrips = (config) => expect(resolveAllConfig(stripConfigDefaults(config))).toEqual(resolveAllConfig(config));
|
|
23
|
+
describe('stripConfigDefaults and the balancing default of the document (#651)', () => {
|
|
24
|
+
it('keeps balancing turned on where it is off by default', () => {
|
|
25
|
+
for (const name of ['grid', 'vertical', 'verticalGrid']) {
|
|
26
|
+
const config = withBalancing(CONTEXTS[name], { enabled: true });
|
|
27
|
+
expect(balancingOnByDefault(config), name).toBe(false);
|
|
28
|
+
expect(stripConfigDefaults(config), name).toEqual(config);
|
|
29
|
+
expect(resolveAllConfig(stripConfigDefaults(config)).headings.balancing.enabled, name).toBe(true);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
it('drops it on a plain horizontal page, where it is the default', () => {
|
|
33
|
+
expect(stripConfigDefaults(withBalancing({}, { enabled: true }))).toEqual({});
|
|
34
|
+
expect(stripConfigDefaults({ cjk: { grid: { ...GRID, enabled: false } }, headings: { balancing: { enabled: true } } }).headings).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it('keeps balancing turned off where it is on by default, and drops it where it is off', () => {
|
|
37
|
+
const horizontal = withBalancing({}, { enabled: false });
|
|
38
|
+
expect(stripConfigDefaults(horizontal)).toEqual(horizontal);
|
|
39
|
+
for (const name of ['grid', 'vertical', 'verticalGrid']) {
|
|
40
|
+
const context = CONTEXTS[name];
|
|
41
|
+
expect(stripConfigDefaults(withBalancing(context, { enabled: false })), name).toEqual(context);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
it('keeps the other balancing settings beside the one it drops', () => {
|
|
45
|
+
const stripped = stripConfigDefaults(withBalancing(CONTEXTS.grid, { enabled: false, maxTracking: 40, trailing: true }));
|
|
46
|
+
expect(stripped.headings).toEqual({ balancing: { maxTracking: 40 } });
|
|
47
|
+
expect(stripConfigDefaults(withBalancing(CONTEXTS.grid, { enabled: true, maxTracking: 40 })).headings)
|
|
48
|
+
.toEqual({ balancing: { enabled: true, maxTracking: 40 } });
|
|
49
|
+
});
|
|
50
|
+
it('keeps gridLines off, in every context', () => {
|
|
51
|
+
for (const [name, context] of Object.entries(CONTEXTS)) {
|
|
52
|
+
const config = withBalancing(context, { gridLines: 'off' });
|
|
53
|
+
expect(stripConfigDefaults(config).headings, name).toEqual({ balancing: { gridLines: 'off' } });
|
|
54
|
+
}
|
|
55
|
+
expect(stripConfigDefaults(withBalancing(CONTEXTS.grid, { enabled: true, gridLines: 'off' })).headings)
|
|
56
|
+
.toEqual({ balancing: { enabled: true, gridLines: 'off' } });
|
|
57
|
+
// `'allow'` is the default.
|
|
58
|
+
expect(stripConfigDefaults(withBalancing(CONTEXTS.grid, { gridLines: 'allow' })).headings).toBeUndefined();
|
|
59
|
+
});
|
|
60
|
+
it('resolves the stripped configuration like the one it was given', () => {
|
|
61
|
+
for (const [name, context] of Object.entries(CONTEXTS)) {
|
|
62
|
+
for (const enabled of [true, false, undefined]) {
|
|
63
|
+
for (const gridLines of ['off', 'allow', undefined]) {
|
|
64
|
+
const config = withBalancing(context, {
|
|
65
|
+
...(enabled !== undefined ? { enabled } : {}),
|
|
66
|
+
...(gridLines ? { gridLines } : {}),
|
|
67
|
+
maxLinesPerHeading: 2,
|
|
68
|
+
});
|
|
69
|
+
const stripped = stripConfigDefaults(config);
|
|
70
|
+
expect(resolveAllConfig(stripped), `${name} ${enabled} ${gridLines}`).toEqual(resolveAllConfig(config));
|
|
71
|
+
// The strip does not change what the default is, and a second
|
|
72
|
+
// pass changes nothing.
|
|
73
|
+
expect(balancingOnByDefault(stripped), name).toBe(balancingOnByDefault(config));
|
|
74
|
+
expect(stripConfigDefaults(stripped), name).toEqual(stripped);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
it('stripHeadingsDefaults takes the default of the document, on unless told', () => {
|
|
80
|
+
expect(stripHeadingsDefaults({ balancing: { enabled: true } })).toBeUndefined();
|
|
81
|
+
expect(stripHeadingsDefaults({ balancing: { enabled: false } })).toEqual({ balancing: { enabled: false } });
|
|
82
|
+
expect(stripHeadingsDefaults({ balancing: { enabled: true } }, false)).toEqual({ balancing: { enabled: true } });
|
|
83
|
+
expect(stripHeadingsDefaults({ balancing: { enabled: false } }, false)).toBeUndefined();
|
|
84
|
+
expect(stripHeadingsDefaults({ balancing: { enabled: true } }, true)).toBeUndefined();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('the other defaults that follow the configuration (#651)', () => {
|
|
88
|
+
it('keeps the index separators and label italics that are no default in its language', () => {
|
|
89
|
+
const arabic = { locale: 'ar', index: { separator: ', ', locatorSeparator: ', ', see: { italic: true } } };
|
|
90
|
+
expect(stripConfigDefaults(arabic)).toEqual(arabic);
|
|
91
|
+
roundTrips(arabic);
|
|
92
|
+
const japanese = { locale: 'ja', index: { see: { italic: true } } };
|
|
93
|
+
expect(stripConfigDefaults(japanese)).toEqual(japanese);
|
|
94
|
+
roundTrips(japanese);
|
|
95
|
+
// The index's own language decides before the document's.
|
|
96
|
+
const arabicIndex = { locale: 'en', index: { locale: 'ar', separator: ', ' } };
|
|
97
|
+
expect(stripConfigDefaults(arabicIndex)).toEqual(arabicIndex);
|
|
98
|
+
roundTrips(arabicIndex);
|
|
99
|
+
// In any other language they are the defaults, as before.
|
|
100
|
+
expect(stripConfigDefaults({ locale: 'es', index: { separator: ', ', see: { italic: true } } })).toEqual({ locale: 'es' });
|
|
101
|
+
expect(stripIndexDefaults({ separator: ', ', see: { italic: true } })).toBeUndefined();
|
|
102
|
+
expect(stripIndexDefaults({ separator: ', ', see: { italic: true } }, 'ar')).toEqual({ separator: ', ', see: { italic: true } });
|
|
103
|
+
// What was kept before is kept still.
|
|
104
|
+
expect(stripIndexDefaults({ separator: '، ', see: { italic: false } }, 'ar')).toEqual({ separator: '، ', see: { italic: false } });
|
|
105
|
+
});
|
|
106
|
+
it('reads the document language from the hyphenation locale when no locale is set', () => {
|
|
107
|
+
// The Sandbox fills `bodyText.hyphenation.locale` from the app language.
|
|
108
|
+
const japanese = (extra) => ({ bodyText: { hyphenation: { locale: 'ja' } }, ...extra });
|
|
109
|
+
const notes = japanese({ footnotes: { numbering: 'chapter' } });
|
|
110
|
+
expect(resolveAllConfig(japanese({})).footnotes.numbering).toBe('page');
|
|
111
|
+
expect(stripConfigDefaults(notes).footnotes).toEqual({ numbering: 'chapter' });
|
|
112
|
+
roundTrips(notes);
|
|
113
|
+
const captions = japanese({ captionStyle: { labelNumberGap: ' ', labelSeparator: '. ' } });
|
|
114
|
+
expect(stripConfigDefaults(captions).captionStyle).toEqual({ labelNumberGap: ' ', labelSeparator: '. ' });
|
|
115
|
+
roundTrips(captions);
|
|
116
|
+
const index = japanese({ index: { see: { italic: true } } });
|
|
117
|
+
expect(stripConfigDefaults(index).index).toEqual({ see: { italic: true } });
|
|
118
|
+
roundTrips(index);
|
|
119
|
+
});
|
|
120
|
+
it('keeps hyphenation patterns named for another language than the document\'s', () => {
|
|
121
|
+
const config = { locale: 'es', bodyText: { hyphenation: { locale: 'en-us' } } };
|
|
122
|
+
expect(resolveAllConfig({ locale: 'es' }).bodyText.hyphenation.locale).toBe('es');
|
|
123
|
+
expect(stripConfigDefaults(config)).toEqual(config);
|
|
124
|
+
roundTrips(config);
|
|
125
|
+
// The document's own patterns, and a document that names no language.
|
|
126
|
+
expect(stripConfigDefaults({ locale: 'en', bodyText: { hyphenation: { locale: 'en-us' } } })).toEqual({ locale: 'en' });
|
|
127
|
+
expect(stripConfigDefaults({ bodyText: { hyphenation: { locale: 'en-us' } } })).toEqual({});
|
|
128
|
+
});
|
|
129
|
+
it('keeps a comics section left at its defaults where it binds the book on the right', () => {
|
|
130
|
+
for (const locale of ['ja', 'zh-Hant']) {
|
|
131
|
+
const manga = { locale, comics: {} };
|
|
132
|
+
expect(resolveAllConfig(manga).page.binding, locale).toBe('right');
|
|
133
|
+
expect(resolveAllConfig({ locale }).page.binding, locale).toBe('left');
|
|
134
|
+
expect(stripConfigDefaults(manga), locale).toEqual(manga);
|
|
135
|
+
expect(resolveAllConfig(stripConfigDefaults({ locale, comics: { readingDirection: 'auto' } })).page.binding, locale).toBe('right');
|
|
136
|
+
}
|
|
137
|
+
// A comic read left to right is bound on the left with or without it.
|
|
138
|
+
expect(stripConfigDefaults({ locale: 'en', comics: {} })).toEqual({ locale: 'en' });
|
|
139
|
+
expect(stripConfigDefaults({ comics: { artDirection: 'ltr' } })).toEqual({});
|
|
140
|
+
});
|
|
141
|
+
it('keeps a page size that differs from its named preset', () => {
|
|
142
|
+
const cm = (value) => ({ value, unit: 'cm' });
|
|
143
|
+
const config = { page: { sizePreset: '21x28', width: cm(17), height: cm(24) } };
|
|
144
|
+
expect(resolveAllConfig(config).page.width).toEqual(cm(17));
|
|
145
|
+
expect(stripConfigDefaults(config)).toEqual(config);
|
|
146
|
+
roundTrips(config);
|
|
147
|
+
// The default size under the default preset, or under none.
|
|
148
|
+
expect(stripPageDefaults({ width: cm(17), height: cm(24) })).toBeUndefined();
|
|
149
|
+
expect(stripPageDefaults({ sizePreset: '17x24', width: cm(17), height: cm(24) })).toBeUndefined();
|
|
150
|
+
expect(stripPageDefaults({ sizePreset: 'custom', width: cm(17), height: cm(30) })).toEqual({ sizePreset: 'custom', height: cm(30) });
|
|
151
|
+
// A preset's own size written out is kept as it always was.
|
|
152
|
+
expect(stripPageDefaults({ sizePreset: '21x28', width: cm(21), height: cm(28) }))
|
|
153
|
+
.toEqual({ sizePreset: '21x28', width: cm(21), height: cm(28) });
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
// Every flag of the resolved configuration, set either way in each context,
|
|
157
|
+
// reads back the same after the strip: a default that comes to depend on
|
|
158
|
+
// the rest of the configuration shows up here.
|
|
159
|
+
describe('every flag survives the strip in every context (#651)', () => {
|
|
160
|
+
const contexts = {
|
|
161
|
+
...CONTEXTS,
|
|
162
|
+
chinese: { locale: 'zh-Hans' },
|
|
163
|
+
japanese: { locale: 'ja' },
|
|
164
|
+
japaneseVertical: { locale: 'ja', layout: { writingMode: 'vertical-rl' } },
|
|
165
|
+
japaneseByHyphenation: { bodyText: { hyphenation: { locale: 'ja' } } },
|
|
166
|
+
arabic: { locale: 'ar' },
|
|
167
|
+
spanish: { locale: 'es' },
|
|
168
|
+
rightToLeft: { direction: 'rtl' },
|
|
169
|
+
twoColumns: { layout: { layoutType: 'double' } },
|
|
170
|
+
manga: { locale: 'ja', comics: { lettering: { fontSize: { value: 8, unit: 'pt' } } } },
|
|
171
|
+
};
|
|
172
|
+
const isFields = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
173
|
+
const flags = (value, path, out) => {
|
|
174
|
+
if (typeof value === 'boolean')
|
|
175
|
+
out.push(path);
|
|
176
|
+
else if (isFields(value))
|
|
177
|
+
for (const [k, v] of Object.entries(value))
|
|
178
|
+
flags(v, [...path, k], out);
|
|
179
|
+
return out;
|
|
180
|
+
};
|
|
181
|
+
const merge = (a, b) => {
|
|
182
|
+
if (!isFields(a) || !isFields(b))
|
|
183
|
+
return b === undefined ? a : b;
|
|
184
|
+
const out = { ...a };
|
|
185
|
+
for (const [k, v] of Object.entries(b))
|
|
186
|
+
out[k] = merge(out[k], v);
|
|
187
|
+
return out;
|
|
188
|
+
};
|
|
189
|
+
for (const [name, context] of Object.entries(contexts)) {
|
|
190
|
+
it(name, () => {
|
|
191
|
+
const paths = flags(JSON.parse(JSON.stringify(resolveAllConfig(context))), [], []);
|
|
192
|
+
expect(paths.length).toBeGreaterThan(100);
|
|
193
|
+
const lost = [];
|
|
194
|
+
for (const path of paths) {
|
|
195
|
+
for (const value of [true, false]) {
|
|
196
|
+
const config = merge(context, path.reduceRight((acc, key) => ({ [key]: acc }), value));
|
|
197
|
+
const before = stableStringify(resolveAllConfig(config));
|
|
198
|
+
const after = stableStringify(resolveAllConfig(stripConfigDefaults(config)));
|
|
199
|
+
if (before !== after)
|
|
200
|
+
lost.push(`${path.join('.')}: ${value}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
expect(lost).toEqual([]);
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
// A pin writes the value an older version laid a document out with; the
|
|
208
|
+
// first save strips the configuration and stamps it current, so a pin the
|
|
209
|
+
// strip drops is lost for good.
|
|
210
|
+
describe('every legacy pin survives the strip (#651)', () => {
|
|
211
|
+
const pt = (value) => ({ value, unit: 'pt' });
|
|
212
|
+
const text = (id) => ({
|
|
213
|
+
kind: 'text', id, content: '{titleText}', fontSize: pt(10),
|
|
214
|
+
placement: { anchor: { to: 'container', edge: 'top-left' } },
|
|
215
|
+
});
|
|
216
|
+
const slot = (...elements) => ({ elements });
|
|
217
|
+
const stored = (context) => ({
|
|
218
|
+
header: slot(text('rh')),
|
|
219
|
+
headings: { levels: [{ level: 1, span: 'page', advancedDesign: { enabled: true, slot: slot(text('title')) } }, { level: 2 }] },
|
|
220
|
+
headingStyles: [{ id: 'appendix', advancedDesign: { enabled: true, slot: slot(text('title')) } }],
|
|
221
|
+
parts: { design: slot(text('partTitle')), versoDesign: slot(text('verso')) },
|
|
222
|
+
paragraphStyles: [{ id: 'hang', name: 'Hang', firstLineIndent: pt(10), hangingIndent: pt(12) }, { id: 'ragged', name: 'Ragged', textAlign: 'left' }],
|
|
223
|
+
math: { enabled: true },
|
|
224
|
+
bodyText: { textAlign: 'left', verse: {} },
|
|
225
|
+
...context,
|
|
226
|
+
});
|
|
227
|
+
const pins = Object.entries(configVersion)
|
|
228
|
+
.filter((entry) => entry[0].startsWith('pinLegacy') && typeof entry[1] === 'function');
|
|
229
|
+
const contexts = {
|
|
230
|
+
horizontal: {},
|
|
231
|
+
grid: { locale: 'zh-Hans', cjk: { grid: GRID } },
|
|
232
|
+
vertical: { locale: 'zh-Hant', layout: { writingMode: 'vertical-rl' } },
|
|
233
|
+
japanese: { locale: 'ja' },
|
|
234
|
+
arabic: { locale: 'ar' },
|
|
235
|
+
};
|
|
236
|
+
it('finds the pins', () => {
|
|
237
|
+
expect(pins.length).toBeGreaterThanOrEqual(24);
|
|
238
|
+
expect(pins.map(([name]) => name)).toContain('pinLegacyGridBalancing');
|
|
239
|
+
});
|
|
240
|
+
for (const [name, context] of Object.entries(contexts)) {
|
|
241
|
+
it(`each pin alone, ${name}`, () => {
|
|
242
|
+
for (const base of [stored(context), context]) {
|
|
243
|
+
for (const [pinName, pin] of pins) {
|
|
244
|
+
const pinned = pin(base);
|
|
245
|
+
if (pinned === base)
|
|
246
|
+
continue;
|
|
247
|
+
expect(resolveAllConfig(stripConfigDefaults(pinned)), pinName).toEqual(resolveAllConfig(pinned));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
it(`a stored configuration of every version, ${name}`, () => {
|
|
252
|
+
for (const base of [stored(context), context]) {
|
|
253
|
+
for (const version of [undefined, 2, 3, 4, 5, 6, 7, 8, 9, 10]) {
|
|
254
|
+
const migrated = configVersion.migrateConfig(base, version);
|
|
255
|
+
const saved = stripConfigDefaults(migrated);
|
|
256
|
+
// Read back under the current stamp: nothing pins it again.
|
|
257
|
+
const reloaded = configVersion.migrateConfig(saved, configVersion.CONFIG_VERSION);
|
|
258
|
+
expect(reloaded).toBe(saved);
|
|
259
|
+
expect(resolveAllConfig(reloaded), String(version)).toEqual(resolveAllConfig(migrated));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
});
|
|
265
|
+
//# sourceMappingURL=stripContextDefaults.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripContextDefaults.test.js","sourceRoot":"","sources":["../../../src/__tests__/defaults/stripContextDefaults.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cjkDesignDash.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/design/cjkDesignDash.test.ts"],"names":[],"mappings":""}
|