postext-epub 0.5.2 → 0.6.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.
Files changed (42) hide show
  1. package/dist/__tests__/sampleBook.d.ts +9 -0
  2. package/dist/__tests__/sampleBook.d.ts.map +1 -1
  3. package/dist/__tests__/sampleBook.js +91 -0
  4. package/dist/__tests__/sampleBook.js.map +1 -1
  5. package/dist/comic.test.d.ts +2 -0
  6. package/dist/comic.test.d.ts.map +1 -0
  7. package/dist/comic.test.js +201 -0
  8. package/dist/comic.test.js.map +1 -0
  9. package/dist/epubcheck.test.js +9 -1
  10. package/dist/epubcheck.test.js.map +1 -1
  11. package/dist/fixed/index.d.ts.map +1 -1
  12. package/dist/fixed/index.js +37 -5
  13. package/dist/fixed/index.js.map +1 -1
  14. package/dist/fixed/regions.d.ts +45 -0
  15. package/dist/fixed/regions.d.ts.map +1 -0
  16. package/dist/fixed/regions.js +169 -0
  17. package/dist/fixed/regions.js.map +1 -0
  18. package/dist/index.d.ts +6 -4
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +6 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/package/pack.d.ts.map +1 -1
  23. package/dist/package/pack.js +9 -0
  24. package/dist/package/pack.js.map +1 -1
  25. package/dist/reflowable/css.d.ts.map +1 -1
  26. package/dist/reflowable/css.js +6 -0
  27. package/dist/reflowable/css.js.map +1 -1
  28. package/dist/reflowable/model.d.ts +28 -2
  29. package/dist/reflowable/model.d.ts.map +1 -1
  30. package/dist/reflowable/walk.d.ts.map +1 -1
  31. package/dist/reflowable/walk.js +78 -2
  32. package/dist/reflowable/walk.js.map +1 -1
  33. package/dist/reflowable/xhtml.d.ts.map +1 -1
  34. package/dist/reflowable/xhtml.js +43 -1
  35. package/dist/reflowable/xhtml.js.map +1 -1
  36. package/dist/types.d.ts +20 -1
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/worker/client.d.ts +2 -1
  39. package/dist/worker/client.d.ts.map +1 -1
  40. package/dist/worker/client.js +1 -1
  41. package/dist/worker/client.js.map +1 -1
  42. package/package.json +3 -3
@@ -26,4 +26,13 @@ export declare function videoSampleBook(overrides?: PostextConfig): VDTDocument[
26
26
  * notes. Measured with the stub (no Japanese face is embedded). */
27
27
  export declare const JAPANESE_CHAPTERS: string[];
28
28
  export declare function japaneseSampleBook(): VDTDocument[];
29
+ /** A comic page (#565) between two paragraphs: three panels of the sample
30
+ * picture (one slanted, one mirrored), lettered as the lettering engine
31
+ * letters them — a join group of two balloons, a caption and a sound
32
+ * effect — and the cast's names. `direction: 'rtl'` reads the page right
33
+ * to left (a manga). */
34
+ export declare function comicSampleBook(direction?: 'ltr' | 'rtl'): VDTDocument[];
35
+ /** A strip in the text and a two-page spread (#566, #567): the strip
36
+ * between two paragraphs, the spread's middle panel across the spine. */
37
+ export declare function stripSpreadSampleBook(): VDTDocument[];
29
38
  //# sourceMappingURL=sampleBook.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampleBook.d.ts","sourceRoot":"","sources":["../../src/__tests__/sampleBook.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAY,WAAW,EAAE,MAAM,SAAS,CAAC;AAwBpE,eAAO,MAAM,IAAI,yBAAkH,CAAC;AAEpI,eAAO,MAAM,GAAG,yBAA6I,CAAC;AA2B9J,eAAO,MAAM,eAAe,UAG3B,CAAC;AAEF,wBAAgB,UAAU,IAAI,WAAW,EAAE,CAE1C;AAED;uBACuB;AACvB,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,aAAkB,GAAG,WAAW,EAAE,CAE3F;AAED,oEAAoE;AACpE,eAAO,MAAM,KAAK,yBAAmI,CAAC;AAEtJ;;;qBAGqB;AACrB,eAAO,MAAM,eAAe,UAoB3B,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAWhD;AAED,uEAAuE;AACvE,eAAO,MAAM,GAAG,yBAGd,CAAC;AAyBH;;qBAEqB;AACrB,wBAAgB,eAAe,CAAC,SAAS,GAAE,aAAkB,GAAG,WAAW,EAAE,CAG5E;AAED;;;oEAGoE;AACpE,eAAO,MAAM,iBAAiB,UAa7B,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAUlD"}
1
+ {"version":3,"file":"sampleBook.d.ts","sourceRoot":"","sources":["../../src/__tests__/sampleBook.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAA+D,WAAW,EAAE,MAAM,SAAS,CAAC;AAwBvH,eAAO,MAAM,IAAI,yBAAkH,CAAC;AAEpI,eAAO,MAAM,GAAG,yBAA6I,CAAC;AA2B9J,eAAO,MAAM,eAAe,UAG3B,CAAC;AAEF,wBAAgB,UAAU,IAAI,WAAW,EAAE,CAE1C;AAED;uBACuB;AACvB,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,aAAkB,GAAG,WAAW,EAAE,CAE3F;AAED,oEAAoE;AACpE,eAAO,MAAM,KAAK,yBAAmI,CAAC;AAEtJ;;;qBAGqB;AACrB,eAAO,MAAM,eAAe,UAoB3B,CAAC;AAEF,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAWhD;AAED,uEAAuE;AACvE,eAAO,MAAM,GAAG,yBAGd,CAAC;AAyBH;;qBAEqB;AACrB,wBAAgB,eAAe,CAAC,SAAS,GAAE,aAAkB,GAAG,WAAW,EAAE,CAG5E;AAED;;;oEAGoE;AACpE,eAAO,MAAM,iBAAiB,UAa7B,CAAC;AAEF,wBAAgB,kBAAkB,IAAI,WAAW,EAAE,CAUlD;AAED;;;;yBAIyB;AACzB,wBAAgB,eAAe,CAAC,SAAS,GAAE,KAAK,GAAG,KAAa,GAAG,WAAW,EAAE,CAyB/E;AAsBD;0EAC0E;AAC1E,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAoCrD"}
@@ -163,4 +163,95 @@ export function japaneseSampleBook() {
163
163
  },
164
164
  });
