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,198 @@
1
+ // Reading an EPUB back, for viewers: the container, the package document,
2
+ // the navigation document and the fixed-layout viewport. Reads what this
3
+ // package writes and ordinary EPUB 3 (and EPUB 2 NCX-only) files.
4
+ import { unzipSync } from 'fflate';
5
+ import { childElements, descendants, localName, parseXml, textOf } from '../shared/xmlRead';
6
+ const dec = new TextDecoder();
7
+ /** The directory part of a zip path, with its trailing slash (`''` at the
8
+ * root). */
9
+ export function dirOf(path) {
10
+ const i = path.lastIndexOf('/');
11
+ return i < 0 ? '' : path.slice(0, i + 1);
12
+ }
13
+ /** Resolve an href (relative to the directory `base`) to a zip path,
14
+ * keeping its fragment. Percent-escapes are decoded; `..` segments
15
+ * climb. */
16
+ export function resolveHref(base, href) {
17
+ const hash = href.indexOf('#');
18
+ const path = hash < 0 ? href : href.slice(0, hash);
19
+ const fragment = hash < 0 ? '' : href.slice(hash);
20
+ if (/^[a-z][a-z0-9+.-]*:/i.test(path))
21
+ return href; // absolute URL
22
+ let decoded = path;
23
+ try {
24
+ decoded = decodeURIComponent(path);
25
+ }
26
+ catch {
27
+ // Keep a malformed escape as written.
28
+ }
29
+ const segments = (decoded.startsWith('/') ? decoded.slice(1) : base + decoded).split('/');
30
+ const out = [];
31
+ for (const seg of segments) {
32
+ if (seg === '..')
33
+ out.pop();
34
+ else if (seg !== '.' && seg !== '')
35
+ out.push(seg);
36
+ }
37
+ return out.join('/') + fragment;
38
+ }
39
+ function fileText(files, path) {
40
+ const bytes = files.get(path);
41
+ if (!bytes)
42
+ throw new Error(`readEpub: missing ${path}`);
43
+ return dec.decode(bytes);
44
+ }
45
+ /** The links of an `<ol>` of a nav element, nested. */
46
+ function navPoints(ol, base) {
47
+ const out = [];
48
+ for (const li of childElements(ol, 'li')) {
49
+ const a = childElements(li, 'a')[0] ?? childElements(li, 'span')[0];
50
+ const sub = childElements(li, 'ol')[0];
51
+ const href = a?.attrs.href;
52
+ const children = sub ? navPoints(sub, base) : [];
53
+ out.push({
54
+ label: a ? textOf(a) : '',
55
+ href: href ? resolveHref(base, href) : '',
56
+ ...(children.length ? { children } : {}),
57
+ });
58
+ }
59
+ return out;
60
+ }
61
+ /** The NCX nav map, for an EPUB without a navigation document. */
62
+ function ncxPoints(parent, base) {
63
+ return childElements(parent, 'navPoint').map((np) => {
64
+ const label = descendants(childElements(np, 'navLabel')[0] ?? np, 'text')[0];
65
+ const src = childElements(np, 'content')[0]?.attrs.src ?? '';
66
+ const children = ncxPoints(np, base);
67
+ return { label: label ? textOf(label) : '', href: src ? resolveHref(base, src) : '', ...(children.length ? { children } : {}) };
68
+ });
69
+ }
70
+ /** `width=…, height=…` of a viewport meta. */
71
+ export function parseViewport(content) {
72
+ const w = /(?:^|[,;\s])width\s*=\s*([\d.]+)/i.exec(content);
73
+ const h = /(?:^|[,;\s])height\s*=\s*([\d.]+)/i.exec(content);
74
+ return w && h ? { width: Number(w[1]), height: Number(h[1]) } : undefined;
75
+ }
76
+ export function readEpub(bytes) {
77
+ const files = new Map(Object.entries(unzipSync(bytes)));
78
+ const container = parseXml(fileText(files, 'META-INF/container.xml'));
79
+ const rootfile = descendants(container, 'rootfile').find((r) => r.attrs['media-type'] === 'application/oebps-package+xml') ??
80
+ descendants(container, 'rootfile')[0];
81
+ const opfPath = rootfile?.attrs['full-path'];
82
+ if (!opfPath)
83
+ throw new Error('readEpub: container.xml names no package document');
84
+ const root = dirOf(opfPath);
85
+ const opf = parseXml(fileText(files, opfPath));
86
+ const metadata = childElements(opf, 'metadata')[0];
87
+ const metaEls = metadata ? childElements(metadata) : [];
88
+ const dc = (name) => metaEls.filter((e) => e.name === `dc:${name}` || (localName(e.name) === name && e.name.includes(':')));
89
+ const metaProperty = (property) => {
90
+ const el = metaEls.find((e) => localName(e.name) === 'meta' && e.attrs.property === property && !e.attrs.refines);
91
+ return el ? textOf(el) : undefined;
92
+ };
93
+ const refined = (id, property) => {
94
+ if (!id)
95
+ return undefined;
96
+ const el = metaEls.find((e) => localName(e.name) === 'meta' && e.attrs.refines === `#${id}` && e.attrs.property === property);
97
+ return el ? textOf(el) : undefined;
98
+ };
99
+ const titles = dc('title');
100
+ const title = titles.find((t) => refined(t.attrs.id, 'title-type') === 'main') ??
101
+ titles.find((t) => refined(t.attrs.id, 'title-type') === undefined) ?? titles[0];
102
+ const uid = opf.attrs['unique-identifier'];
103
+ const identifiers = dc('identifier');
104
+ const identifier = identifiers.find((i) => i.attrs.id === uid) ?? identifiers[0];
105
+ const manifest = new Map();
106
+ const manifestEl = childElements(opf, 'manifest')[0];
107
+ for (const item of manifestEl ? childElements(manifestEl, 'item') : []) {
108
+ const id = item.attrs.id;
109
+ const href = item.attrs.href;
110
+ if (!id || !href)
111
+ continue;
112
+ manifest.set(id, {
113
+ path: resolveHref(root, href),
114
+ mediaType: item.attrs['media-type'] ?? '',
115
+ properties: (item.attrs.properties ?? '').split(/\s+/).filter(Boolean),
116
+ });
117
+ }
118
+ const spineEl = childElements(opf, 'spine')[0];
119
+ const spine = (spineEl ? childElements(spineEl, 'itemref') : []).flatMap((ref) => {
120
+ const id = ref.attrs.idref ?? '';
121
+ const item = manifest.get(id);
122
+ return item ? [{
123
+ id,
124
+ path: item.path,
125
+ linear: ref.attrs.linear !== 'no',
126
+ properties: (ref.attrs.properties ?? '').split(/\s+/).filter(Boolean),
127
+ }] : [];
128
+ });
129
+ // Navigation: the EPUB 3 nav document, else the NCX the spine names.
130
+ let toc = [];
131
+ let pageList = [];
132
+ const navItem = [...manifest.values()].find((i) => i.properties.includes('nav'));
133
+ if (navItem && files.has(navItem.path)) {
134
+ const nav = parseXml(fileText(files, navItem.path));
135
+ const base = dirOf(navItem.path);
136
+ for (const n of descendants(nav, 'nav')) {
137
+ const type = (n.attrs['epub:type'] ?? '').split(/\s+/);
138
+ const ol = childElements(n, 'ol')[0];
139
+ if (!ol)
140
+ continue;
141
+ if (type.includes('toc') && toc.length === 0)
142
+ toc = navPoints(ol, base);
143
+ else if (type.includes('page-list') && pageList.length === 0) {
144
+ pageList = navPoints(ol, base).map((p) => ({ label: p.label, href: p.href }));
145
+ }
146
+ }
147
+ }
148
+ else {
149
+ const ncx = manifest.get(spineEl?.attrs.toc ?? '') ?? [...manifest.values()].find((i) => i.mediaType === 'application/x-dtbncx+xml');
150
+ if (ncx && files.has(ncx.path)) {
151
+ const doc = parseXml(fileText(files, ncx.path));
152
+ const navMap = descendants(doc, 'navMap')[0];
153
+ if (navMap)
154
+ toc = ncxPoints(navMap, dirOf(ncx.path));
155
+ pageList = descendants(doc, 'pageTarget').map((pt) => {
156
+ const label = descendants(pt, 'text')[0];
157
+ const src = childElements(pt, 'content')[0]?.attrs.src ?? '';
158
+ return { label: label ? textOf(label) : '', href: resolveHref(dirOf(ncx.path), src) };
159
+ });
160
+ }
161
+ }
162
+ const layout = metaProperty('rendition:layout') === 'pre-paginated' ? 'fixed' : 'reflowable';
163
+ // The page size: the viewport of the first pre-paginated document.
164
+ let viewport;
165
+ if (layout === 'fixed') {
166
+ for (const s of spine) {
167
+ const text = files.get(s.path);
168
+ if (!text)
169
+ continue;
170
+ const m = /<meta\s[^>]*name\s*=\s*["']viewport["'][^>]*>/i.exec(dec.decode(text.subarray(0, 4096)));
171
+ const content = m ? /content\s*=\s*["']([^"']*)["']/i.exec(m[0])?.[1] : undefined;
172
+ viewport = content ? parseViewport(content) : undefined;
173
+ if (viewport)
174
+ break;
175
+ }
176
+ }
177
+ const coverItem = [...manifest.values()].find((i) => i.properties.includes('cover-image')) ??
178
+ manifest.get(metaEls.find((e) => localName(e.name) === 'meta' && e.attrs.name === 'cover')?.attrs.content ?? '');
179
+ return {
180
+ layout,
181
+ metadata: {
182
+ title: title ? textOf(title) : '',
183
+ language: dc('language')[0] ? textOf(dc('language')[0]) : '',
184
+ identifier: identifier ? textOf(identifier) : '',
185
+ creators: dc('creator').map(textOf),
186
+ },
187
+ pageProgression: spineEl?.attrs['page-progression-direction'] === 'rtl' ? 'rtl' : 'ltr',
188
+ files,
189
+ root,
190
+ manifest,
191
+ spine,
192
+ toc,
193
+ pageList,
194
+ ...(viewport ? { viewport } : {}),
195
+ ...(coverItem ? { coverPath: coverItem.path } : {}),
196
+ };
197
+ }
198
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/package/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface NavStrings {
2
+ contents: string;
3
+ landmarks: string;
4
+ pages: string;
5
+ cover: string;
6
+ bodymatter: string;
7
+ /** Prefix of a page-list entry (`Page 12`) where a label needs one. */
8
+ page: string;
9
+ /** Landmarks of a book's back matter. */
10
+ index: string;
11
+ bibliography: string;
12
+ }
13
+ /** The navigation strings of a BCP 47 language tag. */
14
+ export declare function navStrings(language: string): NavStrings;
15
+ /** Whether a language is written right to left (its base direction). */
16
+ export declare function isRtlLanguage(language: string): boolean;
17
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../src/package/strings.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;CACtB;AAcD,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAGvD;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD"}
@@ -0,0 +1,24 @@
1
+ // The few words the package writes itself: navigation headings and
2
+ // landmark names, in the book's language (English when it has none here).
3
+ const STRINGS = {
4
+ en: { contents: 'Contents', landmarks: 'Landmarks', pages: 'Pages', cover: 'Cover', bodymatter: 'Start of content', page: 'Page', index: 'Index', bibliography: 'Bibliography' },
5
+ es: { contents: 'Índice', landmarks: 'Puntos de referencia', pages: 'Páginas', cover: 'Cubierta', bodymatter: 'Inicio del contenido', page: 'Página', index: 'Índice alfabético', bibliography: 'Bibliografía' },
6
+ ca: { contents: 'Índex', landmarks: 'Punts de referència', pages: 'Pàgines', cover: 'Coberta', bodymatter: 'Inici del contingut', page: 'Pàgina', index: 'Índex alfabètic', bibliography: 'Bibliografia' },
7
+ fr: { contents: 'Table des matières', landmarks: 'Repères', pages: 'Pages', cover: 'Couverture', bodymatter: 'Début du contenu', page: 'Page', index: 'Index', bibliography: 'Bibliographie' },
8
+ pt: { contents: 'Sumário', landmarks: 'Pontos de referência', pages: 'Páginas', cover: 'Capa', bodymatter: 'Início do conteúdo', page: 'Página', index: 'Índice remissivo', bibliography: 'Bibliografia' },
9
+ it: { contents: 'Indice', landmarks: 'Punti di riferimento', pages: 'Pagine', cover: 'Copertina', bodymatter: 'Inizio del contenuto', page: 'Pagina', index: 'Indice analitico', bibliography: 'Bibliografia' },
10
+ de: { contents: 'Inhalt', landmarks: 'Orientierungspunkte', pages: 'Seiten', cover: 'Umschlag', bodymatter: 'Beginn des Inhalts', page: 'Seite', index: 'Register', bibliography: 'Literaturverzeichnis' },
11
+ zh: { contents: '目录', landmarks: '导航', pages: '页码', cover: '封面', bodymatter: '正文', page: '第', index: '索引', bibliography: '参考文献' },
12
+ ar: { contents: 'المحتويات', landmarks: 'معالم الكتاب', pages: 'الصفحات', cover: 'الغلاف', bodymatter: 'بداية المحتوى', page: 'صفحة', index: 'الفهرس الأبجدي', bibliography: 'المراجع' },
13
+ };
14
+ /** The navigation strings of a BCP 47 language tag. */
15
+ export function navStrings(language) {
16
+ const primary = language.toLowerCase().split(/[-_]/)[0] ?? 'en';
17
+ return STRINGS[primary] ?? STRINGS.en;
18
+ }
19
+ /** Whether a language is written right to left (its base direction). */
20
+ export function isRtlLanguage(language) {
21
+ const primary = language.toLowerCase().split(/[-_]/)[0] ?? '';
22
+ return ['ar', 'he', 'fa', 'ur', 'ps', 'sd', 'ug', 'yi', 'dv', 'ckb'].includes(primary);
23
+ }
24
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/package/strings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { PostextConfig, Resource, VDTDocument } from 'postext';
2
+ export declare const pt: (value: number) => {
3
+ value: number;
4
+ unit: "pt";
5
+ };
6
+ export declare const baseConfig: PostextConfig;
7
+ /** Lay out `markdown` as one document. */
8
+ export declare function layOut(markdown: string, config?: PostextConfig, resources?: Resource[], title?: string): VDTDocument;
9
+ /** Lay out chapters as a book chain: each after the pages and counters of
10
+ * the ones before it, as the PDF tab does. */
11
+ export declare function layOutBook(chapters: string[], config?: PostextConfig, resources?: Resource[]): VDTDocument[];
12
+ export declare const PNG: Uint8Array<ArrayBuffer>;
13
+ //# sourceMappingURL=vdt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vdt.d.ts","sourceRoot":"","sources":["../../../src/reflowable/__tests__/vdt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAsBxF,eAAO,MAAM,EAAE,GAAI,OAAO,MAAM;;;CAAqC,CAAC;AAEtE,eAAO,MAAM,UAAU,EAAE,aAGxB,CAAC;AAEF,0CAA0C;AAC1C,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,aAA0B,EAAE,SAAS,GAAE,QAAQ,EAAO,EAAE,KAAK,SAAgB,GAAG,WAAW,CAE3I;AAED;+CAC+C;AAC/C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,aAA0B,EAAE,SAAS,GAAE,QAAQ,EAAO,GAAG,WAAW,EAAE,CAgB5H;AAGD,eAAO,MAAM,GAAG,yBAGd,CAAC"}
@@ -0,0 +1,55 @@
1
+ // Real laid-out documents for the reflowable tests, built in node: the
2
+ // engine measures text through an OffscreenCanvas, stubbed here with a
3
+ // fixed advance per character (half an em), so line breaks are stable
4
+ // without a font file.
5
+ import { buildDocument, continuationAfter } from 'postext';
6
+ class StubCtx {
7
+ font = '';
8
+ letterSpacing = '0px';
9
+ measureText(s) {
10
+ const size = Number(/(\d+(?:\.\d+)?)px/.exec(this.font)?.[1] ?? 16);
11
+ return {
12
+ width: [...s].length * size * 0.5,
13
+ actualBoundingBoxAscent: size * 0.7,
14
+ actualBoundingBoxDescent: size * 0.2,
15
+ fontBoundingBoxAscent: size * 0.8,
16
+ fontBoundingBoxDescent: size * 0.2,
17
+ };
18
+ }
19
+ }
20
+ globalThis.OffscreenCanvas = class {
21
+ getContext() {
22
+ return new StubCtx();
23
+ }
24
+ };
25
+ export const pt = (value) => ({ value, unit: 'pt' });
26
+ export const baseConfig = {
27
+ page: { width: pt(360), height: pt(480), margins: { top: pt(24), bottom: pt(24), left: pt(24), right: pt(24) } },
28
+ locale: 'en-us',
29
+ };
30
+ /** Lay out `markdown` as one document. */
31
+ export function layOut(markdown, config = baseConfig, resources = [], title = 'Sample book') {
32
+ return buildDocument({ markdown, metadata: { title, author: 'Ada' }, resources }, config);
33
+ }
34
+ /** Lay out chapters as a book chain: each after the pages and counters of
35
+ * the ones before it, as the PDF tab does. */
36
+ export function layOutBook(chapters, config = baseConfig, resources = []) {
37
+ const docs = [];
38
+ let offset = 0;
39
+ let inherited;
40
+ for (const markdown of chapters) {
41
+ const continuation = inherited ? { ...inherited, pageIndexOffset: offset } : undefined;
42
+ const doc = buildDocument({ markdown, metadata: { title: 'Sample book', author: 'Ada' }, resources, ...(continuation ? { continuation } : {}) }, config);
43
+ docs.push(doc);
44
+ offset += doc.pages.length;
45
+ const last = doc.pages[doc.pages.length - 1];
46
+ inherited = {
47
+ ...continuationAfter({ markdown, resources }, config, inherited),
48
+ ...(last ? { pageNumbering: { format: last.pageNumberFormat, startAt: last.pageNumberValue + 1 } } : {}),
49
+ };
50
+ }
51
+ return docs;
52
+ }
53
+ // 1×1 PNG.
54
+ export const PNG = Uint8Array.from(Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==', 'base64'));
55
+ //# sourceMappingURL=vdt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vdt.js","sourceRoot":"","sources":["../../../src/reflowable/__tests__/vdt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface XmlCheck {
2
+ errors: string[];
3
+ ids: string[];
4
+ /** `href`/`src` attribute values, in order. */
5
+ refs: string[];
6
+ }
7
+ export declare function checkXml(xml: string): XmlCheck;
8
+ //# sourceMappingURL=xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../../src/reflowable/__tests__/xml.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAKD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CA+E9C"}
@@ -0,0 +1,107 @@
1
+ // A strict XML well-formedness check for the tests: tags balanced and
2
+ // properly nested, attributes quoted and not repeated, only the five XML
3
+ // entities and character references, no `<` or bare `&` in text. Returns
4
+ // the problems found (empty when the document is well formed) and the ids
5
+ // it declares, so links can be checked against them.
6
+ const NAME = /^[A-Za-z_][\w.-]*(?::[A-Za-z_][\w.-]*)?$/;
7
+ const REF = /&(?!(?:amp|lt|gt|quot|apos|#\d+|#x[0-9a-fA-F]+);)/;
8
+ export function checkXml(xml) {
9
+ const errors = [];
10
+ const ids = [];
11
+ const refs = [];
12
+ const stack = [];
13
+ let i = 0;
14
+ let roots = 0;
15
+ const text = (s) => {
16
+ if (REF.test(s))
17
+ errors.push(`bare & in text near "${s.slice(0, 40)}"`);
18
+ if (s.includes('>') && /\]\]>/.test(s))
19
+ errors.push('"]]>" in text');
20
+ };
21
+ while (i < xml.length) {
22
+ const lt = xml.indexOf('<', i);
23
+ if (lt < 0) {
24
+ text(xml.slice(i));
25
+ break;
26
+ }
27
+ text(xml.slice(i, lt));
28
+ if (xml.startsWith('<?', lt)) {
29
+ const end = xml.indexOf('?>', lt);
30
+ if (end < 0)
31
+ return { errors: [...errors, 'unclosed processing instruction'], ids, refs };
32
+ i = end + 2;
33
+ continue;
34
+ }
35
+ if (xml.startsWith('<!--', lt)) {
36
+ const end = xml.indexOf('-->', lt);
37
+ if (end < 0)
38
+ return { errors: [...errors, 'unclosed comment'], ids, refs };
39
+ i = end + 3;
40
+ continue;
41
+ }
42
+ if (xml.startsWith('<!DOCTYPE', lt)) {
43
+ const end = xml.indexOf('>', lt);
44
+ i = end + 1;
45
+ continue;
46
+ }
47
+ const gt = xml.indexOf('>', lt);
48
+ if (gt < 0)
49
+ return { errors: [...errors, 'unclosed tag'], ids, refs };
50
+ const tag = xml.slice(lt + 1, gt);
51
+ i = gt + 1;
52
+ if (tag.startsWith('/')) {
53
+ const name = tag.slice(1).trim();
54
+ const open = stack.pop();
55
+ if (open !== name)
56
+ errors.push(`</${name}> closes <${open ?? 'nothing'}>`);
57
+ continue;
58
+ }
59
+ const selfClosing = tag.endsWith('/');
60
+ const body = selfClosing ? tag.slice(0, -1) : tag;
61
+ const m = /^([^\s/>]+)([\s\S]*)$/.exec(body);
62
+ if (!m || !NAME.test(m[1])) {
63
+ errors.push(`bad tag <${tag.slice(0, 30)}>`);
64
+ continue;
65
+ }
66
+ const name = m[1];
67
+ let rest = m[2];
68
+ const seen = new Set();
69
+ const attr = /^\s+([^\s=]+)\s*=\s*("([^"]*)"|'([^']*)')/;
70
+ for (;;) {
71
+ const a = attr.exec(rest);
72
+ if (!a)
73
+ break;
74
+ const key = a[1];
75
+ const value = a[3] ?? a[4] ?? '';
76
+ if (!NAME.test(key))
77
+ errors.push(`bad attribute name ${key} on <${name}>`);
78
+ if (seen.has(key))
79
+ errors.push(`repeated attribute ${key} on <${name}>`);
80
+ seen.add(key);
81
+ if (value.includes('<'))
82
+ errors.push(`< in attribute ${key}`);
83
+ if (REF.test(value))
84
+ errors.push(`bare & in attribute ${key}`);
85
+ if (key === 'id')
86
+ ids.push(value);
87
+ if (key === 'href' || key === 'src' || key === 'xlink:href')
88
+ refs.push(value);
89
+ rest = rest.slice(a[0].length);
90
+ }
91
+ if (rest.trim())
92
+ errors.push(`junk in <${name}>: "${rest.trim().slice(0, 30)}"`);
93
+ if (stack.length === 0)
94
+ roots++;
95
+ if (!selfClosing)
96
+ stack.push(name);
97
+ }
98
+ if (stack.length > 0)
99
+ errors.push(`unclosed <${stack.join('> <')}>`);
100
+ if (roots !== 1)
101
+ errors.push(`${roots} root elements`);
102
+ const dup = ids.filter((id, k) => ids.indexOf(id) !== k);
103
+ if (dup.length > 0)
104
+ errors.push(`duplicate ids: ${[...new Set(dup)].join(', ')}`);
105
+ return { errors, ids, refs };
106
+ }
107
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../../src/reflowable/__tests__/xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { ResolvedConfig } from 'postext';
2
+ /** What the walk found that decides the writing mode of the book. */
3
+ export interface StylesheetOptions {
4
+ /** Vertical Chinese / Japanese (`layout.writingMode: 'vertical-rl'`). */
5
+ vertical: boolean;
6
+ /** The book sets a `:::verse` poem (its rules are written only then). */
7
+ verse?: boolean;
8
+ }
9
+ /** A family as a CSS value: the family quoted, then a generic fallback. */
10
+ export declare function familyStack(family: string): string;
11
+ /** The family names the stylesheet asks for (to warn about missing
12
+ * faces). */
13
+ export declare function familyName(family: string): string;
14
+ /** A rule of the stylesheet: its selector and declarations
15
+ * (`property: value`). */
16
+ export interface CssRule {
17
+ selector: string;
18
+ decls: string[];
19
+ }
20
+ /** The book's stylesheet: its text, the families it names, and its rules
21
+ * (at-rules aside), which {@link stylesheetOverrides} compares. */
22
+ export interface Stylesheet {
23
+ css: string;
24
+ families: Set<string>;
25
+ rules: CssRule[];
26
+ }
27
+ export declare function bookStylesheet(config: ResolvedConfig, fontFaces: string, options: StylesheetOptions): Stylesheet;
28
+ /**
29
+ * What a chapter's stylesheet changes in the book's (`base`): each rule of
30
+ * `variant` whose declarations differ from those of the rule with the same
31
+ * selector (the n-th of that selector, in order), with the declarations it
32
+ * changes or adds, and `unset` for those it drops; a rule the book's
33
+ * stylesheet does not have, whole. Written as a stylesheet linked after
34
+ * the book's: the same selectors come later, so they win, and the
35
+ * cascade between rules stays as in the chapter's own stylesheet (a class
36
+ * on the body would raise their specificity above the book's other rules).
37
+ * Empty when nothing differs.
38
+ */
39
+ export declare function stylesheetOverrides(base: readonly CssRule[], variant: readonly CssRule[]): string;
40
+ /** `config` under a part's palette (palette id → hex): every colour equal
41
+ * to the base value of an entry the part changes takes the part's value,
42
+ * as the engine recolours the printed text (`applyPartPalettesToFlow`;
43
+ * the resolved configuration keeps values, not palette links). */
44
+ export declare function withPalette(config: ResolvedConfig, overrides: Readonly<Record<string, string>> | undefined): ResolvedConfig;
45
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../src/reflowable/css.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,SAAS,CAAC;AAIrE,qEAAqE;AACrE,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED;cACc;AACd,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAID;2BAC2B;AAC3B,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAaD;oEACoE;AACpE,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAyYhH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CA2BjG;AAED;;;mEAGmE;AACnE,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,cAAc,CAqB3H"}