postext-epub 0.25.0 → 0.26.0

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.
@@ -0,0 +1,110 @@
1
+ // The words a `:::figure` sets on its picture (#860), back on the picture
2
+ // of a reflowable book (#955): one inline SVG laid over the image, in the
3
+ // picture's own coordinates, so the labels keep their place and their
4
+ // proportion whatever the width the reader gives the picture.
5
+ //
6
+ // Only what an SVG `<text>` says as well as the print does is drawn: a
7
+ // horizontal label of plain words, in bold or italic, with the halo and the
8
+ // plate of its style. A label with a formula, a chip, a mark, a script, a
9
+ // line the bidi algorithm reordered or a vertical column stays in the list
10
+ // of labels that follows the picture, out of sight, as before.
11
+ import { figureLabelMatrix, parseFontString, uncroppedPictureBox } from 'postext';
12
+ import { familyStack } from './css';
13
+ import { fontPx, xmlAttr, xmlText } from './inline';
14
+ const n = (v) => String(+v.toFixed(3));
15
+ /** Segment fields an SVG `<text>` cannot set as the print does. */
16
+ function plain(seg) {
17
+ return (seg.kind === 'text' || seg.kind === 'space')
18
+ && !seg.script && !seg.baselineShift && !seg.stacked && !seg.cjkMarks && !seg.ruby && !seg.kunten
19
+ && !seg.warichu && !seg.sideMarker && !seg.mark && !seg.chip && !seg.mathRender && !seg.swatch && !seg.footnoteId
20
+ && !seg.tab && !seg.leader && !seg.labelTab && !seg.tcy && seg.orientation === undefined && !seg.rtl;
21
+ }
22
+ function drawable(layout) {
23
+ if (layout.vertical || layout.mirrored || layout.direction === 'rtl')
24
+ return false;
25
+ return layout.lines.every((line) => !line.order && !line.highlights?.length && (line.segments ?? []).every(plain));
26
+ }
27
+ /** The font of one segment: the label's face for its weight and slant,
28
+ * unless the segment carries its own. */
29
+ function faceOf(layout, seg) {
30
+ if (seg.fontString)
31
+ return seg.fontString;
32
+ if (seg.bold && seg.italic)
33
+ return layout.boldItalicFontString;
34
+ if (seg.bold)
35
+ return layout.boldFontString;
36
+ if (seg.italic)
37
+ return layout.italicFontString;
38
+ return layout.fontString;
39
+ }
40
+ function fontAttrs(font) {
41
+ const face = parseFontString(font);
42
+ const parts = [`font-size="${n(fontPx(font))}"`];
43
+ if (face) {
44
+ parts.push(`font-family="${xmlAttr(familyStack(face.family))}"`);
45
+ if (face.weight !== 400)
46
+ parts.push(`font-weight="${face.weight}"`);
47
+ if (face.style === 'italic')
48
+ parts.push('font-style="italic"');
49
+ }
50
+ return parts.join(' ');
51
+ }
52
+ /** One line as a `<text>`: a `<tspan>` per word run at the x the layout
53
+ * measured, so a face with other metrics cannot push the words together. */
54
+ function lineText(layout, line, extra) {
55
+ const y = n(line.baseline);
56
+ const segments = line.segments ?? [];
57
+ if (segments.length === 0) {
58
+ if (line.text.trim() === '')
59
+ return '';
60
+ return `<text x="${n(line.bbox.x)}" y="${y}" ${fontAttrs(layout.fontString)}${extra}>${xmlText(line.text)}</text>`;
61
+ }
62
+ let x = line.bbox.x;
63
+ const runs = [];
64
+ for (const seg of segments) {
65
+ if (seg.kind === 'text' && seg.text.trim() !== '') {
66
+ const tracking = seg.tracking ? ` letter-spacing="${n(seg.tracking)}"` : '';
67
+ runs.push(`<tspan x="${n(x)}" ${fontAttrs(faceOf(layout, seg))}${tracking}>${xmlText(seg.text)}</tspan>`);
68
+ }
69
+ x += seg.width;
70
+ }
71
+ return runs.length === 0 ? '' : `<text y="${y}"${extra}>${runs.join('')}</text>`;
72
+ }
73
+ function labelGroup(layout) {
74
+ const m = figureLabelMatrix(layout, 0, 0);
75
+ const out = [];
76
+ if (layout.background) {
77
+ const r = layout.background.rect;
78
+ out.push(`<rect x="${n(r.x)}" y="${n(r.y)}" width="${n(r.width)}" height="${n(r.height)}" fill="${xmlAttr(layout.background.color)}"/>`);
79
+ }
80
+ if (layout.halo && layout.halo.widthPx > 0) {
81
+ const halo = ` fill="${xmlAttr(layout.halo.color)}" stroke="${xmlAttr(layout.halo.color)}" stroke-width="${n(2 * layout.halo.widthPx)}" stroke-linejoin="round"`;
82
+ for (const line of layout.lines)
83
+ out.push(lineText(layout, line, halo));
84
+ }
85
+ const ink = ` fill="${xmlAttr(layout.color)}"`;
86
+ for (const line of layout.lines)
87
+ out.push(lineText(layout, line, ink));
88
+ const body = out.filter(Boolean).join('');
89
+ return body ? `<g transform="matrix(${m.map(n).join(' ')})">${body}</g>` : '';
90
+ }
91
+ /**
92
+ * The SVG laid over the picture of a figure with labels, or undefined when
93
+ * no label can be drawn that way. Its viewBox is the picture's box in the
94
+ * body's coordinates (the whole picture, past the safe area the print
95
+ * crops to), so the labels land where the print puts them. Right-to-left
96
+ * pages are laid out mirrored: the caller leaves them to the list.
97
+ */
98
+ export function figureLabelsOverlay(rb) {
99
+ if (rb.kind !== 'bitmap' && rb.kind !== 'svg')
100
+ return undefined;
101
+ const groups = (rb.labels ?? [])
102
+ .map((l) => (l.layout && drawable(l.layout) ? labelGroup(l.layout) : ''))
103
+ .filter(Boolean);
104
+ if (groups.length === 0)
105
+ return undefined;
106
+ const { width, height } = rb.bodyRect;
107
+ const box = rb.bodySource ? uncroppedPictureBox(0, 0, width, height, rb.bodySource) : { x: 0, y: 0, width, height };
108
+ return `<svg class="pt-label-layer" xmlns="http://www.w3.org/2000/svg" viewBox="${n(box.x)} ${n(box.y)} ${n(box.width)} ${n(box.height)}" preserveAspectRatio="none" aria-hidden="true" focusable="false">${groups.join('')}</svg>`;
109
+ }
110
+ //# sourceMappingURL=labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.js","sourceRoot":"","sources":["../../src/reflowable/labels.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0EAA0E;AAC1E,sEAAsE;AACtE,8DAA8D;AAC9D,EAAE;AACF,uEAAuE;AACvE,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,+DAA+D;AAG/D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,mEAAmE;AACnE,SAAS,KAAK,CAAC,GAAmB;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;WAC/C,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;WAC9F,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU;WAC9G,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACzG,CAAC;AAED,SAAS,QAAQ,CAAC,MAA4B;IAC5C,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACnF,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACrH,CAAC;AAED;0CAC0C;AAC1C,SAAS,MAAM,CAAC,MAA4B,EAAE,GAAmB;IAC/D,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC;IAC1C,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,oBAAoB,CAAC;IAC/D,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,cAAc,CAAC;IAC3C,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,gBAAgB,CAAC;IAC/C,OAAO,MAAM,CAAC,UAAU,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;6EAC6E;AAC7E,SAAS,QAAQ,CAAC,MAA4B,EAAE,IAAa,EAAE,KAAa;IAC1E,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC;QACvC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACrH,CAAC;IACD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5G,CAAC;QACD,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;AACnF,CAAC;AAED,SAAS,UAAU,CAAC,MAA4B;IAC9C,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3I,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,UAAU,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,2BAA2B,CAAC;QACjK,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,GAAG,GAAG,UAAU,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAyB;IAC3D,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAChE,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxE,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;IACtC,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACpH,OAAO,2EAA2E,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,qEAAqE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACtO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=labels.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.test.d.ts","sourceRoot":"","sources":["../../src/reflowable/labels.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { baseConfig, layOut } from './__tests__/vdt';
3
+ import { figureLabelsOverlay } from './labels';
4
+ // #955: the labels of a figure that the print draws as text, drawn over the
5
+ // picture of a reflowable book as one SVG in the picture's coordinates.
6
+ const resource = (extra = {}) => ({
7
+ id: 'mapa', typeId: 'figure', kind: 'bitmap', altText: 'A map', createdAt: 0, updatedAt: 0,
8
+ bitmap: { fileId: 'mapa.png', format: 'png', width: 400, height: 300 },
9
+ anchors: [
10
+ { id: 'a', x: 0.2, y: 0.5, style: 'sea' },
11
+ { id: 'b', x: 0.7, y: 0.3, style: 'plate' },
12
+ { id: 'v', x: 0.5, y: 0.2, writingMode: 'vertical-rl' },
13
+ { id: 'f', x: 0.5, y: 0.9 },
14
+ ],
15
+ ...extra,
16
+ });
17
+ const config = {
18
+ ...baseConfig,
19
+ labelStyles: [
20
+ { id: 'sea', halo: { color: { hex: '#ffffff', model: 'hex' }, width: { value: 1, unit: 'px' } } },
21
+ { id: 'plate', background: { hex: '#ffeecc', model: 'hex' }, padding: { value: 2, unit: 'px' } },
22
+ ],
23
+ };
24
+ const figure = (...labels) => [':::figure{resource="mapa"}', ...labels, ':::', ''].join('\n');
25
+ const block = (doc) => [...doc.blocks, ...doc.pages.flatMap((p) => p.floats ?? [])].find((b) => b.resourceBlock?.resource.id === 'mapa');
26
+ const overlay = (md, res = resource(), cfg = config) => figureLabelsOverlay(block(layOut(md, cfg, [res])).resourceBlock);
27
+ describe('the labels drawn over a picture in the reflowable EPUB (#955)', () => {
28
+ it('draws a label as text at its place, its words at the x the print measured', () => {
29
+ const svg = overlay(figure('::label[Atlantic]{at="f"}'));
30
+ expect(svg).toMatch(/^<svg class="pt-label-layer" xmlns="http:\/\/www\.w3\.org\/2000\/svg" viewBox="0 0 [\d.]+ [\d.]+"/);
31
+ expect(svg).toContain('aria-hidden="true"');
32
+ expect(svg).toMatch(/<g transform="matrix\(1 0 0 1 [\d.]+ [\d.]+\)"><text y="[\d.-]+" fill="#[0-9a-f]{6}"><tspan x="-?[\d.]+" font-size="[\d.]+" font-family="[^"]*">Atlantic<\/tspan>/);
33
+ });
34
+ it('strokes the halo under the text and fills the plate behind it', () => {
35
+ const svg = overlay(figure('::label[Sea]{at="a"}', '::label[Plate]{at="b"}'));
36
+ // The halo: the line twice, stroked then filled.
37
+ expect(svg).toMatch(/stroke="#ffffff" stroke-width="2" stroke-linejoin="round"/);
38
+ expect(svg.match(/>Sea<\/tspan>/g)).toHaveLength(2);
39
+ expect(svg).toMatch(/<rect [^>]*fill="#ffeecc"\/>/);
40
+ });
41
+ it('sets bold and italic words in their faces', () => {
42
+ const svg = overlay(figure('::label[**Big** *slant*]{at="f"}'));
43
+ expect(svg).toMatch(/font-weight="700"[^>]*>Big<\/tspan>/);
44
+ expect(svg).toMatch(/font-style="italic"[^>]*>slant<\/tspan>/);
45
+ });
46
+ it('turns a label by the anchor’s rotation', () => {
47
+ const rotated = resource({ anchors: [{ id: 'a', x: 0.2, y: 0.5, rotate: 90 }] });
48
+ expect(overlay(figure('::label[Turned]{at="a"}'), rotated)).toMatch(/<g transform="matrix\(0 1 -1 0 /);
49
+ });
50
+ it('leaves a vertical label, which an SVG text sets differently, to the list', () => {
51
+ expect(overlay(figure('::label[縦書き]{at="v"}'))).toBeUndefined();
52
+ const svg = overlay(figure('::label[Atlantic]{at="a"}', '::label[縦書き]{at="v"}'));
53
+ expect(svg).toContain('Atlantic');
54
+ expect(svg).not.toContain('縦書き');
55
+ });
56
+ it('draws over the whole picture past a safe area the print crops to', () => {
57
+ const cropped = resource({ safeArea: { x: 0.1, y: 0.1, width: 0.6, height: 0.6 } });
58
+ const doc = layOut(figure('::label[Atlantic]{at="a"}'), config, [cropped]);
59
+ const rb = block(doc).resourceBlock;
60
+ const svg = figureLabelsOverlay(rb);
61
+ const [x, y, w, h] = /viewBox="([-\d.]+) ([-\d.]+) ([-\d.]+) ([-\d.]+)"/.exec(svg).slice(1).map(Number);
62
+ if (rb.bodySource) {
63
+ // The viewBox is the picture's box in the body's coordinates.
64
+ expect(w / h).toBeCloseTo(400 / 300, 1);
65
+ expect(x).toBeLessThanOrEqual(0);
66
+ expect(y).toBeLessThanOrEqual(0);
67
+ }
68
+ else
69
+ expect([x, y]).toEqual([0, 0]);
70
+ });
71
+ it('is nothing for a figure with no label, or one that is not a picture', () => {
72
+ expect(overlay(figure())).toBeUndefined();
73
+ });
74
+ });
75
+ //# sourceMappingURL=labels.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels.test.js","sourceRoot":"","sources":["../../src/reflowable/labels.test.ts"],"names":[],"mappings":"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"}
@@ -168,6 +168,16 @@ export interface CalloutNode {
168
168
  * starts in (the slot). Written as a block of the page's section, with
169
169
  * the frame's callout style when it has one (`styleId`). */
170
170
  frame?: string;
171
+ /** A frame set in a writing mode other than its book's (#960,
172
+ * `FrameConfig.writingMode`): its mode, and the length of the box's
173
+ * extent the lines run along (a vertical frame's height, a horizontal
174
+ * card's width) in ems of the body text. A box of another writing mode
175
+ * in a reflowable page needs that extent, or a reader sizes it to the
176
+ * page. */
177
+ frameMode?: {
178
+ mode: 'vertical-rl' | 'horizontal-tb';
179
+ em: number;
180
+ };
171
181
  }
172
182
  /** A composed page (`::::page{template}`, #862): a section holding its
173
183
  * frames' stories in Markdown order, each a box (`CalloutNode.frame`). The
@@ -207,6 +217,9 @@ export interface FigureNode {
207
217
  * written: read as a list after the picture, out of sight (the
208
218
  * picture this book shows does not carry them). */
209
219
  labels?: string[];
220
+ /** An SVG over the picture that draws those labels the print sets as
221
+ * text (#955), in the picture's coordinates. */
222
+ labelsSvg?: string;
210
223
  }