165
165
  }
166
+ /** A comic page (#565) between two paragraphs: three panels of the sample
167
+ * picture (one slanted, one mirrored), lettered as the lettering engine
168
+ * letters them — a join group of two balloons, a caption and a sound
169
+ * effect — and the cast's names. `direction: 'rtl'` reads the page right
170
+ * to left (a manga). */
171
+ export function comicSampleBook(direction = 'ltr') {
172
+ const chapter = [
173
+ '# A comic',
174
+ '',
175
+ `Before the page. ${para}`,
176
+ '',
177
+ ':::page{split="40 [55~45 | *] / *" #street}',
178
+ '::panel{art=f1 #first}',
179
+ '::panel{art=f1 mirror alt="Ana at the door"}',
180
+ '::panel{art=f1 border=none}',
181
+ ':::',
182
+ '',
183
+ `After the page. ${para}`,
184
+ ].join('\n');
185
+ const docs = buildBundle({
186
+ chapters: [{ markdown: chapter }],
187
+ config: { ...config, comics: { readingDirection: direction, cast: [{ id: 'ana', name: 'Ana' }] } },
188
+ resources,
189
+ });
190
+ for (const doc of docs) {
191
+ for (const page of doc.pages) {
192
+ if (page.comic)
193
+ page.comic.balloons = sampleBalloons(page.comic);
194
+ }
195
+ }
196
+ return docs;
197
+ }
198
+ function sampleText(t, x, y) {
199
+ return { kind: 'text', bbox: { x, y, width: 60, height: 14 }, fontString: '400 10px "Lora"', color: '#111111', clip: false, lines: [{ text: t, xOffset: 0, baselineY: y + 10, width: 50 }] };
200
+ }
201
+ function sampleBalloons(comic) {
202
+ const [a, b] = [comic.panels[0].bbox, comic.panels[1].bbox];
203
+ return [
204
+ { id: 'b1', panelIndex: 0, order: 0, kind: 'balloon', style: 'speech', speaker: 'ana', sourceStart: 0, sourceEnd: 1, group: 0,
205
+ shape: { d: `M${a.x + 8} ${a.y + 8}h60v20h-60Z M${a.x + 70} ${a.y + 8}h60v20h-60Z`, fill: '#ffffff', stroke: '#111111', strokeWidth: 1 },
206
+ text: [sampleText('Did you hear', a.x + 8, a.y + 10)], bbox: { x: a.x + 8, y: a.y + 8, width: 60, height: 20 } },
207
+ { id: 'b2', panelIndex: 0, order: 1, kind: 'balloon', style: 'speech', speaker: 'ana', sourceStart: 2, sourceEnd: 3, group: 0,
208
+ text: [sampleText('that?', a.x + 70, a.y + 10)], bbox: { x: a.x + 70, y: a.y + 8, width: 60, height: 20 } },
209
+ { id: 'c1', panelIndex: 1, order: 0, kind: 'caption', style: 'caption', sourceStart: 4, sourceEnd: 5, group: 1,
210
+ shape: { d: `M${b.x} ${b.y}h70v16h-70Z`, fill: '#fff3c4', stroke: '#111111', strokeWidth: 1 },
211
+ text: [sampleText('Lyon, 1943.', b.x + 2, b.y + 2)], bbox: { x: b.x, y: b.y, width: 70, height: 16 } },
212
+ { id: 's1', panelIndex: 1, order: 1, kind: 'sfx', style: 'sfx', sourceStart: 6, sourceEnd: 7, group: 2, rotate: -8, halo: { width: 1.5, color: '#ffffff' },
213
+ text: [sampleText('KRAK', b.x + 20, b.y + 40)], bbox: { x: b.x + 20, y: b.y + 40, width: 40, height: 16 } },
214
+ ];
215
+ }
216
+ /** A strip in the text and a two-page spread (#566, #567): the strip
217
+ * between two paragraphs, the spread's middle panel across the spine. */
218
+ export function stripSpreadSampleBook() {
219
+ const chapter = [
220
+ '# Strips and spreads',
221
+ '',
222
+ `Before the strip. ${para}`,
223
+ '',
224
+ ':::strip{split="* | *" aspect=3}',
225
+ '::panel{art=f1}',
226
+ '::panel{art=f1 alt="The second panel of the strip"}',
227
+ ':::',
228
+ '',
229
+ `After the strip. ${para}`,
230
+ '',
231
+ ':::page{spread split="40 / * [* | * | *]"}',
232
+ '::panel{art=f1}',
233
+ '::panel',
234
+ '::panel{art=f1 alt="Across the spine"}',
235
+ '::panel',
236
+ ':::',
237
+ '',
238
+ 'After the spread.',
239
+ ].join('\n');
240
+ const docs = buildBundle({ chapters: [{ markdown: chapter }], config: { ...config, comics: {} }, resources });
241
+ for (const doc of docs) {
242
+ for (const page of doc.pages) {
243
+ const c = page.comic;
244
+ if (!c?.spread)
245
+ continue;
246
+ // A balloon in panel 2 on each page: read in panel order.
247
+ const p = c.panels.find((q) => q.index === 2);
248
+ if (!p)
249
+ continue;
250
+ const x = c.spread === 'left' ? p.bbox.x + 4 : p.bbox.x + p.bbox.width - 64;
251
+ c.balloons = [{ id: `s-${c.spread}`, panelIndex: 2, order: c.spread === 'left' ? 0 : 1, kind: 'caption', style: 'caption', sourceStart: 0, sourceEnd: 1, group: c.spread === 'left' ? 0 : 1,
252
+ text: [sampleText(c.spread === 'left' ? 'Meanwhile,' : 'far away.', x, p.bbox.y + 4)], bbox: { x, y: p.bbox.y + 4, width: 60, height: 14 } }];
253
+ }
254
+ }
255
+ return docs;
256
+ }
166
257
  //# sourceMappingURL=sampleBook.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sampleBook.js","sourceRoot":"","sources":["../../src/__tests__/sampleBook.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AAEtE,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,wEAAwE;AACxE,4CAA4C;AAC5C,MAAM,OAAO;IACX,IAAI,GAAG,EAAE,CAAC;IACV,aAAa,GAAG,KAAK,CAAC;IACtB,WAAW,CAAC,CAAS;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO;YACL,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,GAAG;YACjC,uBAAuB,EAAE,IAAI,GAAG,GAAG;YACnC,wBAAwB,EAAE,IAAI,GAAG,GAAG;YACpC,qBAAqB,EAAE,IAAI,GAAG,GAAG;YACjC,sBAAsB,EAAE,IAAI,GAAG,GAAG;SACnC,CAAC;IACJ,CAAC;CACF;AACA,UAAsD,CAAC,eAAe,GAAG;IACxE,UAAU;QACR,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,oDAAoD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpI,WAAW;AACX,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kGAAkG,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE9J,MAAM,EAAE,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAa,EAAE,CAAC,CAAC;AAE/D,MAAM,MAAM,GAAkB;IAC5B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAChH,MAAM,EAAE,OAAO;IACf,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc;gBAC1F,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;aACpG,CAAC;KACH;CACF,CAAC;AAEF,MAAM,SAAS,GAAe,CAAC;QAC7B,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,uBAAuB;QAChC,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;KACrE,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,mGAAmG,CAAC;AACjH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,CAAC,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,8BAA8B,EAAE,EAAE,EAAE,sDAAsD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACzP,CAAC,kBAAkB,EAAE,EAAE,EAAE,oCAAoC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACjJ,CAAC;AAEF,MAAM,UAAU,UAAU;IACxB,OAAO,WAAW,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AACzG,CAAC;AAED;uBACuB;AACvB,MAAM,UAAU,UAAU,CAAC,QAAkB,EAAE,YAA2B,EAAE;IAC1E,OAAO,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,CAAC,CAAC;AACpH,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,qEAAqE,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEtJ;;;qBAGqB;AACrB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B;QACE,eAAe;QACf,EAAE;QACF,8DAA8D,mFAAmF,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC7J,EAAE;QACF,0DAA0D;QAC1D,EAAE;QACF,wBAAwB;QACxB,sCAAsC;QACtC,gCAAgC;QAChC,KAAK;QACL,EAAE;QACF,wBAAwB;QACxB,gDAAgD;QAChD,KAAK;QACL,EAAE;QACF,qBAAqB;KACtB,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,CAAC,gBAAgB,EAAE,EAAE,EAAE,yDAAyD,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACxG,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,WAAW,CAAC;QACjB,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,MAAM,EAAE;YACN,GAAG,MAAM;YACT,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;YACvD,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE;YACjC,SAAS,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;SAC1D;KACF,CAAC,CAAC;AACL,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC;IACjC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACvE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CAC/C,CAAC,CAAC;AAEH,MAAM,cAAc,GAAe;IACjC;QACE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,qCAAqC;QACxH,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;KACnI;IACD;QACE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,8BAA8B;QACpH,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,oCAAoC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;KAC3I;IACD;QACE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,4BAA4B;QAC9G,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,8BAA8B,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;KACxI;IACD;QACE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,0BAA0B;QAC/G,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;QAC1B,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,4CAA4C,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;KACnJ;CACF,CAAC;AAEF;;qBAEqB;AACrB,MAAM,UAAU,eAAe,CAAC,YAA2B,EAAE;IAC3D,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,oHAAoH,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvM,OAAO,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AACnH,CAAC;AAED;;;oEAGoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B;QACE,YAAY;QACZ,EAAE;QACF,uEAAuE,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACnG,EAAE;QACF,kFAAkF;QAClF,EAAE;QACF,8CAA8C,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACxE,EAAE;QACF,mBAAmB;KACpB,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,CAAC,YAAY,EAAE,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC5D,CAAC;AAEF,MAAM,UAAU,kBAAkB;IAChC,OAAO,WAAW,CAAC;QACjB,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7D,MAAM,EAAE;YACN,GAAG,MAAM;YACT,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE;YACtC,IAAI,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;SAC3C;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"sampleBook.js","sourceRoot":"","sources":["../../src/__tests__/sampleBook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=comic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comic.test.d.ts","sourceRoot":"","sources":["../src/comic.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,201 @@
