postext-epub 0.1.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/dist/__tests__/sampleBook.d.ts +17 -0
  4. package/dist/__tests__/sampleBook.d.ts.map +1 -0
  5. package/dist/__tests__/sampleBook.js +103 -0
  6. package/dist/__tests__/sampleBook.js.map +1 -0
  7. package/dist/epubcheck.test.d.ts +2 -0
  8. package/dist/epubcheck.test.d.ts.map +1 -0
  9. package/dist/epubcheck.test.js +69 -0
  10. package/dist/epubcheck.test.js.map +1 -0
  11. package/dist/fixed/fixed.test.d.ts +2 -0
  12. package/dist/fixed/fixed.test.d.ts.map +1 -0
  13. package/dist/fixed/fixed.test.js +225 -0
  14. package/dist/fixed/fixed.test.js.map +1 -0
  15. package/dist/fixed/fontUse.d.ts +21 -0
  16. package/dist/fixed/fontUse.d.ts.map +1 -0
  17. package/dist/fixed/fontUse.js +82 -0
  18. package/dist/fixed/fontUse.js.map +1 -0
  19. package/dist/fixed/index.d.ts +3 -0
  20. package/dist/fixed/index.d.ts.map +1 -0
  21. package/dist/fixed/index.js +254 -0
  22. package/dist/fixed/index.js.map +1 -0
  23. package/dist/fixed/outline.d.ts +40 -0
  24. package/dist/fixed/outline.d.ts.map +1 -0
  25. package/dist/fixed/outline.js +88 -0
  26. package/dist/fixed/outline.js.map +1 -0
  27. package/dist/index.d.ts +17 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +29 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/package/pack.d.ts +25 -0
  32. package/dist/package/pack.d.ts.map +1 -0
  33. package/dist/package/pack.js +253 -0
  34. package/dist/package/pack.js.map +1 -0
  35. package/dist/package/pack.test.d.ts +2 -0
  36. package/dist/package/pack.test.d.ts.map +1 -0
  37. package/dist/package/pack.test.js +164 -0
  38. package/dist/package/pack.test.js.map +1 -0
  39. package/dist/package/read.d.ts +15 -0
  40. package/dist/package/read.d.ts.map +1 -0
  41. package/dist/package/read.js +198 -0
  42. package/dist/package/read.js.map +1 -0
  43. package/dist/package/strings.d.ts +17 -0
  44. package/dist/package/strings.d.ts.map +1 -0
  45. package/dist/package/strings.js +24 -0
  46. package/dist/package/strings.js.map +1 -0
  47. package/dist/reflowable/__tests__/vdt.d.ts +13 -0
  48. package/dist/reflowable/__tests__/vdt.d.ts.map +1 -0
  49. package/dist/reflowable/__tests__/vdt.js +55 -0
  50. package/dist/reflowable/__tests__/vdt.js.map +1 -0
  51. package/dist/reflowable/__tests__/xml.d.ts +8 -0
  52. package/dist/reflowable/__tests__/xml.d.ts.map +1 -0
  53. package/dist/reflowable/__tests__/xml.js +107 -0
  54. package/dist/reflowable/__tests__/xml.js.map +1 -0
  55. package/dist/reflowable/css.d.ts +45 -0
  56. package/dist/reflowable/css.d.ts.map +1 -0
  57. package/dist/reflowable/css.js +491 -0
  58. package/dist/reflowable/css.js.map +1 -0
  59. package/dist/reflowable/index.d.ts +4 -0
  60. package/dist/reflowable/index.d.ts.map +1 -0
  61. package/dist/reflowable/index.js +257 -0
  62. package/dist/reflowable/index.js.map +1 -0
  63. package/dist/reflowable/inline.d.ts +56 -0
  64. package/dist/reflowable/inline.d.ts.map +1 -0
  65. package/dist/reflowable/inline.js +334 -0
  66. package/dist/reflowable/inline.js.map +1 -0
  67. package/dist/reflowable/model.d.ts +261 -0
  68. package/dist/reflowable/model.d.ts.map +1 -0
  69. package/dist/reflowable/model.js +6 -0
  70. package/dist/reflowable/model.js.map +1 -0
  71. package/dist/reflowable/reflowable.test.d.ts +2 -0
  72. package/dist/reflowable/reflowable.test.d.ts.map +1 -0
  73. package/dist/reflowable/reflowable.test.js +469 -0
  74. package/dist/reflowable/reflowable.test.js.map +1 -0
  75. package/dist/reflowable/rtl.test.d.ts +2 -0
  76. package/dist/reflowable/rtl.test.d.ts.map +1 -0
  77. package/dist/reflowable/rtl.test.js +217 -0
  78. package/dist/reflowable/rtl.test.js.map +1 -0
  79. package/dist/reflowable/walk.d.ts +42 -0
  80. package/dist/reflowable/walk.d.ts.map +1 -0
  81. package/dist/reflowable/walk.js +1096 -0
  82. package/dist/reflowable/walk.js.map +1 -0
  83. package/dist/reflowable/xhtml.d.ts +33 -0
  84. package/dist/reflowable/xhtml.d.ts.map +1 -0
  85. package/dist/reflowable/xhtml.js +472 -0
  86. package/dist/reflowable/xhtml.js.map +1 -0
  87. package/dist/shared/accessibility.d.ts +20 -0
  88. package/dist/shared/accessibility.d.ts.map +1 -0
  89. package/dist/shared/accessibility.js +30 -0
  90. package/dist/shared/accessibility.js.map +1 -0
  91. package/dist/shared/assets.d.ts +46 -0
  92. package/dist/shared/assets.d.ts.map +1 -0
  93. package/dist/shared/assets.js +143 -0
  94. package/dist/shared/assets.js.map +1 -0
  95. package/dist/shared/assets.test.d.ts +2 -0
  96. package/dist/shared/assets.test.d.ts.map +1 -0
  97. package/dist/shared/assets.test.js +106 -0
  98. package/dist/shared/assets.test.js.map +1 -0
  99. package/dist/shared/media.d.ts +11 -0
  100. package/dist/shared/media.d.ts.map +1 -0
  101. package/dist/shared/media.js +52 -0
  102. package/dist/shared/media.js.map +1 -0
  103. package/dist/shared/uuid.d.ts +7 -0
  104. package/dist/shared/uuid.d.ts.map +1 -0
  105. package/dist/shared/uuid.js +63 -0
  106. package/dist/shared/uuid.js.map +1 -0
  107. package/dist/shared/xml.d.ts +54 -0
  108. package/dist/shared/xml.d.ts.map +1 -0
  109. package/dist/shared/xml.js +214 -0
  110. package/dist/shared/xml.js.map +1 -0
  111. package/dist/shared/xml.test.d.ts +2 -0
  112. package/dist/shared/xml.test.d.ts.map +1 -0
  113. package/dist/shared/xml.test.js +71 -0
  114. package/dist/shared/xml.test.js.map +1 -0
  115. package/dist/shared/xmlRead.d.ts +19 -0
  116. package/dist/shared/xmlRead.d.ts.map +1 -0
  117. package/dist/shared/xmlRead.js +85 -0
  118. package/dist/shared/xmlRead.js.map +1 -0
  119. package/dist/types.d.ts +205 -0
  120. package/dist/types.d.ts.map +1 -0
  121. package/dist/types.js +15 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/worker/client.d.ts +39 -0
  124. package/dist/worker/client.d.ts.map +1 -0
  125. package/dist/worker/client.js +184 -0
  126. package/dist/worker/client.js.map +1 -0
  127. package/dist/worker/epub.worker.d.ts +2 -0
  128. package/dist/worker/epub.worker.d.ts.map +1 -0
  129. package/dist/worker/epub.worker.js +7 -0
  130. package/dist/worker/epub.worker.js.map +1 -0
  131. package/dist/worker/protocol.d.ts +44 -0
  132. package/dist/worker/protocol.d.ts.map +1 -0
  133. package/dist/worker/protocol.js +6 -0
  134. package/dist/worker/protocol.js.map +1 -0
  135. package/dist/worker/serve.d.ts +11 -0
  136. package/dist/worker/serve.d.ts.map +1 -0
  137. package/dist/worker/serve.js +53 -0
  138. package/dist/worker/serve.js.map +1 -0
  139. package/dist/worker/worker.test.d.ts +2 -0
  140. package/dist/worker/worker.test.d.ts.map +1 -0
  141. package/dist/worker/worker.test.js +168 -0
  142. package/dist/worker/worker.test.js.map +1 -0
  143. package/package.json +68 -0