211
224
  export interface TableCellNode {
212
225
  row: number;
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/reflowable/model.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE/D,gEAAgE;AAChE,MAAM,MAAM,UAAU;AACpB,kEAAkE;AAChE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAC/B;qDACqD;GACnD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAChC,2CAA2C;GACzC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAClC,gDAAgD;GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE;AAC3D,uEAAuE;GACrE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC;4BAC4B;AAC5B,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;mEAC+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;uEACmE;IACnE,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACrF,0DAA0D;IAC1D,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;IACrC,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;qCAEiC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;kCAE8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;mCAMmC;AACnC,MAAM,MAAM,UAAU,GAClB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3E;;kEAEkE;GAChE;IAAE,CAAC,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC7E,6DAA6D;GAC3D;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;AAClC,oEAAoE;GAClE;IAAE,CAAC,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC7B;;;;mDAImD;GACjD,OAAO,CAAC;AAEZ,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,KAAK,CAAC;IACT,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,GAAG,CAAC;IACP,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,GAAG,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;uEACmE;IACnE,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,oBAAoB;IACpB,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,OAAO,CAAC;IACX,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,SAAS,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,EAAE,CAAC;IACjB;;;sCAGkC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC3B,kDAAkD;IAClD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;iEAE6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;0DAE0D;AAC1D,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,UAAU,CAAC;IACd,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,QAAQ,EAAE,IAAI,EAAE,CAAC;CAClB;AAED;2EAC2E;AAC3E,MAAM,WAAW,SAAS;IACxB,sCAAsC;IACtC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,QAAQ,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;wDAEoD;IACpD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,OAAO,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClC,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;mDAC+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;qDACqD;AACrD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,kDAAkD;AAClD,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,OAAO,CAAC;IACX,+DAA+D;IAC/D,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED;oCACoC;AACpC,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB;mEAC+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;6EAE6E;AAC7E,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,QAAQ,CAAC;IACZ,+DAA+D;IAC/D,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED;iCACiC;AACjC,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;qBAEqB;AACrB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qEAAqE;AACrE,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,+DAA+D;IAC/D,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,KAAK,CAAC;IACT,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,IAAI,EAAE,UAAU,EAAE,CAAC;CACpB;AAED;;oBAEoB;AACpB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;IACnC,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;wBAEwB;AACxB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,4DAA4D;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,sCAAsC;AACtC,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,OAAO,CAAC;IACX,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,yEAAyE;IACzE,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB;;;oBAGgB;IAChB,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC9D;AAED;yCACyC;AACzC,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,QAAQ,CAAC;IACZ,GAAG,EAAE,UAAU,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,IAAI,GACZ,aAAa,GACb,WAAW,GACX,QAAQ,GACR,SAAS,GACT,WAAW,GACX,UAAU,GACV,SAAS,GACT,QAAQ,GACR,SAAS,GACT,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,YAAY,GACZ,UAAU,CAAC;AAEf,kEAAkE;AAClE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,gEAAgE;IAChE,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,SAAS;IACxB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;oDACgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;wBAEoB;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,MAAM,EAAE,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/reflowable/model.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@ export interface BookModel {
36
36
  code?: boolean;
37
37
  /** Whether a figure or a box text wraps round was read (#627). */
38
38
  wraps?: boolean;
39
+ /** Whether a picture with its labels drawn over it was read (#955). */
40
+ labelLayers?: boolean;
39
41
  /** Whether a composed page was read (#862), and the callout styles its
40
42
  * frames are set in: the stylesheet styles a frame's block with them. */
41
43
  composed?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/reflowable/walk.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAA0B,WAAW,EAA8C,MAAM,SAAS,CAAC;AAE/H,OAAO,KAAK,EAIV,SAAS,EAET,YAAY,EAoBb,MAAM,SAAS,CAAC;AAGjB,+DAA+D;AAC/D,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B;eACW;IACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,6DAA6D;IAC7D,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B;gCAC4B;IAC5B,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB;wEACoE;IACpE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB;sCACkC;IAClC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5E;AAiDD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,CAkBtF"}
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/reflowable/walk.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,cAAc,EAA0B,WAAW,EAA8C,MAAM,SAAS,CAAC;AAE/H,OAAO,KAAK,EAIV,SAAS,EAET,YAAY,EAoBb,MAAM,SAAS,CAAC;AAIjB,+DAA+D;AAC/D,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B;eACW;IACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACxB,6DAA6D;IAC7D,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,0CAA0C;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;8EAC0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B;gCAC4B;IAC5B,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB;wEACoE;IACpE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB;sCACkC;IAClC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAcD,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5E;AAiDD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,CAkBtF"}
@@ -16,7 +16,8 @@
16
16
  // - each printed page leaves a page-break marker where its text starts;
17
17
  // - a part (a divider page, or `partMarks` without one) opens a
18
18
  // document of its own and the chapter goes on in a new one.
19
- import { canonicalLocaleTag, comicBalloonKind, comicBalloonText, comicSpeakerName, composedPaintOrder, composedReadingOrder, dimensionToPx, isComicSpreadPartner, joinComicSpread, pickTableStyle, primaryFontFamily } from 'postext';
19
+ import { canonicalLocaleTag, comicBalloonKind, comicBalloonText, comicSpeakerName, composedPaintOrder, composedReadingOrder, dimensionToPx, framePageRect, isComicSpreadPartner, joinComicSpread, pickTableStyle, primaryFontFamily } from 'postext';
20
+ import { figureLabelsOverlay } from './labels';
20
21
  import { appendLine, appendLines, fontPx, idOf, mathSvg, plainText, xmlText } from './inline';
21
22
  const fragmentKey = (block) => block.id.replace(/-cont-\d+$/, '');
22
23
  const isTocRow = (block) => block.tocEntry !== undefined || block.tocPart !== undefined;
@@ -624,6 +625,13 @@ class DocWalker {
624
625
  if (frame) {
625
626
  if (own.frame === undefined) {
626
627
  own.frame = frame.name;
628
+ if (frame.writingMode !== undefined) {
629
+ // The box as the page shows it: its lines run along its height
630
+ // (a vertical frame) or its width (a horizontal card).
631
+ const box = framePageRect(frame);
632
+ const along = frame.writingMode === 'vertical-rl' ? box.height : box.width;
633
+ own.frameMode = { mode: frame.writingMode, em: Math.round((along / this.bodyPx) * 100) / 100 };
634
+ }
627
635
  if (frame.styleId) {
628
636
  own.styleId = frame.styleId;
629
637
  (this.book.frameStyles ??= new Set()).add(frame.styleId);
@@ -1227,6 +1235,16 @@ class DocWalker {
1227
1235
  // A `:::figure`'s labels (#862): the picture's text, in label order.
1228
1236
  ...(rb.labels?.some((l) => l.text.trim()) ? { labels: rb.labels.map((l) => l.text.trim()).filter(Boolean) } : {}),
1229
1237
  };
1238
+ // The labels the print draws as text, drawn over the picture (#955).
1239
+ // The pages of a right-to-left book are laid out mirrored: their
1240
+ // labels stay in the list.
1241
+ if (this.dir !== 'rtl' && !rb.rotation) {
1242
+ const labelsSvg = figureLabelsOverlay(rb);
1243
+ if (labelsSvg) {
1244
+ node.labelsSvg = labelsSvg;
1245
+ this.book.labelLayers = true;
1246
+ }
1247
+ }
1230
1248
  if (node.wrap)
1231
1249
  this.book.wraps = true;
1232
1250
  if (rb.fileId)