1
+ // Comic pages in both renditions (#565): the fixed layout's region-based
2
+ // navigation, page progression and Kindle panel view; the reflowable
3
+ // book's cropped panels and dialogue.
4
+ import { describe, it, expect, beforeAll } from 'vitest';
5
+ import { renderToEpub, readEpub } from './index';
6
+ import { buildOpf } from './package/pack';
7
+ import { buildFixedPublication } from './fixed/index';
8
+ import { percentRect } from './fixed/regions';
9
+ import { PNG, comicSampleBook, sampleBook, stripSpreadSampleBook } from './__tests__/sampleBook';
10
+ const options = (layout, extra = {}) => ({
11
+ layout,
12
+ metadata: { title: 'A comic', language: 'en', modified: new Date(Date.UTC(2026, 9, 7)) },
13
+ resourceBytes: (fileId) => (fileId === 'f1.png' ? { bytes: PNG, mediaType: 'image/png' } : undefined),
14
+ ...extra,
15
+ });
16
+ const text = (book, path) => new TextDecoder().decode(book.files.get(path));
17
+ describe('fixed layout of comic pages', () => {
18
+ let docs;
19
+ let book;
20
+ let opf;
21
+ beforeAll(async () => {
22
+ docs = comicSampleBook();
23
+ book = readEpub(await renderToEpub(docs, options('fixed')));
24
+ opf = text(book, 'OEBPS/content.opf');
25
+ });
26
+ it('takes one document as well as a chain, as renderToPdf does', async () => {
27
+ const one = readEpub(await renderToEpub(docs[0], options('fixed')));
28
+ expect(one.files.has('OEBPS/content.opf')).toBe(true);
29
+ });
30
+ it('declares one data navigation document, out of the spine', () => {
31
+ expect(opf).toMatch(/<item id="regions" href="regions.xhtml" media-type="application\/xhtml\+xml" properties="data-nav"\/>/);
32
+ expect(book.spine.some((s) => s.path.endsWith('regions.xhtml'))).toBe(false);
33
+ });
34
+ it('lists the panels in reading order with their balloons nested, as rectangles in percent of the page', () => {
35
+ const nav = text(book, 'OEBPS/regions.xhtml');
36
+ expect(nav).toContain('<nav epub:type="region-based" id="regions">');
37
+ const page = docs[0].pages.find((p) => p.comic);
38
+ const file = book.spine[page.index].path.replace('OEBPS/', '');
39
+ const panels = [...nav.matchAll(/<li epub:type="panel"><a href="([^"]+)"><\/a>/g)];
40
+ expect(panels).toHaveLength(3);
41
+ for (const m of panels)
42
+ expect(m[1]).toMatch(new RegExp(`^${file}#xywh=percent:[0-9.]+,[0-9.]+,[0-9.]+,[0-9.]+$`));
43
+ // Panel 1: its bounding box on the 360 × 480 pt page (480 × 640 px).
44
+ const p0 = page.comic.panels[0].bbox;
45
+ const r = percentRect(p0, { width: 480, height: 640, scale: 480 / page.width, offset: 0 });
46
+ expect(panels[0][1]).toBe(`${file}#xywh=percent:${Math.round(r.x * 100) / 100},${Math.round(r.y * 100) / 100},${Math.round(r.w * 100) / 100},${Math.round(r.h * 100) / 100}`);
47
+ // Balloons in the panel's region, in reading order, by kind.
48
+ const first = /<li epub:type="panel">[\s\S]*?<\/li>\n<\/ol>\n<\/li>/.exec(nav)[0];
49
+ expect([...first.matchAll(/<li epub:type="([\w-]+)">/g)].map((m) => m[1])).toEqual(['panel', 'balloon', 'balloon']);
50
+ const b1 = page.comic.balloons[0].bbox;
51
+ const rb = percentRect(b1, { width: 480, height: 640, scale: 480 / page.width, offset: 0 });
52
+ expect(first).toContain(`#xywh=percent:${Math.round(rb.x * 100) / 100},${Math.round(rb.y * 100) / 100},`);
53
+ expect(nav).toContain('<li epub:type="text-area"><a');
54
+ expect(nav).toContain('<li epub:type="sound-area"><a');
55
+ });
56
+ it('sets the comic in the page document as XHTML, panels as figures with their lettering after them', () => {
57
+ const page = docs[0].pages.find((p) => p.comic);
58
+ const xhtml = text(book, book.spine[page.index].path);
59
+ expect(xhtml).toContain('<div class="pt-comic"');
60
+ expect(xhtml).toMatch(/<svg xmlns="http:\/\/www.w3.org\/2000\/svg" class="pt-comic-art"/);
61
+ expect(xhtml).toContain('href="../images/f1.png"');
62
+ expect(xhtml).toMatch(/<p class="pt-comic-balloon" data-balloon="b1"/);
63
+ expect(xhtml).not.toContain('app-amzn-magnify');
64
+ // The book turns its pages left to right.
65
+ expect(book.pageProgression).toBe('ltr');
66
+ });
67
+ it('turns the pages of a right-to-left comic right to left, and says so to Kindle', async () => {
68
+ const rtl = comicSampleBook('rtl');
69
+ const pub = await buildFixedPublication(rtl, options('fixed'));
70
+ expect(pub.pageProgression).toBe('rtl');
71
+ expect(pub.writingMode).toBe('horizontal-rl');
72
+ const out = buildOpf(pub);
73
+ expect(out).toContain('page-progression-direction="rtl"');
74
+ expect(out).toContain('<meta name="primary-writing-mode" content="horizontal-rl"/>');
75
+ // The panels read from the right: the second one sits left of the first.
76
+ const c = rtl[0].pages.find((p) => p.comic).comic;
77
+ expect(c.panels[1].bbox.x).toBeLessThan(c.panels[0].bbox.x);
78
+ });
79
+ it('adds Kindle panel view on request: a tap target and a hidden magnified copy per panel', async () => {
80
+ const pub = await buildFixedPublication(docs, options('fixed', { kindlePanelView: true }));
81
+ const page = docs[0].pages.find((p) => p.comic);
82
+ const item = pub.items.find((i) => i.href === `pages/page-${String(page.index + 1).padStart(4, '0')}.xhtml`);
83
+ const xhtml = item.data;
84
+ const taps = [...xhtml.matchAll(/data-app-amzn-magnify="([^"]+)"/g)].map((m) => JSON.parse(m[1].replace(/&quot;/g, '"')));
85
+ expect(taps).toEqual([
86
+ { targetId: `mag-${page.index}-0-target`, ordinal: 1 },
87
+ { targetId: `mag-${page.index}-1-target`, ordinal: 2 },
88
+ { targetId: `mag-${page.index}-2-target`, ordinal: 3 },
89
+ ]);
90
+ expect(xhtml).toContain(`id="mag-${page.index}-0-target" class="target-mag-parent" aria-hidden="true"`);
91
+ // Copies keep their ids apart.
92
+ const ids = [...xhtml.matchAll(/\sid="([^"]+)"/g)].map((m) => m[1]);
93
+ expect(new Set(ids).size).toBe(ids.length);
94
+ const out = buildOpf(pub);
95
+ expect(out).toContain('<meta name="book-type" content="comic"/>');
96
+ expect(out).toContain('<meta name="RegionMagnification" content="true"/>');
97
+ expect(out).toMatch(/<meta name="original-resolution" content="\d+x\d+"\/>/);
98
+ const css = pub.items.find((i) => i.href === 'styles/fixed.css').data;
99
+ expect(css).toContain('.target-mag-parent { display: none; }');
100
+ });
101
+ it('leaves a book without comics as it was', async () => {
102
+ const pub = await buildFixedPublication(sampleBook(), options('fixed', { kindlePanelView: true }));
103
+ expect(pub.items.some((i) => i.id === 'regions')).toBe(false);
104
+ expect(pub.kindle).toBeUndefined();
105
+ expect(pub.writingMode).toBeUndefined();
106
+ });
107
+ });
108
+ describe('reflowable comic pages', () => {
109
+ let chapter;
110
+ beforeAll(async () => {
111
+ const book = readEpub(await renderToEpub(comicSampleBook(), options('reflowable')));
112
+ const path = book.spine.find((s) => s.path.includes('chapter')).path;
113
+ chapter = text(book, path);
114
+ });
115
+ it('sets each panel as its picture cropped to the panel, then its lettering as text', () => {
116
+ const section = /<section class="pt-comic">[\s\S]*?<\/section>/.exec(chapter)[0];
117
+ const order = [...section.matchAll(/<figure class="pt-comic-panel"|<p class="(pt-comic-[a-z]+)">([\s\S]*?)<\/p>/g)]
118
+ .map((m) => (m[1] ? `${m[1]}: ${m[2]}` : 'figure'));
119
+ expect(order).toEqual([
120
+ 'figure',
121
+ 'pt-comic-line: <b>Ana</b>: Did you hear',
122
+ 'pt-comic-line: <b>Ana</b>: that?',
123
+ 'figure',
124
+ 'pt-comic-caption: Lyon, 1943.',
125
+ 'pt-comic-sfx: <i>KRAK</i>',
126
+ 'figure',
127
+ ]);
128
+ // The picture: an SVG of the panel (its view box), the whole picture
129
+ // drawn at its box and clipped, named by its text alternative.
130
+ expect(section).toMatch(/<svg xmlns="http:\/\/www.w3.org\/2000\/svg" xmlns:xlink="http:\/\/www.w3.org\/1999\/xlink" width="[0-9.]+" height="[0-9.]+" viewBox="[0-9. ]+" role="img" aria-label="Ana at the door">/);
131
+ expect(section).toContain('xlink:href="../images/f1.png"');
132
+ expect(section).toContain('<clipPath id="comic-clip-1">');
133
+ expect(section).toContain('scale(-1 1)');
134
+ // Text before and after the page keeps its place.
135
+ expect(chapter.indexOf('Before the page.')).toBeLessThan(chapter.indexOf('pt-comic'));
136
+ expect(chapter.indexOf('After the page.')).toBeGreaterThan(chapter.indexOf('</section>\n<p'));
137
+ });
138
+ it('links a panel anchor', () => {
139
+ expect(chapter).toContain('<figure class="pt-comic-panel" id="a-first">');
140
+ });
141
+ });
142
+ describe('strips and spreads in both renditions', () => {
143
+ let docs;
144
+ let fixed;
145
+ let flow;
146
+ beforeAll(async () => {
147
+ docs = stripSpreadSampleBook();
148
+ fixed = readEpub(await renderToEpub(docs, options('fixed')));
149
+ flow = readEpub(await renderToEpub(docs, options('reflowable')));
150
+ });
151
+ it('sets the strip on its page and lists its panels as regions', () => {
152
+ const page = docs[0].pages.find((p) => p.columns.some((c) => c.blocks.some((b) => b.comic)));
153
+ const xhtml = text(fixed, fixed.spine[page.index].path);
154
+ expect(xhtml).toContain('<div class="pt-comic"');
155
+ expect(xhtml).toContain('aria-label="The second panel of the strip"');
156
+ const nav = text(fixed, 'OEBPS/regions.xhtml');
157
+ const file = fixed.spine[page.index].path.replace('OEBPS/', '');
158
+ expect(nav.split(`<li epub:type="panel"><a href="${file}#`).length - 1).toBe(2);
159
+ });
160
+ it('gives a panel across a spread\'s spine one region of two rectangles, its balloons on their pages, in reading order', () => {
161
+ const [l, r] = docs[0].pages.filter((p) => p.comic);
162
+ const lf = fixed.spine[l.index].path.replace('OEBPS/', '');
163
+ const rf = fixed.spine[r.index].path.replace('OEBPS/', '');
164
+ const nav = text(fixed, 'OEBPS/regions.xhtml');
165
+ const spread = nav.slice(nav.lastIndexOf("<li epub:type=\"panel\">", nav.indexOf(lf)));
166
+ // Panels 0 and 2 cross the spine.
167
+ const heads = [...spread.matchAll(/<li epub:type="panel">(<span>(?:<a [^>]*><\/a>)+<\/span>|<a [^>]*><\/a>)/g)].map((m) => m[1]);
168
+ expect(heads).toHaveLength(4);
169
+ expect(heads[0]).toMatch(new RegExp(`^<span><a href="${lf}#[^"]+"></a><a href="${rf}#[^"]+"></a></span>$`));
170
+ expect(heads[1]).toContain(lf);
171
+ expect(heads[2]).toMatch(/^<span>/);
172
+ expect(heads[3]).toContain(rf);
173
+ const third = spread.slice(spread.indexOf(heads[2]));
174
+ const kids = third.slice(0, third.indexOf('</ol>'));
175
+ expect([...kids.matchAll(/<li epub:type="text-area"><a href="([^#]+)#/g)].map((m) => m[1])).toEqual([lf, rf]);
176
+ // The right page's half of panel 2 is no figure of its own.
177
+ expect(text(fixed, fixed.spine[r.index].path)).not.toContain('aria-label="Across the spine"');
178
+ expect(text(fixed, fixed.spine[l.index].path)).toContain('aria-label="Across the spine"');
179
+ });
180
+ it('reads the strip in the text and the spread as one comic in the reflowable book', () => {
181
+ const chapter = text(flow, flow.spine.find((s) => s.path.includes('chapter')).path);
182
+ const sections = [...chapter.matchAll(/<section class="pt-comic">[\s\S]*?<\/section>/g)].map((m) => m[0]);
183
+ expect(sections).toHaveLength(2);
184
+ const [strip, spread] = sections;
185
+ expect(chapter.indexOf('Before the strip.')).toBeLessThan(chapter.indexOf(strip));
186
+ expect(chapter.indexOf('After the strip.')).toBeGreaterThan(chapter.indexOf(strip));
187
+ expect(strip.match(/<figure/g)).toHaveLength(2);
188
+ // The spread: panels 0 and 2 whole (art), the captions of both pages
189
+ // after panel 2, once each.
190
+ expect(spread.match(/<figure/g)).toHaveLength(2);
191
+ expect(spread.match(/aria-label="Across the spine"/g)).toHaveLength(1);
192
+ const order = [...spread.matchAll(/<figure|<p class="pt-comic-caption">([^<]*)/g)].map((m) => m[1] ?? 'figure');
193
+ expect(order).toEqual(['figure', 'figure', 'Meanwhile,', 'far away.']);
194
+ // A whole panel: its view box runs across the spine.
195
+ const [l] = docs[0].pages.filter((p) => p.comic);
196
+ const half = l.comic.panels.find((p) => p.index === 2);
197
+ const box = /aria-label="Across the spine"/.test(spread) ? /viewBox="([0-9. -]+)" role="img" aria-label="Across the spine"/.exec(spread)[1].split(' ').map(Number) : [];
198
+ expect(box[2]).toBeGreaterThan(half.bbox.width + 10);
199
+ });
200
+ });
201
+ //# sourceMappingURL=comic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comic.test.js","sourceRoot":"","sources":["../src/comic.test.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import fs from 'node:fs';
8
8
  import os from 'node:os';
9
9
  import path from 'node:path';
10
10
  import { renderToEpub } from './index';
11
- import { AMIRI, LORA, MP4, PNG, arabicSampleBook, sampleBook, videoSampleBook, japaneseSampleBook } from './__tests__/sampleBook';
11
+ import { AMIRI, LORA, MP4, PNG, arabicSampleBook, comicSampleBook, sampleBook, stripSpreadSampleBook, videoSampleBook, japaneseSampleBook } from './__tests__/sampleBook';
12
12
  const available = process.env.EPUBCHECK === '1' && spawnSync('epubcheck', ['--version'], { encoding: 'utf8' }).status === 0;
13
13
  function epubcheck(file) {
14
14
  const out = spawnSync('epubcheck', ['--json', '-', file], { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 });
@@ -63,6 +63,14 @@ const samples = [
63
63
  { name: 'video-alongside-fixed', options: video('fixed'), book: () => videoSampleBook({ videoStyle: { player: { exclusive: false } } }) },
64
64
  { name: 'japanese-fixed', options: japanese('fixed'), book: japaneseSampleBook },
65
65
  { name: 'japanese-reflowable', options: japanese('reflowable'), book: japaneseSampleBook },
66
+ // Comic pages (#565): region-based navigation, a right-to-left comic
67
+ // with Kindle panel view, the reflowable panels and dialogue.
68
+ { name: 'comic-fixed', options: base('fixed'), book: comicSampleBook },
69
+ { name: 'comic-rtl-kindle-fixed', options: { ...base('fixed'), kindlePanelView: true }, book: () => comicSampleBook('rtl') },
70
+ { name: 'comic-reflowable', options: base('reflowable'), book: comicSampleBook },
71
+ // A strip in the text and a two-page spread (#566, #567).
72
+ { name: 'strip-spread-fixed', options: { ...base('fixed'), kindlePanelView: true }, book: stripSpreadSampleBook },
73
+ { name: 'strip-spread-reflowable', options: base('reflowable'), book: stripSpreadSampleBook },
66
74
  ];
67
75
  describe.skipIf(!available)('EPUBCheck', () => {
68
76
  const dir = process.env.EPUBCHECK_OUT ?? fs.mkdtempSync(path.join(os.tmpdir(), 'postext-epub-'));
@@ -1 +1 @@
1
- {"version":3,"file":"epubcheck.test.js","sourceRoot":"","sources":["../src/epubcheck.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"epubcheck.test.js","sourceRoot":"","sources":["../src/epubcheck.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixed/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAIV,eAAe,EACf,UAAU,EAEV,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAkFlB;;kEAEkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+MpH"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixed/index.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAIV,eAAe,EACf,UAAU,EAEV,mBAAmB,EACpB,MAAM,UAAU,CAAC;AA6FlB;;kEAEkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAuOpH"}
@@ -6,7 +6,7 @@
6
6
  // OEBPS/pages/cover.xhtml when a cover picture is given
7
7
  // OEBPS/styles/fixed.css @font-face + the text reset
8
8
  // OEBPS/fonts/…, OEBPS/images/… shared assets (shared/assets.ts)
9
- import { anchoredResourceIds, canonicalLocaleTag, directionOf, HTML_TEXT_RESET, renderToHtmlIndexed, } from 'postext';
9
+ import { anchoredResourceIds, canonicalLocaleTag, directionOf, HTML_TEXT_RESET, pageComics, renderToHtmlIndexed, } from 'postext';
10
10
  import { defaultAccessibility } from '../shared/accessibility';
11
11
  import { fontAssets, imageAssets, pageProgressionOf, remoteVideoItems, videoAssets } from '../shared/assets';
12
12
  import { decodeEntities, escapeAttr, escapeXml, htmlToXhtml, xhtmlDocument, xmlId } from '../shared/xml';
@@ -14,6 +14,7 @@ import { videoScriptItem, VIDEO_SCRIPT_HREF, withVideoScript } from '../shared/v
14
14
  import { navStrings } from '../package/strings';
15
15
  import { fontUses, missingFaces } from './fontUse';
16
16
  import { contentsRows, headingTitle, nestOutline, pageHeadings, partTitle } from './outline';
17
+ import { comicDirectionOf, kindlePanelMarkup, regionNavItem } from './regions';
17
18
  /** Directory of the page documents, relative to the package document. */
18
19
  const PAGES_DIR = 'pages/';
19
20
  const STYLESHEET_HREF = 'styles/fixed.css';
@@ -59,6 +60,13 @@ const rowLink = (href, label, b) => `<a class="pt-toc-link" href="${escapeAttr(h
59
60
  `style="position:absolute;left:${num(b.x)}px;top:${num(b.y)}px;width:${num(b.width)}px;height:${num(b.height)}px;z-index:1;"></a>`;
60
61
  /** A zero-size anchor at a point of the page (an outline target). */
61
62
  const anchorAt = (id, x, y) => `<span id="${escapeAttr(id)}" style="position:absolute;left:${num(x)}px;top:${num(y)}px;width:0;height:0;"></span>`;
63
+ /** Markup with every id it sets (and every `url(#…)` reference to one)
64
+ * suffixed: a copy of a page's comic that lives on the same page. */
65
+ function withIdSuffix(html, suffix) {
66
+ return html
67
+ .replace(/\sid="([^"]*)"/g, (_, id) => ` id="${id}${suffix}"`)
68
+ .replace(/url\(#([^)]+)\)/g, (_, id) => `url(#${id}${suffix})`);
69
+ }
62
70
  /** The HTML player attributes no EPUB schema knows (`controlslist`, the
63
71
  * Remote Playback and Picture-in-Picture switches) dropped: EPUBCheck
64
72
  * rejects them, and reading systems offer their own controls. */
@@ -70,7 +78,9 @@ export function epubVideoMarkup(html) {
70
78
  export async function buildFixedPublication(docs, options) {
71
79
  const { metadata, onWarning, onProgress, signal } = options;
72
80
  const strings = navStrings(metadata.language);
73
- const progression = pageProgressionOf(docs);
81
+ // A book of comic pages turns its pages the way they read (a manga
82
+ // right to left in any language); other books follow their binding.
83
+ const progression = comicDirectionOf(docs) ?? pageProgressionOf(docs);
74
84
  // Fonts and pictures first: the pages link to their files.
75
85
  const fonts = fontAssets(options.fonts ?? []);
76
86
  const images = await imageAssets(docs, options.resourceBytes, onWarning);
@@ -139,18 +149,23 @@ export async function buildFixedPublication(docs, options) {
139
149
  for (const id of ids)
140
150
  if (!fileOfId.has(id))
141
151
  fileOfId.set(id, file);
142
- plans.push({ doc, page, bookIndex, file, html, ids, outline, lang });
152
+ const comicHtml = rendered.pages[i]?.comicHtml;
153
+ plans.push({ doc, page, bookIndex, file, html, ids, outline, lang, ...(comicHtml ? { comicHtml } : {}) });
143
154
  bookIndex++;
144
155
  }
145
156
  signal?.throwIfAborted();
146
157
  }
158
+ // Kindle Panel View (opt-in): tap targets over the panels of comic pages.
159
+ const kindle = options.kindlePanelView === true && plans.some((p) => p.page.comic);
160
+ const comicPlans = [];
147
161
  // Pass 2: the content documents.
148
162
  const css = `@charset "UTF-8";\n` +
149
163
  fonts.css +
150
164
  `html, body { margin: 0; padding: 0; }\n` +
151
165
  `body { position: relative; overflow: hidden; }\n` +
152
166
  `.pt-page { position: absolute; left: 0; top: 0; overflow: hidden; transform-origin: 0 0; ${TEXT_RESET} }\n` +
153
- `.pt-cover { display: block; width: 100%; height: 100%; object-fit: contain; }\n`;
167
+ `.pt-cover { display: block; width: 100%; height: 100%; object-fit: contain; }\n` +
168
+ (kindle ? `.target-mag-parent { display: none; }\n` : '');
154
169
  const pageItems = [];
155
170
  const spine = [];
156
171
  const pageList = [];
@@ -183,6 +198,15 @@ export async function buildFixedPublication(docs, options) {
183
198
  const bg = background && background !== 'transparent' ? `background:${background};` : '';
184
199
  const pageStyle = `width:${num(page.width)}px;height:${num(page.height)}px;${bg}` +
185
200
  `transform:scale(${num(geo.scale)})${geo.offset ? ` translate(-${num(geo.offset)}px,-${num(geo.offset)}px)` : ''};`;
201
+ let magnify = '';
202
+ const comics = pageComics(page);
203
+ if (comics.length > 0)
204
+ comicPlans.push({ href: `${PAGES_DIR}${file}`, comics, geo });
205
+ if (page.comic && kindle && plan.comicHtml) {
206
+ const comicHtml = plan.comicHtml;
207
+ const raw = kindlePanelMarkup(page, geo, (suffix) => withIdSuffix(comicHtml, suffix));
208
+ magnify = htmlToXhtml(raw, { ids, hoistStyle: (s) => styles.push(s) });
209
+ }
186
210
  const label = page.pageLabel || String(plan.bookIndex + 1);
187
211
  // A page with videos to coordinate links the playback script (#507).
188
212
  const xhtml = withVideoScript(xhtmlDocument({
@@ -193,7 +217,7 @@ export async function buildFixedPublication(docs, options) {
193
217
  `<link rel="stylesheet" type="text/css" href="../${STYLESHEET_HREF}"/>\n` +
194
218
  (styles.length ? `<style>${escapeXml(styles.join('\n'))}</style>\n` : ''),
195
219
  bodyAttrs: ` style="width:${geo.width}px;height:${geo.height}px;${bg}"`,
196
- body: `<div class="pt-page" id="${escapeAttr(plan.ids[0])}" dir="${pageDir(doc)}" style="${pageStyle}">${body}</div>`,
220
+ body: `<div class="pt-page" id="${escapeAttr(plan.ids[0])}" dir="${pageDir(doc)}" style="${pageStyle}">${body}</div>${magnify}`,
197
221
  }), `../${VIDEO_SCRIPT_HREF}`);
198
222
  if (xhtml.includes('<script'))
199
223
  scripted = true;
@@ -253,6 +277,11 @@ export async function buildFixedPublication(docs, options) {
253
277
  const target = bodyStart ? `${PAGES_DIR}${bodyStart.file}${bodyStart.anchorId ? `#${bodyStart.anchorId}` : ''}` : `${PAGES_DIR}${first.file}`;
254
278
  landmarks.push({ type: 'bodymatter', label: strings.bodymatter, href: target });
255
279
  }
280
+ // Region-based navigation of the comic pages: panels in reading order,
281
+ // their balloons in them.
282
+ const regions = regionNavItem(comicPlans, metadata.language, metadata.title);
283
+ if (regions)
284
+ items.push(regions);
256
285
  items.push({ id: 'style', href: STYLESHEET_HREF, mediaType: 'text/css', data: css });
257
286
  items.push(...fonts.items, ...imageItems, ...pageItems);
258
287
  if (scripted)
@@ -268,6 +297,9 @@ export async function buildFixedPublication(docs, options) {
268
297
  pageList,
269
298
  landmarks,
270
299
  pageProgression: progression,
300
+ // Manga: Kindle reads the page progression from the writing mode.
301
+ ...(comicPlans.length > 0 && progression === 'rtl' && !docs.some((d) => d.config.layout.writingMode === 'vertical-rl') ? { writingMode: 'horizontal-rl' } : {}),
302
+ ...(kindle ? { kindle: { comic: true, originalResolution: { width: firstGeo.width, height: firstGeo.height }, regionMagnification: true } } : {}),
271
303
  fixed: { spread: 'landscape', orientation: 'auto', viewport: { width: firstGeo.width, height: firstGeo.height } },
272
304
  accessibility: defaultAccessibility({
273
305
  layout: 'fixed',