@@ -0,0 +1,254 @@
1
+ // Fixed-layout (pre-paginated) rendition: every printed page of the book
2
+ // becomes one XHTML content document that reproduces it with real text,
3
+ // from the same markup the HTML renderer gives the Sandbox.
4
+ //
5
+ // OEBPS/pages/page-0001.xhtml … one per page, viewport = page size
6
+ // OEBPS/pages/cover.xhtml when a cover picture is given
7
+ // OEBPS/styles/fixed.css @font-face + the text reset
8
+ // OEBPS/fonts/…, OEBPS/images/… shared assets (shared/assets.ts)
9
+ import { anchoredResourceIds, canonicalLocaleTag, directionOf, HTML_TEXT_RESET, renderToHtmlIndexed, } from 'postext';
10
+ import { defaultAccessibility } from '../shared/accessibility';
11
+ import { fontAssets, imageAssets, pageProgressionOf } from '../shared/assets';
12
+ import { decodeEntities, escapeAttr, escapeXml, htmlToXhtml, xhtmlDocument, xmlId } from '../shared/xml';
13
+ import { navStrings } from '../package/strings';
14
+ import { fontUses, missingFaces } from './fontUse';
15
+ import { contentsRows, headingTitle, nestOutline, pageHeadings, partTitle } from './outline';
16
+ /** Directory of the page documents, relative to the package document. */
17
+ const PAGES_DIR = 'pages/';
18
+ const STYLESHEET_HREF = 'styles/fixed.css';
19
+ /** CSS px per inch: the viewport is the page at its CSS size. */
20
+ const CSS_DPI = 96;
21
+ /** The engine's text reset without `direction`, which EPUB style sheets
22
+ * must not set: the page box takes a `dir` attribute instead, the
23
+ * document's direction (`pageDir`). */
24
+ const TEXT_RESET = HTML_TEXT_RESET.replace(/(?:^|;)direction:[^;]*;?/, ';').replace(/^;/, '');
25
+ /** The book language of a document: its configured locale, else the
26
+ * hyphenation one, else the book's. */
27
+ function docLanguage(doc, fallback) {
28
+ const c = doc.config;
29
+ return canonicalLocaleTag(c.locale) ?? canonicalLocaleTag(c.bodyText?.hyphenation?.tag) ?? fallback;
30
+ }
31
+ /** Whether any line of the documents sets a formula. */
32
+ function hasMath(docs) {
33
+ return docs.some((d) => d.pages.some((p) => [...p.columns.flatMap((c) => c.blocks), ...(p.floats ?? [])]
34
+ .some((b) => b.lines.some((l) => l.segments?.some((s) => s.mathRender !== undefined)))));
35
+ }
36
+ /** The trimmed page in CSS px: the viewport, and the scale and offset that
37
+ * map the renderer's page (VDT px at the page dpi, with the cut-line
38
+ * margin when the layout has one) onto it. */
39
+ function pageGeometry(doc, page) {
40
+ const offset = doc.trimOffset > 0 ? doc.trimOffset : 0;
41
+ const trimW = page.width - 2 * offset;
42
+ const trimH = page.height - 2 * offset;
43
+ const dpi = doc.config.page.dpi || CSS_DPI;
44
+ const width = Math.max(1, Math.round((trimW * CSS_DPI) / dpi));
45
+ const scale = width / trimW;
46
+ const height = Math.max(1, Math.round(trimH * scale));
47
+ return { width, height, scale, offset };
48
+ }
49
+ /** The direction of a page box: the one the renderer's root declares
50
+ * (#379). The word boxes of a right-to-left line resolve their neutrals —
51
+ * a comma, a bracket, a full stop — in it, so the page must not run left
52
+ * to right whatever its language. */
53
+ const pageDir = (doc) => (doc.config.direction === 'rtl' ? 'rtl' : 'ltr');
54
+ const num = (v) => String(Math.round(v * 10000) / 10000);
55
+ /** A link over a row of the printed contents to the page it lists (the
56
+ * row's text stays as the page prints it; the link is named after it). */
57
+ const rowLink = (href, label, b) => `<a class="pt-toc-link" href="${escapeAttr(href)}" aria-label="${escapeAttr(label)}" ` +
58
+ `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>`;
59
+ /** A zero-size anchor at a point of the page (an outline target). */
60
+ 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>`;
61
+ export async function buildFixedPublication(docs, options) {
62
+ const { metadata, onWarning, onProgress, signal } = options;
63
+ const strings = navStrings(metadata.language);
64
+ const progression = pageProgressionOf(docs);
65
+ // Fonts and pictures first: the pages link to their files.
66
+ const fonts = fontAssets(options.fonts ?? []);
67
+ const images = await imageAssets(docs, options.resourceBytes, onWarning);
68
+ signal?.throwIfAborted();
69
+ const imageItems = images.items;
70
+ onProgress?.({ phase: 'resources', done: fonts.items.length + imageItems.length, total: fonts.items.length + imageItems.length });
71
+ // Pass 1: render every page and learn where each id lives, so a link can
72
+ // go to the page file that holds its target.
73
+ const totalPages = docs.reduce((n, d) => n + d.pages.length, 0);
74
+ const pad = Math.max(4, String(totalPages).length);
75
+ const refTargets = new Set(docs.flatMap((d) => [...anchoredResourceIds(d)]));
76
+ const imageUrl = Object.assign((fileId) => {
77
+ const href = images.hrefOf(fileId);
78
+ return href ? `../${href}` : undefined;
79
+ }, { singleInk: false });
80
+ const plans = [];
81
+ const fileOfId = new Map();
82
+ let bookIndex = 0;
83
+ for (const doc of docs) {
84
+ const lang = docLanguage(doc, metadata.language);
85
+ const rendered = renderToHtmlIndexed(doc, { resourceImageUrl: imageUrl, singleInk: false, refTargets: [...refTargets] });
86
+ for (const [i, page] of doc.pages.entries()) {
87
+ const file = `page-${String(bookIndex + 1).padStart(pad, '0')}.xhtml`;
88
+ let html = rendered.pages[i]?.innerHtml ?? '';
89
+ const outline = [];
90
+ const part = partTitle(page);
91
+ if (part)
92
+ outline.push({ title: part, level: 0, file });
93
+ // An anchor at each listed heading, the target of its TOC entry.
94
+ for (const [h, block] of pageHeadings(doc, page).entries()) {
95
+ const title = headingTitle(block);
96
+ if (!title)
97
+ continue;
98
+ const anchorId = `h-${bookIndex + 1}-${h + 1}`;
99
+ const wrapper = `<div class="pt-block" data-block-id="${escapeAttr(block.id)}"`;
100
+ const at = html.indexOf(wrapper);
101
+ if (at >= 0)
102
+ html = html.slice(0, at) + anchorAt(anchorId, block.bbox.x, block.bbox.y) + html.slice(at);
103
+ outline.push({ title, level: block.headingLevel ?? 1, file, ...(at >= 0 ? { anchorId } : {}) });
104
+ }
105
+ // The rows of the printed contents link to their pages, as in the PDF.
106
+ for (const row of contentsRows(page)) {
107
+ const wrapper = `<div class="pt-block" data-block-id="${escapeAttr(row.block.id)}" style="display:contents;">`;
108
+ const at = html.indexOf(wrapper);
109
+ if (at < 0 || !row.label)
110
+ continue;
111
+ const end = at + wrapper.length;
112
+ html = html.slice(0, end) + rowLink(`#pt-p-${row.pageIndex}`, row.label, row.block.bbox) + html.slice(end);
113
+ }
114
+ const pageId = `pt-p-${(doc.pageIndexOffset ?? 0) + page.index}`;
115
+ const ids = [pageId, ...[...html.matchAll(/\sid="([^"]*)"/g)].map((m) => xmlId(decodeEntities(m[1])))];
116
+ for (const id of ids)
117
+ if (!fileOfId.has(id))
118
+ fileOfId.set(id, file);
119
+ plans.push({ doc, page, bookIndex, file, html, ids, outline, lang });
120
+ bookIndex++;
121
+ }
122
+ signal?.throwIfAborted();
123
+ }
124
+ // Pass 2: the content documents.
125
+ const css = `@charset "UTF-8";\n` +
126
+ fonts.css +
127
+ `html, body { margin: 0; padding: 0; }\n` +
128
+ `body { position: relative; overflow: hidden; }\n` +
129
+ `.pt-page { position: absolute; left: 0; top: 0; overflow: hidden; transform-origin: 0 0; ${TEXT_RESET} }\n` +
130
+ `.pt-cover { display: block; width: 100%; height: 100%; object-fit: contain; }\n`;
131
+ const pageItems = [];
132
+ const spine = [];
133
+ const pageList = [];
134
+ const uses = [];
135
+ let describedImages = true;
136
+ for (const [n, plan] of plans.entries()) {
137
+ const { doc, page, file } = plan;
138
+ const geo = pageGeometry(doc, page);
139
+ const styles = [];
140
+ const ids = new Set([plan.ids[0]]);
141
+ const body = htmlToXhtml(plan.html, {
142
+ ids,
143
+ hoistStyle: (s) => styles.push(s),
144
+ rewriteHref: (href) => {
145
+ if (!href.startsWith('#'))
146
+ return href;
147
+ const target = fileOfId.get(href.slice(1));
148
+ if (!target)
149
+ return undefined;
150
+ return target === file ? href : `${target}${href}`;
151
+ },
152
+ });
153
+ for (const img of body.matchAll(/<img\s[^>]*>/g)) {
154
+ if (!/\srole="presentation"/.test(img[0]) && /\salt=""/.test(img[0]))
155
+ describedImages = false;
156
+ }
157
+ uses.push(...fontUses(plan.html));
158
+ const background = doc.config.page.backgroundColor?.hex;
159
+ const bg = background && background !== 'transparent' ? `background:${background};` : '';
160
+ const pageStyle = `width:${num(page.width)}px;height:${num(page.height)}px;${bg}` +
161
+ `transform:scale(${num(geo.scale)})${geo.offset ? ` translate(-${num(geo.offset)}px,-${num(geo.offset)}px)` : ''};`;
162
+ const label = page.pageLabel || String(plan.bookIndex + 1);
163
+ const xhtml = xhtmlDocument({
164
+ lang: plan.lang,
165
+ dir: directionOf(plan.lang),
166
+ title: `${metadata.title} (${label})`,
167
+ head: `<meta name="viewport" content="width=${geo.width}, height=${geo.height}"/>\n` +
168
+ `<link rel="stylesheet" type="text/css" href="../${STYLESHEET_HREF}"/>\n` +
169
+ (styles.length ? `<style>${escapeXml(styles.join('\n'))}</style>\n` : ''),
170
+ bodyAttrs: ` style="width:${geo.width}px;height:${geo.height}px;${bg}"`,
171
+ body: `<div class="pt-page" id="${escapeAttr(plan.ids[0])}" dir="${pageDir(doc)}" style="${pageStyle}">${body}</div>`,
172
+ });
173
+ const id = file.replace(/\.xhtml$/, '');
174
+ pageItems.push({ id, href: `${PAGES_DIR}${file}`, mediaType: 'application/xhtml+xml', data: xhtml });
175
+ // A left-bound book's first page is a recto on the right; a right-bound
176
+ // book's, on the left.
177
+ const recto = plan.bookIndex % 2 === 0;
178
+ const right = progression === 'rtl' ? !recto : recto;
179
+ spine.push({ idref: id, properties: [right ? 'page-spread-right' : 'page-spread-left'] });
180
+ pageList.push({ label, href: `${PAGES_DIR}${file}` });
181
+ onProgress?.({ phase: 'documents', done: n + 1, total: plans.length });
182
+ if (n % 16 === 15)
183
+ signal?.throwIfAborted();
184
+ }
185
+ for (const miss of missingFaces(uses, options.fonts ?? [])) {
186
+ onWarning?.({ kind: 'missingFont', ...miss });
187
+ }
188
+ // The cover: the given picture on a page of its own, else the first page
189
+ // (a picture of that page is kept as the cover image only).
190
+ const items = [];
191
+ const landmarks = [];
192
+ const first = plans[0];
193
+ const firstGeo = first ? pageGeometry(first.doc, first.page) : { width: 600, height: 800 };
194
+ const coverExt = options.cover && { 'image/jpeg': 'jpg', 'image/png': 'png', 'image/webp': 'webp', 'image/svg+xml': 'svg' }[options.cover.mediaType];
195
+ if (options.cover) {
196
+ items.push({ id: 'cover-image', href: `images/cover.${coverExt}`, mediaType: options.cover.mediaType, data: options.cover.bytes, properties: ['cover-image'] });
197
+ }
198
+ if (options.cover && !options.cover.showsFirstPage) {
199
+ const alt = options.cover.alt ?? metadata.title;
200
+ items.push({
201
+ id: 'cover',
202
+ href: `${PAGES_DIR}cover.xhtml`,
203
+ mediaType: 'application/xhtml+xml',
204
+ data: xhtmlDocument({
205
+ lang: metadata.language,
206
+ dir: directionOf(metadata.language),
207
+ title: metadata.title,
208
+ head: `<meta name="viewport" content="width=${firstGeo.width}, height=${firstGeo.height}"/>\n` +
209
+ `<link rel="stylesheet" type="text/css" href="../${STYLESHEET_HREF}"/>\n`,
210
+ bodyAttrs: ` epub:type="cover" style="width:${firstGeo.width}px;height:${firstGeo.height}px;"`,
211
+ body: `<img class="pt-cover" src="../images/cover.${coverExt}" alt="${escapeAttr(alt)}"/>`,
212
+ }),
213
+ });
214
+ spine.unshift({ idref: 'cover', properties: ['rendition:page-spread-center'] });
215
+ landmarks.push({ type: 'cover', label: strings.cover, href: `${PAGES_DIR}cover.xhtml` });
216
+ }
217
+ else if (first) {
218
+ landmarks.push({ type: 'cover', label: strings.cover, href: `${PAGES_DIR}${first.file}` });
219
+ }
220
+ const tocPage = plans.find((p) => [...p.page.columns.flatMap((c) => c.blocks)].some((b) => b.tocEntry !== undefined || b.tocPart !== undefined));
221
+ if (tocPage)
222
+ landmarks.push({ type: 'toc', label: strings.contents, href: `${PAGES_DIR}${tocPage.file}` });
223
+ const outline = plans.flatMap((p) => p.outline);
224
+ const bodyStart = outline.find((e) => e.level >= 1);
225
+ if (bodyStart || first) {
226
+ const target = bodyStart ? `${PAGES_DIR}${bodyStart.file}${bodyStart.anchorId ? `#${bodyStart.anchorId}` : ''}` : `${PAGES_DIR}${first.file}`;
227
+ landmarks.push({ type: 'bodymatter', label: strings.bodymatter, href: target });
228
+ }
229
+ items.push({ id: 'style', href: STYLESHEET_HREF, mediaType: 'text/css', data: css });
230
+ items.push(...fonts.items, ...imageItems, ...pageItems);
231
+ const toc = nestOutline(outline, PAGES_DIR);
232
+ const hasImages = imageItems.length > 0 || options.cover !== undefined;
233
+ return {
234
+ layout: 'fixed',
235
+ metadata,
236
+ items,
237
+ spine,
238
+ toc,
239
+ pageList,
240
+ landmarks,
241
+ pageProgression: progression,
242
+ fixed: { spread: 'landscape', orientation: 'auto', viewport: { width: firstGeo.width, height: firstGeo.height } },
243
+ accessibility: defaultAccessibility({
244
+ layout: 'fixed',
245
+ hasImages,
246
+ hasMath: hasMath(docs),
247
+ imagesDescribed: describedImages,
248
+ hasPageList: pageList.length > 0,
249
+ hasToc: toc.length > 0,
250
+ hasTables: docs.some((d) => d.blocks.some((b) => b.resourceBlock?.kind === 'table')),
251
+ }),
252
+ };
253
+ }
254
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fixed/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { VDTBlock, VDTDocument, VDTPage } from 'postext';
2
+ import type { EpubNavPoint } from '../types';
3
+ /** A heading's name: its number and its title as written in the source
4
+ * (a letter-case transform is how the page prints it, not its name), else
5
+ * as its printed lines read back. */
6
+ export declare function headingTitle(block: VDTBlock): string;
7
+ /** One entry of the outline before nesting. `level` 0 is a part. */
8
+ export interface OutlineEntry {
9
+ title: string;
10
+ level: number;
11
+ /** Where the entry points: a page file and, for a heading, the id of the
12
+ * anchor set at it. */
13
+ file: string;
14
+ anchorId?: string;
15
+ }
16
+ /** The headings of a page that go in the outline, in reading order. A
17
+ * level-1 heading whose style keeps it out of the running chapter and out
18
+ * of the contents (a plate set as a heading) is left out, as the PDF
19
+ * bookmarks leave it out. A heading continued from the previous column
20
+ * (`-cont-` id) is listed once, where it starts. */
21
+ export declare function pageHeadings(doc: VDTDocument, page: VDTPage): VDTBlock[];
22
+ /** The part a divider page opens, as an outline entry title. */
23
+ export declare function partTitle(page: VDTPage): string | undefined;
24
+ /** Nest flat entries by level, as navigation points with hrefs relative to
25
+ * the package document (`dir` is the pages' directory, `pages/`). Levels
26
+ * never skip in the result: a level-3 heading right under a level-1 one
27
+ * nests one step down. */
28
+ export declare function nestOutline(entries: readonly OutlineEntry[], dir: string): EpubNavPoint[];
29
+ /** A row of the printed contents and the book page it lists. */
30
+ export interface ContentsRow {
31
+ block: VDTBlock;
32
+ /** Book page index the row points at (`pt-p-<index>`). */
33
+ pageIndex: number;
34
+ /** What the row reads: a part's number and title, an entry's lines. */
35
+ label: string;
36
+ }
37
+ /** The rows of a page's printed contents that know their target page, as
38
+ * the PDF backend links them (blockRender.ts). */
39
+ export declare function contentsRows(page: VDTPage): ContentsRow[];
40
+ //# sourceMappingURL=outline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../src/fixed/outline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAM7C;;sCAEsC;AACtC,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAOpD;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd;4BACwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;qDAIqD;AACrD,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,CAWxE;AAED,gEAAgE;AAChE,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAI3D;AAED;;;2BAG2B;AAC3B,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAYzF;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;CACf;AAKD;mDACmD;AACnD,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,CAczD"}
@@ -0,0 +1,88 @@
1
+ // The book outline of a fixed layout: the headings of every page (and the
2
+ // part divider pages) as a nested table of contents, as the PDF backend
3
+ // derives its bookmarks (postext-pdf/src/pdf-backend/outlines.ts).
4
+ import { blockLinesText, plainTitleText } from 'postext';
5
+ /** Runs of white space as one space; the ideographic space (U+3000) of a
6
+ * Chinese title stays. */
7
+ const SPACES = /[^\S ]+/g;
8
+ /** A heading's name: its number and its title as written in the source
9
+ * (a letter-case transform is how the page prints it, not its name), else
10
+ * as its printed lines read back. */
11
+ export function headingTitle(block) {
12
+ const number = block.numberPrefix?.replace(SPACES, ' ').trim() ?? '';
13
+ const written = block.sourceTitle?.replace(SPACES, ' ').trim();
14
+ if (written)
15
+ return number ? `${number}${block.numberSeparator ?? ' '}${written}` : written;
16
+ const raw = blockLinesText(block, { plainTitleBreaks: true }).replace(SPACES, ' ').trim();
17
+ if (!raw)
18
+ return '';
19
+ return number && !raw.startsWith(number) ? `${number}${block.numberSeparator ?? ' '}${raw}` : raw;
20
+ }
21
+ /** The headings of a page that go in the outline, in reading order. A
22
+ * level-1 heading whose style keeps it out of the running chapter and out
23
+ * of the contents (a plate set as a heading) is left out, as the PDF
24
+ * bookmarks leave it out. A heading continued from the previous column
25
+ * (`-cont-` id) is listed once, where it starts. */
26
+ export function pageHeadings(doc, page) {
27
+ const unlisted = new Set((doc.config.headingStyles ?? []).filter((s) => !s.runningChapter && !s.toc).map((s) => s.id));
28
+ const out = [];
29
+ for (const col of page.columns) {
30
+ for (const block of col.blocks) {
31
+ if (block.type !== 'heading' || block.hidden || /-cont-\d+$/.test(block.id))
32
+ continue;
33
+ if (block.notRunningChapter && block.headingStyleId && unlisted.has(block.headingStyleId))
34
+ continue;
35
+ out.push(block);
36
+ }
37
+ }
38
+ return out;
39
+ }
40
+ /** The part a divider page opens, as an outline entry title. */
41
+ export function partTitle(page) {
42
+ if (!page.partInfo)
43
+ return undefined;
44
+ const title = `${page.partInfo.number} ${plainTitleText(page.partInfo.title)}`.trim();
45
+ return title || undefined;
46
+ }
47
+ /** Nest flat entries by level, as navigation points with hrefs relative to
48
+ * the package document (`dir` is the pages' directory, `pages/`). Levels
49
+ * never skip in the result: a level-3 heading right under a level-1 one
50
+ * nests one step down. */
51
+ export function nestOutline(entries, dir) {
52
+ const roots = [];
53
+ const stack = [];
54
+ for (const e of entries) {
55
+ const point = { label: e.title, href: `${dir}${e.file}${e.anchorId ? `#${e.anchorId}` : ''}` };
56
+ while (stack.length > 0 && stack[stack.length - 1].level >= e.level)
57
+ stack.pop();
58
+ const parent = stack[stack.length - 1]?.point;
59
+ if (parent)
60
+ (parent.children ??= []).push(point);
61
+ else
62
+ roots.push(point);
63
+ stack.push({ level: e.level, point });
64
+ }
65
+ return roots;
66
+ }
67
+ /** Leader dots and runs of them between a title and its page number. */
68
+ const LEADERS = /(?:\s*[.·…․‥⋯]){3,}\s*/gu;
69
+ /** The rows of a page's printed contents that know their target page, as
70
+ * the PDF backend links them (blockRender.ts). */
71
+ export function contentsRows(page) {
72
+ const out = [];
73
+ for (const col of page.columns) {
74
+ for (const block of col.blocks) {
75
+ if (block.hidden)
76
+ continue;
77
+ const pageIndex = block.tocEntry?.pageIndex ?? block.tocPart?.pageIndex;
78
+ if (pageIndex === undefined)
79
+ continue;
80
+ const label = block.tocPart
81
+ ? `${block.tocPart.number} ${plainTitleText(block.tocPart.title)}`
82
+ : `${block.numberPrefix ?? ''} ${block.lines.map((l) => l.text).join(' ')}`;
83
+ out.push({ block, pageIndex, label: label.replace(LEADERS, ' ').replace(SPACES, ' ').trim() });
84
+ }
85
+ }
86
+ return out;
87
+ }
88
+ //# sourceMappingURL=outline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline.js","sourceRoot":"","sources":["../../src/fixed/outline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { EpubSource, RenderToEpubOptions } from './types';
2
+ /**
3
+ * Write a laid-out book as an EPUB 3 file, entirely in memory (browser or
4
+ * Node). `docs` are the book's print documents, one per chapter in order —
5
+ * the chain `renderToPdf` takes. `layout: 'fixed'` reproduces every printed
6
+ * page (pre-paginated); `'reflowable'` writes semantic XHTML whose text
7
+ * reflows to the reader's screen.
8
+ */
9
+ export declare function renderToEpub(docs: EpubSource, options: RenderToEpubOptions): Promise<Uint8Array>;
10
+ export { packEpub } from './package/pack';
11
+ export { readEpub, resolveHref, dirOf } from './package/read';
12
+ export { bookIdentifier } from './shared/assets';
13
+ export { uuidV5 } from './shared/uuid';
14
+ export { buildFixedPublication } from './fixed';
15
+ export { buildReflowablePublication } from './reflowable';
16
+ export type { EpubLayout, EpubMetadata, EpubFontFile, EpubResourceBytes, EpubCover, EpubProgress, EpubWarning, RenderToEpubOptions, EpubSource, EpubItem, EpubSpineEntry, EpubNavPoint, EpubPageTarget, EpubLandmark, EpubAccessibility, EpubPublication, ReadEpubResult, } from './types';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAUtG;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ import { buildFixedPublication } from './fixed';
2
+ import { buildReflowablePublication } from './reflowable';
3
+ import { packEpub } from './package/pack';
4
+ /**
5
+ * Write a laid-out book as an EPUB 3 file, entirely in memory (browser or
6
+ * Node). `docs` are the book's print documents, one per chapter in order —
7
+ * the chain `renderToPdf` takes. `layout: 'fixed'` reproduces every printed
8
+ * page (pre-paginated); `'reflowable'` writes semantic XHTML whose text
9
+ * reflows to the reader's screen.
10
+ */
11
+ export async function renderToEpub(docs, options) {
12
+ if (docs.length === 0)
13
+ throw new Error('renderToEpub: no documents');
14
+ const publication = options.layout === 'fixed'
15
+ ? await buildFixedPublication(docs, options)
16
+ : await buildReflowablePublication(docs, options);
17
+ options.signal?.throwIfAborted();
18
+ options.onProgress?.({ phase: 'package', done: 0, total: 1 });
19
+ const bytes = packEpub(publication);
20
+ options.onProgress?.({ phase: 'package', done: 1, total: 1 });
21
+ return bytes;
22
+ }
23
+ export { packEpub } from './package/pack';
24
+ export { readEpub, resolveHref, dirOf } from './package/read';
25
+ export { bookIdentifier } from './shared/assets';
26
+ export { uuidV5 } from './shared/uuid';
27
+ export { buildFixedPublication } from './fixed';
28
+ export { buildReflowablePublication } from './reflowable';
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAgB,EAAE,OAA4B;IAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO;QAC5C,CAAC,CAAC,MAAM,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC;QAC5C,CAAC,CAAC,MAAM,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IACjC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { EpubPublication } from '../types';
2
+ /** Where the package document lives; every item href is relative to it. */
3
+ export declare const PACKAGE_DIR = "OEBPS/";
4
+ export declare const OPF_PATH = "OEBPS/content.opf";
5
+ export declare const NAV_HREF = "nav.xhtml";
6
+ export declare const NCX_HREF = "toc.ncx";
7
+ /** `dcterms:modified` form: `CCYY-MM-DDThh:mm:ssZ`. */
8
+ export declare function modifiedStamp(date: Date): string;
9
+ /** A `dc:date` in W3C date-time form, or undefined when it cannot be
10
+ * read as one (EPUBCheck warns on any other form). */
11
+ export declare function w3cDate(value: string | undefined): string | undefined;
12
+ /** The package document. */
13
+ export declare function buildOpf(pub: EpubPublication, identifier?: string): string;
14
+ /** The navigation document: `toc`, `landmarks` and `page-list` (the last
15
+ * two hidden, as reading systems present them in their own UI). */
16
+ export declare function buildNav(pub: EpubPublication): string;
17
+ /** The legacy NCX (EPUB 2 reading systems): the TOC as a nav map and the
18
+ * page list. */
19
+ export declare function buildNcx(pub: EpubPublication, identifier?: string): string;
20
+ /** Write a publication as an EPUB 3 file: `mimetype` first and stored,
21
+ * `META-INF/container.xml`, `OEBPS/content.opf`, `OEBPS/nav.xhtml`,
22
+ * `OEBPS/toc.ncx` and every item. Deterministic for a given input (pass
23
+ * `metadata.modified` for identical bytes across runs). */
24
+ export declare function packEpub(publication: EpubPublication): Uint8Array;
25
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/package/pack.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA0B,eAAe,EAAE,MAAM,UAAU,CAAC;AAKxE,2EAA2E;AAC3E,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,QAAQ,sBAA8B,CAAC;AACpD,eAAO,MAAM,QAAQ,cAAc,CAAC;AACpC,eAAO,MAAM,QAAQ,YAAY,CAAC;AAoBlC,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD;AAED;uDACuD;AACvD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAMrE;AAiBD,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,SAA+B,GAAG,MAAM,CAmEhG;AAsBD;oEACoE;AACpE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAsBrD;AAED;iBACiB;AACjB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,SAA+B,GAAG,MAAM,CAgDhG;AAED;;;4DAG4D;AAC5D,wBAAgB,QAAQ,CAAC,WAAW,EAAE,eAAe,GAAG,UAAU,CA0BjE"}