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,257 @@
1
+ // Reflowable rendition (#396): the book as semantic XHTML, one content
2
+ // document per chapter (and per part opener), styled by a stylesheet
3
+ // derived from the configuration, with print page equivalence.
4
+ //
5
+ // walk.ts the laid-out pages back to a semantic model, in reading order
6
+ // inline.ts lines back to running text (joined, de-hyphenated)
7
+ // xhtml.ts the model as EPUB 3 content documents
8
+ // css.ts the stylesheet
9
+ import { fontAssets, imageAssets, pageProgressionOf } from '../shared/assets';
10
+ import { bookStylesheet, stylesheetOverrides, withPalette } from './css';
11
+ import { xmlAttr, xmlText } from './inline';
12
+ import { docLanguage, walkBook } from './walk';
13
+ import { relativeHref, writeContentDocument } from './xhtml';
14
+ import { isRtlLanguage, navStrings } from '../package/strings';
15
+ export const STYLESHEET_HREF = 'styles/book.css';
16
+ const TEXT_DIR = 'text/';
17
+ /** The accessible name of a footnote's link back to its marker. */
18
+ const BACK_LABELS = {
19
+ en: 'Back to text',
20
+ es: 'Volver al texto',
21
+ ca: 'Torna al text',
22
+ fr: 'Retour au texte',
23
+ de: 'Zurück zum Text',
24
+ it: 'Torna al testo',
25
+ pt: 'Voltar ao texto',
26
+ zh: '返回正文',
27
+ ja: '本文に戻る',
28
+ ar: 'العودة إلى النص',
29
+ };
30
+ const SUMMARIES = {
31
+ en: 'Reflowable text with structured headings, a navigable table of contents, page numbers of the printed edition, text alternatives for pictures and formulas, and footnotes linked both ways.',
32
+ };
33
+ function backLabel(lang) {
34
+ return BACK_LABELS[lang.toLowerCase().split('-')[0]] ?? BACK_LABELS.en;
35
+ }
36
+ /** Hrefs and manifest ids of the content documents: `chapter-001.xhtml`
37
+ * for a chapter's first document, `chapter-001-2.xhtml` for the next
38
+ * ones of the same chapter (after a part), `part-001.xhtml` for parts. */
39
+ function nameFiles(files) {
40
+ let parts = 0;
41
+ const perDoc = new Map();
42
+ for (const file of files) {
43
+ let name;
44
+ if (file.kind === 'part') {
45
+ name = `part-${String(++parts).padStart(3, '0')}`;
46
+ }
47
+ else {
48
+ const n = (perDoc.get(file.doc) ?? 0) + 1;
49
+ perDoc.set(file.doc, n);
50
+ name = `chapter-${String(file.doc + 1).padStart(3, '0')}${n > 1 ? `-${n}` : ''}`;
51
+ }
52
+ file.href = `${TEXT_DIR}${name}.xhtml`;
53
+ file.itemId = name;
54
+ }
55
+ }
56
+ /** The navigation tree: headings nested by level (parts at the top). */
57
+ function navTree(headings) {
58
+ const root = [];
59
+ const stack = [{ level: -1, children: root }];
60
+ for (const h of headings) {
61
+ if (!h.listed || !h.label)
62
+ continue;
63
+ while (stack.length > 1 && stack[stack.length - 1].level >= h.level)
64
+ stack.pop();
65
+ const point = { label: h.label, href: `${h.file.href}#${h.id}` };
66
+ stack[stack.length - 1].children.push(point);
67
+ point.children = [];
68
+ stack.push({ level: h.level, children: point.children });
69
+ }
70
+ const prune = (points) => points.map((p) => (p.children && p.children.length > 0 ? { ...p, children: prune(p.children) } : { label: p.label, href: p.href }));
71
+ return prune(root);
72
+ }
73
+ function coverDocument(imageHref, alt, title, lang, dir) {
74
+ const l = xmlAttr(lang);
75
+ return `<?xml version="1.0" encoding="UTF-8"?>
76
+ <!DOCTYPE html>
77
+ <html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" lang="${l}" xml:lang="${l}"${dir ? ` dir="${dir}"` : ''}>
78
+ <head>
79
+ <meta charset="UTF-8"/>
80
+ <title>${xmlText(title)}</title>
81
+ <link rel="stylesheet" type="text/css" href="${relativeHref(`${TEXT_DIR}cover.xhtml`, STYLESHEET_HREF)}"/>
82
+ </head>
83
+ <body class="pt-cover">
84
+ <section epub:type="cover">
85
+ <img role="doc-cover" src="${xmlAttr(relativeHref(`${TEXT_DIR}cover.xhtml`, imageHref))}" alt="${xmlAttr(alt)}"/>
86
+ </section>
87
+ </body>
88
+ </html>
89
+ `;
90
+ }
91
+ const COVER_EXT = { 'image/jpeg': 'jpg', 'image/png': 'png', 'image/webp': 'webp', 'image/svg+xml': 'svg' };
92
+ export async function buildReflowablePublication(docs, options) {
93
+ const first = docs[0];
94
+ if (!first)
95
+ throw new Error('buildReflowablePublication: no documents');
96
+ const { signal, onProgress } = options;
97
+ const warn = (w) => options.onWarning?.(w);
98
+ const metaTitle = typeof first.metadata.title === 'string' ? first.metadata.title : '';
99
+ const metadata = {
100
+ ...options.metadata,
101
+ title: options.metadata.title || metaTitle || 'Untitled',
102
+ language: options.metadata.language || docLanguage(first.config, 'en'),
103
+ };
104
+ // The book, in reading order.
105
+ const book = walkBook(docs, { language: metadata.language });
106
+ nameFiles(book.files);
107
+ signal?.throwIfAborted();
108
+ // Pictures and fonts. Only the pictures the text places are written
109
+ // (running heads and opener designs are print furniture here).
110
+ onProgress?.({ phase: 'resources', done: 0, total: 2 });
111
+ const missing = [];
112
+ const images = await imageAssets(docs, options.resourceBytes, (w) => missing.push(w));
113
+ for (const w of missing)
114
+ if (w.kind !== 'missingImage' || book.images.has(w.fileId))
115
+ warn(w);
116
+ const usedImages = new Set([...book.images].map((id) => images.hrefOf(id)).filter((h) => h !== undefined));
117
+ const fonts = fontAssets(options.fonts ?? []);
118
+ onProgress?.({ phase: 'resources', done: 1, total: 2 });
119
+ signal?.throwIfAborted();
120
+ const vertical = first.config.layout.writingMode === 'vertical-rl';
121
+ const sheetOptions = { vertical, ...(book.verse ? { verse: true } : {}) };
122
+ const sheet = bookStylesheet(first.config, fonts.css, sheetOptions);
123
+ const items = [{ id: 'css', href: STYLESHEET_HREF, mediaType: 'text/css', data: sheet.css }];
124
+ // The stylesheet follows the first chapter's configuration. A document
125
+ // whose chapter is configured otherwise (its heading styles, say), or
126
+ // whose part recolours the palette, links a second stylesheet with what
127
+ // changes, shared by the documents that change the same.
128
+ const families = new Set(sheet.families);
129
+ const overrides = new Map();
130
+ const sheets = new Map();
131
+ for (const file of book.files) {
132
+ const config = docs[file.doc].config;
133
+ if (config === first.config && !file.palette)
134
+ continue;
135
+ const key = `${file.doc}\u0000${JSON.stringify(file.palette ?? {})}`;
136
+ if (!overrides.has(key)) {
137
+ const own = bookStylesheet(withPalette(config, file.palette), '', sheetOptions);
138
+ for (const family of own.families)
139
+ families.add(family);
140
+ const css = stylesheetOverrides(sheet.rules, own.rules);
141
+ let href;
142
+ if (css) {
143
+ href = sheets.get(css);
144
+ if (!href) {
145
+ href = `${STYLESHEET_HREF.replace(/\.css$/, '')}-${sheets.size + 2}.css`;
146
+ sheets.set(css, href);
147
+ items.push({ id: `css-${sheets.size + 1}`, href, mediaType: 'text/css', data: `@charset "UTF-8";\n${css}` });
148
+ }
149
+ }
150
+ overrides.set(key, href);
151
+ }
152
+ const href = overrides.get(key);
153
+ if (href)
154
+ file.stylesheets = [href];
155
+ }
156
+ for (const family of families) {
157
+ if (!fonts.families.has(family))
158
+ warn({ kind: 'missingFont', family });
159
+ }
160
+ onProgress?.({ phase: 'resources', done: 2, total: 2 });
161
+ items.push(...fonts.items);
162
+ items.push(...images.items.filter((i) => usedImages.has(i.href)));
163
+ const spine = [];
164
+ const landmarks = [];
165
+ // Landmark names: in the book's language for a right-to-left book,
166
+ // whose navigation document is set right to left in that language
167
+ // (#402); in English otherwise, as they have always been written.
168
+ const named = isRtlLanguage(metadata.language) ? navStrings(metadata.language) : undefined;
169
+ const names = {
170
+ cover: named?.cover ?? 'Cover',
171
+ toc: named?.contents ?? 'Table of contents',
172
+ bodymatter: named?.bodymatter ?? 'Start of content',
173
+ bibliography: named?.bibliography ?? 'Bibliography',
174
+ index: named?.index ?? 'Index',
175
+ };
176
+ // Cover.
177
+ if (options.cover) {
178
+ const ext = COVER_EXT[options.cover.mediaType] ?? 'img';
179
+ const href = `images/cover.${ext}`;
180
+ items.push({ id: 'cover-image', href, mediaType: options.cover.mediaType, data: options.cover.bytes, properties: ['cover-image'] });
181
+ const lang = book.files[0]?.lang ?? metadata.language;
182
+ items.push({
183
+ id: 'cover',
184
+ href: `${TEXT_DIR}cover.xhtml`,
185
+ mediaType: 'application/xhtml+xml',
186
+ data: coverDocument(href, options.cover.alt ?? metadata.title, metadata.title, lang, book.files[0]?.dir),
187
+ });
188
+ spine.push({ idref: 'cover' });
189
+ landmarks.push({ type: 'cover', label: names.cover, href: `${TEXT_DIR}cover.xhtml` });
190
+ }
191
+ // Content documents.
192
+ const ctx = {
193
+ book,
194
+ bookTitle: metadata.title,
195
+ imageHref: (fileId) => images.hrefOf(fileId),
196
+ stylesheet: STYLESHEET_HREF,
197
+ backLabel,
198
+ };
199
+ let maths = book.maths;
200
+ book.files.forEach((file, i) => {
201
+ signal?.throwIfAborted();
202
+ const xhtml = writeContentDocument(file, ctx);
203
+ if (xhtml.includes('role="math"'))
204
+ maths = true;
205
+ items.push({ id: file.itemId, href: file.href, mediaType: 'application/xhtml+xml', data: xhtml });
206
+ spine.push({ idref: file.itemId });
207
+ onProgress?.({ phase: 'documents', done: i + 1, total: book.files.length });
208
+ });
209
+ // Navigation.
210
+ const toc = navTree(book.headings);
211
+ const pageList = [...book.pages.entries()]
212
+ .filter(([, p]) => p.loc.id)
213
+ .sort(([a], [b]) => a - b)
214
+ .map(([, p]) => ({ label: p.label, href: `${p.loc.file.href}#${p.loc.id}` }));
215
+ const at = (loc) => `${loc.file.href}#${loc.id}`;
216
+ // The navigation document is no spine item: the landmark names the
217
+ // contents the book prints, when it prints them.
218
+ if (book.contents)
219
+ landmarks.push({ type: 'toc', label: names.toc, href: at(book.contents) });
220
+ const body = book.files.find((f) => f.kind === 'chapter') ?? book.files[0];
221
+ if (body)
222
+ landmarks.push({ type: 'bodymatter', label: names.bodymatter, href: body.href });
223
+ if (book.bibliography)
224
+ landmarks.push({ type: 'bibliography', label: names.bibliography, href: at(book.bibliography) });
225
+ if (book.index)
226
+ landmarks.push({ type: 'index', label: names.index, href: at(book.index) });
227
+ const features = ['structuralNavigation', 'tableOfContents', 'readingOrder', 'displayTransformability'];
228
+ if (book.altText || options.cover)
229
+ features.push('alternativeText');
230
+ if (maths)
231
+ features.push('describedMath');
232
+ if (pageList.length > 0)
233
+ features.push('pageNavigation', 'printPageNumbers');
234
+ if (book.index)
235
+ features.push('index');
236
+ features.push('ARIA');
237
+ const visual = usedImages.size > 0 || options.cover !== undefined;
238
+ const accessibility = {
239
+ accessModes: visual ? ['textual', 'visual'] : ['textual'],
240
+ accessModesSufficient: visual && book.missingAlt ? ['textual,visual', 'textual'] : ['textual'],
241
+ features,
242
+ hazards: ['none'],
243
+ summary: SUMMARIES.en,
244
+ };
245
+ return {
246
+ layout: 'reflowable',
247
+ metadata,
248
+ items,
249
+ spine,
250
+ toc,
251
+ pageList,
252
+ landmarks,
253
+ pageProgression: pageProgressionOf(docs),
254
+ accessibility,
255
+ };
256
+ }
257
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reflowable/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import type { MathRender, VDTLine, VDTLineSegment } from 'postext';
2
+ import type { Format, InlineItem, LinkTarget } from './model';
3
+ /** What turning lines into items needs to know about their document. */
4
+ export interface InlineContext {
5
+ /** Index of the chapter document (footnote ids are per document). */
6
+ doc: number;
7
+ /** Language of the text: a Catalan `l·l` broken as `l-` | `l` gets its
8
+ * middle dot back. */
9
+ lang: string;
10
+ /** Size (px) of the block's text, for formulas sized in ems. */
11
+ basePx: number;
12
+ /** A footnote marker was read: whether it is the note's first. */
13
+ noteRef(id: string): boolean;
14
+ }
15
+ /** Size of a CSS font shorthand in px (16 when it has none). */
16
+ export declare function fontPx(fontString: string | undefined): number;
17
+ /** An element id from any string: ASCII letters, digits, `-` and `_`
18
+ * kept, every other character written as `_<hex>` (so two ids never
19
+ * collide and the fragment needs no escaping in an href). */
20
+ export declare function idOf(prefix: string, raw: string): string;
21
+ /** Text safe for an XML text node. */
22
+ export declare function xmlText(text: string): string;
23
+ /** Text safe for an XML attribute value. */
24
+ export declare function xmlAttr(text: string): string;
25
+ /** A formula's SVG as XML a content document can embed: namespaces
26
+ * declared, MathJax's `data-*` attributes and HTML entities gone, sized
27
+ * in ems of the surrounding text so it scales with the reader's font. */
28
+ export declare function mathSvg(render: MathRender, basePx: number, inline: boolean): string;
29
+ export declare function round(n: number): number;
30
+ /** `inner` inside the elements and classes of `fmt`. */
31
+ export declare function wrapFormat(inner: string, fmt: Format): string;
32
+ /** The text items of one line, in logical order. */
33
+ export declare function lineItems(line: VDTLine, ctx: InlineContext, segments?: VDTLineSegment[] | undefined): InlineItem[];
34
+ /** Text runs flowing into one paragraph (or heading, list item, cell…). */
35
+ export interface TextSink {
36
+ inl: InlineItem[];
37
+ /** The last line appended, which decides how the next one joins. */
38
+ prev?: VDTLine;
39
+ }
40
+ /** Append a line to `sink`, joined to the line before it (or after a line
41
+ * break, `hardBreak`: a line the author ended). `before` (page starts,
42
+ * anchors) goes right before the line's text. */
43
+ export declare function appendLine(sink: TextSink, line: VDTLine, ctx: InlineContext, before?: InlineItem[], segments?: VDTLineSegment[], hardBreak?: boolean): void;
44
+ /** Append every line of a block. */
45
+ /** Append every line of a block (or of a fragment of one). A line marked
46
+ * the paragraph's last with more lines after it in the same fragment
47
+ * ended at a line break the author typed. */
48
+ export declare function appendLines(sink: TextSink, lines: readonly VDTLine[], ctx: InlineContext, beforeLine?: (line: VDTLine, i: number) => InlineItem[]): void;
49
+ /** The plain text of inline items (labels, titles, alt text). */
50
+ export declare function plainText(inl: readonly InlineItem[]): string;
51
+ /** A space with no link of its own between two runs that share one takes
52
+ * it, so linked words separated by spaces stay one link. */
53
+ export declare function bridgeLinks(inl: InlineItem[]): InlineItem[];
54
+ export declare function linkKey(link: LinkTarget | undefined): string;
55
+ export declare function formatKey(fmt: Format): string;
56
+ //# sourceMappingURL=inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../../src/reflowable/inline.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG9D,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ;2BACuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CAC9B;AAQD,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG7D;AAED;;8DAE8D;AAC9D,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,sCAAsC;AACtC,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,4CAA4C;AAC5C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AA4CD;;0EAE0E;AAC1E,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAWnF;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvC;AA2BD,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkB7D;AAgBD,oDAAoD;AACpD,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,+BAAgB,GAAG,UAAU,EAAE,CAmDnG;AAED,2EAA2E;AAC3E,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,UAAU,EAAE,CAAC;IAClB,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmBD;;kDAEkD;AAClD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAE,UAAU,EAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,EAAE,SAAS,UAAQ,GAAG,IAAI,CA0B7J;AAED,oCAAoC;AACpC;;8CAE8C;AAC9C,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,UAAU,EAAE,GAAG,IAAI,CAExJ;AAED,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAE5D;AAED;6DAC6D;AAC7D,wBAAgB,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAsB3D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,CAS5D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7C"}